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)
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)
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)
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)
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
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
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