1313# under the License.
1414
1515import abc
16- import copy
17- import uuid
1816
1917from oslo_utils import timeutils
20- from ovs .db import idl as ovs_idl
2118from ovsdbapp .backend .ovs_idl import command
2219from ovsdbapp .backend .ovs_idl import idlutils
23- from ovsdbapp .backend .ovs_idl import rowview
2420from ovsdbapp .schema .ovn_northbound import commands as ovn_nb_commands
2521from ovsdbapp import utils as ovsdbapp_utils
2622
@@ -104,49 +100,6 @@ def _add_gateway_chassis(api, txn, lrp_name, val):
104100 return 'gateway_chassis' , uuid_list
105101
106102
107- def _sync_ha_chassis_group (txn , nb_api , name , chassis_priority ,
108- may_exist = False , table_name = 'HA_Chassis_Group' ,
109- ** columns ):
110- result = None
111- hcg = nb_api .lookup (table_name , name , default = None )
112- if hcg :
113- if not may_exist :
114- raise RuntimeError (_ ('HA_Chassis_Group %s exists' % name ))
115- else :
116- hcg = txn .insert (nb_api ._tables [table_name ])
117- hcg .name = name
118- command .BaseCommand .set_columns (hcg , ** columns )
119- result = hcg .uuid
120-
121- # HA_Chassis registers handling.
122- # Remove the non-existing chassis in ``self.chassis_priority``
123- hc_to_remove = []
124- for hc in getattr (hcg , 'ha_chassis' , []):
125- if hc .chassis_name not in chassis_priority :
126- hc_to_remove .append (hc )
127-
128- for hc in hc_to_remove :
129- hcg .delvalue ('ha_chassis' , hc )
130- hc .delete ()
131-
132- # Update the priority of the existing chassis.
133- for hc in getattr (hcg , 'ha_chassis' , []):
134- hc_priority = chassis_priority .pop (hc .chassis_name )
135- hc .priority = hc_priority
136-
137- # Add the non-existing HA_Chassis registers.
138- for hc_name , priority in chassis_priority .items ():
139- hc = txn .insert (nb_api .tables ['HA_Chassis' ])
140- hc .chassis_name = hc_name
141- hc .priority = priority
142- hcg .addvalue ('ha_chassis' , hc )
143-
144- if not result :
145- result = rowview .RowView (hcg )
146-
147- return result
148-
149-
150103class CheckLivenessCommand (command .BaseCommand ):
151104 def run_idl (self , txn ):
152105 # txn.pre_commit responsible for updating nb_global.nb_cfg, but
@@ -157,64 +110,21 @@ def run_idl(self, txn):
157110 self .result = self .api .nb_global .nb_cfg
158111
159112
160- class AddNetworkCommand (command .AddCommand ):
161- table_name = 'Logical_Switch'
162-
163- def __init__ (self , api , network_id , may_exist = False , ** columns ):
164- super ().__init__ (api )
165- self .network_uuid = uuid .UUID (str (network_id ))
166- self .may_exist = may_exist
167- self .columns = columns
168-
169- def run_idl (self , txn ):
170- table = self .api .tables [self .table_name ]
171- try :
172- ls = table .rows [self .network_uuid ]
173- if self .may_exist :
174- self .result = rowview .RowView (ls )
175- return
176- msg = _ ("Switch %s already exists" ) % self .network_uuid
177- raise RuntimeError (msg )
178- except KeyError :
179- # Adding a new LS
180- if utils .ovs_persist_uuid_supported (txn .idl ):
181- ls = txn .insert (table , new_uuid = self .network_uuid ,
182- persist_uuid = True )
183- else :
184- ls = txn .insert (table )
185- self .set_columns (ls , ** self .columns )
186- ls .name = utils .ovn_name (self .network_uuid )
187- self .result = ls .uuid
188-
189-
190113class AddLSwitchPortCommand (command .BaseCommand ):
191- def __init__ (self , api , lport , lswitch , may_exist , network_id = None ,
192- ** columns ):
114+ def __init__ (self , api , lport , lswitch , may_exist , ** columns ):
193115 super ().__init__ (api )
194116 self .lport = lport
195117 self .lswitch = lswitch
196118 self .may_exist = may_exist
197- self .network_uuid = uuid .UUID (str (network_id )) if network_id else None
198119 self .columns = columns
199120
200121 def run_idl (self , txn ):
201122 try :
202- # We must look in the local cache first, because the LS may have
203- # been created as part of the current transaction. or in the case
204- # of adding an LSP to a LS that was created before persist_uuid
205123 lswitch = idlutils .row_by_value (self .api .idl , 'Logical_Switch' ,
206124 'name' , self .lswitch )
207125 except idlutils .RowNotFound :
208- if self .network_uuid and utils .ovs_persist_uuid_supported (txn .idl ):
209- # Create a "fake" row with the right UUID so python-ovs creates
210- # a transaction referencing the Row, even though we might not
211- # have received the update for the row ourselves.
212- lswitch = ovs_idl .Row (self .api .idl ,
213- self .api .tables ['Logical_Switch' ],
214- uuid = self .network_uuid , data = {})
215- else :
216- msg = _ ("Logical Switch %s does not exist" ) % self .lswitch
217- raise RuntimeError (msg )
126+ msg = _ ("Logical Switch %s does not exist" ) % self .lswitch
127+ raise RuntimeError (msg )
218128 if self .may_exist :
219129 port = idlutils .row_by_value (self .api .idl ,
220130 'Logical_Switch_Port' , 'name' ,
@@ -300,8 +210,8 @@ def run_idl(self, txn):
300210 else :
301211 new_port_dhcp_opts .add (dhcpv6_options .result )
302212 port .dhcpv6_options = [dhcpv6_options .result ]
303- for uuid_ in cur_port_dhcp_opts - new_port_dhcp_opts :
304- self .api ._tables ['DHCP_Options' ].rows [uuid_ ].delete ()
213+ for uuid in cur_port_dhcp_opts - new_port_dhcp_opts :
214+ self .api ._tables ['DHCP_Options' ].rows [uuid ].delete ()
305215
306216 external_ids_update = self .external_ids_update or {}
307217 external_ids = getattr (port , 'external_ids' , {})
@@ -383,8 +293,8 @@ def run_idl(self, txn):
383293 # Delete DHCP_Options records no longer referred by this port.
384294 cur_port_dhcp_opts = get_lsp_dhcp_options_uuids (
385295 lport , self .lport )
386- for uuid_ in cur_port_dhcp_opts :
387- self .api ._tables ['DHCP_Options' ].rows [uuid_ ].delete ()
296+ for uuid in cur_port_dhcp_opts :
297+ self .api ._tables ['DHCP_Options' ].rows [uuid ].delete ()
388298
389299 _delvalue_from_list (lswitch , 'ports' , lport )
390300 self .api ._tables ['Logical_Switch_Port' ].rows [lport .uuid ].delete ()
@@ -437,7 +347,8 @@ def run_idl(self, txn):
437347 az_hints = self .api .get_gateway_chassis_az_hints (self .g_name )
438348 filtered_existing_chassis = (
439349 self .scheduler .filter_existing_chassis (
440- gw_chassis = self .all_gw_chassis , physnet = physnet ,
350+ nb_idl = self .api , gw_chassis = self .all_gw_chassis ,
351+ physnet = physnet ,
441352 chassis_physnets = self .chassis_with_physnets ,
442353 existing_chassis = existing_chassis , az_hints = az_hints ,
443354 chassis_with_azs = self .chassis_with_azs ))
@@ -477,12 +388,9 @@ def run_idl(self, txn):
477388 # the top.
478389 index = chassis .index (primary )
479390 chassis [0 ], chassis [index ] = chassis [index ], chassis [0 ]
480- chassis_priority = utils .get_chassis_priority (chassis )
481- lrouter_name = lrouter_port .external_ids [
482- ovn_const .OVN_ROUTER_NAME_EXT_ID_KEY ]
483- hcg = _sync_ha_chassis_group (txn , self .api , lrouter_name ,
484- chassis_priority , may_exist = True )
485- setattr (lrouter_port , 'ha_chassis_group' , ovsdbapp_utils .get_uuid (hcg ))
391+ setattr (
392+ lrouter_port ,
393+ * _add_gateway_chassis (self .api , txn , self .g_name , chassis ))
486394
487395
488396class ScheduleNewGatewayCommand (command .BaseCommand ):
@@ -507,11 +415,8 @@ def run_idl(self, txn):
507415 self .api , self .sb_api , self .g_name , candidates = candidates ,
508416 target_lrouter = lrouter )
509417 if chassis :
510- chassis_priority = utils .get_chassis_priority (chassis )
511- hcg = _sync_ha_chassis_group (txn , self .api , self .lrouter_name ,
512- chassis_priority , may_exist = True )
513- setattr (lrouter_port , 'ha_chassis_group' ,
514- ovsdbapp_utils .get_uuid (hcg ))
418+ setattr (lrouter_port ,
419+ * _add_gateway_chassis (self .api , txn , self .g_name , chassis ))
515420
516421
517422class LrDelCommand (ovn_nb_commands .LrDelCommand ):
@@ -560,9 +465,8 @@ def run_idl(self, txn):
560465 if col == 'gateway_chassis' :
561466 col , val = _add_gateway_chassis (self .api , txn , self .name ,
562467 val )
563- self . set_column (lrouter_port , col , val )
468+ setattr (lrouter_port , col , val )
564469 _addvalue_to_list (lrouter , 'ports' , lrouter_port )
565- self .result = lrouter_port .uuid
566470
567471
568472class UpdateLRouterPortCommand (command .BaseCommand ):
@@ -587,7 +491,7 @@ def run_idl(self, txn):
587491 if col == 'gateway_chassis' :
588492 col , val = _add_gateway_chassis (self .api , txn , self .name ,
589493 val )
590- self . set_column (lrouter_port , col , val )
494+ setattr (lrouter_port , col , val )
591495
592496
593497class DelLRouterPortCommand (command .BaseCommand ):
@@ -1104,17 +1008,15 @@ def run_idl(self, txn):
11041008 # Remove the router pinning to a chassis (if any).
11051009 lrouter .delkey ('options' , 'chassis' )
11061010
1107- for gw_port in self .api .get_lrouter_gw_ports (lrouter .name ):
1108- gw_port .ha_chassis_group = []
1109- lrouter .delvalue ('ports' , gw_port )
1110-
1111- # Remove the HA_Chassis_Group of the router (if any), after
1112- # removing it from the gateway Logical_Router_Ports.
1011+ # Remove the HA_Chassis_Group of the router (if any).
11131012 hcg = self .api .lookup ('HA_Chassis_Group' ,
11141013 lrouter .name , default = None )
11151014 if hcg :
11161015 hcg .delete ()
11171016
1017+ for gw_port in self .api .get_lrouter_gw_ports (lrouter .name ):
1018+ lrouter .delvalue ('ports' , gw_port )
1019+
11181020
11191021class SetLSwitchPortToVirtualTypeCommand (command .BaseCommand ):
11201022 def __init__ (self , api , lport , vip , parent , if_exists ):
@@ -1187,22 +1089,3 @@ def run_idl(self, txn):
11871089 virtual_parents )
11881090
11891091 setattr (lsp , 'options' , options )
1190-
1191-
1192- class HAChassisGroupWithHCAddCommand (command .AddCommand ):
1193- table_name = 'HA_Chassis_Group'
1194-
1195- def __init__ (self , api , name , chassis_priority , may_exist = False ,
1196- ** columns ):
1197- super ().__init__ (api )
1198- self .name = name
1199- self .chassis_priority = copy .deepcopy (chassis_priority )
1200- self .may_exist = may_exist
1201- self .columns = columns
1202-
1203- def run_idl (self , txn ):
1204- # HA_Chassis_Group register creation.
1205- self .result = _sync_ha_chassis_group (
1206- txn , self .api , self .name , self .chassis_priority ,
1207- may_exist = self .may_exist , table_name = self .table_name ,
1208- ** self .columns )
0 commit comments