class BgpProvisioner(object): def __init__(self, user, password, tenant, api_server_ip, api_server_port, api_server_use_ssl=False, use_admin_api=False, sub_cluster_name=None, peer_list=None): self._admin_user = user self._admin_password = password self._admin_tenant_name = tenant self._api_server_ip = api_server_ip self._api_server_port = api_server_port self._api_server_use_ssl = api_server_use_ssl self._sub_cluster_name = sub_cluster_name self._peer_list = peer_list self._vnc_lib = VncApiAdmin( use_admin_api, self._admin_user, self._admin_password, self._admin_tenant_name, self._api_server_ip, self._api_server_port, '/', api_server_use_ssl=self._api_server_use_ssl) # end __init__ def _get_rt_inst_obj(self): vnc_lib = self._vnc_lib # TODO pick fqname hardcode from common rt_inst_obj = vnc_lib.routing_instance_read(fq_name=[ 'default-domain', 'default-project', 'ip-fabric', '__default__' ]) return rt_inst_obj # end _get_rt_inst_obj def add_bgp_router(self, router_type, router_name, router_ip, router_asn, address_families=[], md5=None, local_asn=None, port=179): if not address_families: address_families = [ 'route-target', 'inet-vpn', 'e-vpn', 'erm-vpn', 'inet6-vpn' ] if router_type != 'control-node': address_families.remove('erm-vpn') if router_type != 'control-node': if 'erm-vpn' in address_families: raise RuntimeError("Only contrail bgp routers can support " "family 'erm-vpn'") bgp_addr_fams = AddressFamilies(address_families) bgp_sess_attrs = [BgpSessionAttributes(address_families=bgp_addr_fams)] bgp_sessions = [BgpSession(attributes=bgp_sess_attrs)] bgp_peering_attrs = BgpPeeringAttributes(session=bgp_sessions) rt_inst_obj = self._get_rt_inst_obj() vnc_lib = self._vnc_lib if router_type == 'control-node': vendor = 'contrail' elif router_type == 'router': vendor = 'mx' else: vendor = 'unknown' router_params = BgpRouterParams(router_type=router_type, vendor=vendor, autonomous_system=int(router_asn), identifier=get_ip(router_ip), address=get_ip(router_ip), port=port, address_families=bgp_addr_fams) if md5: md5 = {'key_items': [{'key': md5, "key_id": 0}], "key_type": "md5"} router_params.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) router_params.set_local_autonomous_system(local_asn) bgp_router_obj = BgpRouter(router_name, rt_inst_obj, bgp_router_parameters=router_params) bgp_router_fq_name = bgp_router_obj.get_fq_name() peer_list = self._peer_list fqname_peer_list = None fqname_peer_set = None if peer_list is not None: fqname_peer_list = [] fqname_peer_set = set() for peer in peer_list: peer_router_obj = BgpRouter(peer, rt_inst_obj) try: vnc_lib.bgp_router_create(peer_router_obj) except RefsExistError as e: pass finally: fqname_peer_list.append(peer_router_obj.get_fq_name()) fqname_peer_set.add(tuple(peer_router_obj.get_fq_name())) try: # full-mesh with existing bgp routers if self._sub_cluster_name: sub_cluster_obj = SubCluster(self._sub_cluster_name) try: sub_cluster_obj = self._vnc_lib.sub_cluster_read( fq_name=sub_cluster_obj.get_fq_name()) except NoIdError: raise RuntimeError("Sub cluster to be provisioned first") bgp_router_obj.add_sub_cluster(sub_cluster_obj) if fqname_peer_list: bgp_router_obj.set_bgp_router_list(fqname_peer_list, [bgp_peering_attrs] * len(fqname_peer_list)) vnc_lib.bgp_router_create(bgp_router_obj) except RefsExistError as e: print("BGP Router " + pformat(bgp_router_fq_name) + " already exists " + str(e)) cur_obj = vnc_lib.bgp_router_read( fq_name=bgp_router_fq_name, fields=['global_system_config_back_refs']) changed = False if cur_obj.bgp_router_parameters != router_params: cur_obj.set_bgp_router_parameters(router_params) changed = True cur_bgp_router_set = { tuple(x['to']) for x in cur_obj.get_bgp_router_refs() or [] } if peer_list is not None and fqname_peer_set != cur_bgp_router_set: cur_obj.set_bgp_router_list(fqname_peer_list, [bgp_peering_attrs] * len(fqname_peer_list)) changed = True if self._sub_cluster_name and not cur_obj.get_sub_cluster_refs(): cur_obj.add_sub_cluster(sub_cluster_obj) changed = True if changed: vnc_lib.bgp_router_update(cur_obj) bgp_router_obj = cur_obj if (router_type == 'control-node' and not bgp_router_obj.get_global_system_config_back_refs()): gsc_obj = vnc_lib.global_system_config_read( fq_name=['default-global-system-config']) gsc_obj.add_bgp_router(bgp_router_obj) vnc_lib.ref_relax_for_delete(gsc_obj.uuid, bgp_router_obj.uuid) vnc_lib.global_system_config_update(gsc_obj) # end add_bgp_router def del_bgp_router(self, router_name): rt_inst_obj = self._get_rt_inst_obj() fq_name = rt_inst_obj.get_fq_name() + [router_name] 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, route_target_number): vnc_lib = self._vnc_lib rtgt_val = "target:%s:%s" % (router_asn, route_target_number) net_obj = vnc_lib.virtual_network_read(fq_name=rt_inst_fq_name[:-1]) route_targets = net_obj.get_route_target_list() if route_targets: route_targets.add_route_target(rtgt_val) else: route_targets = RouteTargetList([rtgt_val]) net_obj.set_route_target_list(route_targets) vnc_lib.virtual_network_update(net_obj) # end add_route_target def del_route_target(self, rt_inst_fq_name, router_asn, route_target_number): vnc_lib = self._vnc_lib rtgt_val = "target:%s:%s" % (router_asn, route_target_number) net_obj = vnc_lib.virtual_network_read(fq_name=rt_inst_fq_name[:-1]) if rtgt_val not in net_obj.get_route_target_list().get_route_target(): print("%s not configured for VN %s" % (rtgt_val, rt_inst_fq_name[:-1])) return route_targets = net_obj.get_route_target_list() route_targets.delete_route_target(rtgt_val) if route_targets.get_route_target(): net_obj.set_route_target_list(route_targets) else: net_obj.set_route_target_list(None) vnc_lib.virtual_network_update(net_obj)
class BgpProvisioner(object): def __init__(self, user, password, tenant, api_server_ip, api_server_port, api_server_use_ssl=False, use_admin_api=False): self._admin_user = user self._admin_password = password self._admin_tenant_name = tenant self._api_server_ip = api_server_ip self._api_server_port = api_server_port self._api_server_use_ssl = api_server_use_ssl self._vnc_lib = VncApiAdmin( use_admin_api, self._admin_user, self._admin_password, self._admin_tenant_name, self._api_server_ip, self._api_server_port, '/', api_server_use_ssl=self._api_server_use_ssl) # end __init__ def _get_rt_inst_obj(self): vnc_lib = self._vnc_lib # TODO pick fqname hardcode from common rt_inst_obj = vnc_lib.routing_instance_read(fq_name=[ 'default-domain', 'default-project', 'ip-fabric', '__default__' ]) return rt_inst_obj # end _get_rt_inst_obj def add_bgp_router(self, router_type, router_name, router_ip, router_asn, address_families=[], md5=None, local_asn=None, port=179): if not address_families: address_families = [ 'route-target', 'inet-vpn', 'e-vpn', 'erm-vpn', 'inet6-vpn' ] if router_type != 'control-node': address_families.remove('erm-vpn') if router_type != 'control-node': if 'erm-vpn' in address_families: raise RuntimeError("Only contrail bgp routers can support " "family 'erm-vpn'") bgp_addr_fams = AddressFamilies(address_families) bgp_sess_attrs = [BgpSessionAttributes(address_families=bgp_addr_fams)] bgp_sessions = [BgpSession(attributes=bgp_sess_attrs)] bgp_peering_attrs = BgpPeeringAttributes(session=bgp_sessions) rt_inst_obj = self._get_rt_inst_obj() vnc_lib = self._vnc_lib if router_type == 'control-node': vendor = 'contrail' elif router_type == 'router': vendor = 'mx' else: vendor = 'unknown' router_params = BgpRouterParams(router_type=router_type, vendor=vendor, autonomous_system=int(router_asn), identifier=get_ip(router_ip), address=get_ip(router_ip), port=port, address_families=bgp_addr_fams) 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: # 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_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: cur_obj = vnc_lib.bgp_router_read(fq_name=bgp_router_fq_name) md5 = {'key_items': [{'key': md5, "key_id": 0}], "key_type": "md5"} rparams = cur_obj.bgp_router_parameters rparams.set_auth_data(md5) cur_obj.set_bgp_router_parameters(rparams) vnc_lib.bgp_router_update(cur_obj) if local_asn: cur_obj = vnc_lib.bgp_router_read(fq_name=bgp_router_fq_name) 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) # end add_bgp_router def del_bgp_router(self, router_name): rt_inst_obj = self._get_rt_inst_obj() fq_name = rt_inst_obj.get_fq_name() + [router_name] 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, route_target_number): vnc_lib = self._vnc_lib rtgt_val = "target:%s:%s" % (router_asn, route_target_number) net_obj = vnc_lib.virtual_network_read(fq_name=rt_inst_fq_name[:-1]) route_targets = net_obj.get_route_target_list() if route_targets: route_targets.add_route_target(rtgt_val) else: route_targets = RouteTargetList([rtgt_val]) net_obj.set_route_target_list(route_targets) vnc_lib.virtual_network_update(net_obj) # end add_route_target def del_route_target(self, rt_inst_fq_name, router_asn, route_target_number): vnc_lib = self._vnc_lib rtgt_val = "target:%s:%s" % (router_asn, route_target_number) net_obj = vnc_lib.virtual_network_read(fq_name=rt_inst_fq_name[:-1]) if rtgt_val not in net_obj.get_route_target_list().get_route_target(): print "%s not configured for VN %s" % (rtgt_val, rt_inst_fq_name[:-1]) return route_targets = net_obj.get_route_target_list() route_targets.delete_route_target(rtgt_val) if route_targets.get_route_target(): net_obj.set_route_target_list(route_targets) else: net_obj.set_route_target_list(None) vnc_lib.virtual_network_update(net_obj)
class BgpProvisioner(object): def __init__(self, user, password, tenant, api_server_ip, api_server_port, api_server_use_ssl=False, use_admin_api=False, sub_cluster_name=None, peer_list=None): self._admin_user = user self._admin_password = password self._admin_tenant_name = tenant self._api_server_ip = api_server_ip self._api_server_port = api_server_port self._api_server_use_ssl = api_server_use_ssl self._sub_cluster_name = sub_cluster_name self._peer_list = peer_list self._vnc_lib = VncApiAdmin( use_admin_api, self._admin_user, self._admin_password, self._admin_tenant_name, self._api_server_ip, self._api_server_port, '/', api_server_use_ssl=self._api_server_use_ssl) # end __init__ def _get_rt_inst_obj(self): vnc_lib = self._vnc_lib # TODO pick fqname hardcode from common rt_inst_obj = vnc_lib.routing_instance_read( fq_name=['default-domain', 'default-project', 'ip-fabric', '__default__']) return rt_inst_obj # end _get_rt_inst_obj def add_bgp_router(self, router_type, router_name, router_ip, router_asn, address_families=[], md5=None, local_asn=None, port=179): if not address_families: address_families = ['route-target', 'inet-vpn', 'e-vpn', 'erm-vpn', 'inet6-vpn'] if router_type != 'control-node': address_families.remove('erm-vpn') if router_type != 'control-node': if 'erm-vpn' in address_families: raise RuntimeError("Only contrail bgp routers can support " "family 'erm-vpn'") bgp_addr_fams = AddressFamilies(address_families) bgp_sess_attrs = [ BgpSessionAttributes(address_families=bgp_addr_fams)] bgp_sessions = [BgpSession(attributes=bgp_sess_attrs)] bgp_peering_attrs = BgpPeeringAttributes(session=bgp_sessions) rt_inst_obj = self._get_rt_inst_obj() vnc_lib = self._vnc_lib if router_type == 'control-node': vendor = 'contrail' elif router_type == 'router': vendor = 'mx' else: vendor = 'unknown' router_params = BgpRouterParams(router_type=router_type, vendor=vendor, autonomous_system=int(router_asn), identifier=get_ip(router_ip), address=get_ip(router_ip), port=port, address_families=bgp_addr_fams) if md5: md5 = {'key_items': [ { 'key': md5 ,"key_id":0 } ], "key_type":"md5"} router_params.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) router_params.set_local_autonomous_system(local_asn) bgp_router_obj = BgpRouter(router_name, rt_inst_obj, bgp_router_parameters=router_params) bgp_router_fq_name = bgp_router_obj.get_fq_name() peer_list = self._peer_list fqname_peer_list = None fqname_peer_set = None if peer_list is not None: fqname_peer_list = [] fqname_peer_set = set() for peer in peer_list: peer_router_obj = BgpRouter(peer, rt_inst_obj) try: vnc_lib.bgp_router_create(peer_router_obj) except RefsExistError as e: pass finally: fqname_peer_list.append(peer_router_obj.get_fq_name()) fqname_peer_set.add(tuple(peer_router_obj.get_fq_name())) try: # full-mesh with existing bgp routers if self._sub_cluster_name: sub_cluster_obj = SubCluster(self._sub_cluster_name) try: sub_cluster_obj = self._vnc_lib.sub_cluster_read( fq_name=sub_cluster_obj.get_fq_name()) except NoIdError: raise RuntimeError("Sub cluster to be provisioned first") bgp_router_obj.add_sub_cluster(sub_cluster_obj) if fqname_peer_list: bgp_router_obj.set_bgp_router_list(fqname_peer_list, [bgp_peering_attrs]*len(fqname_peer_list)) vnc_lib.bgp_router_create(bgp_router_obj) except RefsExistError as e: print ("BGP Router " + pformat(bgp_router_fq_name) + " already exists " + str(e)) cur_obj = vnc_lib.bgp_router_read( fq_name=bgp_router_fq_name, fields=['global_system_config_back_refs']) changed = False if cur_obj.bgp_router_parameters != router_params: cur_obj.set_bgp_router_parameters(router_params) changed = True cur_bgp_router_set = {tuple(x['to']) for x in cur_obj.get_bgp_router_refs() or []} if peer_list is not None and fqname_peer_set != cur_bgp_router_set: cur_obj.set_bgp_router_list(fqname_peer_list, [bgp_peering_attrs]*len(fqname_peer_list)) changed = True if self._sub_cluster_name and not cur_obj.get_sub_cluster_refs(): cur_obj.add_sub_cluster(sub_cluster_obj) changed = True if changed: vnc_lib.bgp_router_update(cur_obj) bgp_router_obj = cur_obj if (router_type == 'control-node' and not bgp_router_obj.get_global_system_config_back_refs()): gsc_obj = vnc_lib.global_system_config_read( fq_name=['default-global-system-config']) gsc_obj.add_bgp_router(bgp_router_obj) vnc_lib.ref_relax_for_delete(gsc_obj.uuid, bgp_router_obj.uuid) vnc_lib.global_system_config_update(gsc_obj) # end add_bgp_router def del_bgp_router(self, router_name): rt_inst_obj = self._get_rt_inst_obj() fq_name = rt_inst_obj.get_fq_name() + [router_name] 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, route_target_number): vnc_lib = self._vnc_lib rtgt_val = "target:%s:%s" % (router_asn, route_target_number) net_obj = vnc_lib.virtual_network_read(fq_name=rt_inst_fq_name[:-1]) route_targets = net_obj.get_route_target_list() if route_targets: route_targets.add_route_target(rtgt_val) else: route_targets = RouteTargetList([rtgt_val]) net_obj.set_route_target_list(route_targets) vnc_lib.virtual_network_update(net_obj) # end add_route_target def del_route_target(self, rt_inst_fq_name, router_asn, route_target_number): vnc_lib = self._vnc_lib rtgt_val = "target:%s:%s" % (router_asn, route_target_number) net_obj = vnc_lib.virtual_network_read(fq_name=rt_inst_fq_name[:-1]) if rtgt_val not in net_obj.get_route_target_list().get_route_target(): print "%s not configured for VN %s" % (rtgt_val, rt_inst_fq_name[:-1]) return route_targets = net_obj.get_route_target_list() route_targets.delete_route_target(rtgt_val) if route_targets.get_route_target(): net_obj.set_route_target_list(route_targets) else: net_obj.set_route_target_list(None) vnc_lib.virtual_network_update(net_obj)
class VncProvisioner(object): def __init__(self, args_str=None): self._args = None if not args_str: args_str = ' '.join(sys.argv[1:]) self._parse_args(args_str) self._vnc_lib = VncApiAdmin(self._args.use_admin_api, self._args.admin_user, self._args.admin_password, self._args.admin_tenant_name, self._args.api_server_ip, self._args.api_server_port, '/') vnc_lib = self._vnc_lib if self._args.op is None or self._args.op == 'add_basic': router_external = False if self._args.public_vrf_test is not None and self._args.public_vrf_test == 'True': router_external = True vxlan = None if self._args.vxlan is not None: vxlan = self._args.vxlan self.add_physical_router_config(router_external, vxlan) elif self._args.op == 'delete_basic': print 'calling delete_physical_router_config\n' self.delete_physical_router_config() elif self._args.op == 'delete_fip_test': print 'calling delete_physical_router_config: fip_test\n' self.delete_bms_config() elif self._args.op == 'fip_test': print 'calling add_physical_router_config: fip_test\n' self.add_bms_config() # end __init__ def _get_ip_fabric_ri_obj(self): # TODO pick fqname hardcode from common rt_inst_obj = self._vnc_lib.routing_instance_read(fq_name=[ 'default-domain', 'default-project', 'ip-fabric', '__default__' ]) return rt_inst_obj # end _get_ip_fabric_ri_obj def create_router(self, name, mgmt_ip, password): bgp_router = BgpRouter(name, parent_obj=self._get_ip_fabric_ri_obj()) params = BgpRouterParams() params.address = mgmt_ip params.address_families = AddressFamilies( ['route-target', 'inet-vpn', 'e-vpn', 'inet6-vpn']) params.autonomous_system = 64512 params.vendor = 'mx' params.identifier = mgmt_ip bgp_router.set_bgp_router_parameters(params) self._vnc_lib.bgp_router_create(bgp_router) pr = PhysicalRouter(name) pr.physical_router_management_ip = mgmt_ip pr.physical_router_vendor_name = 'juniper' pr.physical_router_product_name = 'mx' pr.physical_router_vnc_managed = True uc = UserCredentials('root', password) pr.set_physical_router_user_credentials(uc) pr.set_bgp_router(bgp_router) pr_id = self._vnc_lib.physical_router_create(pr) return bgp_router, pr def add_physical_router_config(self, router_external=False, vxlan=None): ipam_obj = None try: ipam_obj = self._vnc_lib.network_ipam_read( fq_name=[u'default-domain', u'default-project', u'ipam1']) except NoIdError: pass if ipam_obj is None: ipam_obj = NetworkIpam('ipam1') self._vnc_lib.network_ipam_create(ipam_obj) vn1_obj = None try: vn1_obj = self._vnc_lib.virtual_network_read( fq_name=[u'default-domain', u'default-project', u'vn1']) except NoIdError: pass if vn1_obj is None: vn1_obj = VirtualNetwork('vn1') if router_external == True: vn1_obj.set_router_external(True) if vxlan is not None: vn1_obj_properties = VirtualNetworkType() vn1_obj_properties.set_vxlan_network_identifier(int(vxlan)) vn1_obj.set_virtual_network_properties(vn1_obj_properties) vn1_obj.add_network_ipam( ipam_obj, VnSubnetsType([IpamSubnetType(SubnetType("10.0.0.0", 24))])) vn1_uuid = self._vnc_lib.virtual_network_create(vn1_obj) pr = None try: pr = self._vnc_lib.physical_router_read( fq_name=[u'default-global-system-config', u'a7-mx-80']) except NoIdError: pass if pr is None: bgp_router, pr = self.create_router('a7-mx-80', '10.84.63.133', 'abc123') pr.set_virtual_network(vn1_obj) self._vnc_lib.physical_router_update(pr) pi = None try: pi = self._vnc_lib.physical_interface_read(fq_name=[ u'default-global-system-config', u'a7-mx-80', u'ge-1/0/5' ]) except NoIdError: pass if pi is None: pi = PhysicalInterface('ge-1/0/5', parent_obj=pr) pi_id = self._vnc_lib.physical_interface_create(pi) fq_name = ['default-domain', 'default-project', 'vmi1'] default_project = self._vnc_lib.project_read( fq_name=[u'default-domain', u'default-project']) vmi = None try: vmi = self._vnc_lib.virtual_machine_interface_read( fq_name=[u'default-domain', u'default-project', u'vmi1']) except NoIdError: pass if vmi is None: vmi = VirtualMachineInterface(fq_name=fq_name, parent_type='project') vmi.set_virtual_network(vn1_obj) self._vnc_lib.virtual_machine_interface_create(vmi) li = None try: li = self._vnc_lib.logical_interface_read(fq_name=[ u'default-global-system-config', u'a7-mx-80', u'ge-1/0/5', u'ge-1/0/5.0' ]) except NoIdError: pass if li is None: li = LogicalInterface('ge-1/0/5.0', parent_obj=pi) li.vlan_tag = 100 li.set_virtual_machine_interface(vmi) li_id = self._vnc_lib.logical_interface_create(li) # end def delete_physical_router_config(self): print 'delete_physical_router_config\n' li = None try: li = self._vnc_lib.logical_interface_read(fq_name=[ u'default-global-system-config', u'a7-mx-80', u'ge-1/0/5', u'ge-1/0/5.0' ]) except NoIdError: pass if li is not None: self._vnc_lib.logical_interface_delete(li.get_fq_name()) vmi = None try: vmi = self._vnc_lib.virtual_machine_interface_read( fq_name=[u'default-domain', u'default-project', u'vmi1']) except NoIdError: pass if vmi is not None: self._vnc_lib.virtual_machine_interface_delete(vmi.get_fq_name()) pi = None try: pi = self._vnc_lib.physical_interface_read(fq_name=[ u'default-global-system-config', u'a7-mx-80', u'ge-1/0/5' ]) except NoIdError: pass if pi is not None: pi_id = self._vnc_lib.physical_interface_delete(pi.get_fq_name()) pr = None try: pr = self._vnc_lib.physical_router_read( fq_name=[u'default-global-system-config', u'a7-mx-80']) except NoIdError: pass if pr is not None: self._vnc_lib.physical_router_delete(pr.get_fq_name()) br = None try: br = self._vnc_lib.bgp_router_read(fq_name=[ u'default-domain', u'default-project', u'ip-fabric', u'__default__', u'a7-mx-80' ]) except NoIdError: pass if br is not None: self._vnc_lib.bgp_router_delete(br.get_fq_name()) vn1_obj = None try: vn1_obj = self._vnc_lib.virtual_network_read( fq_name=[u'default-domain', u'default-project', u'vn1']) except NoIdError: pass if vn1_obj is not None: vn1_uuid = self._vnc_lib.virtual_network_delete( vn1_obj.get_fq_name()) ipam_obj = None try: ipam_obj = self._vnc_lib.network_ipam_read( fq_name=[u'default-domain', u'default-project', u'ipam1']) except NoIdError: pass if ipam_obj is not None: self._vnc_lib.network_ipam_delete(ipam_obj.get_fq_name()) # end #python provision_physical_router.py --api_server_ip 127.0.0.1 --api_server_port 8082 --admin_user admin --admin_password c0ntrail123 --admin_tenant_name default-domain --op delete_fip_test def delete_bms_config(self): pr = None try: pr = self._vnc_lib.physical_router_read( fq_name=[u'default-global-system-config', u'a2-mx-80']) except NoIdError: pass if pr is not None: self._vnc_lib.physical_router_delete(pr.get_fq_name()) br = None try: br = self._vnc_lib.bgp_router_read(fq_name=[ u'default-domain', u'default-project', u'ip-fabric', u'__default__', u'a2-mx-80' ]) except NoIdError: pass if br is not None: self._vnc_lib.bgp_router_delete(br.get_fq_name()) #TOR li = None try: li = self._vnc_lib.logical_interface_read(fq_name=[ u'default-global-system-config', u'qfx-1', u'xe-0/0/0', u'xe-0/0/0.0' ]) except NoIdError: pass if li is not None: li_id = self._vnc_lib.logical_interface_delete(li.get_fq_name()) ip_obj1 = None try: ip_obj1 = self._vnc_lib.instance_ip_read(fq_name=[u'inst-ip-1']) except NoIdError: pass if ip_obj1 is not None: self._vnc_lib.instance_ip_delete(ip_obj1.get_fq_name()) fip_obj = None try: fip_obj = self._vnc_lib.floating_ip_read(fq_name=[ u'default-domain', u'default-project', u'vn-public', u'vn_public_fip_pool', u'fip-1' ]) except NoIdError: pass if fip_obj is not None: self._vnc_lib.floating_ip_delete(fip_obj.get_fq_name()) fip_pool = None try: fip_pool = self._vnc_lib.floating_ip_pool_read(fq_name=[ u'default-domain', u'default-project', u'vn-public', u'vn_public_fip_pool' ]) except NoIdError: pass if fip_pool is not None: self._vnc_lib.floating_ip_pool_delete(fip_pool.get_fq_name()) pi_tor = None try: pi_tor = self._vnc_lib.physical_interface_read(fq_name=[ u'default-global-system-config', u'qfx-1', u'xe-0/0/0' ]) except NoIdError: pass if pi_tor is not None: pi_tor_id = self._vnc_lib.physical_interface_delete( pi_tor.get_fq_name()) vmi = None try: vmi = self._vnc_lib.virtual_machine_interface_read( fq_name=[u'default-domain', u'default-project', u'vmi1']) except NoIdError: pass if vmi is not None: self._vnc_lib.virtual_machine_interface_delete(vmi.get_fq_name()) pr_tor = None try: pr_tor = self._vnc_lib.physical_router_read( fq_name=[u'default-global-system-config', u'qfx-1']) except NoIdError: pass if pr_tor is not None: self._vnc_lib.physical_router_delete(pr_tor.get_fq_name()) br = None try: br = self._vnc_lib.bgp_router_read(fq_name=[ u'default-domain', u'default-project', u'ip-fabric', u'__default__', u'qfx-1' ]) except NoIdError: pass if br is not None: self._vnc_lib.bgp_router_delete(br.get_fq_name()) vn2_obj = None try: vn2_obj = self._vnc_lib.virtual_network_read( fq_name=[u'default-domain', u'default-project', u'vn-public']) except NoIdError: pass if vn2_obj is not None: self._vnc_lib.virtual_network_delete(vn2_obj.get_fq_name()) ipam2_obj = None try: ipam2_obj = self._vnc_lib.network_ipam_read( fq_name=[u'default-domain', u'default-project', u'ipam2']) except NoIdError: pass if ipam2_obj is not None: self._vnc_lib.network_ipam_delete(ipam2_obj.get_fq_name()) vn1_obj = None try: vn1_obj = self._vnc_lib.virtual_network_read( fq_name=[u'default-domain', u'default-project', u'vn-private']) except NoIdError: pass if vn1_obj is not None: vn1_uuid = self._vnc_lib.virtual_network_delete( vn1_obj.get_fq_name()) ipam_obj = None try: ipam_obj = self._vnc_lib.network_ipam_read( fq_name=[u'default-domain', u'default-project', u'ipam1']) except NoIdError: pass if ipam_obj is not None: self._vnc_lib.network_ipam_delete(ipam_obj.get_fq_name()) # end # python provision_physical_router.py --api_server_ip 127.0.0.1 --api_server_port 8082 --admin_user admin --admin_password c0ntrail123 --admin_tenant_name default-domain --op fip_test def add_bms_config(self): ipam_obj = None try: ipam_obj = self._vnc_lib.network_ipam_read( fq_name=[u'default-domain', u'default-project', u'ipam1']) except NoIdError: pass if ipam_obj is None: ipam_obj = NetworkIpam('ipam1') self._vnc_lib.network_ipam_create(ipam_obj) vn1_obj = None try: vn1_obj = self._vnc_lib.virtual_network_read( fq_name=[u'default-domain', u'default-project', u'vn-private']) except NoIdError: pass if vn1_obj is None: vn1_obj = VirtualNetwork('vn-private') vn1_obj.add_network_ipam( ipam_obj, VnSubnetsType([IpamSubnetType(SubnetType("10.0.0.0", 24))])) vn1_uuid = self._vnc_lib.virtual_network_create(vn1_obj) pr = None try: pr = self._vnc_lib.physical_router_read( fq_name=[u'default-global-system-config', u'a2-mx-80']) except NoIdError: pass if pr is None: bgp_router, pr = self.create_router('a2-mx-80', '10.84.7.253', 'abc123') pr.add_virtual_network(vn1_obj) junos_service_ports = JunosServicePorts() junos_service_ports.service_port.append("si-0/0/0") pr.set_physical_router_junos_service_ports(junos_service_ports) pr.physical_router_vendor_name = 'juniper' pr.physical_router_product_name = 'mx' pr.physical_router_vnc_managed = True self._vnc_lib.physical_router_update(pr) #TOR pr_tor = None try: pr_tor = self._vnc_lib.physical_router_read( fq_name=[u'default-global-system-config', u'qfx-1']) except NoIdError: pass if pr_tor is None: bgp_router2, pr_tor = self.create_router('qfx-1', '2.2.2.2', 'abc123') pr_tor.set_virtual_network(vn1_obj) pr_tor.physical_router_vendor_name = 'juniper' pr_tor.physical_router_product_name = 'qfx' pr_tor.physical_router_vnc_managed = False self._vnc_lib.physical_router_update(pr_tor) pi_tor = None try: pi_tor = self._vnc_lib.physical_interface_read(fq_name=[ u'default-global-system-config', u'qfx-1', u'xe-0/0/0' ]) except NoIdError: pass if pi_tor is None: pi_tor = PhysicalInterface('xe-0/0/0', parent_obj=pr_tor) pi_tor_id = self._vnc_lib.physical_interface_create(pi_tor) fq_name = ['default-domain', 'default-project', 'vmi1'] default_project = self._vnc_lib.project_read( fq_name=[u'default-domain', u'default-project']) vmi = None try: vmi = self._vnc_lib.virtual_machine_interface_read( fq_name=[u'default-domain', u'default-project', u'vmi1']) except NoIdError: pass if vmi is None: vmi = VirtualMachineInterface(fq_name=fq_name, parent_type='project') vmi.set_virtual_network(vn1_obj) self._vnc_lib.virtual_machine_interface_create(vmi) li = None try: li = self._vnc_lib.logical_interface_read(fq_name=[ u'default-global-system-config', u'qfx-1', u'xe-0/0/0', u'xe-0/0/0.0' ]) except NoIdError: pass if li is None: li = LogicalInterface('xe-0/0/0.0', parent_obj=pi_tor) li.set_virtual_machine_interface(vmi) li_id = self._vnc_lib.logical_interface_create(li) ip_obj1 = None try: ip_obj1 = self._vnc_lib.instance_ip_read(fq_name=[u'inst-ip-1']) except NoIdError: pass if ip_obj1 is None: ip_obj1 = InstanceIp(name='inst-ip-1') ip_obj1.set_virtual_machine_interface(vmi) ip_obj1.set_virtual_network(vn1_obj) ip_id1 = self._vnc_lib.instance_ip_create(ip_obj1) ip_obj1 = self._vnc_lib.instance_ip_read(id=ip_id1) ip_addr1 = ip_obj1.get_instance_ip_address() ipam2_obj = None try: ipam2_obj = self._vnc_lib.network_ipam_read( fq_name=[u'default-domain', u'default-project', u'ipam2']) except NoIdError: pass if ipam2_obj is None: ipam2_obj = NetworkIpam('ipam2') self._vnc_lib.network_ipam_create(ipam2_obj) vn2_obj = None try: vn2_obj = self._vnc_lib.virtual_network_read( fq_name=[u'default-domain', u'default-project', u'vn-public']) except NoIdError: pass if vn2_obj is None: vn2_obj = VirtualNetwork('vn-public') vn2_obj.set_router_external(True) vn2_obj.add_network_ipam( ipam_obj, VnSubnetsType([IpamSubnetType(SubnetType("192.168.7.0", 24))])) vn2_uuid = self._vnc_lib.virtual_network_create(vn2_obj) pr.add_virtual_network(vn2_obj) self._vnc_lib.physical_router_update(pr) fip_pool = None try: fip_pool = self._vnc_lib.floating_ip_pool_read(fq_name=[ u'default-domain', u'default-project', u'vn-public', u'vn_public_fip_pool' ]) except NoIdError: pass if fip_pool is None: fip_pool_name = 'vn_public_fip_pool' fip_pool = FloatingIpPool(fip_pool_name, vn2_obj) self._vnc_lib.floating_ip_pool_create(fip_pool) fip_obj = None try: fip_obj = self._vnc_lib.floating_ip_read(fq_name=[ u'default-domain', u'default-project', u'vn-public', u'vn_public_fip_pool', 'fip-1' ]) except NoIdError: pass if fip_obj is None: fip_obj = FloatingIp("fip-1", fip_pool) fip_obj.set_virtual_machine_interface(vmi) default_project = self._vnc_lib.project_read( fq_name=[u'default-domain', u'default-project']) fip_obj.set_project(default_project) fip_uuid = self._vnc_lib.floating_ip_create(fip_obj) # end def _parse_args(self, args_str): ''' Eg. python provision_physical_router.py --api_server_ip 127.0.0.1 --api_server_port 8082 ''' # Source any specified config/ini file # Turn off help, so we print all options in response to -h conf_parser = argparse.ArgumentParser(add_help=False) conf_parser.add_argument("-c", "--conf_file", help="Specify config file", metavar="FILE") args, remaining_argv = conf_parser.parse_known_args(args_str.split()) defaults = { #'public_vn_name': 'default-domain:' #'default-project:default-virtual-network', 'api_server_ip': '127.0.0.1', 'api_server_port': '8082', } ksopts = { 'admin_user': '******', 'admin_password': '******', 'admin_tenant_name': 'default-domain' } if args.conf_file: config = ConfigParser.SafeConfigParser() config.read([args.conf_file]) defaults.update(dict(config.items("DEFAULTS"))) if 'KEYSTONE' in config.sections(): ksopts.update(dict(config.items("KEYSTONE"))) # Override with CLI options # Don't surpress add_help here so it will handle -h parser = argparse.ArgumentParser( # Inherit options from config_parser parents=[conf_parser], # print script description with -h/--help description=__doc__, # Don't mess with format of description formatter_class=argparse.RawDescriptionHelpFormatter, ) defaults.update(ksopts) parser.set_defaults(**defaults) parser.add_argument("--api_server_port", help="Port of api server") parser.add_argument("--admin_user", help="Name of keystone admin user", required=True) parser.add_argument("--admin_password", help="Password of keystone admin user", required=True) parser.add_argument("--admin_tenant_name", help="Tenamt name for keystone admin user", required=True) parser.add_argument( "--op", help="operation (add_basic, delete_basic, fip_test)", required=True) parser.add_argument("--public_vrf_test", help="operation (False, True)", required=False) parser.add_argument("--vxlan", help="vxlan identifier", required=False) group = parser.add_mutually_exclusive_group(required=True) group.add_argument("--api_server_ip", help="IP address of api server") group.add_argument("--use_admin_api", default=False, help="Connect to local api-server on admin port", action="store_true") self._args = parser.parse_args(remaining_argv)
class VncProvisioner(object): def __init__(self, args_str=None): self._args = None if not args_str: args_str = ' '.join(sys.argv[1:]) self._parse_args(args_str) self._vnc_lib = VncApiAdmin(self._args.use_admin_api, self._args.admin_user, self._args.admin_password, self._args.admin_tenant_name, self._args.api_server_ip, self._args.api_server_port, '/') vnc_lib = self._vnc_lib if self._args.op is None or self._args.op == 'add_basic': router_external = False if self._args.public_vrf_test is not None and self._args.public_vrf_test == 'True': router_external = True vxlan = None if self._args.vxlan is not None: vxlan = self._args.vxlan self.add_physical_router_config(router_external, vxlan) elif self._args.op == 'delete_basic': print 'calling delete_physical_router_config\n' self.delete_physical_router_config() elif self._args.op == 'delete_fip_test': print 'calling delete_physical_router_config: fip_test\n' self.delete_bms_config() elif self._args.op == 'fip_test': print 'calling add_physical_router_config: fip_test\n' self.add_bms_config() # end __init__ def _get_ip_fabric_ri_obj(self): # TODO pick fqname hardcode from common rt_inst_obj = self._vnc_lib.routing_instance_read( fq_name=['default-domain', 'default-project', 'ip-fabric', '__default__']) return rt_inst_obj # end _get_ip_fabric_ri_obj def create_router(self, name, mgmt_ip, password): bgp_router = BgpRouter(name, parent_obj=self._get_ip_fabric_ri_obj()) params = BgpRouterParams() params.address = mgmt_ip params.address_families = AddressFamilies(['route-target', 'inet-vpn', 'e-vpn', 'inet6-vpn']) params.autonomous_system = 64512 params.vendor = 'mx' params.identifier = mgmt_ip bgp_router.set_bgp_router_parameters(params) self._vnc_lib.bgp_router_create(bgp_router) pr = PhysicalRouter(name) pr.physical_router_management_ip = mgmt_ip pr.physical_router_vendor_name = 'juniper' pr.physical_router_product_name = 'mx' pr.physical_router_vnc_managed = True uc = UserCredentials('root', password) pr.set_physical_router_user_credentials(uc) pr.set_bgp_router(bgp_router) pr_id = self._vnc_lib.physical_router_create(pr) return bgp_router, pr def add_physical_router_config(self, router_external = False, vxlan = None): ipam_obj = None try: ipam_obj = self._vnc_lib.network_ipam_read(fq_name=[u'default-domain', u'default-project', u'ipam1']) except NoIdError: pass if ipam_obj is None: ipam_obj = NetworkIpam('ipam1') self._vnc_lib.network_ipam_create(ipam_obj) vn1_obj = None try: vn1_obj = self._vnc_lib.virtual_network_read(fq_name=[u'default-domain', u'default-project', u'vn1']) except NoIdError: pass if vn1_obj is None: vn1_obj = VirtualNetwork('vn1') if router_external == True: vn1_obj.set_router_external(True) if vxlan is not None: vn1_obj_properties = VirtualNetworkType() vn1_obj_properties.set_vxlan_network_identifier(int(vxlan)) vn1_obj.set_virtual_network_properties(vn1_obj_properties) vn1_obj.add_network_ipam(ipam_obj, VnSubnetsType([IpamSubnetType(SubnetType("10.0.0.0", 24))])) vn1_uuid = self._vnc_lib.virtual_network_create(vn1_obj) pr = None try: pr = self._vnc_lib.physical_router_read(fq_name=[u'default-global-system-config', u'a7-mx-80']) except NoIdError: pass if pr is None: bgp_router, pr = self.create_router('a7-mx-80', '10.84.63.133', 'abc123') pr.set_virtual_network(vn1_obj) self._vnc_lib.physical_router_update(pr) pi = None try: pi = self._vnc_lib.physical_interface_read(fq_name=[u'default-global-system-config', u'a7-mx-80', u'ge-1/0/5']) except NoIdError: pass if pi is None: pi = PhysicalInterface('ge-1/0/5', parent_obj = pr) pi_id = self._vnc_lib.physical_interface_create(pi) fq_name = ['default-domain', 'default-project', 'vmi1'] default_project = self._vnc_lib.project_read(fq_name=[u'default-domain', u'default-project']) vmi = None try: vmi = self._vnc_lib.virtual_machine_interface_read(fq_name=[u'default-domain', u'default-project', u'vmi1']) except NoIdError: pass if vmi is None: vmi = VirtualMachineInterface(fq_name=fq_name, parent_type='project') vmi.set_virtual_network(vn1_obj) self._vnc_lib.virtual_machine_interface_create(vmi) li = None try: li = self._vnc_lib.logical_interface_read(fq_name=[u'default-global-system-config', u'a7-mx-80', u'ge-1/0/5', u'ge-1/0/5.0']) except NoIdError: pass if li is None: li = LogicalInterface('ge-1/0/5.0', parent_obj = pi) li.vlan_tag = 100 li.set_virtual_machine_interface(vmi) li_id = self._vnc_lib.logical_interface_create(li) # end def delete_physical_router_config(self): print 'delete_physical_router_config\n' li = None try: li = self._vnc_lib.logical_interface_read(fq_name=[u'default-global-system-config', u'a7-mx-80', u'ge-1/0/5', u'ge-1/0/5.0']) except NoIdError: pass if li is not None: self._vnc_lib.logical_interface_delete(li.get_fq_name()) vmi = None try: vmi = self._vnc_lib.virtual_machine_interface_read(fq_name=[u'default-domain', u'default-project', u'vmi1']) except NoIdError: pass if vmi is not None: self._vnc_lib.virtual_machine_interface_delete(vmi.get_fq_name()) pi = None try: pi = self._vnc_lib.physical_interface_read(fq_name=[u'default-global-system-config', u'a7-mx-80', u'ge-1/0/5']) except NoIdError: pass if pi is not None: pi_id = self._vnc_lib.physical_interface_delete(pi.get_fq_name()) pr = None try: pr = self._vnc_lib.physical_router_read(fq_name=[u'default-global-system-config', u'a7-mx-80']) except NoIdError: pass if pr is not None: self._vnc_lib.physical_router_delete(pr.get_fq_name()) br = None try: br = self._vnc_lib.bgp_router_read(fq_name=[u'default-domain', u'default-project', u'ip-fabric', u'__default__', u'a7-mx-80']) except NoIdError: pass if br is not None: self._vnc_lib.bgp_router_delete(br.get_fq_name()) vn1_obj = None try: vn1_obj = self._vnc_lib.virtual_network_read(fq_name=[u'default-domain', u'default-project', u'vn1']) except NoIdError: pass if vn1_obj is not None: vn1_uuid = self._vnc_lib.virtual_network_delete(vn1_obj.get_fq_name()) ipam_obj = None try: ipam_obj = self._vnc_lib.network_ipam_read(fq_name=[u'default-domain', u'default-project', u'ipam1']) except NoIdError: pass if ipam_obj is not None: self._vnc_lib.network_ipam_delete(ipam_obj.get_fq_name()) # end #python provision_physical_router.py --api_server_ip 127.0.0.1 --api_server_port 8082 --admin_user admin --admin_password c0ntrail123 --admin_tenant_name default-domain --op delete_fip_test def delete_bms_config(self): pr = None try: pr = self._vnc_lib.physical_router_read(fq_name=[u'default-global-system-config', u'a2-mx-80']) except NoIdError: pass if pr is not None: self._vnc_lib.physical_router_delete(pr.get_fq_name()) br = None try: br = self._vnc_lib.bgp_router_read(fq_name=[u'default-domain', u'default-project', u'ip-fabric', u'__default__', u'a2-mx-80']) except NoIdError: pass if br is not None: self._vnc_lib.bgp_router_delete(br.get_fq_name()) #TOR li = None try: li = self._vnc_lib.logical_interface_read(fq_name=[u'default-global-system-config', u'qfx-1', u'xe-0/0/0', u'xe-0/0/0.0']) except NoIdError: pass if li is not None: li_id = self._vnc_lib.logical_interface_delete(li.get_fq_name()) ip_obj1 = None try: ip_obj1 = self._vnc_lib.instance_ip_read(fq_name=[u'inst-ip-1']) except NoIdError: pass if ip_obj1 is not None: self._vnc_lib.instance_ip_delete(ip_obj1.get_fq_name()) fip_obj = None try: fip_obj = self._vnc_lib.floating_ip_read(fq_name=[u'default-domain', u'default-project', u'vn-public', u'vn_public_fip_pool', u'fip-1']) except NoIdError: pass if fip_obj is not None: self._vnc_lib.floating_ip_delete(fip_obj.get_fq_name()) fip_pool = None try: fip_pool = self._vnc_lib.floating_ip_pool_read(fq_name=[u'default-domain', u'default-project', u'vn-public', u'vn_public_fip_pool']) except NoIdError: pass if fip_pool is not None: self._vnc_lib.floating_ip_pool_delete(fip_pool.get_fq_name()) pi_tor = None try: pi_tor = self._vnc_lib.physical_interface_read(fq_name=[u'default-global-system-config', u'qfx-1', u'xe-0/0/0']) except NoIdError: pass if pi_tor is not None: pi_tor_id = self._vnc_lib.physical_interface_delete(pi_tor.get_fq_name()) vmi = None try: vmi = self._vnc_lib.virtual_machine_interface_read(fq_name=[u'default-domain', u'default-project', u'vmi1']) except NoIdError: pass if vmi is not None: self._vnc_lib.virtual_machine_interface_delete(vmi.get_fq_name()) pr_tor = None try: pr_tor = self._vnc_lib.physical_router_read(fq_name=[u'default-global-system-config', u'qfx-1']) except NoIdError: pass if pr_tor is not None: self._vnc_lib.physical_router_delete(pr_tor.get_fq_name()) br = None try: br = self._vnc_lib.bgp_router_read(fq_name=[u'default-domain', u'default-project', u'ip-fabric', u'__default__', u'qfx-1']) except NoIdError: pass if br is not None: self._vnc_lib.bgp_router_delete(br.get_fq_name()) vn2_obj = None try: vn2_obj = self._vnc_lib.virtual_network_read(fq_name=[u'default-domain', u'default-project', u'vn-public']) except NoIdError: pass if vn2_obj is not None: self._vnc_lib.virtual_network_delete(vn2_obj.get_fq_name()) ipam2_obj = None try: ipam2_obj = self._vnc_lib.network_ipam_read(fq_name=[u'default-domain', u'default-project', u'ipam2']) except NoIdError: pass if ipam2_obj is not None: self._vnc_lib.network_ipam_delete(ipam2_obj.get_fq_name()) vn1_obj = None try: vn1_obj = self._vnc_lib.virtual_network_read(fq_name=[u'default-domain', u'default-project', u'vn-private']) except NoIdError: pass if vn1_obj is not None: vn1_uuid = self._vnc_lib.virtual_network_delete(vn1_obj.get_fq_name()) ipam_obj = None try: ipam_obj = self._vnc_lib.network_ipam_read(fq_name=[u'default-domain', u'default-project', u'ipam1']) except NoIdError: pass if ipam_obj is not None: self._vnc_lib.network_ipam_delete(ipam_obj.get_fq_name()) # end # python provision_physical_router.py --api_server_ip 127.0.0.1 --api_server_port 8082 --admin_user admin --admin_password c0ntrail123 --admin_tenant_name default-domain --op fip_test def add_bms_config(self): ipam_obj = None try: ipam_obj = self._vnc_lib.network_ipam_read(fq_name=[u'default-domain', u'default-project', u'ipam1']) except NoIdError: pass if ipam_obj is None: ipam_obj = NetworkIpam('ipam1') self._vnc_lib.network_ipam_create(ipam_obj) vn1_obj = None try: vn1_obj = self._vnc_lib.virtual_network_read(fq_name=[u'default-domain', u'default-project', u'vn-private']) except NoIdError: pass if vn1_obj is None: vn1_obj = VirtualNetwork('vn-private') vn1_obj.add_network_ipam(ipam_obj, VnSubnetsType([IpamSubnetType(SubnetType("10.0.0.0", 24))])) vn1_uuid = self._vnc_lib.virtual_network_create(vn1_obj) pr = None try: pr = self._vnc_lib.physical_router_read(fq_name=[u'default-global-system-config', u'a2-mx-80']) except NoIdError: pass if pr is None: bgp_router, pr = self.create_router('a2-mx-80', '10.84.7.253', 'abc123') pr.add_virtual_network(vn1_obj) junos_service_ports = JunosServicePorts() junos_service_ports.service_port.append("si-0/0/0") pr.set_physical_router_junos_service_ports(junos_service_ports) pr.physical_router_vendor_name = 'juniper' pr.physical_router_product_name = 'mx' pr.physical_router_vnc_managed = True self._vnc_lib.physical_router_update(pr) #TOR pr_tor = None try: pr_tor = self._vnc_lib.physical_router_read(fq_name=[u'default-global-system-config', u'qfx-1']) except NoIdError: pass if pr_tor is None: bgp_router2, pr_tor = self.create_router('qfx-1', '2.2.2.2', 'abc123') pr_tor.set_virtual_network(vn1_obj) pr_tor.physical_router_vendor_name = 'juniper' pr_tor.physical_router_product_name = 'qfx' pr_tor.physical_router_vnc_managed = False self._vnc_lib.physical_router_update(pr_tor) pi_tor = None try: pi_tor = self._vnc_lib.physical_interface_read(fq_name=[u'default-global-system-config', u'qfx-1', u'xe-0/0/0']) except NoIdError: pass if pi_tor is None: pi_tor = PhysicalInterface('xe-0/0/0', parent_obj = pr_tor) pi_tor_id = self._vnc_lib.physical_interface_create(pi_tor) fq_name = ['default-domain', 'default-project', 'vmi1'] default_project = self._vnc_lib.project_read(fq_name=[u'default-domain', u'default-project']) vmi = None try: vmi = self._vnc_lib.virtual_machine_interface_read(fq_name=[u'default-domain', u'default-project', u'vmi1']) except NoIdError: pass if vmi is None: vmi = VirtualMachineInterface(fq_name=fq_name, parent_type='project') vmi.set_virtual_network(vn1_obj) self._vnc_lib.virtual_machine_interface_create(vmi) li = None try: li = self._vnc_lib.logical_interface_read(fq_name=[u'default-global-system-config', u'qfx-1', u'xe-0/0/0', u'xe-0/0/0.0']) except NoIdError: pass if li is None: li = LogicalInterface('xe-0/0/0.0', parent_obj = pi_tor) li.set_virtual_machine_interface(vmi) li_id = self._vnc_lib.logical_interface_create(li) ip_obj1 = None try: ip_obj1 = self._vnc_lib.instance_ip_read(fq_name=[u'inst-ip-1']) except NoIdError: pass if ip_obj1 is None: ip_obj1 = InstanceIp(name='inst-ip-1') ip_obj1.set_virtual_machine_interface(vmi) ip_obj1.set_virtual_network(vn1_obj) ip_id1 = self._vnc_lib.instance_ip_create(ip_obj1) ip_obj1 = self._vnc_lib.instance_ip_read(id=ip_id1) ip_addr1 = ip_obj1.get_instance_ip_address() ipam2_obj = None try: ipam2_obj = self._vnc_lib.network_ipam_read(fq_name=[u'default-domain', u'default-project', u'ipam2']) except NoIdError: pass if ipam2_obj is None: ipam2_obj = NetworkIpam('ipam2') self._vnc_lib.network_ipam_create(ipam2_obj) vn2_obj = None try: vn2_obj = self._vnc_lib.virtual_network_read(fq_name=[u'default-domain', u'default-project', u'vn-public']) except NoIdError: pass if vn2_obj is None: vn2_obj = VirtualNetwork('vn-public') vn2_obj.set_router_external(True) vn2_obj.add_network_ipam(ipam_obj, VnSubnetsType([IpamSubnetType(SubnetType("192.168.7.0", 24))])) vn2_uuid = self._vnc_lib.virtual_network_create(vn2_obj) pr.add_virtual_network(vn2_obj) self._vnc_lib.physical_router_update(pr) fip_pool = None try: fip_pool = self._vnc_lib.floating_ip_pool_read(fq_name=[u'default-domain', u'default-project', u'vn-public', u'vn_public_fip_pool']) except NoIdError: pass if fip_pool is None: fip_pool_name = 'vn_public_fip_pool' fip_pool = FloatingIpPool(fip_pool_name, vn2_obj) self._vnc_lib.floating_ip_pool_create(fip_pool) fip_obj = None try: fip_obj = self._vnc_lib.floating_ip_read(fq_name=[u'default-domain', u'default-project', u'vn-public', u'vn_public_fip_pool', 'fip-1']) except NoIdError: pass if fip_obj is None: fip_obj = FloatingIp("fip-1", fip_pool) fip_obj.set_virtual_machine_interface(vmi) default_project = self._vnc_lib.project_read(fq_name=[u'default-domain', u'default-project']) fip_obj.set_project(default_project) fip_uuid = self._vnc_lib.floating_ip_create(fip_obj) # end def _parse_args(self, args_str): ''' Eg. python provision_physical_router.py --api_server_ip 127.0.0.1 --api_server_port 8082 ''' # Source any specified config/ini file # Turn off help, so we print all options in response to -h conf_parser = argparse.ArgumentParser(add_help=False) conf_parser.add_argument("-c", "--conf_file", help="Specify config file", metavar="FILE") args, remaining_argv = conf_parser.parse_known_args(args_str.split()) defaults = { #'public_vn_name': 'default-domain:' #'default-project:default-virtual-network', 'api_server_ip': '127.0.0.1', 'api_server_port': '8082', } ksopts = { 'admin_user': '******', 'admin_password': '******', 'admin_tenant_name': 'default-domain' } if args.conf_file: config = ConfigParser.SafeConfigParser() config.read([args.conf_file]) defaults.update(dict(config.items("DEFAULTS"))) if 'KEYSTONE' in config.sections(): ksopts.update(dict(config.items("KEYSTONE"))) # Override with CLI options # Don't surpress add_help here so it will handle -h parser = argparse.ArgumentParser( # Inherit options from config_parser parents=[conf_parser], # print script description with -h/--help description=__doc__, # Don't mess with format of description formatter_class=argparse.RawDescriptionHelpFormatter, ) defaults.update(ksopts) parser.set_defaults(**defaults) parser.add_argument("--api_server_port", help="Port of api server") parser.add_argument( "--admin_user", help="Name of keystone admin user", required=True) parser.add_argument( "--admin_password", help="Password of keystone admin user", required=True) parser.add_argument( "--admin_tenant_name", help="Tenamt name for keystone admin user", required=True) parser.add_argument( "--op", help="operation (add_basic, delete_basic, fip_test)", required=True) parser.add_argument( "--public_vrf_test", help="operation (False, True)", required=False) parser.add_argument( "--vxlan", help="vxlan identifier", required=False) group = parser.add_mutually_exclusive_group(required=True) group.add_argument( "--api_server_ip", help="IP address of api server") group.add_argument("--use_admin_api", default=False, help = "Connect to local api-server on admin port", action="store_true") self._args = parser.parse_args(remaining_argv)