def get_slivers(self, urns, options=None): if options is None: options={} slice_names = set() slice_ids = set() node_ids = [] for urn in urns: xrn = DummyXrn(xrn=urn) if xrn.type == 'sliver': # id: slice_id-node_id try: sliver_id_parts = xrn.get_sliver_id_parts() slice_id = int(sliver_id_parts[0]) node_id = int(sliver_id_parts[1]) slice_ids.add(slice_id) node_ids.append(node_id) except ValueError: pass else: slice_names.add(xrn.dummy_slicename()) filter = {} if slice_names: filter['slice_name'] = list(slice_names) if slice_ids: filter['slice_id'] = list(slice_ids) # get slices slices = self.driver.shell.GetSlices(filter) if not slices: return [] slice = slices[0] slice['hrn'] = DummyXrn(auth=self.driver.hrn, slicename=slice['slice_name']).hrn # get sliver users users = [] user_ids = [] for slice in slices: if 'user_ids' in slice.keys(): user_ids.extend(slice['user_ids']) if user_ids: users = self.driver.shell.GetUsers({'user_ids': user_ids}) # construct user key info users_list = [] for user in users: name = user['email'][0:user['email'].index('@')] user = { 'login': slice['slice_name'], 'user_urn': Xrn('%s.%s' % (self.driver.hrn, name), type='user').urn, 'keys': user['keys'] } users_list.append(user) if node_ids: node_ids = [node_id for node_id in node_ids if node_id in slice['node_ids']] slice['node_ids'] = node_ids nodes_dict = self.get_slice_nodes(slice, options) slivers = [] for node in nodes_dict.values(): node.update(slice) sliver_hrn = '%s.%s-%s' % (self.driver.hrn, slice['slice_id'], node['node_id']) node['sliver_id'] = Xrn(sliver_hrn, type='sliver').urn node['urn'] = node['sliver_id'] node['services_user'] = users slivers.append(node) return slivers
def get_slivers(self, urns, options={}): slice_names = set() slice_ids = set() node_ids = [] for urn in urns: xrn = DummyXrn(xrn=urn) if xrn.type == 'sliver': # id: slice_id-node_id try: sliver_id_parts = xrn.get_sliver_id_parts() slice_id = int(sliver_id_parts[0]) node_id = int(sliver_id_parts[1]) slice_ids.add(slice_id) node_ids.append(node_id) except ValueError: pass else: slice_names.add(xrn.dummy_slicename()) filter = {} if slice_names: filter['slice_name'] = list(slice_names) if slice_ids: filter['slice_id'] = list(slice_ids) # get slices slices = self.driver.shell.GetSlices(filter) if not slices: return [] slice = slices[0] slice['hrn'] = DummyXrn(auth=self.driver.hrn, slicename=slice['slice_name']).hrn # get sliver users users = [] user_ids = [] for slice in slices: user_ids.extend(slice['user_ids']) if user_ids: users = self.driver.shell.GetUsers({'user_ids': user_ids}) # construct user key info users_list = [] for user in users: name = user['email'][0:user['email'].index('@')] user = { 'login': slice['slice_name'], 'user_urn': Xrn('%s.%s' % (self.driver.hrn, name), type='user').urn, 'keys': user['keys'] } users_list.append(user) if node_ids: node_ids = [node_id for node_id in node_ids if node_id in slice['node_ids']] slice['node_ids'] = node_ids nodes_dict = self.get_slice_nodes(slice, options) slivers = [] for node in nodes_dict.values(): node.update(slice) sliver_hrn = '%s.%s-%s' % (self.driver.hrn, slice['slice_id'], node['node_id']) node['sliver_id'] = Xrn(sliver_hrn, type='sliver').urn node['urn'] = node['sliver_id'] node['services_user'] = users slivers.append(node) return slivers