85 lines
3.0 KiB
Python
85 lines
3.0 KiB
Python
# -*- encoding: utf-8 -*-
|
|
import datetime
|
|
import os
|
|
import sys
|
|
import time
|
|
|
|
from keystoneclient.v2_0 import client as ksclient
|
|
import dateutil.relativedelta
|
|
import swiftclient
|
|
|
|
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "..")))
|
|
from common.utils import get_config, get_auth
|
|
from sync.containers import sync_container
|
|
|
|
|
|
def get_ks_auth_orig():
|
|
orig_auth_url = get_config('auth', 'keystone_origin')
|
|
tenant_name, username, password = \
|
|
get_config('auth', 'keystone_origin_admin_credentials').split(':')
|
|
|
|
return ksclient.Client(auth_url=orig_auth_url,
|
|
username=username,
|
|
password=password,
|
|
tenant_name=tenant_name)
|
|
|
|
|
|
def list_accounts(cnx):
|
|
for x in cnx.tenants.list():
|
|
yield x
|
|
|
|
|
|
def sync_an_account(orig_storage_url,
|
|
orig_token,
|
|
dest_storage_url,
|
|
dest_token):
|
|
|
|
orig_storage_cnx = swiftclient.http_connection(orig_storage_url)
|
|
dest_storage_cnx = swiftclient.http_connection(dest_storage_url)
|
|
|
|
orig_account_stats, orig_containers = swiftclient.get_account(
|
|
None, orig_token, http_conn=orig_storage_cnx, full_listing=True)
|
|
|
|
for container in orig_containers:
|
|
print container
|
|
dt1 = datetime.datetime.fromtimestamp(time.time())
|
|
sync_container(orig_storage_cnx, orig_storage_url, orig_token,
|
|
dest_storage_cnx, dest_storage_url, dest_token,
|
|
container['name'])
|
|
|
|
dt2 = datetime.datetime.fromtimestamp(time.time())
|
|
rd = dateutil.relativedelta.relativedelta(dt2, dt1)
|
|
print "%d hours, %d minutes and %d seconds" % (rd.hours, rd.minutes,
|
|
rd.seconds)
|
|
print
|
|
|
|
|
|
def sync_accounts():
|
|
orig_auth_url = get_config('auth', 'keystone_origin')
|
|
orig_admin_tenant, orig_admin_user, orig_admin_password = (
|
|
get_config('auth', 'keystone_origin_admin_credentials').split(':'))
|
|
oa_st_url, orig_admin_token = (get_auth(orig_auth_url, orig_admin_tenant,
|
|
orig_admin_user,
|
|
orig_admin_password))
|
|
|
|
dest_auth_url = get_config('auth', 'keystone_dest')
|
|
# we assume orig and dest passwd are the same obv synchronized.
|
|
dst_st_url, dest_admin_token = (get_auth(dest_auth_url, orig_admin_tenant,
|
|
orig_admin_user,
|
|
orig_admin_password))
|
|
|
|
bare_oa_st_url = oa_st_url[:oa_st_url.find('AUTH_')] + "AUTH_"
|
|
bare_dst_st_url = dst_st_url[:dst_st_url.find('AUTH_')] + "AUTH_"
|
|
|
|
for x in list_accounts(get_ks_auth_orig()):
|
|
user_orig_st_url = bare_oa_st_url + x.id
|
|
user_dst_st_url = bare_dst_st_url + x.id
|
|
|
|
sync_an_account(user_orig_st_url,
|
|
orig_admin_token,
|
|
user_dst_st_url,
|
|
dest_admin_token)
|
|
|
|
if __name__ == '__main__':
|
|
sync_accounts()
|