 a05cbf4c99
			
		
	
	a05cbf4c99
	
	
	
		
			
			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
		
			
				
	
	
		
			118 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			118 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/env python
 | |
| # object_api.py - Example object-store API usage
 | |
| 
 | |
| # 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.
 | |
| 
 | |
| """
 | |
| Object Store API Examples
 | |
| 
 | |
| This script shows the basic use of the low-level Object Store API
 | |
| 
 | |
| """
 | |
| 
 | |
| import argparse
 | |
| import logging
 | |
| import sys
 | |
| 
 | |
| import common
 | |
| 
 | |
| 
 | |
| from openstackclient.api import object_store_v1 as object_store
 | |
| from openstackclient.identity import client as identity_client
 | |
| 
 | |
| from os_client_config import config as cloud_config
 | |
| 
 | |
| 
 | |
| LOG = logging.getLogger('')
 | |
| 
 | |
| 
 | |
| def run(opts):
 | |
|     """Run the examples"""
 | |
| 
 | |
|     # Look for configuration file
 | |
|     # To support token-flow we have no required values
 | |
|     # print "options: %s" % self.options
 | |
|     cloud = cloud_config.OpenStackConfig().get_one_cloud(
 | |
|         cloud=opts.cloud,
 | |
|         argparse=opts,
 | |
|     )
 | |
|     LOG.debug("cloud cfg: %s", cloud.config)
 | |
| 
 | |
|     # 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 session
 | |
|     # common.make_session() does all the ugly work of mapping
 | |
|     # CLI options/env vars to the required plugin arguments.
 | |
|     # The returned session will have a configured auth object
 | |
|     # based on the selected plugin's available options.
 | |
|     # So to do...oh, just go to api.auth.py and look at what it does.
 | |
|     session = common.make_session(cloud, verify=verify)
 | |
| 
 | |
|     # Extract an endpoint
 | |
|     auth_ref = session.auth.get_auth_ref(session)
 | |
| 
 | |
|     if opts.url:
 | |
|         endpoint = opts.url
 | |
|     else:
 | |
|         endpoint = auth_ref.service_catalog.url_for(
 | |
|             service_type='object-store',
 | |
|             endpoint_type='public',
 | |
|         )
 | |
| 
 | |
|     # At this point we have a working session with a configured authentication
 | |
|     # plugin.  From here on it is the app making the decisions.  Need to
 | |
|     # talk to two clouds?  Go back and make another session but with opts
 | |
|     # set to different credentials.  Or use a config file and load it
 | |
|     # directly into the plugin.  This example doesn't show that (yet).
 | |
|     # Want to work ahead?  Look into the plugin load_from_*() methods
 | |
|     # (start in keystoneclient/auth/base.py).
 | |
| 
 | |
|     # This example is for the Object Store API so make one
 | |
|     obj_api = object_store.APIv1(
 | |
|         session=session,
 | |
|         service_type='object-store',
 | |
|         endpoint=endpoint,
 | |
|     )
 | |
| 
 | |
|     # Do useful things with it
 | |
| 
 | |
|     c_list = obj_api.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 = obj_api.object_list(c_list[0]['name'])
 | |
|         print("\nObject")
 | |
|         for o in o_list:
 | |
|             print("%s" % o)
 | |
| 
 | |
| 
 | |
| if __name__ == "__main__":
 | |
|     opts = common.base_parser(
 | |
|         identity_client.build_option_parser(
 | |
|             argparse.ArgumentParser(description='Object API Example')
 | |
|         )
 | |
|     ).parse_args()
 | |
| 
 | |
|     common.configure_logging(opts)
 | |
|     sys.exit(common.main(opts, run))
 |