class InternalBrainClient(object): def __init__(self, conf_file, account='AUTH_test'): self.swift = InternalClient(conf_file, 'probe-test', 3) self.account = account @translate_client_exception def put_container(self, container_name, headers): return self.swift.create_container(self.account, container_name, headers=headers) @translate_client_exception def post_container(self, container_name, headers): return self.swift.set_container_metadata(self.account, container_name, headers) @translate_client_exception def delete_container(self, container_name): return self.swift.delete_container(self.account, container_name) def parse_qs(self, query_string): if query_string is not None: return {k: v[-1] for k, v in parse_qs(query_string).items()} @translate_client_exception def put_object(self, container_name, object_name, headers, contents, query_string=None): return self.swift.upload_object(StringIO(contents), self.account, container_name, object_name, headers=headers, params=self.parse_qs(query_string)) @translate_client_exception def delete_object(self, container_name, object_name): return self.swift.delete_object( self.account, container_name, object_name) @translate_client_exception def head_object(self, container_name, object_name): return self.swift.get_object_metadata( self.account, container_name, object_name) @translate_client_exception def get_object(self, container_name, object_name, query_string=None): status, headers, resp_iter = self.swift.get_object( self.account, container_name, object_name, params=self.parse_qs(query_string)) return headers, ''.join(resp_iter)
account = sys.argv[1] container = sys.argv[2] obj = sys.argv[3] post_container = False if len(sys.argv) == 5: if sys.argv[4] in ['y', 'Y', 'yes', 'YES']: post_container = True client = InternalClient('/etc/swift/internal-client.conf', 'check-cont', 3) for p in POLICIES: print('Checking policy name: %s (%d)' % (p.name, p.idx)) headers = { 'X-Backend-Storage-Policy-Index': p.idx} meta = client.get_object_metadata(account, container, obj, headers=headers, acceptable_statuses=(2, 4)) if 'x-timestamp' in meta: print(' >> Find object %s in policy %s' % (obj, p.name) ) if post_container: print('create container in policy %s' % p.name ) headers = { 'X-Storage-Policy': p.name} client.create_container(account, container, headers) break else: print(' >> Can not find %s in policy %s' % (obj, p.name))