X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sfa%2Fdummy%2Fdummyslices.py;h=579d7cb4269b0c45965e2ccff2c3bbece2fe7660;hb=4a9e6751f9f396f463932133b9d62fc925a99ef6;hp=7ab94ba276a404de805c95accce08d0f98b7ba40;hpb=d59f8e0b663b71d8c349017d0ecb37cb6bc527a1;p=sfa.git diff --git a/sfa/dummy/dummyslices.py b/sfa/dummy/dummyslices.py index 7ab94ba2..579d7cb4 100644 --- a/sfa/dummy/dummyslices.py +++ b/sfa/dummy/dummyslices.py @@ -1,5 +1,4 @@ import time -from types import StringTypes from collections import defaultdict from sfa.util.sfatime import utcparse, datetime_to_epoch @@ -11,7 +10,8 @@ from sfa.storage.model import SliverAllocation from sfa.dummy.dummyxrn import DummyXrn, hrn_to_dummy_slicename -MAXINT = 2L**31-1 +MAXINT = 2**31 - 1 + class DummySlices: @@ -20,18 +20,18 @@ class DummySlices: def get_slivers(self, xrn, node=None): hrn, type = urn_to_hrn(xrn) - + slice_name = hrn_to_dummy_slicename(hrn) - + slices = self.driver.shell.GetSlices({'slice_name': slice_name}) slice = slices[0] # Build up list of users and slice attributes user_ids = slice['user_ids'] # Get user information - all_users_list = self.driver.shell.GetUsers({'user_id':user_ids}) + all_users_list = self.driver.shell.GetUsers({'user_id': user_ids}) all_users = {} for user in all_users_list: - all_users[user['user_id']] = user + all_users[user['user_id']] = user # Build up list of keys all_keys = set() @@ -43,8 +43,9 @@ class DummySlices: keys = all_keys # XXX Sanity check; though technically this should be a system invariant # checked with an assertion - if slice['expires'] > MAXINT: slice['expires']= MAXINT - + if slice['expires'] > MAXINT: + slice['expires'] = MAXINT + slivers.append({ 'hrn': hrn, 'name': slice['name'], @@ -54,7 +55,6 @@ class DummySlices: }) return slivers - def verify_slice_nodes(self, slice_urn, slice, rspec_nodes): @@ -68,71 +68,81 @@ class DummySlices: elif component_id: hostname = xrn_to_hostname(component_id) if hostname: - slivers[hostname] = {'client_id': client_id, 'component_id': component_id} + slivers[hostname] = { + 'client_id': client_id, 'component_id': component_id} all_nodes = self.driver.shell.GetNodes() requested_slivers = [] for node in all_nodes: - if node['hostname'] in slivers.keys(): + if node['hostname'] in list(slivers.keys()): requested_slivers.append(node['node_id']) - if 'node_ids' not in slice.keys(): - slice['node_ids']=[] + if 'node_ids' not in list(slice.keys()): + slice['node_ids'] = [] nodes = self.driver.shell.GetNodes({'node_ids': slice['node_ids']}) current_slivers = [node['node_id'] for node in nodes] # remove nodes not in rspec - deleted_nodes = list(set(current_slivers).difference(requested_slivers)) + deleted_nodes = list( + set(current_slivers).difference(requested_slivers)) # add nodes from rspec - added_nodes = list(set(requested_slivers).difference(current_slivers)) + added_nodes = list(set(requested_slivers).difference(current_slivers)) try: - self.driver.shell.AddSliceToNodes({'slice_id': slice['slice_id'], 'node_ids': added_nodes}) - self.driver.shell.DeleteSliceFromNodes({'slice_id': slice['slice_id'], 'node_ids': deleted_nodes}) + self.driver.shell.AddSliceToNodes( + {'slice_id': slice['slice_id'], 'node_ids': added_nodes}) + self.driver.shell.DeleteSliceFromNodes( + {'slice_id': slice['slice_id'], 'node_ids': deleted_nodes}) - except: + except: logger.log_exc('Failed to add/remove slice from nodes') - slices = self.driver.shell.GetSlices({'slice_name': slice['slice_name']}) - resulting_nodes = self.driver.shell.GetNodes({'node_ids': slices[0]['node_ids']}) + slices = self.driver.shell.GetSlices( + {'slice_name': slice['slice_name']}) + resulting_nodes = self.driver.shell.GetNodes( + {'node_ids': slices[0]['node_ids']}) # update sliver allocations for node in resulting_nodes: client_id = slivers[node['hostname']]['client_id'] component_id = slivers[node['hostname']]['component_id'] - sliver_hrn = '%s.%s-%s' % (self.driver.hrn, slice['slice_id'], node['node_id']) + sliver_hrn = '%s.%s-%s' % (self.driver.hrn, + slice['slice_id'], node['node_id']) sliver_id = Xrn(sliver_hrn, type='sliver').urn record = SliverAllocation(sliver_id=sliver_id, client_id=client_id, component_id=component_id, - slice_urn = slice_urn, + slice_urn=slice_urn, allocation_state='geni_allocated') record.sync(self.driver.api.dbsession()) return resulting_nodes - def verify_slice(self, slice_hrn, slice_record, expiration, options=None): - if options is None: options={} + if options is None: + options = {} slicename = hrn_to_dummy_slicename(slice_hrn) parts = slicename.split("_") login_base = parts[0] - slices = self.driver.shell.GetSlices({'slice_name': slicename}) + slices = self.driver.shell.GetSlices({'slice_name': slicename}) if not slices: slice = {'slice_name': slicename} - # add the slice + # add the slice slice['slice_id'] = self.driver.shell.AddSlice(slice) slice['node_ids'] = [] slice['user_ids'] = [] else: slice = slices[0] if slice_record and slice_record.get('expires'): - requested_expires = int(datetime_to_epoch(utcparse(slice_record['expires']))) + requested_expires = int(datetime_to_epoch( + utcparse(slice_record['expires']))) if requested_expires and slice['expires'] != requested_expires: - self.driver.shell.UpdateSlice( {'slice_id': slice['slice_id'], 'fields':{'expires' : expiration}}) - + self.driver.shell.UpdateSlice( + {'slice_id': slice['slice_id'], 'fields': {'expires': expiration}}) + return slice def verify_users(self, slice_hrn, slice_record, users, options=None): - if options is None: options={} + if options is None: + options = {} slice_name = hrn_to_dummy_slicename(slice_hrn) users_by_email = {} for user in users: @@ -142,38 +152,41 @@ class DummySlices: user['username'] = username if 'email' in user: - user['email'] = user['email'].lower() + user['email'] = user['email'].lower() users_by_email[user['email']] = user - + # start building a list of existing users existing_users_by_email = {} existing_slice_users_by_email = {} existing_users = self.driver.shell.GetUsers() - existing_slice_users_ids = self.driver.shell.GetSlices({'slice_name': slice_name})[0]['user_ids'] + existing_slice_users_ids = self.driver.shell.GetSlices( + {'slice_name': slice_name})[0]['user_ids'] for user in existing_users: - existing_users_by_email[user['email']] = user - if user['user_id'] in existing_slice_users_ids: + existing_users_by_email[user['email']] = user + if user['user_id'] in existing_slice_users_ids: existing_slice_users_by_email[user['email']] = user - - add_users_by_email = set(users_by_email).difference(existing_slice_user_by_email) - delete_users_by_email = set(existing_slice_user_by_email).difference(users_by_email) + + add_users_by_email = set(users_by_email).difference( + existing_slice_user_by_email) + delete_users_by_email = set( + existing_slice_user_by_email).difference(users_by_email) try: - for user in add_users_by_email: + for user in add_users_by_email: self.driver.shell.AddUser() - except: + except: pass - def verify_keys(self, old_users, new_users, options=None): - if options is None: options={} - # existing keys + if options is None: + options = {} + # existing keys existing_keys = [] for user in old_users: - existing_keys.append(user['keys']) + existing_keys.append(user['keys']) userdict = {} for user in old_users: - userdict[user['email']] = user - + userdict[user['email']] = user + # add new keys requested_keys = [] updated_users = [] @@ -185,17 +198,17 @@ class DummySlices: if key_string not in existing_keys: key = key_string try: - self.driver.shell.AddUserKey({'user_id': user['user_id'], 'key':key}) - + self.driver.shell.AddUserKey( + {'user_id': user['user_id'], 'key': key}) + except: - pass + pass # remove old keys (only if we are not appending) append = options.get('append', True) - if append == False: + if append == False: removed_keys = set(existing_keys).difference(requested_keys) for key in removed_keys: - try: - self.driver.shell.DeleteKey({'key': key}) - except: - pass - + try: + self.driver.shell.DeleteKey({'key': key}) + except: + pass