Add support to disable resources
To remove a resource, you add the following to the global environment: resource_registry: 'AWS::*': implements blueprint exclude-resources-option Change-Id: Ia7c6c78ad3c1850ea20dd942d8d52957b5ad2b11
This commit is contained in:
parent
999066cb8e
commit
f915b1b33f
|
@ -54,6 +54,8 @@ class ResourceInfo(object):
|
|||
self.user_resource = True
|
||||
|
||||
def __eq__(self, other):
|
||||
if other is None:
|
||||
return False
|
||||
return (self.path == other.path and
|
||||
self.value == other.value and
|
||||
self.user_resource == other.user_resource)
|
||||
|
@ -154,7 +156,9 @@ class ResourceRegistry(object):
|
|||
|
||||
def _load_registry(self, path, registry):
|
||||
for k, v in iter(registry.items()):
|
||||
if isinstance(v, dict):
|
||||
if v is None:
|
||||
self._register_info(path + [k], None)
|
||||
elif isinstance(v, dict):
|
||||
self._load_registry(path + [k], v)
|
||||
else:
|
||||
self._register_info(path + [k],
|
||||
|
@ -173,6 +177,24 @@ class ResourceRegistry(object):
|
|||
registry[key] = {}
|
||||
registry = registry[key]
|
||||
|
||||
if info is None:
|
||||
if name.endswith('*'):
|
||||
# delete all matching entries.
|
||||
for res_name in registry.keys():
|
||||
if isinstance(registry[res_name], ResourceInfo) and \
|
||||
res_name.startswith(name[:-1]):
|
||||
LOG.warn(_('Removing %(item)s from %(path)s') % {
|
||||
'item': res_name,
|
||||
'path': descriptive_path})
|
||||
del registry[res_name]
|
||||
else:
|
||||
# delete this entry.
|
||||
LOG.warn(_('Removing %(item)s from %(path)s') % {
|
||||
'item': name,
|
||||
'path': descriptive_path})
|
||||
del registry[name]
|
||||
return
|
||||
|
||||
if name in registry and isinstance(registry[name], ResourceInfo):
|
||||
details = {
|
||||
'path': descriptive_path,
|
||||
|
|
|
@ -200,3 +200,55 @@ class GlobalEnvLoadingTest(common.HeatTestCase):
|
|||
# 3. assert our resource is in place.
|
||||
self.assertEqual('file:///not_really_here.yaml',
|
||||
g_env.get_resource_info('OS::Nova::Server').value)
|
||||
|
||||
def test_env_one_resource_disable(self):
|
||||
# prove we can disable a resource in the global environment
|
||||
|
||||
g_env_content = '''
|
||||
resource_registry:
|
||||
"OS::Nova::Server":
|
||||
'''
|
||||
# 1. fake an environment file
|
||||
envdir = self.useFixture(fixtures.TempDir())
|
||||
envfile = os.path.join(envdir.path, 'test.yaml')
|
||||
with open(envfile, 'w+') as ef:
|
||||
ef.write(g_env_content)
|
||||
cfg.CONF.set_override('environment_dir', envdir.path)
|
||||
|
||||
# 2. load global env
|
||||
g_env = environment.Environment({}, user_env=False)
|
||||
resources._load_all(g_env)
|
||||
|
||||
# 3. assert our resource is in now gone.
|
||||
self.assertEqual(None,
|
||||
g_env.get_resource_info('OS::Nova::Server'))
|
||||
|
||||
# 4. make sure we haven't removed something we shouldn't have
|
||||
self.assertEqual(resources.instance.Instance,
|
||||
g_env.get_resource_info('AWS::EC2::Instance').value)
|
||||
|
||||
def test_env_multi_resources_disable(self):
|
||||
# prove we can disable resources in the global environment
|
||||
|
||||
g_env_content = '''
|
||||
resource_registry:
|
||||
"AWS::*":
|
||||
'''
|
||||
# 1. fake an environment file
|
||||
envdir = self.useFixture(fixtures.TempDir())
|
||||
envfile = os.path.join(envdir.path, 'test.yaml')
|
||||
with open(envfile, 'w+') as ef:
|
||||
ef.write(g_env_content)
|
||||
cfg.CONF.set_override('environment_dir', envdir.path)
|
||||
|
||||
# 2. load global env
|
||||
g_env = environment.Environment({}, user_env=False)
|
||||
resources._load_all(g_env)
|
||||
|
||||
# 3. assert our resources are now gone.
|
||||
self.assertEqual(None,
|
||||
g_env.get_resource_info('AWS::EC2::Instance'))
|
||||
|
||||
# 4. make sure we haven't removed something we shouldn't have
|
||||
self.assertEqual(resources.server.Server,
|
||||
g_env.get_resource_info('OS::Nova::Server').value)
|
||||
|
|
Loading…
Reference in New Issue