def test_set_availability_zone_unicode_key(self): """Test set availability zone cache key is unicode.""" service = self._create_service_with_topic('network', self.host) services = db.service_get_all(self.context) az.set_availability_zones(self.context, services) self.assertIsInstance(services[0]['host'], unicode) cached_key = az._make_cache_key(services[0]['host']) self.assertIsInstance(cached_key, str) self._destroy_service(service)
def get_all(cls, context, disabled=None, set_zones=False): db_services = db.service_get_all(context, disabled=disabled) if set_zones: db_services = availability_zones.set_availability_zones( context, db_services) return base.obj_make_list(context, cls(context), objects.Service, db_services)
def test_set_availability_zone_not_compute_service(self): """Test not compute service get right availability zone.""" service = self._create_service_with_topic('network', self.host) services = db.service_get_all(self.context) new_service = az.set_availability_zones(self.context, services)[0] self.assertEqual(new_service['availability_zone'], self.default_in_az) self._destroy_service(service)
def test_set_availability_zone_compute_service(self): """Test for compute service get right availability zone.""" service = self._create_service_with_topic('compute', self.host) services = db.service_get_all(self.context) # The service is not add into aggregate, so confirm it is default # availability zone. new_service = az.set_availability_zones(self.context, services)[0] self.assertEqual(new_service['availability_zone'], self.default_az) # The service is added into aggregate, confirm return the aggregate # availability zone. self._add_to_aggregate(service, self.agg) new_service = az.set_availability_zones(self.context, services)[0] self.assertEqual(new_service['availability_zone'], self.availability_zone) self._destroy_service(service)
def service_get_all(self, context, filters=None, set_zones=False): if filters is None: filters = {} if 'availability_zone' in filters: zone_filter = filters.pop('availability_zone') set_zones = True else: zone_filter = None services = self.cells_rpcapi.service_get_all(context, filters=filters) if set_zones: # TODO(sbauza): set_availability_zones returns flat dicts, # we should rather modify the RPC API to amend service_get_all by # adding a set_zones argument services = availability_zones.set_availability_zones(context, services) if zone_filter is not None: services = [s for s in services if s['availability_zone'] == zone_filter] # NOTE(sbauza): As services is a list of flat dicts, we need to # rehydrate the corresponding ServiceProxy objects cell_paths = [] for service in services: cell_path, id = cells_utils.split_cell_and_item(service['id']) cell_path, host = cells_utils.split_cell_and_item( service['host']) service['id'] = id service['host'] = host cell_paths.append(cell_path) services = obj_base.obj_make_list(context, objects.ServiceList(), objects.Service, services) services = [cells_utils.ServiceProxy(s, c) for s, c in zip(services, cell_paths)] return services
def service_get_all(context, filters=None, set_zones=False): if set_zones or 'availability_zone' in filters: return availability_zones.set_availability_zones(context, services) return services