@@ -35,16 +35,20 @@ def generate_prefix_list_config(self, data, add):
35
35
"""
36
36
cmd = "\n "
37
37
metadata = self .directory .get_slot ("CONFIG_DB" , swsscommon .CFG_DEVICE_METADATA_TABLE_NAME )["localhost" ]
38
- bgp_asn = metadata ["bgp_asn" ]
39
- localhost_type = metadata ["type" ]
40
- subtype = metadata ["subtype" ]
38
+ try :
39
+ bgp_asn = metadata ["bgp_asn" ]
40
+ localhost_type = metadata ["type" ]
41
+ subtype = metadata ["subtype" ]
42
+ except KeyError as e :
43
+ log_warn (f"PrefixListMgr:: Missing metadata key: { e } " )
44
+ return False
41
45
42
46
if data ["prefix_list_name" ] != "ANCHOR_PREFIX" :
43
47
log_warn ("PrefixListMgr:: Prefix list %s is not supported" % data ["prefix_list_name" ])
44
- return
48
+ return False
45
49
if localhost_type != "SpineRouter" or subtype != "UpstreamLC" :
46
50
log_warn ("PrefixListMgr:: Prefix list %s is only supported on UpstreamLC of SpineRouter" % data ["prefix_list_name" ])
47
- return
51
+ return False
48
52
49
53
# Add the anchor prefix to the radian configuration
50
54
data ["bgp_asn" ] = bgp_asn
@@ -56,6 +60,7 @@ def generate_prefix_list_config(self, data, add):
56
60
cmd += self .templates ["del_radian" ].render (data = data )
57
61
log_debug ("PrefixListMgr:: Anchor prefix %s removed from radian configuration" % data ["prefix" ])
58
62
self .cfg_mgr .push (cmd )
63
+ return True
59
64
60
65
61
66
@@ -72,11 +77,11 @@ def set_handler(self, key, data):
72
77
data ["prefix" ] = str (prefix .cidr )
73
78
data ["ipv" ] = self .get_ip_type (prefix )
74
79
# Generate the prefix list configuration
75
- self .generate_prefix_list_config (data , add = True )
76
- log_info ("PrefixListMgr:: %s %s configuration generated" % (prefix_list_name , data ["prefix" ]))
80
+ if self .generate_prefix_list_config (data , add = True ):
81
+ log_info ("PrefixListMgr:: %s %s configuration generated" % (prefix_list_name , data ["prefix" ]))
77
82
78
- self .directory .put (self .db_name , self .table_name , key , data )
79
- log_info ("PrefixListMgr:: set %s" % key )
83
+ self .directory .put (self .db_name , self .table_name , key , data )
84
+ log_info ("PrefixListMgr:: set %s" % key )
80
85
return True
81
86
82
87
def del_handler (self , key ):
@@ -92,10 +97,11 @@ def del_handler(self, key):
92
97
data ["prefix_list_name" ] = prefix_list_name
93
98
data ["prefix" ] = str (prefix .cidr )
94
99
data ["ipv" ] = self .get_ip_type (prefix )
95
- self .generate_prefix_list_config (data , add = False )
96
- log_info ("PrefixListMgr:: %s %s configuration deleted" % (prefix_list_name , data ["prefix" ]))
97
- self .directory .remove (self .db_name , self .table_name , key )
98
- log_info ("PrefixListMgr:: deleted %s" % key )
100
+ # remove the prefix list configuration
101
+ if self .generate_prefix_list_config (data , add = False ):
102
+ log_info ("PrefixListMgr:: %s %s configuration deleted" % (prefix_list_name , data ["prefix" ]))
103
+ self .directory .remove (self .db_name , self .table_name , key )
104
+ log_info ("PrefixListMgr:: deleted %s" % key )
99
105
# Implement deletion logic if necessary
100
106
return True
101
107
0 commit comments