Project

Profile

Help

Issue #6645

closed

Issue #6623: pulpcore and plugin pre-flight check seems to not be enforcing and then installer fails at collectstatic

pre-flight check does not work properly when it needs a prereq role

Added by mdepaulo@redhat.com over 4 years ago. Updated over 4 years ago.

Status:
CLOSED - CURRENTRELEASE
Priority:
Normal
Category:
Installer - Moved to GitHub issues
Sprint/Milestone:
-
Start date:
Due date:
Estimated time:
Severity:
2. Medium
Version:
Platform Release:
OS:
Triaged:
Yes
Groomed:
No
Sprint Candidate:
No
Tags:
Sprint:
Sprint 72
Quarter:

Description

Consider either scenario:

  1. A user installs pulp for the 1st time with pulp_installer, including a plugin with a prereq role (pulp_rpm).
  2. A user upgrades pulp with pulp_instaler, including a new version of the prereq role.

The following happens:

  1. The preflight check happens. It actually fails to evaluate compatibility due to to (new) C dependencies to build the plugin with a prereq role being installed.
  2. The output from that failure to evaluate is not caught, it is returned as success regardless.
  3. The plugin prereq role gets run immediately after this.
  4. pulpcore & plugins get installed, regardless of compatibility or not.

Possible solutions:

  1. Run the pre-flight check after the prereq role(s). The system already gets modified a little before then anyway, which could break plugins just like the prereq role does.
  2. Record failure (ansible "rescue" task/block attribute) and re-run the pre-flight check later if it failed to evaluate.

Output (I added this task after the check):

        - debug: var=compatibility
TASK [pulp : debug] ************************************************************
ok: [pulp3-sandbox-fedora31] => {
    "compatibility": {
        "changed": false,
        "cmd": [
            "/usr/local/lib/pulp/bin/pip-compile"
        ],
        "delta": "0:00:08.244381",
        "end": "2020-05-04 21:41:15.578898",
        "failed": false,
        "failed_when_result": false,
        "msg": "non-zero return code",
        "rc": 1,
        "start": "2020-05-04 21:41:07.334517",
        "stderr": "EDITED: A GIANT BLOB VERSION OF stderr_lines"
        "stderr_lines": [
            "    ERROR: Command errored out with exit status 1:",
            "     command: /usr/local/lib/pulp/bin/python3 /usr/local/lib/pulp/lib64/python3.7/site-packages/pip install --ignore-installed --no-user --prefix /tmp/pip-build-env-q6uy_p34/overlay --no-warn-script-location --no-binary :none: --only-binary :none: -i https://pypi.org/simple -- setuptools wheel pycairo",
            "         cwd: None",
            "    Complete output (31 lines):",
            "    Collecting setuptools",
            "      Using cached setuptools-46.1.3-py3-none-any.whl (582 kB)",
            "    Collecting wheel",
            "      Downloading wheel-0.34.2-py2.py3-none-any.whl (26 kB)",
            "    Collecting pycairo",
            "      Downloading pycairo-1.19.1.tar.gz (205 kB)",
            "    Could not build wheels for pycairo, since package 'wheel' is not installed.",
            "    Installing collected packages: setuptools, wheel, pycairo",
            "        Running setup.py install for pycairo: started",
            "        Running setup.py install for pycairo: finished with status 'error'",
            "        ERROR: Command errored out with exit status 1:",
            "         command: /usr/local/lib/pulp/bin/python3 -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '\"'\"'/tmp/pip-install-3kgu2pft/pycairo/setup.py'\"'\"'; __file__='\"'\"'/tmp/pip-install-3kgu2pft/pycairo/setup.py'\"'\"';f=getattr(tokenize, '\"'\"'open'\"'\"', open)(__file__);code=f.read().replace('\"'\"'\\r\\n'\"'\"', '\"'\"'\\n'\"'\"');f.close();exec(compile(code, __file__, '\"'\"'exec'\"'\"'))' install --record /tmp/pip-record-5xpsg3b4/install-record.txt --single-version-externally-managed --prefix /tmp/pip-build-env-q6uy_p34/overlay --compile --install-headers /usr/local/lib/pulp/include/site/python3.7/pycairo",
            "             cwd: /tmp/pip-install-3kgu2pft/pycairo/",
            "        Complete output (15 lines):",
            "        running install",
            "        running build",
            "        running build_py",
            "        creating build",
            "        creating build/lib.linux-x86_64-3.7",
            "        creating build/lib.linux-x86_64-3.7/cairo",
            "        copying cairo/__init__.py -> build/lib.linux-x86_64-3.7/cairo",
            "        copying cairo/__init__.pyi -> build/lib.linux-x86_64-3.7/cairo",
            "        copying cairo/py.typed -> build/lib.linux-x86_64-3.7/cairo",
            "        running build_ext",
            "        Package cairo was not found in the pkg-config search path.",
            "        Perhaps you should add the directory containing `cairo.pc'",
            "        to the PKG_CONFIG_PATH environment variable",
            "        Package 'cairo', required by 'virtual:world', not found",
            "        Command '['pkg-config', '--print-errors', '--exists', 'cairo >= 1.13.1']' returned non-zero exit status 1.",
            "        ----------------------------------------",
            "    ERROR: Command errored out with exit status 1: /usr/local/lib/pulp/bin/python3 -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '\"'\"'/tmp/pip-install-3kgu2pft/pycairo/setup.py'\"'\"'; __file__='\"'\"'/tmp/pip-install-3kgu2pft/pycairo/setup.py'\"'\"';f=getattr(tokenize, '\"'\"'open'\"'\"', open)(__file__);code=f.read().replace('\"'\"'\\r\\n'\"'\"', '\"'\"'\\n'\"'\"');f.close();exec(compile(code, __file__, '\"'\"'exec'\"'\"'))' install --record /tmp/pip-record-5xpsg3b4/install-record.txt --single-version-externally-managed --prefix /tmp/pip-build-env-q6uy_p34/overlay --compile --install-headers /usr/local/lib/pulp/include/site/python3.7/pycairo Check the logs for full command output.",
            "    ----------------------------------------",
            "Traceback (most recent call last):",
            "  File \"/usr/local/lib/pulp/bin/pip-compile\", line 8, in <module>",
            "    sys.exit(cli())",
            "  File \"/usr/local/lib/pulp/lib64/python3.7/site-packages/click/core.py\", line 829, in __call__",
            "    return self.main(*args, **kwargs)",
            "  File \"/usr/local/lib/pulp/lib64/python3.7/site-packages/click/core.py\", line 782, in main",
            "    rv = self.invoke(ctx)",
            "  File \"/usr/local/lib/pulp/lib64/python3.7/site-packages/click/core.py\", line 1066, in invoke",
            "    return ctx.invoke(self.callback, **ctx.params)",
            "  File \"/usr/local/lib/pulp/lib64/python3.7/site-packages/click/core.py\", line 610, in invoke",
            "    return callback(*args, **kwargs)",
            "  File \"/usr/local/lib/pulp/lib64/python3.7/site-packages/click/decorators.py\", line 21, in new_func",
            "    return f(get_current_context(), *args, **kwargs)",
            "  File \"/usr/local/lib/pulp/lib64/python3.7/site-packages/piptools/scripts/compile.py\", line 392, in cli",
            "    results = resolver.resolve(max_rounds=max_rounds)",
            "  File \"/usr/local/lib/pulp/lib64/python3.7/site-packages/piptools/resolver.py\", line 166, in resolve",
            "    has_changed, best_matches = self._resolve_one_round()",
            "  File \"/usr/local/lib/pulp/lib64/python3.7/site-packages/piptools/resolver.py\", line 257, in _resolve_one_round",
            "    their_constraints.extend(self._iter_dependencies(best_match))",
            "  File \"/usr/local/lib/pulp/lib64/python3.7/site-packages/piptools/resolver.py\", line 363, in _iter_dependencies",
            "    dependencies = self.repository.get_dependencies(ireq)",
            "  File \"/usr/local/lib/pulp/lib64/python3.7/site-packages/piptools/repositories/local.py\", line 74, in get_dependencies",
            "    return self.repository.get_dependencies(ireq)",
            "  File \"/usr/local/lib/pulp/lib64/python3.7/site-packages/piptools/repositories/pypi.py\", line 224, in get_dependencies",
            "    download_dir, ireq, wheel_cache",
            "  File \"/usr/local/lib/pulp/lib64/python3.7/site-packages/piptools/repositories/pypi.py\", line 180, in resolve_reqs",
            "    results = resolver._resolve_one(reqset, ireq)",
            "  File \"/usr/local/lib/pulp/lib64/python3.7/site-packages/pip/_internal/resolution/legacy/resolver.py\", line 362, in _resolve_one",
            "    abstract_dist = self._get_abstract_dist_for(req_to_install)",
            "  File \"/usr/local/lib/pulp/lib64/python3.7/site-packages/pip/_internal/resolution/legacy/resolver.py\", line 314, in _get_abstract_dist_for",
            "    abstract_dist = self.preparer.prepare_linked_requirement(req)",
            "  File \"/usr/local/lib/pulp/lib64/python3.7/site-packages/pip/_internal/operations/prepare.py\", line 431, in prepare_linked_requirement",
            "    req, self.req_tracker, self.finder, self.build_isolation,",
            "  File \"/usr/local/lib/pulp/lib64/python3.7/site-packages/pip/_internal/operations/prepare.py\", line 85, in _get_prepared_distribution",
            "    abstract_dist.prepare_distribution_metadata(finder, build_isolation)",
            "  File \"/usr/local/lib/pulp/lib64/python3.7/site-packages/pip/_internal/distributions/sdist.py\", line 38, in prepare_distribution_metadata",
            "    self._setup_isolation(finder)",
            "  File \"/usr/local/lib/pulp/lib64/python3.7/site-packages/pip/_internal/distributions/sdist.py\", line 68, in _setup_isolation",
            "    \"Installing build dependencies\"",
            "  File \"/usr/local/lib/pulp/lib64/python3.7/site-packages/pip/_internal/build_env.py\", line 199, in install_requirements",
            "    call_subprocess(args, spinner=spinner)",
            "  File \"/usr/local/lib/pulp/lib64/python3.7/site-packages/pip/_internal/utils/subprocess.py\", line 241, in call_subprocess",
            "    raise InstallationError(exc_msg)",
            "pip._internal.exceptions.InstallationError: Command errored out with exit status 1: /usr/local/lib/pulp/bin/python3 /usr/local/lib/pulp/lib64/python3.7/site-packages/pip install --ignore-installed --no-user --prefix /tmp/pip-build-env-q6uy_p34/overlay --no-warn-script-location --no-binary :none: --only-binary :none: -i https://pypi.org/simple -- setuptools wheel pycairo Check the logs for full command output."
        ],
        "stdout": "",
        "stdout_lines": []
    }
}
Actions #1

Updated by fao89 over 4 years ago

  • Triaged changed from No to Yes
  • Sprint set to Sprint 72
Actions #2

Updated by mdepaulo@redhat.com over 4 years ago

  • Subject changed from pre-flight check not work properly when it needs a prereq role to pre-flight check does not work properly when it needs a prereq role
Actions #3

Updated by mdepaulo@redhat.com over 4 years ago

  • Status changed from ASSIGNED to POST

Added by Mike DePaulo over 4 years ago

Revision 28d6b80f | View on GitHub

Problem: pre-flight check does not work properly when it needs a prereq role

Solution: Run it only once and allow no errors if there are 0 prereq roles. Run it 2x and allow errors (but not failures) only on the 1st time if there are prereq roles.

fixes: #6645 pre-flight check does not work properly when it needs a prereq role https://pulp.plan.io/issues/6645

re: #6623 pulpcore and plugin pre-flight check seems to not be enforcing and then installer fails at collectstatic https://pulp.plan.io/issues/6623

Added by Mike DePaulo over 4 years ago

Revision 28d6b80f | View on GitHub

Problem: pre-flight check does not work properly when it needs a prereq role

Solution: Run it only once and allow no errors if there are 0 prereq roles. Run it 2x and allow errors (but not failures) only on the 1st time if there are prereq roles.

fixes: #6645 pre-flight check does not work properly when it needs a prereq role https://pulp.plan.io/issues/6645

re: #6623 pulpcore and plugin pre-flight check seems to not be enforcing and then installer fails at collectstatic https://pulp.plan.io/issues/6623

Added by Mike DePaulo over 4 years ago

Revision cd0e6697 | View on GitHub

Problem: pre-flight check errors when there is an upgraded pip

in a system-wide venv

and when the package is installed as an RPM in the prereq role at an acceptable version, so the pre-flight check should not have tried to use a newer version from PyPI.

This is a regression from #6645. Previously many errors were ignored, this error should still be ignored too until system-wide packages support is removed.

fixes: #6690 pre-flight check errors when there is an upgraded pip in a system-wide venv https://pulp.plan.io/issues/6690

re: #6645 pre-flight check does not work properly when it needs a prereq role https://pulp.plan.io/issues/6645

Added by Mike DePaulo over 4 years ago

Revision cd0e6697 | View on GitHub

Problem: pre-flight check errors when there is an upgraded pip

in a system-wide venv

and when the package is installed as an RPM in the prereq role at an acceptable version, so the pre-flight check should not have tried to use a newer version from PyPI.

This is a regression from #6645. Previously many errors were ignored, this error should still be ignored too until system-wide packages support is removed.

fixes: #6690 pre-flight check errors when there is an upgraded pip in a system-wide venv https://pulp.plan.io/issues/6690

re: #6645 pre-flight check does not work properly when it needs a prereq role https://pulp.plan.io/issues/6645

Actions #4

Updated by Anonymous over 4 years ago

  • Status changed from POST to MODIFIED
Actions #5

Updated by bmbouter over 4 years ago

  • Category set to Installer - Moved to GitHub issues
  • Tags deleted (Pulp 3 installer)
Actions #6

Updated by dkliban@redhat.com over 4 years ago

  • Status changed from MODIFIED to CLOSED - CURRENTRELEASE

Also available in: Atom PDF