Revision f759041f
b/docs/quick-install-admin-guide.rst | ||
---|---|---|
1050 | 1050 |
|
1051 | 1051 |
PITHOS_SERVICE_TOKEN = 'pithos_service_token22w' |
1052 | 1052 |
|
1053 |
# Set to False if astakos & pithos are on the same host |
|
1054 |
PITHOS_PROXY_USER_SERVICES = True |
|
1055 |
|
|
1056 | 1053 |
|
1057 | 1054 |
The ``PITHOS_BACKEND_DB_CONNECTION`` option tells to the Pithos app where to |
1058 | 1055 |
find the Pithos backend database. Above we tell Pithos that its database is |
b/docs/scale/i-pithos.rst | ||
---|---|---|
63 | 63 |
PITHOS_UPDATE_MD5 = False |
64 | 64 |
PITHOS_SERVICE_TOKEN = 'XXXXXXXXXXX' |
65 | 65 |
|
66 |
# Set False if astakos & pithos are on the same node |
|
67 |
PITHOS_PROXY_USER_SERVICES = True |
|
68 |
|
|
69 | 66 |
|
70 | 67 |
Install pithos web UI with: |
71 | 68 |
|
b/snf-common/synnefo/settings/test.py | ||
---|---|---|
56 | 56 |
|
57 | 57 |
ASTAKOS_IM_MODULES = ['local', 'shibboleth'] |
58 | 58 |
|
59 |
PITHOS_PROXY_USER_SERVICES = False |
|
60 | 59 |
|
61 | 60 |
ASTAKOS_BASE_URL = 'http://accounts.example.synnefo.org/astakos/' |
62 | 61 |
ASTAKOS_AUTH_URL = 'http://accounts.example.synnefo.org/astakos/identity/v2.0/' |
b/snf-pithos-app/conf/20-snf-pithos-app-settings.conf | ||
---|---|---|
2 | 2 |
#PITHOS_BASE_URL = "https://pithos.example.synnefo.org/" |
3 | 3 |
|
4 | 4 |
# Top-level URL for the Astakos instance to be used for user management |
5 |
#ASTAKOS_BASE_URL = 'https://accounts.example.synnefo.org/'
|
|
5 |
#ASTAKOS_AUTH_URL = 'https://accounts.example.synnefo.org/identity/v2.0/'
|
|
6 | 6 |
|
7 | 7 |
# Cookie name to search for fallback token |
8 | 8 |
#PITHOS_ASTAKOS_COOKIE_NAME = '_pithos2_a' |
... | ... | |
37 | 37 |
# identity management. WARNING: Setting to True will break your installation. |
38 | 38 |
# PITHOS_TRANSLATE_UUIDS = False |
39 | 39 |
|
40 |
# Set PITHOS_PROXY_USER_SERVICES to True to have snf-pithos-app handle all |
|
41 |
# Astakos user-visible services (feedback, login, etc.) by proxying them to |
|
42 |
# a running Astakos. |
|
43 |
# Set to False if snf astakos-app is running on the same machine, so it handles |
|
44 |
# the requests on its own. |
|
45 |
#PITHOS_PROXY_USER_SERVICES = True |
|
40 |
## Proxy Astakos services under the following path |
|
41 |
#PITHOS_PROXY_PREFIX = '_astakos' |
|
46 | 42 |
|
47 | 43 |
# Tune the size of the http pool for the astakos client. |
48 | 44 |
# It limits the maximum number of quota changing requests |
b/snf-pithos-app/pithos/api/functions.py | ||
---|---|---|
60 | 60 |
) |
61 | 61 |
|
62 | 62 |
from pithos.api.settings import (UPDATE_MD5, TRANSLATE_UUIDS, |
63 |
SERVICE_TOKEN, ASTAKOS_BASE_URL)
|
|
63 |
SERVICE_TOKEN, ASTAKOS_AUTH_URL)
|
|
64 | 64 |
|
65 | 65 |
from pithos.api import settings |
66 | 66 |
|
... | ... | |
76 | 76 |
|
77 | 77 |
def get_uuids(names): |
78 | 78 |
try: |
79 |
astakos = AstakosClient(ASTAKOS_BASE_URL, retry=2,
|
|
80 |
use_pool=True, logger=logger) |
|
81 |
uuids = astakos.service_get_uuids(SERVICE_TOKEN, names)
|
|
79 |
astakos = AstakosClient(SERVICE_TOKEN, ASTAKOS_AUTH_URL,
|
|
80 |
retry=2, use_pool=True, logger=logger)
|
|
81 |
uuids = astakos.service_get_uuids(names) |
|
82 | 82 |
except Exception, e: |
83 | 83 |
logger.exception(e) |
84 | 84 |
return {} |
... | ... | |
710 | 710 |
if name != x[:name_idx]: |
711 | 711 |
continue |
712 | 712 |
objects_bulk.append(x[name_idx:]) |
713 |
|
|
713 |
|
|
714 | 714 |
if len(objects_bulk) > 0: |
715 | 715 |
object_permissions = \ |
716 | 716 |
request.backend.get_object_permissions_bulk( |
b/snf-pithos-app/pithos/api/management/commands/reconcile-commissions-pithos.py | ||
---|---|---|
58 | 58 |
b = get_backend() |
59 | 59 |
try: |
60 | 60 |
b.pre_exec() |
61 |
pending_commissions = b.astakosclient.get_pending_commissions( |
|
62 |
token=b.service_token) |
|
61 |
pending_commissions = b.astakosclient.get_pending_commissions() |
|
63 | 62 |
|
64 | 63 |
if pending_commissions: |
65 | 64 |
self.stdout.write( |
... | ... | |
73 | 72 |
to_accept = b.commission_serials.lookup(pending_commissions) |
74 | 73 |
to_reject = list(set(pending_commissions) - set(to_accept)) |
75 | 74 |
response = b.astakosclient.resolve_commissions( |
76 |
token=b.service_token, |
|
77 | 75 |
accept_serials=to_accept, |
78 | 76 |
reject_serials=to_reject |
79 | 77 |
) |
b/snf-pithos-app/pithos/api/settings.py | ||
---|---|---|
1 | 1 |
#coding=utf8 |
2 | 2 |
from django.conf import settings |
3 | 3 |
from synnefo.lib import parse_base_url, join_urls |
4 |
from synnefo.lib.services import fill_endpoints, get_public_endpoint
|
|
5 |
from synnefo.util.keypath import get_path, set_path
|
|
4 |
from synnefo.lib.services import fill_endpoints |
|
5 |
from synnefo.util.keypath import get_path |
|
6 | 6 |
from pithos.api.services import pithos_services as vanilla_pithos_services |
7 |
from astakosclient import astakos_services as vanilla_astakos_services
|
|
7 |
from astakosclient import AstakosClient
|
|
8 | 8 |
|
9 | 9 |
from copy import deepcopy |
10 | 10 |
|
11 |
|
|
12 |
# -------------------------------------------------------------------- |
|
13 |
# Process Pithos settings |
|
14 |
|
|
11 | 15 |
# Top-level URL for Pithos. Must set. |
12 | 16 |
BASE_URL = getattr(settings, 'PITHOS_BASE_URL', |
13 | 17 |
"https://object-store.example.synnefo.org/pithos/") |
18 |
# Service Token acquired by identity provider. |
|
19 |
SERVICE_TOKEN = getattr(settings, 'PITHOS_SERVICE_TOKEN', '') |
|
14 | 20 |
|
15 | 21 |
BASE_HOST, BASE_PATH = parse_base_url(BASE_URL) |
16 | 22 |
|
17 |
# Process Astakos settings |
|
18 |
ASTAKOS_BASE_URL = getattr(settings, 'ASTAKOS_BASE_URL', |
|
19 |
'https://accounts.example.synnefo.org/astakos/') |
|
20 |
ASTAKOS_BASE_HOST, ASTAKOS_BASE_PATH = parse_base_url(ASTAKOS_BASE_URL) |
|
21 |
|
|
22 | 23 |
pithos_services = deepcopy(vanilla_pithos_services) |
23 | 24 |
fill_endpoints(pithos_services, BASE_URL) |
24 | 25 |
PITHOS_PREFIX = get_path(pithos_services, 'pithos_object-store.prefix') |
25 | 26 |
PUBLIC_PREFIX = get_path(pithos_services, 'pithos_public.prefix') |
26 | 27 |
UI_PREFIX = get_path(pithos_services, 'pithos_ui.prefix') |
27 | 28 |
|
28 |
astakos_services = deepcopy(vanilla_astakos_services) |
|
29 |
fill_endpoints(astakos_services, ASTAKOS_BASE_URL) |
|
30 |
CUSTOMIZE_ASTAKOS_SERVICES = getattr(settings, |
|
31 |
'PITHOS_CUSTOMIZE_ASTAKOS_SERVICES', ()) |
|
32 |
for path, value in CUSTOMIZE_ASTAKOS_SERVICES: |
|
33 |
set_path(astakos_services, path, value, createpath=True) |
|
29 |
COOKIE_NAME = getattr(settings, 'PITHOS_ASTAKOS_COOKIE_NAME', '_pithos2_a') |
|
30 |
|
|
34 | 31 |
|
35 |
ASTAKOS_ACCOUNTS_PREFIX = get_path(astakos_services, 'astakos_account.prefix') |
|
36 |
ASTAKOS_VIEWS_PREFIX = get_path(astakos_services, 'astakos_ui.prefix') |
|
37 |
ASTAKOS_KEYSTONE_PREFIX = get_path(astakos_services, 'astakos_identity.prefix') |
|
32 |
# -------------------------------------------------------------------- |
|
33 |
# Process Astakos settings |
|
38 | 34 |
|
39 |
BASE_ASTAKOS_PROXY_PATH = getattr(settings, 'PITHOS_BASE_ASTAKOS_PROXY_PATH', |
|
40 |
ASTAKOS_BASE_PATH) |
|
41 |
BASE_ASTAKOS_PROXY_PATH = join_urls(BASE_PATH, BASE_ASTAKOS_PROXY_PATH) |
|
42 |
BASE_ASTAKOS_PROXY_PATH = BASE_ASTAKOS_PROXY_PATH.strip('/') |
|
35 |
ASTAKOS_AUTH_URL = getattr( |
|
36 |
settings, 'ASTAKOS_AUTH_URL', |
|
37 |
'https://accounts.example.synnefo.org/astakos/identity/v2.0/') |
|
38 |
|
|
39 |
ASTAKOSCLIENT_POOLSIZE = \ |
|
40 |
getattr(settings, 'PITHOS_ASTAKOSCLIENT_POOLSIZE', 200) |
|
41 |
|
|
42 |
|
|
43 |
# -------------------------------------- |
|
44 |
# Define a LazyAstakosUrl |
|
45 |
class LazyAstakosUrl(object): |
|
46 |
def __init__(self, endpoints_name): |
|
47 |
self.endpoints_name = endpoints_name |
|
48 |
|
|
49 |
def __str__(self): |
|
50 |
if not hasattr(self, 'str'): |
|
51 |
try: |
|
52 |
astakos_client = \ |
|
53 |
AstakosClient(SERVICE_TOKEN, ASTAKOS_AUTH_URL) |
|
54 |
self.str = getattr(astakos_client, self.endpoints_name) |
|
55 |
except: |
|
56 |
return None |
|
57 |
return self.str |
|
58 |
|
|
59 |
# -------------------------------------- |
|
60 |
# Define ASTAKOS_ACCOUNT_URL and ASTAKOS_UR_URL as LazyAstakosUrl |
|
61 |
ASTAKOS_ACCOUNT_URL = LazyAstakosUrl('account_url') |
|
62 |
ASTAKOS_UI_URL = LazyAstakosUrl('ui_url') |
|
63 |
|
|
64 |
# -------------------------------------- |
|
65 |
# Define Astakos prefixes |
|
66 |
ASTAKOS_PROXY_PREFIX = getattr(settings, 'PITHOS_PROXY_PREFIX', '_astakos') |
|
67 |
ASTAKOS_AUTH_PREFIX = join_urls('/', ASTAKOS_PROXY_PREFIX, 'identity') |
|
68 |
ASTAKOS_ACCOUNT_PREFIX = join_urls('/', ASTAKOS_PROXY_PREFIX, 'account') |
|
69 |
ASTAKOS_UI_PREFIX = join_urls('/', ASTAKOS_PROXY_PREFIX, 'ui') |
|
70 |
|
|
71 |
# -------------------------------------- |
|
72 |
# Define Astakos proxy paths |
|
73 |
ASTAKOS_AUTH_PROXY_PATH = join_urls(BASE_PATH, ASTAKOS_AUTH_PREFIX) |
|
74 |
ASTAKOS_ACCOUNT_PROXY_PATH = join_urls(BASE_PATH, ASTAKOS_ACCOUNT_PREFIX) |
|
75 |
ASTAKOS_UI_PROXY_PATH = join_urls(BASE_PATH, ASTAKOS_UI_PREFIX) |
|
43 | 76 |
|
77 |
# Astakos login URL to redirect if the user information is missing |
|
78 |
LOGIN_URL = join_urls(ASTAKOS_UI_PROXY_PATH, 'login') |
|
44 | 79 |
|
45 |
ASTAKOSCLIENT_POOLSIZE = getattr(settings, 'PITHOS_ASTAKOSCLIENT_POOLSIZE', |
|
46 |
200) |
|
47 | 80 |
|
48 |
COOKIE_NAME = getattr(settings, 'PITHOS_ASTAKOS_COOKIE_NAME', '_pithos2_a') |
|
81 |
# -------------------------------------------------------------------- |
|
82 |
# Backend settings |
|
49 | 83 |
|
50 | 84 |
# SQLAlchemy (choose SQLite/MySQL/PostgreSQL). |
51 | 85 |
BACKEND_DB_MODULE = getattr( |
... | ... | |
88 | 122 |
# Update object checksums. |
89 | 123 |
UPDATE_MD5 = getattr(settings, 'PITHOS_UPDATE_MD5', False) |
90 | 124 |
|
91 |
# Service Token acquired by identity provider. |
|
92 |
SERVICE_TOKEN = getattr(settings, 'PITHOS_SERVICE_TOKEN', '') |
|
93 |
|
|
94 | 125 |
RADOS_STORAGE = getattr(settings, 'PITHOS_RADOS_STORAGE', False) |
95 | 126 |
RADOS_POOL_BLOCKS = getattr(settings, 'PITHOS_RADOS_POOL_BLOCKS', 'blocks') |
96 | 127 |
RADOS_POOL_MAPS = getattr(settings, 'PITHOS_RADOS_POOL_MAPS', 'maps') |
... | ... | |
99 | 130 |
# identity management. WARNING: Setting to True will break your installation. |
100 | 131 |
TRANSLATE_UUIDS = getattr(settings, 'PITHOS_TRANSLATE_UUIDS', False) |
101 | 132 |
|
102 |
# Set PROXY_USER_SERVICES to True to have snf-pithos-app handle all Astakos |
|
103 |
# user-visible services (feedback, login, etc.) by proxying them to a running |
|
104 |
# Astakos. |
|
105 |
# Set to False if snf astakos-app is running on the same machine, so it handles |
|
106 |
# the requests on its own. |
|
107 |
PROXY_USER_SERVICES = getattr(settings, 'PITHOS_PROXY_USER_SERVICES', True) |
|
108 |
|
|
109 | 133 |
# Set how many random bytes to use for constructing the URL |
110 | 134 |
# of Pithos public files |
111 | 135 |
PUBLIC_URL_SECURITY = getattr(settings, 'PITHOS_PUBLIC_URL_SECURITY', 16) |
... | ... | |
125 | 149 |
# The backend block hash algorithm |
126 | 150 |
BACKEND_HASH_ALGORITHM = getattr( |
127 | 151 |
settings, 'PITHOS_BACKEND_HASH_ALGORITHM', 'sha256') |
128 |
|
|
129 |
ASTAKOS_UI_URL = get_public_endpoint(astakos_services, 'astakos_ui', '').rstrip('/') |
|
130 |
|
|
131 |
# Astakos login URL to redirect if the user information is missing |
|
132 |
LOGIN_URL = join_urls(ASTAKOS_UI_URL, 'login') |
b/snf-pithos-app/pithos/api/urls.py | ||
---|---|---|
40 | 40 |
from snf_django.lib.api import api_endpoint_not_found |
41 | 41 |
from snf_django.utils.urls import extend_endpoint_with_slash |
42 | 42 |
from pithos.api.settings import ( |
43 |
pithos_services, |
|
44 |
BASE_PATH, ASTAKOS_BASE_URL, BASE_ASTAKOS_PROXY_PATH, |
|
45 |
ASTAKOS_ACCOUNTS_PREFIX, PROXY_USER_SERVICES, |
|
46 |
PITHOS_PREFIX, PUBLIC_PREFIX, UI_PREFIX) |
|
43 |
BASE_PATH, PITHOS_PREFIX, PUBLIC_PREFIX, UI_PREFIX, |
|
44 |
ASTAKOS_AUTH_PROXY_PATH, ASTAKOS_AUTH_URL, |
|
45 |
ASTAKOS_ACCOUNT_PROXY_PATH, ASTAKOS_ACCOUNT_URL, |
|
46 |
ASTAKOS_UI_PROXY_PATH, ASTAKOS_UI_URL, |
|
47 |
pithos_services) |
|
47 | 48 |
|
48 | 49 |
|
49 | 50 |
urlpatterns = [] |
... | ... | |
83 | 84 |
(prefix_pattern(BASE_PATH), include(pithos_patterns)), |
84 | 85 |
) |
85 | 86 |
|
86 |
if PROXY_USER_SERVICES: |
|
87 |
astakos_proxy = partial(proxy, proxy_base=BASE_ASTAKOS_PROXY_PATH, |
|
88 |
target_base=ASTAKOS_BASE_URL) |
|
89 | 87 |
|
90 |
proxy_patterns = api_patterns( |
|
91 |
'', |
|
92 |
(r'^login/?$', astakos_proxy), |
|
93 |
(r'^feedback/?$', astakos_proxy), |
|
94 |
(r'^user_catalogs/?$', astakos_proxy), |
|
95 |
(prefix_pattern(ASTAKOS_ACCOUNTS_PREFIX), astakos_proxy), |
|
96 |
) |
|
88 |
# -------------------------------------- |
|
89 |
# PROXY settings |
|
90 |
astakos_auth_proxy = \ |
|
91 |
partial(proxy, proxy_base=ASTAKOS_AUTH_PROXY_PATH, |
|
92 |
target_base=ASTAKOS_AUTH_URL) |
|
93 |
astakos_account_proxy = \ |
|
94 |
partial(proxy, proxy_base=ASTAKOS_ACCOUNT_PROXY_PATH, |
|
95 |
target_base=ASTAKOS_ACCOUNT_URL) |
|
96 |
astakos_ui_proxy = \ |
|
97 |
partial(proxy, proxy_base=ASTAKOS_UI_PROXY_PATH, |
|
98 |
target_base=ASTAKOS_UI_URL) |
|
97 | 99 |
|
98 |
urlpatterns += patterns( |
|
99 |
'', |
|
100 |
(prefix_pattern(BASE_ASTAKOS_PROXY_PATH), include(proxy_patterns)), |
|
101 |
) |
|
100 |
urlpatterns += api_patterns( |
|
101 |
'', |
|
102 |
(prefix_pattern(ASTAKOS_AUTH_PROXY_PATH), astakos_auth_proxy), |
|
103 |
(prefix_pattern(ASTAKOS_ACCOUNT_PROXY_PATH), astakos_account_proxy), |
|
104 |
) |
|
105 |
urlpatterns += patterns( |
|
106 |
'', |
|
107 |
(prefix_pattern(ASTAKOS_UI_PROXY_PATH), astakos_ui_proxy), |
|
108 |
) |
b/snf-pithos-app/pithos/api/util.py | ||
---|---|---|
56 | 56 |
BACKEND_QUEUE_EXCHANGE, |
57 | 57 |
ASTAKOSCLIENT_POOLSIZE, |
58 | 58 |
SERVICE_TOKEN, |
59 |
ASTAKOS_BASE_URL,
|
|
59 |
ASTAKOS_AUTH_URL,
|
|
60 | 60 |
BACKEND_ACCOUNT_QUOTA, |
61 | 61 |
BACKEND_CONTAINER_QUOTA, |
62 | 62 |
BACKEND_VERSIONING, BACKEND_FREE_VERSIONING, |
... | ... | |
111 | 111 |
for timestamp in timestamps: |
112 | 112 |
if timestamp in d and d[timestamp]: |
113 | 113 |
d[timestamp] = utils.isoformat( |
114 |
datetime.fromtimestamp(d[timestamp]))
|
|
114 |
datetime.fromtimestamp(d[timestamp])) |
|
115 | 115 |
return dict([(k.lower().replace('-', '_'), v) for k, v in d.iteritems()]) |
116 | 116 |
|
117 | 117 |
|
... | ... | |
298 | 298 |
########################## |
299 | 299 |
|
300 | 300 |
def retrieve_displayname(token, uuid, fail_silently=True): |
301 |
astakos = AstakosClient(ASTAKOS_BASE_URL, retry=2, use_pool=True, |
|
301 |
astakos = AstakosClient(token, ASTAKOS_AUTH_URL, |
|
302 |
retry=2, use_pool=True, |
|
302 | 303 |
logger=logger) |
303 | 304 |
try: |
304 |
displayname = astakos.get_username(token, uuid)
|
|
305 |
displayname = astakos.get_username(uuid) |
|
305 | 306 |
except NoUserName: |
306 | 307 |
if not fail_silently: |
307 | 308 |
raise ItemNotExists(uuid) |
... | ... | |
312 | 313 |
|
313 | 314 |
|
314 | 315 |
def retrieve_displaynames(token, uuids, return_dict=False, fail_silently=True): |
315 |
astakos = AstakosClient(ASTAKOS_BASE_URL, retry=2, use_pool=True, |
|
316 |
astakos = AstakosClient(token, ASTAKOS_AUTH_URL, |
|
317 |
retry=2, use_pool=True, |
|
316 | 318 |
logger=logger) |
317 |
catalog = astakos.get_usernames(token, uuids) or {}
|
|
319 |
catalog = astakos.get_usernames(uuids) or {} |
|
318 | 320 |
missing = list(set(uuids) - set(catalog)) |
319 | 321 |
if missing and not fail_silently: |
320 | 322 |
raise ItemNotExists('Unknown displaynames: %s' % ', '.join(missing)) |
... | ... | |
325 | 327 |
if is_uuid(displayname): |
326 | 328 |
return displayname |
327 | 329 |
|
328 |
astakos = AstakosClient(ASTAKOS_BASE_URL, retry=2, use_pool=True, |
|
330 |
astakos = AstakosClient(token, ASTAKOS_AUTH_URL, |
|
331 |
retry=2, use_pool=True, |
|
329 | 332 |
logger=logger) |
330 | 333 |
try: |
331 |
uuid = astakos.get_uuid(token, displayname)
|
|
334 |
uuid = astakos.get_uuid(displayname) |
|
332 | 335 |
except NoUUID: |
333 | 336 |
raise ItemNotExists(displayname) |
334 | 337 |
return uuid |
335 | 338 |
|
336 | 339 |
|
337 | 340 |
def retrieve_uuids(token, displaynames, return_dict=False, fail_silently=True): |
338 |
astakos = AstakosClient(ASTAKOS_BASE_URL, retry=2, use_pool=True, |
|
341 |
astakos = AstakosClient(token, ASTAKOS_AUTH_URL, |
|
342 |
retry=2, use_pool=True, |
|
339 | 343 |
logger=logger) |
340 |
catalog = astakos.get_uuids(token, displaynames) or {}
|
|
344 |
catalog = astakos.get_uuids(displaynames) or {} |
|
341 | 345 |
missing = list(set(displaynames) - set(catalog)) |
342 | 346 |
if missing and not fail_silently: |
343 | 347 |
raise ItemNotExists('Unknown uuids: %s' % ', '.join(missing)) |
... | ... | |
1010 | 1014 |
queue_module=BACKEND_QUEUE_MODULE, |
1011 | 1015 |
queue_hosts=BACKEND_QUEUE_HOSTS, |
1012 | 1016 |
queue_exchange=BACKEND_QUEUE_EXCHANGE, |
1013 |
astakos_url=ASTAKOS_BASE_URL,
|
|
1017 |
astakos_auth_url=ASTAKOS_AUTH_URL,
|
|
1014 | 1018 |
service_token=SERVICE_TOKEN, |
1015 | 1019 |
astakosclient_poolsize=ASTAKOSCLIENT_POOLSIZE, |
1016 | 1020 |
free_versioning=BACKEND_FREE_VERSIONING, |
... | ... | |
1063 | 1067 |
|
1064 | 1068 |
def get_pithos_usage(token): |
1065 | 1069 |
"""Get Pithos Usage from astakos.""" |
1066 |
astakos = AstakosClient(ASTAKOS_BASE_URL, retry=2, use_pool=True, |
|
1070 |
astakos = AstakosClient(token, ASTAKOS_AUTH_URL, |
|
1071 |
retry=2, use_pool=True, |
|
1067 | 1072 |
logger=logger) |
1068 |
quotas = astakos.get_quotas(token)['system']
|
|
1073 |
quotas = astakos.get_quotas()['system'] |
|
1069 | 1074 |
pithos_resources = [r['name'] for r in resources] |
1070 | 1075 |
map(quotas.pop, filter(lambda k: k not in pithos_resources, quotas.keys())) |
1071 | 1076 |
return quotas.popitem()[-1] # assume only one resource |
... | ... | |
1080 | 1085 |
@api.api_method(http_method=http_method, token_required=token_required, |
1081 | 1086 |
user_required=user_required, |
1082 | 1087 |
logger=logger, format_allowed=format_allowed, |
1083 |
astakos_url=ASTAKOS_BASE_URL,
|
|
1088 |
astakos_auth_url=ASTAKOS_AUTH_URL,
|
|
1084 | 1089 |
serializations=serializations, |
1085 | 1090 |
strict_serlization=strict_serlization) |
1086 | 1091 |
@wraps(func) |
b/snf-pithos-backend/pithos/backends/lib/sqlalchemy/alembic/versions/165ba3fbfe53_update_path_account.py | ||
---|---|---|
36 | 36 |
catalog = {} |
37 | 37 |
|
38 | 38 |
|
39 |
def _get_uuid(account, service_token, astakos_client):
|
|
39 |
def _get_uuid(account, astakos_client): |
|
40 | 40 |
global catalog |
41 | 41 |
if account in catalog: |
42 | 42 |
return catalog[account] |
43 | 43 |
try: |
44 |
catalog[account] = astakos_client.service_get_uuid(service_token, |
|
45 |
account) |
|
44 |
catalog[account] = astakos_client.service_get_uuid(account) |
|
46 | 45 |
print '\n', account, '-->', catalog[account] |
47 | 46 |
except NoUUID: |
48 | 47 |
return None |
... | ... | |
54 | 53 |
inverse_catalog = {} |
55 | 54 |
|
56 | 55 |
|
57 |
def _get_displayname(account, service_token, astakos_client):
|
|
56 |
def _get_displayname(account, astakos_client): |
|
58 | 57 |
global inverse_catalog |
59 | 58 |
if account in inverse_catalog: |
60 | 59 |
return inverse_catalog[account] |
61 | 60 |
try: |
62 |
inverse_catalog[account] = astakos_client.service_get_username( |
|
63 |
service_token, account) |
|
61 |
inverse_catalog[account] = astakos_client.service_get_username(account) |
|
64 | 62 |
print '\n', account, '-->', inverse_catalog[account] |
65 | 63 |
except NoUserName: |
66 | 64 |
return None |
... | ... | |
221 | 219 |
except ImportError: |
222 | 220 |
return |
223 | 221 |
else: |
224 |
astakos_client = AstakosClient(settings.ASTAKOS_BASE_URL,
|
|
225 |
retry=3,
|
|
226 |
use_pool=True)
|
|
222 |
astakos_client = AstakosClient( |
|
223 |
settings.SERVICE_TOKEN, settings.ASTAKOS_AUTH_URL,
|
|
224 |
retry=3, use_pool=True)
|
|
227 | 225 |
get_uuid = functools.partial(_get_uuid, |
228 | 226 |
service_token=settings.SERVICE_TOKEN, |
229 | 227 |
astakos_client=astakos_client) |
... | ... | |
236 | 234 |
except ImportError: |
237 | 235 |
return |
238 | 236 |
else: |
239 |
astakos_client = AstakosClient(settings.ASTAKOS_BASE_URL,
|
|
240 |
retry=3,
|
|
241 |
use_pool=True)
|
|
237 |
astakos_client = AstakosClient( |
|
238 |
settings.SERVICE_TOKEN, settings.ASTAKOS_AUTH_URL,
|
|
239 |
retry=3, use_pool=True)
|
|
242 | 240 |
get_displayname = functools.partial( |
243 | 241 |
_get_displayname, |
244 |
service_token=settings.SERVICE_TOKEN, |
|
245 | 242 |
astakos_client=astakos_client) |
246 | 243 |
migrate(get_displayname) |
b/snf-pithos-backend/pithos/backends/modular.py | ||
---|---|---|
151 | 151 |
block_module=None, block_path=None, block_umask=None, |
152 | 152 |
block_size=None, hash_algorithm=None, |
153 | 153 |
queue_module=None, queue_hosts=None, queue_exchange=None, |
154 |
astakos_url=None, service_token=None, |
|
154 |
astakos_auth_url=None, service_token=None,
|
|
155 | 155 |
astakosclient_poolsize=None, |
156 | 156 |
free_versioning=True, block_params=None, |
157 | 157 |
public_url_security=None, |
... | ... | |
236 | 236 |
|
237 | 237 |
self.queue = NoQueue() |
238 | 238 |
|
239 |
self.astakos_url = astakos_url
|
|
239 |
self.astakos_auth_url = astakos_auth_url
|
|
240 | 240 |
self.service_token = service_token |
241 | 241 |
|
242 |
if not astakos_url or not AstakosClient: |
|
242 |
if not astakos_auth_url or not AstakosClient:
|
|
243 | 243 |
self.astakosclient = DisabledAstakosClient( |
244 |
astakos_url,
|
|
244 |
service_token, astakos_auth_url,
|
|
245 | 245 |
use_pool=True, |
246 | 246 |
pool_size=astakosclient_poolsize) |
247 | 247 |
else: |
248 | 248 |
self.astakosclient = AstakosClient( |
249 |
astakos_url,
|
|
249 |
service_token, astakos_auth_url,
|
|
250 | 250 |
use_pool=True, |
251 | 251 |
pool_size=astakosclient_poolsize) |
252 | 252 |
|
... | ... | |
280 | 280 |
self.wrapper.execute() |
281 | 281 |
|
282 | 282 |
r = self.astakosclient.resolve_commissions( |
283 |
token=self.service_token, |
|
284 | 283 |
accept_serials=self.serials, |
285 | 284 |
reject_serials=[]) |
286 | 285 |
self.commission_serials.delete_many( |
... | ... | |
290 | 289 |
else: |
291 | 290 |
if self.serials: |
292 | 291 |
self.astakosclient.resolve_commissions( |
293 |
token=self.service_token, |
|
294 | 292 |
accept_serials=[], |
295 | 293 |
reject_serials=self.serials) |
296 | 294 |
self.commission_serials.delete_many( |
... | ... | |
1577 | 1575 |
try: |
1578 | 1576 |
name = details['path'] if 'path' in details else '' |
1579 | 1577 |
serial = self.astakosclient.issue_one_commission( |
1580 |
token=self.service_token, |
|
1581 | 1578 |
holder=account, |
1582 | 1579 |
source=DEFAULT_SOURCE, |
1583 | 1580 |
provisions={'pithos.diskspace': size}, |
b/snf-pithos-backend/pithos/backends/util.py | ||
---|---|---|
46 | 46 |
block_size=None, hash_algorithm=None, |
47 | 47 |
queue_module=None, queue_hosts=None, |
48 | 48 |
queue_exchange=None, free_versioning=True, |
49 |
astakos_url=None, service_token=None, |
|
49 |
astakos_auth_url=None, service_token=None,
|
|
50 | 50 |
astakosclient_poolsize=None, |
51 | 51 |
block_params=None, |
52 | 52 |
public_url_security=None, |
... | ... | |
66 | 66 |
self.block_params = block_params |
67 | 67 |
self.queue_hosts = queue_hosts |
68 | 68 |
self.queue_exchange = queue_exchange |
69 |
self.astakos_url = astakos_url
|
|
69 |
self.astakos_auth_url = astakos_auth_url
|
|
70 | 70 |
self.service_token = service_token |
71 | 71 |
self.astakosclient_poolsize = astakosclient_poolsize |
72 | 72 |
self.free_versioning = free_versioning |
... | ... | |
89 | 89 |
block_params=self.block_params, |
90 | 90 |
queue_hosts=self.queue_hosts, |
91 | 91 |
queue_exchange=self.queue_exchange, |
92 |
astakos_url=self.astakos_url,
|
|
92 |
astakos_auth_url=self.astakos_auth_url,
|
|
93 | 93 |
service_token=self.service_token, |
94 | 94 |
astakosclient_poolsize=self.astakosclient_poolsize, |
95 | 95 |
free_versioning=self.free_versioning, |
Also available in: Unified diff