diff --git a/src/config/api-server/vnc_cfg_ifmap.py b/src/config/api-server/vnc_cfg_ifmap.py index 9047c53eba2..a403c6e509b 100644 --- a/src/config/api-server/vnc_cfg_ifmap.py +++ b/src/config/api-server/vnc_cfg_ifmap.py @@ -894,9 +894,7 @@ def is_latest(self, id, tstamp): def update_last_modified(self, bch, obj_uuid, id_perms=None): if id_perms is None: - id_perms = json.loads( - self._obj_uuid_cf.get(obj_uuid, - ['prop:id_perms'])['prop:id_perms']) + id_perms = self.uuid_to_obj_perms(obj_uuid) id_perms['last_modified'] = datetime.datetime.utcnow().isoformat() self._update_prop(bch, obj_uuid, 'id_perms', {'id_perms': id_perms}) # end update_last_modified diff --git a/src/config/api-server/vnc_cfg_types.py b/src/config/api-server/vnc_cfg_types.py index 4298ec4480e..ec6d8e2de2b 100644 --- a/src/config/api-server/vnc_cfg_types.py +++ b/src/config/api-server/vnc_cfg_types.py @@ -766,17 +766,18 @@ def post_dbe_delete(cls, id, obj_dict, db_conn): ri_uuid = db_conn.fq_name_to_uuid( 'routing-instance', ri_fq_name) - backref_fields = list(RoutingInstance.backref_fields) + backref_fields = RoutingInstance.backref_fields + children_fields = RoutingInstance.children_fields ok, result = db_conn.dbe_read( obj_type='routing-instance', obj_ids={'uuid': ri_uuid}, - obj_fields=backref_fields) + obj_fields=backref_fields|children_fields) if not ok: return ok, result ri_obj_dict = result + backref_field_types = RoutingInstance.backref_field_types for backref_field in backref_fields: - backref_field_types = RoutingInstance.backref_field_types obj_type = backref_field_types[backref_field][0] def drop_ref(obj_uuid): # drop ref from ref_uuid to ri_uuid @@ -787,6 +788,12 @@ def drop_ref(obj_uuid): for backref in ri_obj_dict.get(backref_field, []): drop_ref(backref['uuid']) + children_field_types = RoutingInstance.children_field_types + for child_field in children_fields: + obj_type = children_field_types[child_field][0] + for child in ri_obj_dict.get(child_field, []): + cls.server.internal_request_delete(obj_type, child['uuid']) + cls.server.internal_request_delete('routing-instance', ri_uuid) return True, "" diff --git a/src/config/schema-transformer/config_db.py b/src/config/schema-transformer/config_db.py index a42cc1ab9ba..d2c87c28b04 100644 --- a/src/config/schema-transformer/config_db.py +++ b/src/config/schema-transformer/config_db.py @@ -2068,6 +2068,14 @@ def delete_obj(self): if rp: rp.delete_routing_instance(self.name) self.routing_policys = {} + bgpaas_server_name = self.obj.get_fq_name_str() + ':bgpaas-server' + bgpaas_server = BgpRouterST.get(bgpaas_server_name) + if bgpaas_server: + try: + self._vnc_lib.bgp_router_delete(id=bgpaas_server.obj.uuid) + except NoIdError: + pass + BgpRouterST.delete(bgpaas_server_name) try: DBBaseST._vnc_lib.routing_instance_delete(id=self.obj.uuid) except NoIdError: @@ -2647,6 +2655,7 @@ def evaluate(self): except NoIdError: pass self._vnc_lib.bgp_router_delete(id=self.obj.uuid) + BgpRouterST.delete(self.name) elif ret: self._vnc_lib.bgp_router_update(self.obj) elif self.router_type != 'bgpaas-server':