3333from neutron_lib .plugins import directory
3434
3535from neutron_lbaas import agent_scheduler
36+ from neutron_lbaas .db .loadbalancer import loadbalancer_dbv2 as ldbv2
3637from neutron_lbaas .db .loadbalancer import models
3738from 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