~david-goetz/swift/wal_again

« back to all changes in this revision

Viewing changes to bin/swauth-set-account-service

  • Committer: Tarmac
  • Author(s): gholt
  • Date: 2011-06-16 21:12:04 UTC
  • mfrom: (291.19.6 postcopy)
  • mto: This revision was merged to the branch mainline in revision 294.
  • Revision ID: tarmac-20110616211204-s5slh4h8nt9mrd2v
You can specify X-Newest: true on GETs and HEADs to indicate you want Swift to query all backend copies and return the newest version retrieved.
Object COPY requests now always copy the newest object they can find.
Object POSTs are implemented as COPYs now by default (you can revert to previous implementation with conf object_post_as_copy = false)
Account and container GETs and HEADs now shuffle the nodes they use to balance load.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
#!/usr/bin/env python
2
 
# Copyright (c) 2010 OpenStack, LLC.
3
 
#
4
 
# Licensed under the Apache License, Version 2.0 (the "License");
5
 
# you may not use this file except in compliance with the License.
6
 
# You may obtain a copy of the License at
7
 
#
8
 
#    http://www.apache.org/licenses/LICENSE-2.0
9
 
#
10
 
# Unless required by applicable law or agreed to in writing, software
11
 
# distributed under the License is distributed on an "AS IS" BASIS,
12
 
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
13
 
# implied.
14
 
# See the License for the specific language governing permissions and
15
 
# limitations under the License.
16
 
 
17
 
try:
18
 
    import simplejson as json
19
 
except ImportError:
20
 
    import json
21
 
import gettext
22
 
from optparse import OptionParser
23
 
from os.path import basename
24
 
from sys import argv, exit
25
 
 
26
 
from swift.common.bufferedhttp import http_connect_raw as http_connect
27
 
from swift.common.utils import urlparse
28
 
 
29
 
 
30
 
if __name__ == '__main__':
31
 
    gettext.install('swift', unicode=1)
32
 
    parser = OptionParser(usage='''
33
 
Usage: %prog [options] <account> <service> <name> <value>
34
 
 
35
 
Sets a service URL for an account. Can only be set by a reseller admin.
36
 
 
37
 
Example: %prog -K swauthkey test storage local http://127.0.0.1:8080/v1/AUTH_018c3946-23f8-4efb-a8fb-b67aae8e4162
38
 
'''.strip())
39
 
    parser.add_option('-A', '--admin-url', dest='admin_url',
40
 
        default='http://127.0.0.1:8080/auth/', help='The URL to the auth '
41
 
        'subsystem (default: http://127.0.0.1:8080/auth/)')
42
 
    parser.add_option('-U', '--admin-user', dest='admin_user',
43
 
        default='.super_admin', help='The user with admin rights to add users '
44
 
        '(default: .super_admin).')
45
 
    parser.add_option('-K', '--admin-key', dest='admin_key',
46
 
        help='The key for the user with admin rights to add users.')
47
 
    args = argv[1:]
48
 
    if not args:
49
 
        args.append('-h')
50
 
    (options, args) = parser.parse_args(args)
51
 
    if len(args) != 4:
52
 
        parser.parse_args(['-h'])
53
 
    account, service, name, url = args
54
 
    parsed = urlparse(options.admin_url)
55
 
    if parsed.scheme not in ('http', 'https'):
56
 
        raise Exception('Cannot handle protocol scheme %s for url %s' %
57
 
                        (parsed.scheme, repr(options.admin_url)))
58
 
    parsed_path = parsed.path
59
 
    if not parsed_path:
60
 
        parsed_path = '/'
61
 
    elif parsed_path[-1] != '/':
62
 
        parsed_path += '/'
63
 
    path = '%sv2/%s/.services' % (parsed_path, account)
64
 
    body = json.dumps({service: {name: url}})
65
 
    headers = {'Content-Length': str(len(body)),
66
 
               'X-Auth-Admin-User': options.admin_user,
67
 
               'X-Auth-Admin-Key': options.admin_key}
68
 
    conn = http_connect(parsed.hostname, parsed.port, 'POST', path, headers,
69
 
                        ssl=(parsed.scheme == 'https'))
70
 
    conn.send(body)
71
 
    resp = conn.getresponse()
72
 
    if resp.status // 100 != 2:
73
 
        exit('Service set failed: %s %s' % (resp.status, resp.reason))