#!/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.os_cacert: verify = opts.os_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))