Beispiel #1
0
    def get_introspect_for_service(self, service, host_ip):
        if service == 'contrail-svc-monitor':
            inspect = SvcMonInspect(host_ip,
                port=CONTRAIL_INTROSPECT_PORTS[service], logger=self.logger,
                args=self.inputs)
        elif service == 'contrail-vrouter-agent':
            agent_inspect = AgentInspect(host_ip,
                CONTRAIL_INTROSPECT_PORTS[service], self.logger,
                inputs=self.inputs)
        elif service in ['contrail-query-engine', 'contrail-analytics-api', 'contrail-collector']:
            inspect = VerificationOpsSrvIntrospect(host_ip,
                CONTRAIL_INTROSPECT_PORTS[service], self.logger,
                inputs=self.inputs)
        elif service == 'contrail-dns':
            inspect = DnsAgentInspect(host_ip,
                CONTRAIL_INTROSPECT_PORTS[service], self.logger,
                args=self.inputs)
        elif service == 'contrail-control':
            inspect = ControlNodeInspect(host_ip,
                CONTRAIL_INTROSPECT_PORTS[service], self.logger,
                args=self.inputs)
        elif service in ['contrail-api', 'contrail-schema']:
            inspect = VerificationUtilBase(host_ip,
                CONTRAIL_INTROSPECT_PORTS[service], drv=XmlDrv, logger=self.logger,
                args=self.inputs)
        else:
            inspect = None

        return inspect
Beispiel #2
0
 def get_vrouter_agent_inspect_handle(self, host):
     if host not in self.agent_inspect:
         self.agent_inspect[host] = AgentInspect(
             host,
             port=self.inputs.agent_port,
             logger=self.logger,
             inputs=self.inputs,
             protocol=self.inputs.introspect_protocol)
     return self.agent_inspect[host]
Beispiel #3
0
    def bms_vm_add_delete(self, bms_count=1, bms_nodes_filtered=[]):
        '''
        Not run as separate test.
        Will be called by test_bms_single_interface or  test_bms_multi_homing or test_bms_lag
        Test Step:
            1. Create tenant VN
            2. Create N BMS instance.
            3. Create regular VM and verify ping from VM to BMS VM instance works.

        Maintainer : [email protected]
        '''
        bms_lcm_config = self.inputs.bms_lcm_config
        bms_nodes = self.inputs.bms_data
        bms_image = bms_lcm_config['bms_image']

        ironic_computes = self.connections.nova_h.get_ironic_compute_service_list(
        )
        bms_availability_zone = "nova-baremetal"
        bms_availability_host = ironic_computes[0].host

        service_nodes = self.inputs.contrail_service_nodes
        self.inputs.restart_service('contrail-vrouter',
                                    service_nodes,
                                    container='agent')
        if not self.vn_fixture:
            self.vn_fixture = self.create_vn()
        vn_obj = self.vn_fixture.obj

        if not self.vm_fixture:
            self.vm_fixture = self.create_vm(vn_fixture=self.vn_fixture,
                                             image_name="ubuntu-traffic")
            assert self.vm_fixture.wait_till_vm_is_up()

        mac_node_dict = {}
        for node in bms_nodes_filtered:
            for interface in node['interfaces']:
                if interface['pxe_enabled']:
                    mac_node_dict[interface['host_mac']] = node['node_name']

        print(mac_node_dict, list(mac_node_dict.keys()))

        bms_fixtures_list = []
        for i in range(bms_count):
            bms_fixtures_list.append(
                self.create_vm(vn_fixture=self.vn_fixture,
                               image_name=bms_image,
                               zone=bms_availability_zone,
                               node_name=bms_availability_host,
                               instance_type="baremetal"))
            time.sleep(10)

        for i in range(5):
            time.sleep(200)
            dhcp_missing_mac_list = []
            for service_node in service_nodes:
                dhcp_inspect = AgentInspect(service_node)
                for mac in list(mac_node_dict.keys()):
                    ret = dhcp_inspect.is_dhcp_offered(mac)
                    if ret:
                        print("DHCP Offer for %s seen" % mac)
                        self.logger.debug("DHCP request from %s seen" % mac)
                    else:
                        print("DHCP Offer for %s NOT seen" % mac)
                        dhcp_missing_mac_list.append(mac)
                        self.logger.debug("DHCP request from %s NOT seen" %
                                          mac)

            if len(dhcp_missing_mac_list) == 0:
                break
            ## BMS LCM node request dhcp before ansible configuration is done.
            ## https://bugs.launchpad.net/juniperopenstack/+bug/1790911
            dhcp_missing_mac_list_filtered = list(
                OrderedDict(list(zip(dhcp_missing_mac_list,
                                     repeat(None)))).keys())
            nodes_list = self.connections.ironic_h.obj.node.list()
            node_mac_dict = dict([(x.name, x.uuid) for x in nodes_list])
            for mac in dhcp_missing_mac_list_filtered:
                print("Work-around for PR 1790911: Rebooting node: %s" %
                      mac_node_dict[mac])
                self.logger.debug(
                    "Work-around for PR 1790911: Rebooting node: %s" %
                    mac_node_dict[mac])
                node_id = node_mac_dict[mac_node_dict[mac]]
                self.connections.ironic_h.obj.node.set_boot_device(
                    node_id, "pxe")
                #cmd="docker exec -it kolla_toolbox bash -c 'source /var/lib/kolla/config_files/admin-openrc.sh;openstack baremetal node reboot %s'"%node_id
                #self.connections.inputs.run_cmd_on_server( self.connections.inputs.openstack_ips[0], cmd)
                self.connections.ironic_h.set_node_power_state(
                    node_id, "reboot")
                time.sleep(10)

        ## PR 1790911 work-around.

        time.sleep(300)

        bms_fixtures_up_list = []
        bms_fixtures_down_list = []
        for bms_fixture in bms_fixtures_list:
            try:
                assert bms_fixture.verify_on_setup()
                bms_fixtures_up_list.append(bms_fixture)
            except AssertionError:
                bms_fixtures_down_list.append(bms_fixture)
                continue

        for bms_fixture in bms_fixtures_up_list:
            for i in range(5):
                ping_result = self.vm_fixture.ping_with_certainty(
                    bms_fixture.vm_ip)
                if ping_result:
                    break
            if ping_result:
                self.logger.debug("Ping to BMS Node %s is successful" %
                                  bms_fixture.vm_name)
            else:
                node_list = self.connections.ironic_h.obj.node.list()
                for node in node_list:
                    self.connections.ironic_h.obj.node.set_maintenance(
                        node.uuid, True)
                assert False, 'Unable to reach bms node: %s' % bms_fixture.vm_name

        for bms_fixture in bms_fixtures_down_list:
            node_list = self.connections.ironic_h.obj.node.list()
            for node in node_list:
                self.connections.ironic_h.obj.node.set_maintenance(
                    node.uuid, True)
            assert False, 'BMS bring up failed for node: %s' % bms_fixture.vm_name

        assert ping_result
        return True