Skip to content

Commit c292dfa

Browse files
author
Hui Zhang
authored
Merge pull request #1225 from zh805/api-dict
[OPENSTACK-2949] Translate entity type from dict to obj.
2 parents 9eaf309 + 54e8263 commit c292dfa

1 file changed

Lines changed: 102 additions & 7 deletions

File tree

f5lbaasdriver/v2/bigip/driver_v2.py

Lines changed: 102 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
from neutron_lib.plugins import directory
3434

3535
from neutron_lbaas import agent_scheduler
36+
from neutron_lbaas.db.loadbalancer import loadbalancer_dbv2 as ldbv2
3637
from neutron_lbaas.db.loadbalancer import models
3738
from neutron_lbaas.services.loadbalancer import data_models
3839

@@ -160,15 +161,19 @@ class EntityManager(object):
160161

161162
def __init__(self, driver):
162163
self.driver = driver
164+
self.db = ldbv2.LoadBalancerPluginDbv2()
163165
self.model = None
166+
self.data_model = None
164167

165168
def _log_entity(self, entity):
166169
# member bulk is a list
167170
if isinstance(entity, list):
168171
for en in entity:
169172
LOG.debug("Log the entity: %s", en.to_api_dict())
173+
elif isinstance(entity, dict):
174+
LOG.debug("Log the dict entity: %s", entity)
170175
else:
171-
LOG.debug("Log the entity: %s", entity.to_api_dict())
176+
LOG.debug("Log the obj entity: %s", entity.to_api_dict())
172177

173178
def _handle_entity_error(self, context, id, **kwargs):
174179
status = kwargs.get("status", plugin_constants.ERROR)
@@ -956,12 +961,19 @@ class ListenerManager(EntityManager):
956961
def __init__(self, driver):
957962
super(ListenerManager, self).__init__(driver)
958963
self.model = models.Listener
964+
self.data_model = data_models.Listener
965+
966+
def translate_dict_entity_to_obj(self, context, listener):
967+
if isinstance(listener, dict):
968+
return self.db.get_listener(context, listener['id'])
969+
return listener
959970

960971
@log_helpers.log_method_call
961972
def create(self, context, listener):
962973
"""Create a listener."""
963974

964975
self._log_entity(listener)
976+
listener = self.translate_dict_entity_to_obj(context, listener)
965977

966978
lb = listener.loadbalancer
967979
api_dict = listener.to_dict(loadbalancer=False, default_pool=False)
@@ -996,21 +1008,41 @@ def append_pools_monitors(context, loadbalancer, service):
9961008
loadbalancer_id=lb.id)
9971009
raise e
9981010

1011+
def _translate_old_listener(self, old_listener):
1012+
if not isinstance(old_listener, dict):
1013+
old_listener = old_listener.to_dict(loadbalancer=False,
1014+
default_pool=False)
1015+
return old_listener
1016+
1017+
def _get_tls_sni_id(self, listener):
1018+
if not isinstance(listener, dict):
1019+
return
1020+
if 'sni_container_refs' in listener:
1021+
listener['sni_containers'] = [{'tls_container_id': t_id} for t_id
1022+
in listener['sni_container_refs']]
1023+
if 'default_tls_container_ref' in listener:
1024+
listener['default_tls_container_id'] =\
1025+
listener['default_tls_container_ref']
1026+
9991027
@log_helpers.log_method_call
10001028
def update(self, context, old_listener, listener):
10011029
"""Update a listener."""
10021030

10031031
self._log_entity(old_listener)
10041032
self._log_entity(listener)
10051033

1034+
old_listener = self._translate_old_listener(old_listener)
1035+
self._get_tls_sni_id(old_listener)
1036+
listener = self.translate_dict_entity_to_obj(context, listener)
1037+
self._get_tls_sni_id(listener)
1038+
10061039
driver = self.driver
10071040
lb = listener.loadbalancer
10081041
try:
10091042
agent_host, service = self._setup_crud(context, lb, listener)
10101043
driver.agent_rpc.update_listener(
10111044
context,
1012-
old_listener.to_dict(loadbalancer=False,
1013-
default_pool=False),
1045+
old_listener,
10141046
listener.to_dict(loadbalancer=False, default_pool=False),
10151047
service,
10161048
agent_host
@@ -1026,6 +1058,7 @@ def delete(self, context, listener):
10261058
"""Delete a listener."""
10271059

10281060
self._log_entity(listener)
1061+
listener = self.translate_dict_entity_to_obj(context, listener)
10291062

10301063
lb = listener.loadbalancer
10311064
api_dict = listener.to_dict(loadbalancer=False, default_pool=False)
@@ -1060,8 +1093,16 @@ class PoolManager(EntityManager):
10601093
def __init__(self, driver):
10611094
super(PoolManager, self).__init__(driver)
10621095
self.model = models.PoolV2
1096+
self.data_model = data_models.Pool
1097+
1098+
def translate_dict_entity_to_obj(self, context, pool):
1099+
if isinstance(pool, dict):
1100+
return self.db.get_pool(context, pool['id'])
1101+
return pool
10631102

10641103
def _get_pool_dict(self, pool):
1104+
if isinstance(pool, dict):
1105+
return pool
10651106
pool_dict = pool.to_dict(
10661107
healthmonitor=False,
10671108
listener=False,
@@ -1084,6 +1125,7 @@ def create(self, context, pool):
10841125
"""Create a pool."""
10851126

10861127
self._log_entity(pool)
1128+
pool = self.translate_dict_entity_to_obj(context, pool)
10871129

10881130
lb = pool.loadbalancer
10891131
api_dict = self._get_pool_dict(pool)
@@ -1125,6 +1167,7 @@ def update(self, context, old_pool, pool):
11251167

11261168
self._log_entity(old_pool)
11271169
self._log_entity(pool)
1170+
pool = self.translate_dict_entity_to_obj(context, pool)
11281171

11291172
driver = self.driver
11301173
lb = pool.loadbalancer
@@ -1148,6 +1191,7 @@ def delete(self, context, pool):
11481191
"""Delete a pool."""
11491192

11501193
self._log_entity(pool)
1194+
pool = self.translate_dict_entity_to_obj(context, pool)
11511195

11521196
lb = pool.loadbalancer
11531197
api_dict = self._get_pool_dict(pool)
@@ -1187,12 +1231,19 @@ class MemberManager(EntityManager):
11871231
def __init__(self, driver):
11881232
super(MemberManager, self).__init__(driver)
11891233
self.model = models.MemberV2
1234+
self.data_model = data_models.Member
1235+
1236+
def translate_dict_entity_to_obj(self, context, member):
1237+
if isinstance(member, dict):
1238+
return self.db.get_pool_member(context, member['id'])
1239+
return member
11901240

11911241
@log_helpers.log_method_call
11921242
def create(self, context, member):
11931243
"""Create a member."""
11941244

11951245
self._log_entity(member)
1246+
member = self.translate_dict_entity_to_obj(context, member)
11961247

11971248
driver = self.driver
11981249
lb = member.pool.loadbalancer
@@ -1392,14 +1443,17 @@ def update(self, context, old_member, member):
13921443

13931444
self._log_entity(old_member)
13941445
self._log_entity(member)
1446+
if not isinstance(old_member, dict):
1447+
old_member = old_member.to_dict(pool=False)
1448+
member = self.translate_dict_entity_to_obj(context, member)
13951449

13961450
driver = self.driver
13971451
lb = member.pool.loadbalancer
13981452
try:
13991453
agent_host, service = self._setup_crud(context, lb, member)
14001454
driver.agent_rpc.update_member(
14011455
context,
1402-
old_member.to_dict(pool=False),
1456+
old_member,
14031457
member.to_dict(pool=False),
14041458
service,
14051459
agent_host
@@ -1415,6 +1469,7 @@ def delete(self, context, member):
14151469
"""Delete a member."""
14161470

14171471
self._log_entity(member)
1472+
member = self.translate_dict_entity_to_obj(context, member)
14181473

14191474
lb = member.pool.loadbalancer
14201475
driver = self.driver
@@ -1449,12 +1504,20 @@ class HealthMonitorManager(EntityManager):
14491504
def __init__(self, driver):
14501505
super(HealthMonitorManager, self).__init__(driver)
14511506
self.model = models.HealthMonitorV2
1507+
self.data_model = data_models.HealthMonitor
1508+
1509+
def translate_dict_entity_to_obj(self, context, health_monitor):
1510+
if isinstance(health_monitor, dict):
1511+
return self.db.get_healthmonitor(context, health_monitor['id'])
1512+
return health_monitor
14521513

14531514
@log_helpers.log_method_call
14541515
def create(self, context, health_monitor):
14551516
"""Create a health monitor."""
14561517

14571518
self._log_entity(health_monitor)
1519+
health_monitor = self.translate_dict_entity_to_obj(context,
1520+
health_monitor)
14581521

14591522
lb = health_monitor.pool.loadbalancer
14601523
api_dict = health_monitor.to_dict(pool=False)
@@ -1488,13 +1551,18 @@ def update(self, context, old_health_monitor, health_monitor):
14881551
self._log_entity(old_health_monitor)
14891552
self._log_entity(health_monitor)
14901553

1554+
if not isinstance(old_health_monitor, dict):
1555+
old_health_monitor = old_health_monitor.to_dict(pool=False)
1556+
health_monitor = self.translate_dict_entity_to_obj(
1557+
context, health_monitor)
1558+
14911559
driver = self.driver
14921560
lb = health_monitor.pool.loadbalancer
14931561
try:
14941562
agent_host, service = self._setup_crud(context, lb, health_monitor)
14951563
driver.agent_rpc.update_health_monitor(
14961564
context,
1497-
old_health_monitor.to_dict(pool=False),
1565+
old_health_monitor,
14981566
health_monitor.to_dict(pool=False),
14991567
service,
15001568
agent_host
@@ -1510,6 +1578,8 @@ def delete(self, context, health_monitor):
15101578
"""Delete a health monitor."""
15111579

15121580
self._log_entity(health_monitor)
1581+
health_monitor = self.translate_dict_entity_to_obj(
1582+
context, health_monitor)
15131583

15141584
lb = health_monitor.pool.loadbalancer
15151585
api_dict = health_monitor.to_dict(pool=False)
@@ -1543,12 +1613,19 @@ class L7PolicyManager(EntityManager):
15431613
def __init__(self, driver):
15441614
super(L7PolicyManager, self).__init__(driver)
15451615
self.model = models.L7Policy
1616+
self.data_model = data_models.L7Policy
1617+
1618+
def translate_dict_entity_to_obj(self, context, policy):
1619+
if isinstance(policy, dict):
1620+
return self.db.get_l7policy(context, policy['id'])
1621+
return policy
15461622

15471623
@log_helpers.log_method_call
15481624
def create(self, context, policy):
15491625
"""Create an L7 policy."""
15501626

15511627
self._log_entity(policy)
1628+
policy = self.translate_dict_entity_to_obj(context, policy)
15521629

15531630
lb = policy.listener.loadbalancer
15541631
api_dict = policy.to_dict(listener=False, rules=False)
@@ -1586,13 +1663,17 @@ def update(self, context, old_policy, policy):
15861663
self._log_entity(old_policy)
15871664
self._log_entity(policy)
15881665

1666+
if not isinstance(old_policy, dict):
1667+
old_policy = old_policy.to_dict(listener=False)
1668+
policy = self.translate_dict_entity_to_obj(context, policy)
1669+
15891670
driver = self.driver
15901671
lb = policy.listener.loadbalancer
15911672
try:
15921673
agent_host, service = self._setup_crud(context, lb, policy)
15931674
driver.agent_rpc.update_l7policy(
15941675
context,
1595-
old_policy.to_dict(listener=False),
1676+
old_policy,
15961677
policy.to_dict(listener=False),
15971678
service,
15981679
agent_host
@@ -1608,6 +1689,7 @@ def delete(self, context, policy):
16081689
"""Delete a policy."""
16091690

16101691
self._log_entity(policy)
1692+
policy = self.translate_dict_entity_to_obj(context, policy)
16111693

16121694
lb = policy.listener.loadbalancer
16131695
api_dict = policy.to_dict(listener=False, rules=False)
@@ -1645,12 +1727,20 @@ class L7RuleManager(EntityManager):
16451727
def __init__(self, driver):
16461728
super(L7RuleManager, self).__init__(driver)
16471729
self.model = models.L7Rule
1730+
self.data_model = data_models.L7Rule
1731+
1732+
def translate_dict_entity_to_obj(self, context, rule):
1733+
if isinstance(rule, dict):
1734+
return self.db.get_l7policy_rule(context, rule['id'],
1735+
rule['policies'][0]['id'])
1736+
return rule
16481737

16491738
@log_helpers.log_method_call
16501739
def create(self, context, rule):
16511740
"""Create an L7 rule."""
16521741

16531742
self._log_entity(rule)
1743+
rule = self.translate_dict_entity_to_obj(context, rule)
16541744

16551745
lb = rule.policy.listener.loadbalancer
16561746
api_dict = rule.to_dict(policy=False)
@@ -1687,13 +1777,17 @@ def update(self, context, old_rule, rule):
16871777
self._log_entity(old_rule)
16881778
self._log_entity(rule)
16891779

1780+
if not isinstance(old_rule, dict):
1781+
old_rule = old_rule.to_dict(policy=False)
1782+
rule = self.translate_dict_entity_to_obj(context, rule)
1783+
16901784
driver = self.driver
16911785
lb = rule.policy.listener.loadbalancer
16921786
try:
16931787
agent_host, service = self._setup_crud(context, lb, rule)
16941788
driver.agent_rpc.update_l7rule(
16951789
context,
1696-
old_rule.to_dict(policy=False),
1790+
old_rule,
16971791
rule.to_dict(policy=False),
16981792
service,
16991793
agent_host
@@ -1709,6 +1803,7 @@ def delete(self, context, rule):
17091803
"""Delete a rule."""
17101804

17111805
self._log_entity(rule)
1806+
rule = self.translate_dict_entity_to_obj(context, rule)
17121807

17131808
lb = rule.policy.listener.loadbalancer
17141809
api_dict = rule.to_dict(policy=False)

0 commit comments

Comments
 (0)