Ejemplo n.º 1
0
    def wait_for_status(self, status, timeout=TIMEOUT, sleep=SLEEP, **kwargs):
        """
        Wait for resource to be in status

        Args:
            status (bool): Expected status(True vm is running, False vm is not running).
            timeout (int): Time to wait for the resource.
            sleep (int): Time to sleep between retries.

        Keyword Args:
            pretty
            _continue
            include_uninitialized
            field_selector
            label_selector
            limit
            resource_version
            timeout_seconds
            watch
            async_req

        Returns:
            bool: True if resource in desire status, False if timeout reached.
        """
        sampler = utils.TimeoutSampler(timeout=timeout, sleep=sleep, func=lambda: self.get().spec.running == status)
        return sampler.wait_for_func_status(result=True)
Ejemplo n.º 2
0
    def test_veth_removed_from_host_after_vm_deleted(self):
        """
        Check that veth interfaces are removed from host after VM deleted
        """
        for vm in config.VMS_LIST:
            vm_object = VirtualMachine(name=vm, namespace=config.NETWORK_NS)
            vm_info = vm_object.get()
            vm_interfaces = vm_info.get('status', {}).get('interfaces', [])
            vm_node = vm_object.node()
            pods = get_ovs_cni_pods()
            assert pods
            for pod in pods:
                pod_object = Pod(name=pod, namespace=config.KUBE_SYSTEM_NS)
                pod_container = config.OVS_CNI_CONTAINER
                pod_node = pod_object.node()
                if pod_node == vm_node:
                    err, out = pod_object.run_command(
                        command=config.IP_LINK_SHOW_BETH_CMD, container=pod_container
                    )
                    assert err
                    host_vath_before_delete = int(out.strip())
                    assert vm_object.delete(wait=True)
                    expect_host_veth = host_vath_before_delete - len(vm_interfaces)

                    sampler = utils.TimeoutSampler(
                        timeout=30, sleep=1, func=get_host_veth_sampler,
                        pod=pod_object, pod_container=pod_container, expect_host_veth=expect_host_veth
                    )
                    sampler.wait_for_func_status(result=True)
Ejemplo n.º 3
0
    def wait(self, timeout=TIMEOUT, sleep=SLEEP):
        """
        Wait for resource

        Args:
            timeout (int): Time to wait for the resource.
            sleep (int): Time to sleep between retries.

        Returns:
            bool: True if resource exists, False if timeout reached.
        """
        sample = utils.TimeoutSampler(timeout=timeout,
                                      sleep=sleep,
                                      func=lambda: bool(self.get()))
        return sample.wait_for_func_status(result=True)
Ejemplo n.º 4
0
    def wait_for_status(self, status, timeout=TIMEOUT, sleep=SLEEP):
        """
        Wait for resource to be in status

        Args:
            status (str): Expected status.
            timeout (int): Time to wait for the resource.
            sleep (int): Time to sleep between retries.

        Returns:
            bool: True if resource in desire status, False if timeout reached.
        """
        sampler = utils.TimeoutSampler(timeout=timeout,
                                       sleep=sleep,
                                       func=lambda: self.status() == status)
        return sampler.wait_for_func_status(result=True)
Ejemplo n.º 5
0
def wait_for_vm_interfaces(vmi, timeout=600):
    """
    Wait until guest agent report VMI network interfaces.

    Args:
        vmi (VirtualMachineInstance): VMI object.
        timeout (int): Maximum time to wait for interfaces status

    Returns:
        bool: True if agent report VMI interfaces.

    Raises:
        TimeoutExpiredError: After timeout reached.
    """
    sampler = utils.TimeoutSampler(timeout=timeout, sleep=1, func=vmi.get)
    LOGGER.info('Wait until guest agent is active')
    try:
        for sample in sampler:
            #  Check if guest agent is activate
            agent_status = [
                i for i in sample.get('status', {}).get('conditions', {}) if
                i.get('type') == 'AgentConnected' and i.get('status') == 'True'
            ]
            if agent_status:
                LOGGER.info('Wait until VMI report network interfaces status')
                for sample in sampler:
                    #  Get MVI interfaces from guest agent
                    ifcs = sample.get('status', {}).get('interfaces', [])
                    active_ifcs = [
                        i for i in ifcs
                        if i.get('ipAddress') and i.get('interfaceName')
                    ]
                    if len(active_ifcs) == len(ifcs):
                        return True
                LOGGER.error(
                    'VMI did not report network interfaces status in given time'
                )

    except utils.TimeoutExpiredError:
        LOGGER.error('Guest agent is not installed or not active')
        raise
Ejemplo n.º 6
0
def wait_for_vm_interfaces(vmi):
    """
    Wait until guest agent report VMI interfaces.

    Args:
        vmi (VirtualMachineInstance): VMI object.

    Returns:
        bool: True if agent report VMI interfaces.

    Raises:
        TimeoutExpiredError: After timeout reached.
    """
    sampler = utils.TimeoutSampler(timeout=500, sleep=1, func=vmi.get)
    for sample in sampler:
        ifcs = sample.get('status', {}).get('interfaces', [])
        active_ifcs = [
            i for i in ifcs if i.get('ipAddress') and i.get('interfaceName')
        ]
        if len(active_ifcs) == len(ifcs):
            return True
Ejemplo n.º 7
0
def wait_for_pods_to_match_compute_nodes_number(number_of_nodes):
    """
    Wait for pods to be created from DaemonSet

    Args:
        number_of_nodes (int): Number of nodes to match for.

    Returns:
        bool: True if Pods created.

    Raises:
        TimeoutExpiredError: After timeout reached.

    """
    sampler = utils.TimeoutSampler(timeout=30,
                                   sleep=1,
                                   func=Pod().list,
                                   get_names=True,
                                   label_selector="app=privileged-test-pod")
    for sample in sampler:
        if len(sample) == number_of_nodes:
            return True