Search based on the resource type name
Adds the filtering support to resource type based on the type name pattern. implements blueprint heat-resource-type-search Change-Id: Id492d260b87464af385d58db7c017ba648fde411
This commit is contained in:
parent
719a043854
commit
e842561394
@ -16,6 +16,7 @@ import fnmatch
|
|||||||
import glob
|
import glob
|
||||||
import itertools
|
import itertools
|
||||||
import os.path
|
import os.path
|
||||||
|
import re
|
||||||
import warnings
|
import warnings
|
||||||
|
|
||||||
from oslo_config import cfg
|
from oslo_config import cfg
|
||||||
@ -438,7 +439,10 @@ class ResourceRegistry(object):
|
|||||||
|
|
||||||
return _as_dict(self._registry)
|
return _as_dict(self._registry)
|
||||||
|
|
||||||
def get_types(self, cnxt=None, support_status=None):
|
def get_types(self,
|
||||||
|
cnxt=None,
|
||||||
|
support_status=None,
|
||||||
|
type_name=None):
|
||||||
'''Return a list of valid resource types.'''
|
'''Return a list of valid resource types.'''
|
||||||
|
|
||||||
# validate the support status
|
# validate the support status
|
||||||
@ -478,8 +482,15 @@ class ResourceRegistry(object):
|
|||||||
|
|
||||||
enforcer = policy.ResourceEnforcer()
|
enforcer = policy.ResourceEnforcer()
|
||||||
|
|
||||||
|
def name_matches(name):
|
||||||
|
try:
|
||||||
|
return type_name is None or re.match(type_name, name)
|
||||||
|
except: # noqa
|
||||||
|
return False
|
||||||
|
|
||||||
return [name for name, cls in six.iteritems(self._registry)
|
return [name for name, cls in six.iteritems(self._registry)
|
||||||
if (is_resource(name) and
|
if (is_resource(name) and
|
||||||
|
name_matches(name) and
|
||||||
status_matches(cls) and
|
status_matches(cls) and
|
||||||
is_available(cls) and
|
is_available(cls) and
|
||||||
is_allowed(enforcer, name) and
|
is_allowed(enforcer, name) and
|
||||||
|
@ -762,6 +762,23 @@ class ResourceRegistryTest(common.HeatTestCase):
|
|||||||
self.assertIn('ResourceTypeUnSupportedLiberty', types)
|
self.assertIn('ResourceTypeUnSupportedLiberty', types)
|
||||||
self.assertIn('GenericResourceType', types)
|
self.assertIn('GenericResourceType', types)
|
||||||
|
|
||||||
|
def test_list_type_with_name(self):
|
||||||
|
registry = resources.global_env().registry
|
||||||
|
types = registry.get_types(type_name='ResourceType*')
|
||||||
|
self.assertIn('ResourceTypeUnSupportedLiberty', types)
|
||||||
|
self.assertNotIn('GenericResourceType', types)
|
||||||
|
|
||||||
|
def test_list_type_with_name_none(self):
|
||||||
|
registry = resources.global_env().registry
|
||||||
|
types = registry.get_types(type_name=None)
|
||||||
|
self.assertIn('ResourceTypeUnSupportedLiberty', types)
|
||||||
|
self.assertIn('GenericResourceType', types)
|
||||||
|
|
||||||
|
def test_list_type_with_invalid_type_name(self):
|
||||||
|
registry = resources.global_env().registry
|
||||||
|
types = registry.get_types(type_name="r'[^\+]'")
|
||||||
|
self.assertEqual([], types)
|
||||||
|
|
||||||
|
|
||||||
class HookMatchTest(common.HeatTestCase):
|
class HookMatchTest(common.HeatTestCase):
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user