@@ -167,60 +167,63 @@ def load_tagged_vlans_to_interface(self):
167167
168168 Only Vlan assignments that were returned by the CommandGetter job should be loaded.
169169 """
170- for interface in Interface .objects .filter (device__in = self .job .devices_to_load ):
171- tagged_vlans = []
172- for vlan in interface .tagged_vlans .all ():
173- vlan_dict = {}
174- vlan_dict ["name" ] = vlan .name
175- vlan_dict ["id" ] = str (vlan .vid )
176- tagged_vlans .append (vlan_dict )
177- sorted_tagged_vlans = sorted (tagged_vlans , key = lambda x : x ["id" ])
178-
179- network_tagged_vlans_to_interface = self .tagged_vlans_to_interface (
180- adapter = self ,
181- device__name = interface .device .name ,
182- name = interface .name ,
183- tagged_vlans = sorted_tagged_vlans ,
184- )
185- network_tagged_vlans_to_interface .model_flags = DiffSyncModelFlags .SKIP_UNMATCHED_DST
186- self .add (network_tagged_vlans_to_interface )
170+ for device in self .job .devices_to_load :
171+ for interface in device .all_interfaces :
172+ tagged_vlans = []
173+ for vlan in interface .tagged_vlans .all ():
174+ vlan_dict = {}
175+ vlan_dict ["name" ] = vlan .name
176+ vlan_dict ["id" ] = str (vlan .vid )
177+ tagged_vlans .append (vlan_dict )
178+ sorted_tagged_vlans = sorted (tagged_vlans , key = lambda x : x ["id" ])
179+
180+ network_tagged_vlans_to_interface = self .tagged_vlans_to_interface (
181+ adapter = self ,
182+ device__name = device .name ,
183+ name = interface .name ,
184+ tagged_vlans = sorted_tagged_vlans ,
185+ )
186+ network_tagged_vlans_to_interface .model_flags = DiffSyncModelFlags .SKIP_UNMATCHED_DST
187+ self .add (network_tagged_vlans_to_interface )
187188
188189 def load_untagged_vlan_to_interface (self ):
189190 """
190191 Load UnTagged VLAN interface assignments into the Diffsync store.
191192
192193 Only UnTagged Vlan assignments that were returned by the CommandGetter job should be synced.
193194 """
194- for interface in Interface .objects .filter (device__in = self .job .devices_to_load ):
195- untagged_vlan = {}
196- if interface .untagged_vlan :
197- untagged_vlan ["name" ] = interface .untagged_vlan .name
198- untagged_vlan ["id" ] = str (interface .untagged_vlan .vid )
195+ for device in self .job .devices_to_load :
196+ for interface in device .all_interfaces :
197+ untagged_vlan = {}
198+ if interface .untagged_vlan :
199+ untagged_vlan ["name" ] = interface .untagged_vlan .name
200+ untagged_vlan ["id" ] = str (interface .untagged_vlan .vid )
199201
200- network_untagged_vlan_to_interface = self .untagged_vlan_to_interface (
201- adapter = self ,
202- device__name = interface . device .name ,
203- name = interface .name ,
204- untagged_vlan = untagged_vlan ,
205- )
206- network_untagged_vlan_to_interface .model_flags = DiffSyncModelFlags .SKIP_UNMATCHED_DST
207- self .add (network_untagged_vlan_to_interface )
202+ network_untagged_vlan_to_interface = self .untagged_vlan_to_interface (
203+ adapter = self ,
204+ device__name = device .name ,
205+ name = interface .name ,
206+ untagged_vlan = untagged_vlan ,
207+ )
208+ network_untagged_vlan_to_interface .model_flags = DiffSyncModelFlags .SKIP_UNMATCHED_DST
209+ self .add (network_untagged_vlan_to_interface )
208210
209211 def load_lag_to_interface (self ):
210212 """
211213 Load Lag interface assignments into the Diffsync store.
212214
213215 Only Lag assignments that were returned by the CommandGetter job should be synced.
214216 """
215- for interface in Interface .objects .filter (device__in = self .job .devices_to_load ):
216- network_lag_to_interface = self .lag_to_interface (
217- adapter = self ,
218- device__name = interface .device .name ,
219- name = interface .name ,
220- lag__interface__name = interface .lag .name if interface .lag else "" ,
221- )
222- network_lag_to_interface .model_flags = DiffSyncModelFlags .SKIP_UNMATCHED_DST
223- self .add (network_lag_to_interface )
217+ for device in self .job .devices_to_load :
218+ for interface in device .all_interfaces :
219+ network_lag_to_interface = self .lag_to_interface (
220+ adapter = self ,
221+ device__name = device .name ,
222+ name = interface .name ,
223+ lag__interface__name = interface .lag .name if interface .lag else "" ,
224+ )
225+ network_lag_to_interface .model_flags = DiffSyncModelFlags .SKIP_UNMATCHED_DST
226+ self .add (network_lag_to_interface )
224227
225228 def load_vrfs (self ):
226229 """
@@ -246,19 +249,20 @@ def load_vrf_to_interface(self):
246249
247250 Only Vrf assignments that were returned by the CommandGetter job should be synced.
248251 """
249- for interface in Interface .objects .filter (device__in = self .job .devices_to_load ):
250- vrf = {}
251- if interface .vrf :
252- vrf ["name" ] = interface .vrf .name
252+ for device in self .job .devices_to_load :
253+ for interface in device .all_interfaces :
254+ vrf = {}
255+ if interface .vrf :
256+ vrf ["name" ] = interface .vrf .name
253257
254- network_vrf_to_interface = self .vrf_to_interface (
255- adapter = self ,
256- device__name = interface . device .name ,
257- name = interface .name ,
258- vrf = vrf ,
259- )
260- network_vrf_to_interface .model_flags = DiffSyncModelFlags .SKIP_UNMATCHED_DST
261- self .add (network_vrf_to_interface )
258+ network_vrf_to_interface = self .vrf_to_interface (
259+ adapter = self ,
260+ device__name = device .name ,
261+ name = interface .name ,
262+ vrf = vrf ,
263+ )
264+ network_vrf_to_interface .model_flags = DiffSyncModelFlags .SKIP_UNMATCHED_DST
265+ self .add (network_vrf_to_interface )
262266
263267 def load_cables (self ):
264268 """
@@ -345,6 +349,21 @@ def load_software_version_to_device(self):
345349 network_software_version_to_device .model_flags = DiffSyncModelFlags .SKIP_UNMATCHED_DST
346350 self .add (network_software_version_to_device )
347351
352+ def _handle_single_parameter (self , parameters , parameter_name , database_object , diffsync_model ):
353+ """Overload parameter handling to add special handling for modular interfaces."""
354+ if parameter_name == "device__name" :
355+ if database_object .parent :
356+ parameters ["device__name" ] = database_object .parent .name
357+ else :
358+ parameters ["device__name" ] = ""
359+ elif parameter_name == "interface__device__name" :
360+ if database_object .interface .parent :
361+ parameters ["interface__device__name" ] = database_object .interface .parent .name
362+ else :
363+ parameters ["interface__device__name" ] = ""
364+ else :
365+ super ()._handle_single_parameter (parameters , parameter_name , database_object , diffsync_model )
366+
348367 def load (self ):
349368 """Generic implementation of the load function."""
350369 if not hasattr (self , "top_level" ) or not self .top_level :
@@ -411,7 +430,7 @@ def sync_complete(self, source, diff, *args, **kwargs):
411430 )
412431 if ip_address :
413432 try :
414- interface = Interface . objects .get (device = device , ip_addresses__in = [ip_address ])
433+ interface = device . all_interfaces .get (ip_addresses__in = [ip_address ])
415434 interface .mgmt_only = True
416435 interface .validated_save ()
417436 self .job .logger .info (
0 commit comments