def check_ping_from_mx(self): internal_vip = self.inputs.internal_vip devices = list(self.inputs.physical_routers_data.keys()) for device in self.inputs.physical_routers_data.items(): router_params = device[1] if router_params['role'] == 'spine': phy_router_fixture = self.useFixture( PhysicalRouterFixture( router_params['name'], router_params['control_ip'], model="mx", vendor=router_params['vendor'], asn=router_params['asn'], ssh_username=router_params['ssh_username'], ssh_password=router_params['ssh_password'], mgmt_ip=router_params['control_ip'], do_cleanup=False, connections=self.connections)) mx_handle = phy_router_fixture.get_connection_obj( 'juniper', host=router_params['control_ip'], username=router_params['ssh_username'], password=router_params['ssh_password'], logger=[self.logger]) cmd = "ping %s wait 1" % internal_vip output = mx_handle.handle.cli(cmd) self.logger.debug(output) cmd = "run show bgp summary | display xml rpc" output = mx_handle.handle.cli(cmd) self.logger.debug(output)
def setup_routers(self, count=1): ''' Returns a list of physical router fixtures ''' router_objs = [] routers_info_list = self.get_available_devices('router') assert len(routers_info_list) >= count, ( 'Not enough devices available! Expected %s, Got %s' % (count, len(routers_info_list))) for i in range(0, count): router_params = routers_info_list[i] phy_router_fixture = self.useFixture( PhysicalRouterFixture( router_params['name'], router_params['mgmt_ip'], model=router_params['model'], vendor=router_params['vendor'], asn=router_params['asn'], ssh_username=router_params['ssh_username'], ssh_password=router_params['ssh_password'], mgmt_ip=router_params['mgmt_ip'], tunnel_ip=router_params['tunnel_ip'], ports=router_params['ports'], connections=self.connections, logger=self.logger)) router_objs.append(phy_router_fixture) return router_objs
def create_physical_dev(self): #mx config using device manager self.phy_router_fixture = {} if self.inputs.ext_routers: if self.inputs.use_devicemanager_for_md5: j = 0 self.mx_handle = {} for i in range(len( self.inputs.physical_routers_data.values())): router_params = self.inputs.physical_routers_data.values( )[i] if router_params['model'] == 'mx': self.phy_router_fixture[j] = self.useFixture( PhysicalRouterFixture( router_params['name'], router_params['mgmt_ip'], model=router_params['model'], vendor=router_params['vendor'], asn=router_params['asn'], ssh_username=router_params['ssh_username'], ssh_password=router_params['ssh_password'], mgmt_ip=router_params['mgmt_ip'], connections=self.connections)) self.mx_handle[j] = self.phy_router_fixture[ j].get_connection_obj( 'juniper', host=router_params['mgmt_ip'], username=router_params['ssh_username'], password=router_params['ssh_password'], logger=[self.logger]) j += 1
def create_physical_dev(self): #mx config using device manager self.phy_router_fixture = {} if self.inputs.ext_routers: if self.inputs.use_devicemanager_for_md5: j = 0 self.mx_handle = {} for i in range(len(self.inputs.dm_mx.values())): router_params = self.inputs.dm_mx.values()[i] if router_params['model'] == 'mx': self.phy_router_fixture[j] = self.useFixture(PhysicalRouterFixture( router_params['name'], router_params['control_ip'], model=router_params['model'], vendor=router_params['vendor'], asn=router_params['asn'], ssh_username=router_params['ssh_username'], ssh_password=router_params['ssh_password'], mgmt_ip=router_params['control_ip'], connections=self.connections, dm_managed=True)) physical_dev = self.vnc_lib.physical_router_read(id = self.phy_router_fixture[j].phy_device.uuid) physical_dev.set_physical_router_management_ip(router_params['mgmt_ip']) physical_dev.set_physical_router_dataplane_ip(router_params['mgmt_ip']) physical_dev._pending_field_updates self.vnc_lib.physical_router_update(physical_dev) self.mx_handle[j] = self.phy_router_fixture[j].get_connection_obj('juniper', host=router_params['control_ip'], username=router_params['ssh_username'], password=router_params['ssh_password'], logger=[self.logger]) j += 1
def test_create_v6(self): """ Description: Verify v6 config is pushed to mx """ router_params = list(self.inputs.dm_mx.values())[0] self.phy_router_fixture = self.useFixture( PhysicalRouterFixture(router_params['name'], router_params['control_ip'], model=router_params['model'], vendor=router_params['vendor'], asn=router_params['asn'], ssh_username=router_params['ssh_username'], ssh_password=router_params['ssh_password'], mgmt_ip=router_params['control_ip'], connections=self.connections, dm_managed=True)) physical_dev = self.vnc_lib.physical_router_read( id=self.phy_router_fixture.phy_device.uuid) physical_dev.set_physical_router_management_ip( router_params['mgmt_ip']) physical_dev._pending_field_updates self.vnc_lib.physical_router_update(physical_dev) vn1_name = "test_vnv6sr" vn1_net = ['2001::101:0/120'] #vn1_fixture = self.config_vn(vn1_name, vn1_net) vn1_fixture = self.useFixture( VNFixture(project_name=self.inputs.project_name, connections=self.connections, vn_name=vn1_name, inputs=self.inputs, subnets=vn1_net)) assert vn1_fixture.verify_on_setup() self.extend_vn_to_physical_router(vn1_fixture, self.phy_router_fixture) sleep(20) mx_handle = self.phy_router_fixture.get_connection_obj( 'juniper', host=router_params['mgmt_ip'], username=router_params['ssh_username'], password=router_params['ssh_password'], logger=[self.logger]) cmd = 'show configuration groups __contrail__ routing-instances _contrail_%s-l3-%s' % ( vn1_name, vn1_fixture.vn_network_id) cli_output = self.get_output_from_node(mx_handle, cmd) assert (not ('invalid command' in cli_output) ), "Bug 1553316 present. v6 CIDR config not pushed to mx" return True
def createBGPRouter(self): self.bgp_router_fixture = {} if not hasattr(self.topo, 'pr_params'): return self for bgp_router in self.topo.pr_list: self.bgp_router_fixture[bgp_router] = self.useFixture( PhysicalRouterFixture( bgp_router, self.topo.pr_params[bgp_router]['tunnel_ip'], connections=self.project_connections, inputs=self.project_inputs, vendor=self.topo.pr_params[bgp_router]['vendor'], router_type=self.topo.pr_params[bgp_router]['router_type'], source_port=self.topo.pr_params[bgp_router]['source_port'], auth_type=self.topo.pr_params[bgp_router]['auth_type'], auth_key=self.topo.pr_params[bgp_router]['auth_key'], hold_time=self.topo.pr_params[bgp_router]['hold_time'])) return self
def test_create_v6(self): """ Description: Verify v6 config is pushed to mx """ router_params = self.inputs.physical_routers_data.values()[0] self.phy_router_fixture = self.useFixture( PhysicalRouterFixture(router_params['name'], router_params['mgmt_ip'], model=router_params['model'], vendor=router_params['vendor'], asn=router_params['asn'], ssh_username=router_params['ssh_username'], ssh_password=router_params['ssh_password'], mgmt_ip=router_params['mgmt_ip'], connections=self.connections)) vn1_name = "test_vnv6sr" vn1_net = ['2001::101:0/120'] #vn1_fixture = self.config_vn(vn1_name, vn1_net) vn1_fixture = self.useFixture( VNFixture(project_name=self.inputs.project_name, connections=self.connections, vn_name=vn1_name, inputs=self.inputs, subnets=vn1_net)) assert vn1_fixture.verify_on_setup() self.extend_vn_to_physical_router(vn1_fixture, self.phy_router_fixture) sleep(20) mx_handle = self.phy_router_fixture.get_connection_obj( 'juniper', host=router_params['mgmt_ip'], username=router_params['ssh_username'], password=router_params['ssh_password'], logger=[self.logger]) cmd = 'show configuration groups __contrail__ routing-instances _contrail_l3_5_%s' % vn1_name cli_output = self.get_output_from_node(mx_handle, cmd) assert (not ('invalid command' in cli_output) ), "Bug 1553316 present. v6 CIDR config not pushed to mx" return True
def setup_tors(self, count=1): tor_objs = [] tors_info_list = self.get_available_devices('tor') assert len(tors_info_list) >= count, ( 'Not enough devices available! Expected %s, Got %s' % (count, len(tors_info_list))) for i in range(0, count): tor_params = tors_info_list[i] tor_fixture = self.useFixture( PhysicalRouterFixture(tor_params['name'], tor_params['mgmt_ip'], vendor=tor_params['vendor'], model=tor_params['model'], role=tor_params['role'], tsn=tor_params['tsn'], ssh_username=tor_params['ssh_username'], ssh_password=tor_params['ssh_password'], tunnel_ip=tor_params['tunnel_ip'], ports=tor_params['ports'], dm_managed=tor_params['dm_managed'], connections=self.connections, logger=self.logger)) tor_objs.append(tor_fixture) return tor_objs
def config_basic(self, check_dm): #mx config using device manager #both dm_mx and use_device_manager knobs are required for DM #this check is present in is_test_applicable if check_dm: if self.inputs.use_devicemanager_for_md5: for i in range(len(self.inputs.dm_mx.values())): router_params = self.inputs.dm_mx.values()[i] if router_params['model'] == 'mx': self.phy_router_fixture = self.useFixture( PhysicalRouterFixture( router_params['name'], router_params['control_ip'], model=router_params['model'], vendor=router_params['vendor'], asn=router_params['asn'], ssh_username=router_params['ssh_username'], ssh_password=router_params['ssh_password'], mgmt_ip=router_params['control_ip'], connections=self.connections, dm_managed=True)) physical_dev = self.vnc_lib.physical_router_read( id=self.phy_router_fixture.phy_device.uuid) physical_dev.set_physical_router_management_ip( router_params['mgmt_ip']) physical_dev._pending_field_updates self.vnc_lib.physical_router_update(physical_dev) else: if self.inputs.ext_routers: for i in range(len( self.inputs.physical_routers_data.values())): router_params = self.inputs.physical_routers_data.values( )[i] if router_params['model'] == 'mx': cmd = [] cmd.append( 'set groups md5_tests routing-options router-id %s' % router_params['mgmt_ip']) cmd.append( 'set groups md5_tests routing-options route-distinguisher-id %s' % router_params['mgmt_ip']) cmd.append( 'set groups md5_tests routing-options autonomous-system %s' % router_params['asn']) cmd.append( 'set groups md5_tests protocols bgp group md5_tests type internal' ) cmd.append( 'set groups md5_tests protocols bgp group md5_tests multihop' ) cmd.append( 'set groups md5_tests protocols bgp group md5_tests local-address %s' % router_params['mgmt_ip']) cmd.append( 'set groups md5_tests protocols bgp group md5_tests hold-time 90' ) cmd.append( 'set groups md5_tests protocols bgp group md5_tests keep all' ) cmd.append( 'set groups md5_tests protocols bgp group md5_tests family inet-vpn unicast' ) cmd.append( 'set groups md5_tests protocols bgp group md5_tests family inet6-vpn unicast' ) cmd.append( 'set groups md5_tests protocols bgp group md5_tests family evpn signaling' ) cmd.append( 'set groups md5_tests protocols bgp group md5_tests family route-target' ) cmd.append( 'set groups md5_tests protocols bgp group md5_tests local-as %s' % router_params['asn']) for node in self.inputs.bgp_control_ips: cmd.append( 'set groups md5_tests protocols bgp group md5_tests neighbor %s peer-as %s' % (node, router_params['asn'])) cmd.append('set apply-groups md5_tests') mx_handle = NetconfConnection( host=router_params['mgmt_ip']) mx_handle.connect() cli_output = mx_handle.config(stmts=cmd, timeout=120) #ipv6 not supported for vcenter so skipping config if self.inputs.orchestrator != 'vcenter': vn61_name = "test_vnv6sr" vn61_net = ['2001::101:0/120'] #vn1_fixture = self.config_vn(vn1_name, vn1_net) vn61_fixture = self.useFixture( VNFixture(project_name=self.inputs.project_name, connections=self.connections, vn_name=vn61_name, inputs=self.inputs, subnets=vn61_net)) vn62_name = "test_vnv6dn" vn62_net = ['2001::201:0/120'] #vn2_fixture = self.config_vn(vn2_name, vn2_net) vn62_fixture = self.useFixture( VNFixture(project_name=self.inputs.project_name, connections=self.connections, vn_name=vn62_name, inputs=self.inputs, subnets=vn62_net)) vm61_name = 'source_vm' vm62_name = 'dest_vm' #vm1_fixture = self.config_vm(vn1_fixture, vm1_name) #vm2_fixture = self.config_vm(vn2_fixture, vm2_name) vm61_fixture = self.useFixture( VMFixture(project_name=self.inputs.project_name, connections=self.connections, vn_obj=vn61_fixture.obj, vm_name=vm61_name, node_name=None, image_name='cirros', flavor='m1.tiny')) vm62_fixture = self.useFixture( VMFixture(project_name=self.inputs.project_name, connections=self.connections, vn_obj=vn62_fixture.obj, vm_name=vm62_name, node_name=None, image_name='cirros', flavor='m1.tiny')) vm61_fixture.wait_till_vm_is_up() vm62_fixture.wait_till_vm_is_up() rule = [ { 'direction': '<>', 'protocol': 'any', 'source_network': vn61_name, 'src_ports': [0, -1], 'dest_network': vn62_name, 'dst_ports': [0, -1], 'simple_action': 'pass', }, ] policy_name = 'allow_all' policy_fixture = self.config_policy(policy_name, rule) vn61_policy_fix = self.attach_policy_to_vn(policy_fixture, vn61_fixture) vn62_policy_fix = self.attach_policy_to_vn(policy_fixture, vn62_fixture) vn1 = "vn1" vn2 = "vn2" vn_s = {'vn1': '10.1.1.0/24', 'vn2': ['20.1.1.0/24']} rules = [ { 'direction': '<>', 'protocol': 'any', 'source_network': vn1, 'src_ports': [0, -1], 'dest_network': vn2, 'dst_ports': [0, -1], 'simple_action': 'pass', }, ] self.logger.info("Configure the policy with allow any") self.multi_vn_fixture = self.useFixture( MultipleVNFixture(connections=self.connections, inputs=self.inputs, subnet_count=2, vn_name_net=vn_s, project_name=self.inputs.project_name)) vns = self.multi_vn_fixture.get_all_fixture_obj() (self.vn1_name, self.vn1_fix) = self.multi_vn_fixture._vn_fixtures[0] (self.vn2_name, self.vn2_fix) = self.multi_vn_fixture._vn_fixtures[1] self.config_policy_and_attach_to_vn(rules) self.multi_vm_fixture = self.useFixture( MultipleVMFixture(project_name=self.inputs.project_name, connections=self.connections, vm_count_per_vn=1, vn_objs=vns, image_name='cirros', flavor='m1.tiny')) vms = self.multi_vm_fixture.get_all_fixture() (self.vm1_name, self.vm1_fix) = vms[0] (self.vm2_name, self.vm2_fix) = vms[1]
ports=device_dict['ports'], tor_ovs_port=device_dict['tor_ovs_port'], tor_ovs_protocol=device_dict['tor_ovs_protocol'], controller_ip=device_dict['controller_ip'], cfgm_ip=init_obj.cfgm_ip, auth_server_ip=init_obj.auth_ip, bringup=True) tor_obj.setUp() if device_dict['type'] == 'router': phy_router_obj = PhysicalRouterFixture( device_dict['name'], device_dict['mgmt_ip'], model=device_dict['model'], vendor=device_dict['vendor'], asn=device_dict['asn'], ssh_username=device_dict['ssh_username'], ssh_password=device_dict['ssh_password'], mgmt_ip=device_dict['mgmt_ip'], tunnel_ip=device_dict['tunnel_ip'], ports=device_dict['ports'], cfgm_ip=init_obj.cfgm_ip, auth_server_ip=init_obj.auth_ip, ) phy_router_obj.setUp() if device_dict['type'] == 'vcenter_gateway': vrouter_obj = VirtualRouterFixture( device_dict['name'], 'embedded', cfgm_ip=init_obj.cfgm_ip, auth_server_ip=init_obj.auth_ip, ) vrouter_obj.setUp()
if __name__ == "__main__": init_obj = ContrailTestInit(sys.argv[1]) for (device, device_dict) in init_obj.physical_routers_data.iteritems(): if device_dict.get('role') in ['leaf', 'spine']: continue phy_router_obj = PhysicalRouterFixture( device_dict['name'], device_dict['mgmt_ip'], asn=device_dict['asn'], model=device_dict.get('model', 'mx'), vendor=device_dict.get('vendor', 'juniper'), ssh_username=device_dict.get('ssh_username'), ssh_password=device_dict.get('ssh_password'), tunnel_ip=device_dict.get('tunnel_ip'), ports=device_dict.get('ports'), dm_managed=device_dict.get('dm_managed'), tsn=device_dict.get('tsn'), role=device_dict.get('role'), cfgm_ip=init_obj.cfgm_ip, auth_server_ip=init_obj.auth_ip, inputs=init_obj, username=init_obj.admin_username, password=init_obj.admin_password, project_name=init_obj.admin_tenant, domain=init_obj.admin_domain, orchestrator=init_obj.orchestrator) phy_router_obj.setUp() assert phy_router_obj.verify_bgp_peer(), 'BGP peering is not up.' if device_dict['type'] == 'vcenter_gateway': vrouter_obj = VirtualRouterFixture(
def config_basic(self, is_mx_present): #mx config using device manager if is_mx_present: if self.inputs.ext_routers: if self.inputs.use_devicemanager_for_md5: router_params = self.inputs.physical_routers_data.values( )[0] self.phy_router_fixture = self.useFixture( PhysicalRouterFixture( router_params['name'], router_params['mgmt_ip'], model=router_params['model'], vendor=router_params['vendor'], asn=router_params['asn'], ssh_username=router_params['ssh_username'], ssh_password=router_params['ssh_password'], mgmt_ip=router_params['mgmt_ip'], connections=self.connections)) else: if self.inputs.ext_routers: router_params = self.inputs.physical_routers_data.values()[0] cmd = [] cmd.append( 'set groups md5_tests routing-options router-id %s' % router_params['mgmt_ip']) cmd.append( 'set groups md5_tests routing-options route-distinguisher-id %s' % router_params['mgmt_ip']) cmd.append( 'set groups md5_tests routing-options autonomous-system %s' % router_params['asn']) cmd.append( 'set groups md5_tests protocols bgp group md5_tests type internal' ) cmd.append( 'set groups md5_tests protocols bgp group md5_tests multihop' ) cmd.append( 'set groups md5_tests protocols bgp group md5_tests local-address %s' % router_params['mgmt_ip']) cmd.append( 'set groups md5_tests protocols bgp group md5_tests hold-time 90' ) cmd.append( 'set groups md5_tests protocols bgp group md5_tests keep all' ) cmd.append( 'set groups md5_tests protocols bgp group md5_tests family inet-vpn unicast' ) cmd.append( 'set groups md5_tests protocols bgp group md5_tests family inet6-vpn unicast' ) cmd.append( 'set groups md5_tests protocols bgp group md5_tests family evpn signaling' ) cmd.append( 'set groups md5_tests protocols bgp group md5_tests family route-target' ) cmd.append( 'set groups md5_tests protocols bgp group md5_tests local-as %s' % router_params['asn']) for node in self.inputs.bgp_control_ips: cmd.append( 'set groups md5_tests protocols bgp group md5_tests neighbor %s peer-as %s' % (node, router_params['asn'])) cmd.append('set apply-groups md5_tests') mx_handle = NetconfConnection(host=router_params['mgmt_ip']) mx_handle.connect() cli_output = mx_handle.config(stmts=cmd, timeout=120) vn61_name = "test_vnv6sr" vn61_net = ['2001::101:0/120'] #vn1_fixture = self.config_vn(vn1_name, vn1_net) vn61_fixture = self.useFixture( VNFixture(project_name=self.inputs.project_name, connections=self.connections, vn_name=vn61_name, inputs=self.inputs, subnets=vn61_net)) vn62_name = "test_vnv6dn" vn62_net = ['2001::201:0/120'] #vn2_fixture = self.config_vn(vn2_name, vn2_net) vn62_fixture = self.useFixture( VNFixture(project_name=self.inputs.project_name, connections=self.connections, vn_name=vn62_name, inputs=self.inputs, subnets=vn62_net)) vm61_name = 'source_vm' vm62_name = 'dest_vm' #vm1_fixture = self.config_vm(vn1_fixture, vm1_name) #vm2_fixture = self.config_vm(vn2_fixture, vm2_name) vm61_fixture = self.useFixture( VMFixture(project_name=self.inputs.project_name, connections=self.connections, vn_obj=vn61_fixture.obj, vm_name=vm61_name, node_name=None, image_name='cirros-0.3.0-x86_64-uec', flavor='m1.tiny')) vm62_fixture = self.useFixture( VMFixture(project_name=self.inputs.project_name, connections=self.connections, vn_obj=vn62_fixture.obj, vm_name=vm62_name, node_name=None, image_name='cirros-0.3.0-x86_64-uec', flavor='m1.tiny')) vm61_fixture.wait_till_vm_is_up() vm62_fixture.wait_till_vm_is_up() rule = [ { 'direction': '<>', 'protocol': 'any', 'source_network': vn61_name, 'src_ports': [0, -1], 'dest_network': vn62_name, 'dst_ports': [0, -1], 'simple_action': 'pass', }, ] policy_name = 'allow_all' policy_fixture = self.config_policy(policy_name, rule) vn61_policy_fix = self.attach_policy_to_vn(policy_fixture, vn61_fixture) vn62_policy_fix = self.attach_policy_to_vn(policy_fixture, vn62_fixture) vn1 = "vn1" vn2 = "vn2" vn_s = {'vn1': '10.1.1.0/24', 'vn2': ['20.1.1.0/24']} rules = [ { 'direction': '<>', 'protocol': 'any', 'source_network': vn1, 'src_ports': [0, -1], 'dest_network': vn2, 'dst_ports': [0, -1], 'simple_action': 'pass', }, ] self.logger.info("Configure the policy with allow any") self.multi_vn_fixture = self.useFixture( MultipleVNFixture(connections=self.connections, inputs=self.inputs, subnet_count=2, vn_name_net=vn_s, project_name=self.inputs.project_name)) vns = self.multi_vn_fixture.get_all_fixture_obj() (self.vn1_name, self.vn1_fix) = self.multi_vn_fixture._vn_fixtures[0] (self.vn2_name, self.vn2_fix) = self.multi_vn_fixture._vn_fixtures[1] self.config_policy_and_attach_to_vn(rules) self.multi_vm_fixture = self.useFixture( MultipleVMFixture(project_name=self.inputs.project_name, connections=self.connections, vm_count_per_vn=1, vn_objs=vns, image_name='cirros-0.3.0-x86_64-uec', flavor='m1.tiny')) vms = self.multi_vm_fixture.get_all_fixture() (self.vm1_name, self.vm1_fix) = vms[0] (self.vm2_name, self.vm2_fix) = vms[1]