Skip to content

Commit

Permalink
Avoid reading bgp-router object after creating it
Browse files Browse the repository at this point in the history
We need to read the object only if creation failed with RefsExistError
and we need to update md5 params. Otherwise, we don't need to read
the object.

Change-Id: I3bf2d2ab139f449513c43619837116dcd233ee60
Partial-Bug: 1734809
(cherry picked from commit c4b4dae)
  • Loading branch information
Sachin Bansal committed Dec 28, 2017
1 parent e73ca99 commit 822a4dd
Showing 1 changed file with 23 additions and 58 deletions.
81 changes: 23 additions & 58 deletions src/config/utils/provision_bgp.py
Expand Up @@ -85,74 +85,40 @@ def add_bgp_router(self, router_type, router_name, router_ip,

bgp_router_obj = BgpRouter(router_name, rt_inst_obj,
bgp_router_parameters=router_params)

bgp_router_fq_name = bgp_router_obj.get_fq_name()
try:
cur_id = vnc_lib.bgp_router_create(bgp_router_obj)
cur_obj = vnc_lib.bgp_router_read(id=cur_id)

# full-mesh with existing bgp routers
fq_name = rt_inst_obj.get_fq_name()
bgp_router_list = vnc_lib.bgp_routers_list(parent_fq_name=fq_name)
bgp_router_ids = [bgp_dict['uuid']
for bgp_dict in bgp_router_list['bgp-routers']]
bgp_router_objs = []
for id in bgp_router_ids:
bgp_router_objs.append(vnc_lib.bgp_router_read(id=id))

for other_obj in bgp_router_objs:
if other_obj.uuid == cur_id:
continue
cur_obj.add_bgp_router(other_obj, bgp_peering_attrs)

except RefsExistError:
fq_name=bgp_router_obj.get_fq_name()
cur_obj = vnc_lib.bgp_router_read(fq_name=fq_name)
cur_id = cur_obj.uuid
print ("BGP Router " + pformat(fq_name) +
" already exists with uuid " + cur_id)

if md5:
md5 = {'key_items': [ { 'key': md5 ,"key_id":0 } ], "key_type":"md5"}
bgp_router_names = [bgp_dict['fq_name']
for bgp_dict in bgp_router_list['bgp-routers']]
bgp_router_obj.set_bgp_router_list(bgp_router_names, [bgp_peering_attrs]*len(bgp_router_names))
vnc_lib.bgp_router_create(bgp_router_obj)
except RefsExistError as e:
print ("BGP Router " + pformat(bgp_router_fq_name) +
" already exists " + str(e))

if md5 or local_asn:
cur_obj = vnc_lib.bgp_router_read(fq_name=bgp_router_fq_name)
rparams = cur_obj.bgp_router_parameters
rparams.set_auth_data(md5)
if md5:
md5 = {'key_items': [{'key': md5, "key_id": 0}],
"key_type": "md5"}
rparams.set_auth_data(md5)
if local_asn:
local_asn = int(local_asn)
if local_asn <= 0 or local_asn > 65535:
raise argparse.ArgumentTypeError(
"local_asn %s must be in range (1..65535)" % local_asn)
rparams.set_local_autonomous_system(local_asn)
cur_obj.set_bgp_router_parameters(rparams)

if local_asn:
local_asn = int(local_asn)
if local_asn <= 0 or local_asn > 65535:
raise argparse.ArgumentTypeError("local_asn %s must be in range (1..65535)" % local_asn)
rparams = cur_obj.bgp_router_parameters
rparams.set_local_autonomous_system(local_asn)
cur_obj.set_bgp_router_parameters(rparams)

vnc_lib.bgp_router_update(cur_obj)
vnc_lib.bgp_router_update(cur_obj)
# end add_bgp_router

def del_bgp_router(self, router_name):
vnc_lib = self._vnc_lib

rt_inst_obj = self._get_rt_inst_obj()

fq_name = rt_inst_obj.get_fq_name() + [router_name]
cur_obj = vnc_lib.bgp_router_read(fq_name=fq_name)

# remove full-mesh with existing bgp routers
fq_name = rt_inst_obj.get_fq_name()
bgp_router_list = vnc_lib.bgp_routers_list(parent_fq_name=fq_name)
bgp_router_ids = [bgp_dict['uuid']
for bgp_dict in bgp_router_list['bgp-routers']]
bgp_router_objs = []
for id in bgp_router_ids:
bgp_router_objs.append(vnc_lib.bgp_router_read(id=id))

for other_obj in bgp_router_objs:
if other_obj.uuid == cur_obj.uuid:
# our refs will be dropped on delete further down
continue

other_obj.del_bgp_router(cur_obj)

vnc_lib.bgp_router_delete(id=cur_obj.uuid)
self._vnc_lib.bgp_router_delete(fq_name=fq_name)
# end del_bgp_router

def add_route_target(self, rt_inst_fq_name, router_asn,
Expand Down Expand Up @@ -191,7 +157,6 @@ def del_route_target(self, rt_inst_fq_name, router_asn,
else:
net_obj.set_route_target_list(None)
vnc_lib.virtual_network_update(net_obj)

# end del_route_target

# end class BgpProvisioner

0 comments on commit 822a4dd

Please sign in to comment.