### Summary

Alpine 3.18 is [expected](https://alpinelinux.org/releases/) in May. This is a remote VM addition and an in-place container update.

Alpine 3.18 has been [released](https://www.alpinelinux.org/posts/Alpine-3.18.0-released.html).

### Issue Type

Feature Idea

### Component Name

`ansible-test`
"""Wrapper around shutil.rmtree with additional error handling."""
    for retries in range(10, -1, -1):
        try:
            display.info(f'rmtree: {path} ({retries} attempts remaining) ... ')
            shutil.rmtree(path)
        except Exception:
            if not path.exists():
                display.info(f'rmtree: {path} (not found)')
                return
            if not path.is_dir():
                display.info(f'rmtree: {path} (not a directory)')
                return
            if retries:
                continue
            raise
        else:
            display.info(f'rmtree: {path} (done)')
            return
def format_env(env: dict[str, str]) -> str:
    """Format an env dict for injection into a shell command and return the resulting string."""
    if env:
        return ' '.join(f'{shlex.quote(key)}={shlex.quote(value)}' for key, value in env.items()) + ' '
    return ''
class DockerInfo: