#!/usr/bin/env python # Copyright (c) 2010 OpenStack, LLC. # # 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. try: import simplejson as json except ImportError: import json import gettext from optparse import OptionParser from os.path import basename from sys import argv, exit from swift.common.bufferedhttp import http_connect_raw as http_connect from swift.common.utils import urlparse if __name__ == '__main__': gettext.install('swift', unicode=1) parser = OptionParser(usage=''' Usage: %prog [options] Sets a service URL for an account. Can only be set by a reseller admin. Example: %prog -K swauthkey test storage local http://127.0.0.1:8080/v1/AUTH_018c3946-23f8-4efb-a8fb-b67aae8e4162 '''.strip()) parser.add_option('-A', '--admin-url', dest='admin_url', default='http://127.0.0.1:8080/auth/', help='The URL to the auth ' 'subsystem (default: http://127.0.0.1:8080/auth/)') parser.add_option('-U', '--admin-user', dest='admin_user', default='.super_admin', help='The user with admin rights to add users ' '(default: .super_admin).') parser.add_option('-K', '--admin-key', dest='admin_key', help='The key for the user with admin rights to add users.') args = argv[1:] if not args: args.append('-h') (options, args) = parser.parse_args(args) if len(args) != 4: parser.parse_args(['-h']) account, service, name, url = args parsed = urlparse(options.admin_url) if parsed.scheme not in ('http', 'https'): raise Exception('Cannot handle protocol scheme %s for url %s' % (parsed.scheme, repr(options.admin_url))) parsed_path = parsed.path if not parsed_path: parsed_path = '/' elif parsed_path[-1] != '/': parsed_path += '/' path = '%sv2/%s/.services' % (parsed_path, account) body = json.dumps({service: {name: url}}) headers = {'Content-Length': str(len(body)), 'X-Auth-Admin-User': options.admin_user, 'X-Auth-Admin-Key': options.admin_key} conn = http_connect(parsed.hostname, parsed.port, 'POST', path, headers, ssl=(parsed.scheme == 'https')) conn.send(body) resp = conn.getresponse() if resp.status // 100 != 2: print 'Service set failed: %s %s' % (resp.status, resp.reason)