1
+ from dcim .models import MACAddress
1
2
from virtualization .models import VirtualMachine , VMInterface
2
3
3
4
from netbox_initializers .initializers .base import BaseInitializer , register_initializer
4
5
5
6
MATCH_PARAMS = ["name" , "virtual_machine" ]
6
7
REQUIRED_ASSOCS = {"virtual_machine" : (VirtualMachine , "name" )}
8
+ OPTIONAL_ASSOCS = {"primary_mac_address" : (MACAddress , "mac_address" )}
7
9
8
10
9
11
class VMInterfaceInitializer (BaseInitializer ):
@@ -16,13 +18,21 @@ def load_data(self):
16
18
for params in interfaces :
17
19
custom_field_data = self .pop_custom_fields (params )
18
20
tags = params .pop ("tags" , None )
21
+ mac_addresses = params .pop ("mac_addresses" , None )
19
22
20
23
for assoc , details in REQUIRED_ASSOCS .items ():
21
24
model , field = details
22
25
query = {field : params .pop (assoc )}
23
26
24
27
params [assoc ] = model .objects .get (** query )
25
28
29
+ for assoc , details in OPTIONAL_ASSOCS .items ():
30
+ if assoc in params :
31
+ model , field = details
32
+ query = {field : params .pop (assoc )}
33
+
34
+ params [assoc ] = model .objects .get (** query )
35
+
26
36
matching_params , defaults = self .split_params (params , MATCH_PARAMS )
27
37
interface , created = VMInterface .objects .get_or_create (
28
38
** matching_params , defaults = defaults
@@ -33,6 +43,7 @@ def load_data(self):
33
43
34
44
self .set_custom_fields_values (interface , custom_field_data )
35
45
self .set_tags (interface , tags )
46
+ self .set_mac_addresses (interface , mac_addresses )
36
47
37
48
38
49
register_initializer ("virtualization_interfaces" , VMInterfaceInitializer )
0 commit comments