Merge "Use RESOLVE translation for lbaasv2 resources"

This commit is contained in:
Jenkins 2016-04-13 18:56:50 +00:00 committed by Gerrit Code Review
commit 5eede801f6
6 changed files with 61 additions and 29 deletions

View File

@ -21,6 +21,7 @@ from heat.engine import constraints
from heat.engine import properties
from heat.engine.resources.openstack.neutron import neutron
from heat.engine import support
from heat.engine import translation
class Listener(neutron.NeutronResource):
@ -137,16 +138,17 @@ class Listener(neutron.NeutronResource):
)
}
def __init__(self, name, definition, stack):
super(Listener, self).__init__(name, definition, stack)
self._lb_id = None
@property
def lb_id(self):
if self._lb_id is None:
self._lb_id = self.client_plugin().find_resourceid_by_name_or_id(
'loadbalancer', self.properties[self.LOADBALANCER])
return self._lb_id
def translation_rules(self, props):
return [
translation.TranslationRule(
props,
translation.TranslationRule.RESOLVE,
[self.LOADBALANCER],
client_plugin=self.client_plugin(),
finder='find_resourceid_by_name_or_id',
entity='loadbalancer'
),
]
def validate(self):
res = super(Listener, self).validate()
@ -161,16 +163,15 @@ class Listener(neutron.NeutronResource):
raise exception.StackValidationFailed(message=msg)
def _check_lb_status(self):
return self.client_plugin().check_lb_status(self.lb_id)
lb_id = self.properties[self.LOADBALANCER]
return self.client_plugin().check_lb_status(lb_id)
def handle_create(self):
properties = self.prepare_properties(
self.properties,
self.physical_resource_name())
self.client_plugin().resolve_loadbalancer(
properties, self.LOADBALANCER, 'loadbalancer_id')
properties['loadbalancer_id'] = properties.pop(self.LOADBALANCER)
return properties
def check_create_complete(self, properties):

View File

@ -23,6 +23,7 @@ from heat.engine import constraints
from heat.engine import properties
from heat.engine.resources.openstack.neutron import neutron
from heat.engine import support
from heat.engine import translation
class LoadBalancer(neutron.NeutronResource):
@ -117,15 +118,24 @@ class LoadBalancer(neutron.NeutronResource):
)
}
def translation_rules(self, props):
return [
translation.TranslationRule(
props,
translation.TranslationRule.RESOLVE,
[self.VIP_SUBNET],
client_plugin=self.client_plugin(),
finder='find_resourceid_by_name_or_id',
entity='subnet'
),
]
def handle_create(self):
properties = self.prepare_properties(
self.properties,
self.physical_resource_name()
)
self.client_plugin().resolve_subnet(
properties, self.VIP_SUBNET, 'vip_subnet_id')
properties['vip_subnet_id'] = properties.pop(self.VIP_SUBNET)
lb = self.client().create_loadbalancer(
{'loadbalancer': properties})['loadbalancer']
self.resource_id_set(lb['id'])

View File

@ -21,6 +21,7 @@ from heat.engine import constraints
from heat.engine import properties
from heat.engine.resources.openstack.neutron import neutron
from heat.engine import support
from heat.engine import translation
class Pool(neutron.NeutronResource):
@ -139,6 +140,18 @@ class Pool(neutron.NeutronResource):
),
}
def translation_rules(self, props):
return [
translation.TranslationRule(
props,
translation.TranslationRule.RESOLVE,
[self.LISTENER],
client_plugin=self.client_plugin(),
finder='find_resourceid_by_name_or_id',
entity='listener'
),
]
def __init__(self, name, definition, stack):
super(Pool, self).__init__(name, definition, stack)
self._lb_id = None
@ -146,10 +159,8 @@ class Pool(neutron.NeutronResource):
@property
def lb_id(self):
if self._lb_id is None:
listener_id = self.client_plugin().find_resourceid_by_name_or_id(
'listener', self.properties[self.LISTENER])
listener_id = self.properties[self.LISTENER]
listener = self.client().show_listener(listener_id)['listener']
self._lb_id = listener['loadbalancers'][0]['id']
return self._lb_id
@ -186,9 +197,7 @@ class Pool(neutron.NeutronResource):
self.properties,
self.physical_resource_name())
self.client_plugin().resolve_listener(
properties, self.LISTENER, 'listener_id')
properties['listener_id'] = properties.pop(self.LISTENER)
session_p = properties.get(self.SESSION_PERSISTENCE)
if session_p is not None:
session_props = self.prepare_properties(session_p, None)

View File

@ -20,6 +20,7 @@ from heat.engine import constraints
from heat.engine import properties
from heat.engine.resources.openstack.neutron import neutron
from heat.engine import support
from heat.engine import translation
class PoolMember(neutron.NeutronResource):
@ -107,6 +108,18 @@ class PoolMember(neutron.NeutronResource):
)
}
def translation_rules(self, props):
return [
translation.TranslationRule(
props,
translation.TranslationRule.RESOLVE,
[self.SUBNET],
client_plugin=self.client_plugin(),
finder='find_resourceid_by_name_or_id',
entity='subnet'
),
]
def __init__(self, name, definition, stack):
super(PoolMember, self).__init__(name, definition, stack)
self._pool_id = None
@ -145,9 +158,7 @@ class PoolMember(neutron.NeutronResource):
properties.pop('pool_id')
if self.SUBNET in properties:
self.client_plugin().resolve_subnet(
properties, self.SUBNET, 'subnet_id')
properties['subnet_id'] = properties.pop(self.SUBNET)
return properties
def check_create_complete(self, properties):

View File

@ -42,8 +42,6 @@ class LoadBalancerTest(common.HeatTestCase):
self.t = template_format.parse(tmpl)
self.stack = utils.parse_stack(self.t)
self.lb = self.stack['lb']
self.lb.resource_id_set('1234')
self.neutron_client = mock.MagicMock()
self.lb.client = mock.MagicMock()
self.lb.client.return_value = self.neutron_client
@ -52,6 +50,8 @@ class LoadBalancerTest(common.HeatTestCase):
return_value='123')
self.lb.client_plugin().client = mock.MagicMock(
return_value=self.neutron_client)
self.lb.translate_properties(self.lb.properties)
self.lb.resource_id_set('1234')
def test_create(self):
self._create_stack()

View File

@ -46,6 +46,7 @@ class PoolMemberTest(common.HeatTestCase):
mock.MagicMock(return_value='123'))
self.member.client_plugin().client = mock.MagicMock(
return_value=self.neutron_client)
self.member.translate_properties(self.member.properties)
def test_create(self):
self._create_stack()