ansible/pytest-ansible

Pytest is deleting ansible collection when testing for molecule

ABHISHEK-SINHA10 opened this issue · 0 comments

Hi Team,

Command: pytest -vvv --molecule -k "idrac_gather_facts" --inventory /root/inventory.ini

Whenever I'm trying to run the above command, my whole collection getting deleted.

ENV:
ansible [core 2.16.0]
config file = None
configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /root/omamEnv3.11/lib64/python3.11/site-packages/ansible
ansible collection location = /root/.ansible/collections:/usr/share/ansible/collections
executable location = /root/omamEnv3.11/bin/ansible
python version = 3.11.5 (main, Sep 7 2023, 00:00:00) [GCC 11.4.1 20230605 (Red Hat 11.4.1-2)] (/root/omamEnv3.11/bin/python3.11)
jinja version = 3.1.2
libyaml = True

Attaching screenshot below.

image


self = <Popen: returncode: 255 args: ['/root/omamEnv3.11/bin/python3.11', '-m', 'mo...>
args = ['/root/omamEnv3.11/bin/python3.11', '-m', 'molecule', 'test', '-s', 'virtualdisk']
executable = b'/root/omamEnv3.11/bin/python3.11', preexec_fn = None, close_fds = True, pass_fds = ()
cwd = PosixPath('/root/collections/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts'), env = None
startupinfo = None, creationflags = 0, shell = False, p2cread = -1, p2cwrite = -1, c2pread = 11, c2pwrite = 12, errread = -1
errwrite = 12, restore_signals = True, gid = None, gids = None, uid = None, umask = -1, start_new_session = False
process_group = -1

def _execute_child(self, args, executable, preexec_fn, close_fds,
                   pass_fds, cwd, env,
                   startupinfo, creationflags, shell,
                   p2cread, p2cwrite,
                   c2pread, c2pwrite,
                   errread, errwrite,
                   restore_signals,
                   gid, gids, uid, umask,
                   start_new_session, process_group):
    """Execute program (POSIX version)"""

    if isinstance(args, (str, bytes)):
        args = [args]
    elif isinstance(args, os.PathLike):
        if shell:
            raise TypeError('path-like args is not allowed when '
                            'shell is true')
        args = [args]
    else:
        args = list(args)

    if shell:
        # On Android the default shell is at '/system/bin/sh'.
        unix_shell = ('/system/bin/sh' if
                  hasattr(sys, 'getandroidapilevel') else '/bin/sh')
        args = [unix_shell, "-c"] + args
        if executable:
            args[0] = executable

    if executable is None:
        executable = args[0]

    sys.audit("subprocess.Popen", executable, args, cwd, env)

    if (_USE_POSIX_SPAWN
            and os.path.dirname(executable)
            and preexec_fn is None
            and not close_fds
            and not pass_fds
            and cwd is None
            and (p2cread == -1 or p2cread > 2)
            and (c2pwrite == -1 or c2pwrite > 2)
            and (errwrite == -1 or errwrite > 2)
            and not start_new_session
            and process_group == -1
            and gid is None
            and gids is None
            and uid is None
            and umask < 0):
        self._posix_spawn(args, executable, env, restore_signals,
                          p2cread, p2cwrite,
                          c2pread, c2pwrite,
                          errread, errwrite)
        return

    orig_executable = executable

    # For transferring possible exec failure from child to parent.
    # Data format: "exception name:hex errno:description"
    # Pickle is not used; it is complex and involves memory allocation.
    errpipe_read, errpipe_write = os.pipe()
    # errpipe_write must not be in the standard io 0, 1, or 2 fd range.
    low_fds_to_close = []
    while errpipe_write < 3:
        low_fds_to_close.append(errpipe_write)
        errpipe_write = os.dup(errpipe_write)
    for low_fd in low_fds_to_close:
        os.close(low_fd)
    try:
        try:
            # We must avoid complex work that could involve
            # malloc or free in the child process to avoid
            # potential deadlocks, thus we do all this here.
            # and pass it to fork_exec()

            if env is not None:
                env_list = []
                for k, v in env.items():
                    k = os.fsencode(k)
                    if b'=' in k:
                        raise ValueError("illegal environment variable name")
                    env_list.append(k + b'=' + os.fsencode(v))
            else:
                env_list = None  # Use execv instead of execve.
            executable = os.fsencode(executable)
            if os.path.dirname(executable):
                executable_list = (executable,)
            else:
                # This matches the behavior of os._execvpe().
                executable_list = tuple(
                    os.path.join(os.fsencode(dir), executable)
                    for dir in os.get_exec_path(env))
            fds_to_keep = set(pass_fds)
            fds_to_keep.add(errpipe_write)
            self.pid = _fork_exec(
                    args, executable_list,
                    close_fds, tuple(sorted(map(int, fds_to_keep))),
                    cwd, env_list,
                    p2cread, p2cwrite, c2pread, c2pwrite,
                    errread, errwrite,
                    errpipe_read, errpipe_write,
                    restore_signals, start_new_session,
                    process_group, gid, gids, uid, umask,
                    preexec_fn, _USE_VFORK)
            self._child_created = True
        finally:
            # be sure the FD is closed no matter what
            os.close(errpipe_write)

        self._close_pipe_fds(p2cread, p2cwrite,
                             c2pread, c2pwrite,
                             errread, errwrite)

        # Wait for exec to fail or succeed; possibly raising an
        # exception (limited in size)
        errpipe_data = bytearray()
        while True:
            part = os.read(errpipe_read, 50000)
            errpipe_data += part
            if not part or len(errpipe_data) > 50000:
                break
    finally:
        # be sure the FD is closed no matter what
        os.close(errpipe_read)

    if errpipe_data:
        try:
            pid, sts = os.waitpid(self.pid, 0)
            if pid == self.pid:
                self._handle_exitstatus(sts)
            else:
                self.returncode = sys.maxsize
        except ChildProcessError:
            pass

        try:
            exception_name, hex_errno, err_msg = (
                    errpipe_data.split(b':', 2))
            # The encoding here should match the encoding
            # written in by the subprocess implementations
            # like _posixsubprocess
            err_msg = err_msg.decode()
        except ValueError:
            exception_name = b'SubprocessError'
            hex_errno = b'0'
            err_msg = 'Bad exception data from child: {!r}'.format(
                          bytes(errpipe_data))
        child_exception_type = getattr(
                builtins, exception_name.decode('ascii'),
                SubprocessError)
        if issubclass(child_exception_type, OSError) and hex_errno:
            errno_num = int(hex_errno, 16)
            child_exec_never_called = (err_msg == "noexec")
            if child_exec_never_called:
                err_msg = ""
                # The error must be from chdir(cwd).
                err_filename = cwd
            else:
                err_filename = orig_executable
            if errno_num != 0:
                err_msg = os.strerror(errno_num)
          raise child_exception_type(errno_num, err_msg, err_filename)

E FileNotFoundError: [Errno 2] No such file or directory: PosixPath('/root/collections/ansible_collections/dellemc/openmanage/roles/idrac_gather_facts')

/usr/lib64/python3.11/subprocess.py:1950: FileNotFoundError
======================================================= warnings summary ========================================================
../../../../omamEnv3.11/lib64/python3.11/site-packages/_pytest/nodes.py:356
/root/omamEnv3.11/lib64/python3.11/site-packages/pytest/nodes.py:356: PytestUnknownMarkWarning: Unknown pytest.mark.podman - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html
marker
= getattr(MARK_GEN, marker)

../../../../omamEnv3.11/lib64/python3.11/site-packages/_pytest/nodes.py:356
/root/omamEnv3.11/lib64/python3.11/site-packages/pytest/nodes.py:356: PytestUnknownMarkWarning: Unknown pytest.mark.molecule - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html
marker
= getattr(MARK_GEN, marker)

../../../../omamEnv3.11/lib64/python3.11/site-packages/_pytest/nodes.py:356
/root/omamEnv3.11/lib64/python3.11/site-packages/pytest/nodes.py:356: PytestUnknownMarkWarning: Unknown pytest.mark.no_driver - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html
marker
= getattr(MARK_GEN, marker)

../../../../omamEnv3.11/lib64/python3.11/site-packages/omsdk/sdkinfra.py:24
/root/omamEnv3.11/lib64/python3.11/site-packages/omsdk/sdkinfra.py:24: DeprecationWarning: the imp module is deprecated in favour of importlib and slated for removal in Python 3.12; see the module's documentation for alternative uses
import imp

../../../../omamEnv3.11/lib64/python3.11/site-packages/pysnmp/carrier/asyncore/base.py:9
/root/omamEnv3.11/lib64/python3.11/site-packages/pysnmp/carrier/asyncore/base.py:9: DeprecationWarning: The asyncore module is deprecated and will be removed in Python 3.12. The recommended replacement is asyncio
import asyncore

-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
==================================================== short test summary info ====================================================
FAILED roles/idrac_gather_facts/molecule/backplane/molecule.yml::test43 - Failed: Error code 1 returned by: /root/omamEnv3.11/bin/python3.11 -m molecule test -s backplane
FAILED roles/idrac_gather_facts/molecule/bios/molecule.yml::test44 - FileNotFoundError: [Errno 2] No such file or directory: PosixPath('/root/collections/ansible_collections/dellemc/openmanage/...
FAILED roles/idrac_gather_facts/molecule/controller/molecule.yml::test45 - FileNotFoundError: [Errno 2] No such file or directory: PosixPath('/root/collections/ansible_collections/dellemc/openmanage/...
FAILED roles/idrac_gather_facts/molecule/cpu/molecule.yml::test46 - FileNotFoundError: [Errno 2] No such file or directory: PosixPath('/root/collections/ansible_collections/dellemc/openmanage/...
FAILED roles/idrac_gather_facts/molecule/default/molecule.yml::test47 - FileNotFoundError: [Errno 2] No such file or directory: PosixPath('/root/collections/ansible_collections/dellemc/openmanage/...
FAILED roles/idrac_gather_facts/molecule/enclosure/molecule.yml::test48 - FileNotFoundError: [Errno 2] No such file or directory: PosixPath('/root/collections/ansible_collections/dellemc/openmanage/...
FAILED roles/idrac_gather_facts/molecule/enclosureemm/molecule.yml::test49 - FileNotFoundError: [Errno 2] No such file or directory: PosixPath('/root/collections/ansible_collections/dellemc/openmanage/...
FAILED roles/idrac_gather_facts/molecule/fan/molecule.yml::test50 - FileNotFoundError: [Errno 2] No such file or directory: PosixPath('/root/collections/ansible_collections/dellemc/openmanage/...
FAILED roles/idrac_gather_facts/molecule/firmware/molecule.yml::test51 - FileNotFoundError: [Errno 2] No such file or directory: PosixPath('/root/collections/ansible_collections/dellemc/openmanage/...
FAILED roles/idrac_gather_facts/molecule/hostnic/molecule.yml::test52 - FileNotFoundError: [Errno 2] No such file or directory: PosixPath('/root/collections/ansible_collections/dellemc/openmanage/...
FAILED roles/idrac_gather_facts/molecule/idrac/molecule.yml::test53 - FileNotFoundError: [Errno 2] No such file or directory: PosixPath('/root/collections/ansible_collections/dellemc/openmanage/...
FAILED roles/idrac_gather_facts/molecule/license/molecule.yml::test54 - FileNotFoundError: [Errno 2] No such file or directory: PosixPath('/root/collections/ansible_collections/dellemc/openmanage/...
FAILED roles/idrac_gather_facts/molecule/memory/molecule.yml::test55 - FileNotFoundError: [Errno 2] No such file or directory: PosixPath('/root/collections/ansible_collections/dellemc/openmanage/...
FAILED roles/idrac_gather_facts/molecule/negative/molecule.yml::test56 - FileNotFoundError: [Errno 2] No such file or directory: PosixPath('/root/collections/ansible_collections/dellemc/openmanage/...
FAILED roles/idrac_gather_facts/molecule/nic/molecule.yml::test57 - FileNotFoundError: [Errno 2] No such file or directory: PosixPath('/root/collections/ansible_collections/dellemc/openmanage/...
FAILED roles/idrac_gather_facts/molecule/passensor/molecule.yml::test58 - FileNotFoundError: [Errno 2] No such file or directory: PosixPath('/root/collections/ansible_collections/dellemc/openmanage/...
FAILED roles/idrac_gather_facts/molecule/pciedevice/molecule.yml::test59 - FileNotFoundError: [Errno 2] No such file or directory: PosixPath('/root/collections/ansible_collections/dellemc/openmanage/...
FAILED roles/idrac_gather_facts/molecule/physicaldisk/molecule.yml::test60 - FileNotFoundError: [Errno 2] No such file or directory: PosixPath('/root/collections/ansible_collections/dellemc/openmanage/...
FAILED roles/idrac_gather_facts/molecule/powersupply/molecule.yml::test61 - FileNotFoundError: [Errno 2] No such file or directory: PosixPath('/root/collections/ansible_collections/dellemc/openmanage/...
FAILED roles/idrac_gather_facts/molecule/secureboot/molecule.yml::test62 - FileNotFoundError: [Errno 2] No such file or directory: PosixPath('/root/collections/ansible_collections/dellemc/openmanage/...
FAILED roles/idrac_gather_facts/molecule/sensorsbattery/molecule.yml::test63 - FileNotFoundError: [Errno 2] No such file or directory: PosixPath('/root/collections/ansible_collections/dellemc/openmanage/...
FAILED roles/idrac_gather_facts/molecule/sensorsintrusion/molecule.yml::test64 - FileNotFoundError: [Errno 2] No such file or directory: PosixPath('/root/collections/ansible_collections/dellemc/openmanage/...
FAILED roles/idrac_gather_facts/molecule/sensorsvoltage/molecule.yml::test65 - FileNotFoundError: [Errno 2] No such file or directory: PosixPath('/root/collections/ansible_collections/dellemc/openmanage/...
FAILED roles/idrac_gather_facts/molecule/systemmetrics/molecule.yml::test66 - FileNotFoundError: [Errno 2] No such file or directory: PosixPath('/root/collections/ansible_collections/dellemc/openmanage/...
FAILED roles/idrac_gather_facts/molecule/virtualdisk/molecule.yml::test67 - FileNotFoundError: [Errno 2] No such file or directory: PosixPath('/root/collections/ansible_collections/dellemc/openmanage/...
======================================= 25 failed, 2691 deselected, 5 warnings in 27.26s ========================================

Am I doing something wrong here ?