def test_choose_filter(self): # Test default filter ... hf = host_filter.choose_host_filter() self.assertEquals(hf._full_name().split(".")[-1], 'AllHostsFilter') # Test valid filter ... hf = host_filter.choose_host_filter('InstanceTypeFilter') self.assertEquals(hf._full_name().split(".")[-1], 'InstanceTypeFilter') # Test invalid filter ... try: host_filter.choose_host_filter('does not exist') self.fail("Should not find host filter.") except exception.SchedulerHostFilterNotFound: pass
def filter_hosts(self, topic, request_spec, hosts=None): """Filter the full host list (from the ZoneManager)""" filter_name = request_spec.get('filter', None) # Make sure that the requested filter is legitimate. selected_filter = host_filter.choose_host_filter(filter_name) # TODO(sandy): We're only using InstanceType-based specs # currently. Later we'll need to snoop for more detailed # host filter requests. instance_type = request_spec.get("instance_type", None) if instance_type is None: # No way to select; return the specified hosts return hosts or [] name, query = selected_filter.instance_type_to_filter(instance_type) return selected_filter.filter_hosts(self.zone_manager, query)