Merge "fix use of heat client in driver"

This commit is contained in:
Zuul 2018-02-06 22:47:49 +00:00 committed by Gerrit Code Review
commit 022e18ea7d

View File

@ -29,9 +29,6 @@ from vitrage import os_clients
class HeatStackDriver(DriverBase): class HeatStackDriver(DriverBase):
_client = None
conf = None
RESOURCE_TYPE = { RESOURCE_TYPE = {
'OS::Nova::Server': NOVA_INSTANCE_DATASOURCE, 'OS::Nova::Server': NOVA_INSTANCE_DATASOURCE,
'OS::Cinder::Volume': CINDER_VOLUME_DATASOURCE, 'OS::Cinder::Volume': CINDER_VOLUME_DATASOURCE,
@ -48,16 +45,15 @@ class HeatStackDriver(DriverBase):
def __init__(self, conf): def __init__(self, conf):
super(HeatStackDriver, self).__init__() super(HeatStackDriver, self).__init__()
HeatStackDriver.conf = conf self._client = None
self._conf = conf
self._filter_resource_types() self._filter_resource_types()
HeatStackDriver.client()
@staticmethod @property
def client(): def client(self):
if not HeatStackDriver._client: if not self._client:
HeatStackDriver._client = os_clients.heat_client( self._client = os_clients.heat_client(self._conf)
HeatStackDriver.conf) return self._client
return HeatStackDriver._client
@staticmethod @staticmethod
def get_topic(conf): def get_topic(conf):
@ -84,7 +80,7 @@ class HeatStackDriver(DriverBase):
return return
event[DSProps.EVENT_TYPE] = event_type event[DSProps.EVENT_TYPE] = event_type
event = HeatStackDriver._retrieve_stack_resources(event, stack_id) event = self._retrieve_stack_resources(event, stack_id)
return HeatStackDriver.make_pickleable( return HeatStackDriver.make_pickleable(
[event], [event],
@ -92,19 +88,14 @@ class HeatStackDriver(DriverBase):
DatasourceAction.UPDATE, DatasourceAction.UPDATE,
*self.properties_to_filter_out())[0] *self.properties_to_filter_out())[0]
@staticmethod def _is_nested_stack(self, _id):
def _is_nested_stack(_id): return self.client.stacks.get(_id).to_dict()['parent']
return HeatStackDriver.client().stacks.get(_id).to_dict()['parent']
def _filter_resource_types(self): def _filter_resource_types(self):
types = self.conf.datasources.types types = self._conf.datasources.types
tmp_dict = {}
for key, value in HeatStackDriver.RESOURCE_TYPE.items(): self.RESOURCE_TYPE = {key: value for key, value in
if value in types: self.RESOURCE_TYPE.items() if value in types}
tmp_dict[key] = value
HeatStackDriver.RESOURCE_TYPE = tmp_dict
@staticmethod @staticmethod
def _make_stacks_list(stacks): def _make_stacks_list(stacks):
@ -118,16 +109,13 @@ class HeatStackDriver(DriverBase):
def properties_to_filter_out(): def properties_to_filter_out():
return ['manager', '_info'] return ['manager', '_info']
@staticmethod def _retrieve_stack_resources(self, stack, stack_id):
def _retrieve_stack_resources(stack, stack_id): # guess 10 is enough
resources = HeatStackDriver.client().resources.list(stack_id, resources = self.client.resources.list(stack_id, nested_depth=10)
# guess 10 is
# enough
nested_depth=10)
stack['resources'] = [resource.to_dict() for resource in resources stack['resources'] = [resource.to_dict() for resource in resources
if resource.to_dict()['resource_type'] in if resource.to_dict()['resource_type'] in
HeatStackDriver.RESOURCE_TYPE] self.RESOURCE_TYPE]
HeatStackDriver._filter_stack_resources(stack) self._filter_stack_resources(stack)
return stack return stack
@staticmethod @staticmethod
@ -140,7 +128,7 @@ class HeatStackDriver(DriverBase):
del resource[prop] del resource[prop]
def get_all(self, datasource_action): def get_all(self, datasource_action):
stacks = HeatStackDriver.client().stacks.list(global_tenant=True) stacks = self.client.stacks.list(global_tenant=True)
stacks_list = self._make_stacks_list(stacks) stacks_list = self._make_stacks_list(stacks)
stacks_with_resources = self._append_stacks_resources(stacks_list) stacks_with_resources = self._append_stacks_resources(stacks_list)
return self.make_pickleable(stacks_with_resources, return self.make_pickleable(stacks_with_resources,