Merge branch 'master' into fix-pip.list-local-packages

This commit is contained in:
Nicholas Hughes 2023-01-10 16:50:44 -05:00 committed by GitHub
commit 54956c94e5
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
196 changed files with 3768 additions and 3222 deletions

View file

@ -3,6 +3,9 @@ name: CI
on:
push: {}
pull_request: {}
schedule:
# https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#onschedule
- cron: '0 */8 * * *' # Run every 8 hours
workflow_dispatch:
inputs:
testrun-type:
@ -51,11 +54,29 @@ jobs:
repo:
- added|modified:
- '**'
doc-requirements:
- added|modified: &doc_requirements
- requirements/static/ci/py3.*/docs.txt
lint-requirements:
- added|modified: &lint_requirements
- requirements/static/ci/py3.*/lint.txt
test_requirements:
- added|modified: &test_requirements
- requirements/static/ci/py3.*/darwin.txt
- requirements/static/ci/py3.*/linux.txt
- requirements/static/ci/py3.*/freebsd.txt
- requirements/static/ci/py3.*/windows.txt
- requirements/static/ci/py3.*/darwin-crypto.txt
- requirements/static/ci/py3.*/linux-crypto.txt
- requirements/static/ci/py3.*/freebsd-crypto.txt
- requirements/static/ci/py3.*/windows-crypto.txt
deleted:
- deleted:
- '**'
docs:
- doc/**
- added|modified:
- doc/**
- *doc_requirements
salt:
- added|modified: &salt_added_modified
- setup.py
@ -66,9 +87,10 @@ jobs:
tests:
- added|modified: &tests_added_modified
- tests/**/*.py
pylintrc:
lint:
- added|modified:
- .pylintrc
- *lint_requirements
testrun:
- added|modified:
- *salt_added_modified
@ -117,12 +139,12 @@ jobs:
echo '${{ steps.define-testrun.outputs.testrun }}' | jq -C '.'
- name: Check Contents of generated testrun-changed-files.txt
if: ${{ github.event_name == 'pull_request' }}
if: ${{ fromJSON(steps.define-testrun.outputs.testrun)['type'] != 'full' }}
run:
cat testrun-changed-files.txt
cat testrun-changed-files.txt || true
- name: Upload testrun-changed-files.txt
if: ${{ github.event_name == 'pull_request' }}
if: ${{ fromJSON(steps.define-testrun.outputs.testrun)['type'] != 'full' }}
uses: actions/upload-artifact@v3
with:
name: testrun-changed-files.txt

View file

@ -15,7 +15,7 @@ jobs:
if: ${{ github.event_name == 'push' || fromJSON(inputs.changed-files)['docs'] || fromJSON(inputs.changed-files)['salt'] }}
container:
image: python:3.8.6-slim-buster
image: python:3.8-slim-buster
steps:
- name: Install System Deps
@ -75,7 +75,7 @@ jobs:
if: ${{ github.event_name == 'push' || fromJSON(inputs.changed-files)['docs'] }}
container:
image: python:3.8.6-slim-buster
image: python:3.8-slim-buster
steps:
- name: Install System Deps

View file

@ -12,10 +12,10 @@ jobs:
Salt:
name: Lint Salt's Source Code
runs-on: ubuntu-latest
if: ${{ fromJSON(inputs.changed-files)['salt'] || fromJSON(inputs.changed-files)['pylintrc'] }}
if: ${{ fromJSON(inputs.changed-files)['salt'] || fromJSON(inputs.changed-files)['lint'] }}
container:
image: python:3.8.6-slim-buster
image: python:3.8-slim-buster
steps:
- name: Install System Deps
@ -41,14 +41,14 @@ jobs:
nox --install-only --forcecolor -e lint-salt
- name: Lint Changed Files
if: github.event_name == 'pull_request' && fromJSON(inputs.changed-files)['salt'] && ! fromJSON(inputs.changed-files)['pylintrc']
if: github.event_name == 'pull_request' && fromJSON(inputs.changed-files)['salt'] && ! fromJSON(inputs.changed-files)['lint']
env:
SKIP_REQUIREMENTS_INSTALL: YES
run: |
nox --forcecolor -e lint-salt -- ${{ join(fromJSON(inputs.changed-files)['salt_files'], ' ') }}
- name: Lint ALL Files
if: github.event_name != 'pull_request' || fromJSON(inputs.changed-files)['pylintrc']
if: github.event_name != 'pull_request' || fromJSON(inputs.changed-files)['lint']
env:
SKIP_REQUIREMENTS_INSTALL: YES
run: |
@ -71,10 +71,10 @@ jobs:
Tests:
name: Lint Salt's Test Suite
runs-on: ubuntu-latest
if: ${{ fromJSON(inputs.changed-files)['tests'] || fromJSON(inputs.changed-files)['pylintrc'] }}
if: ${{ fromJSON(inputs.changed-files)['tests'] || fromJSON(inputs.changed-files)['lint'] }}
container:
image: python:3.8.6-slim-buster
image: python:3.8-slim-buster
steps:
- name: Install System Deps
@ -100,14 +100,14 @@ jobs:
nox --install-only --forcecolor -e lint-tests
- name: Lint Changed Files
if: github.event_name == 'pull_request' && fromJSON(inputs.changed-files)['tests'] && ! fromJSON(inputs.changed-files)['pylintrc']
if: github.event_name == 'pull_request' && fromJSON(inputs.changed-files)['tests'] && ! fromJSON(inputs.changed-files)['lint']
env:
SKIP_REQUIREMENTS_INSTALL: YES
run: |
nox --forcecolor -e lint-tests -- ${{ join(fromJSON(inputs.changed-files)['tests_files'], ' ') }}
- name: Lint ALL Files
if: github.event_name != 'pull_request' || fromJSON(inputs.changed-files)['pylintrc']
if: github.event_name != 'pull_request' || fromJSON(inputs.changed-files)['lint']
env:
SKIP_REQUIREMENTS_INSTALL: YES
run: |

View file

@ -27,7 +27,7 @@ jobs:
runs-on: ubuntu-latest
container:
image: python:3.8.6-slim-buster
image: python:3.8-slim-buster
steps:
@ -93,7 +93,7 @@ jobs:
runs-on: ubuntu-latest
container:
image: python:3.8.6-slim-buster
image: python:3.8-slim-buster
steps:
@ -159,7 +159,7 @@ jobs:
runs-on: ubuntu-latest
container:
image: python:3.8.6-slim-buster
image: python:3.8-slim-buster
steps:
- name: Install System Deps

4
.gitignore vendored
View file

@ -70,8 +70,8 @@ tags
*.mo
.doctrees
# Allow a user to set their own _version.py for testing
_version.py
# Allow a user to set their own _version.txt for testing
_version.txt
# Ignore auto generated _syspaths.py file
_syspaths.py

View file

@ -8,18 +8,18 @@ repos:
hooks:
# ----- Packaging Requirements ------------------------------------------------------------------------------------>
## - id: pip-tools-compile
## alias: compile-pkg-linux-3.6-zmq-requirements
## name: Linux Packaging Py3.6 ZeroMQ Requirements
## files: ^requirements/((base|zeromq|crypto)\.txt|static/pkg/(linux\.in|py3\.6/linux\.txt))$
## pass_filenames: false
## args:
## - -v
## - --py-version=3.6
## - --platform=linux
## - --include=requirements/base.txt
## - --include=requirements/zeromq.txt
## - requirements/static/pkg/linux.in
- id: pip-tools-compile
alias: compile-pkg-linux-3.6-zmq-requirements
name: Linux Packaging Py3.6 ZeroMQ Requirements
files: ^requirements/((base|zeromq|crypto)\.txt|static/pkg/(linux\.in|py3\.6/linux\.txt))$
pass_filenames: false
args:
- -v
- --py-version=3.6
- --platform=linux
- --include=requirements/base.txt
- --include=requirements/zeromq.txt
- requirements/static/pkg/linux.in
- id: pip-tools-compile
alias: compile-pkg-linux-3.7-zmq-requirements
@ -200,22 +200,22 @@ repos:
# <---- Packaging Requirements -------------------------------------------------------------------------------------
# ----- CI Requirements ------------------------------------------------------------------------------------------->
## - id: pip-tools-compile
## alias: compile-ci-linux-3.6-zmq-requirements
## name: Linux CI Py3.6 ZeroMQ Requirements
## files: ^requirements/((base|zeromq|pytest)\.txt|static/((ci|pkg)/(linux\.in|common\.in)|pkg/py3\.6/linux\.txt))$
## pass_filenames: false
## args:
## - -v
## - --py-version=3.6
## - --platform=linux
## - --include=requirements/base.txt
## - --include=requirements/zeromq.txt
## - --include=requirements/pytest.txt
## - --include=requirements/static/pkg/linux.in
## - --include=requirements/static/ci/common.in
## - --pip-args=--constraint=requirements/static/pkg/py{py_version}/linux.txt
## - requirements/static/ci/linux.in
- id: pip-tools-compile
alias: compile-ci-linux-3.6-zmq-requirements
name: Linux CI Py3.6 ZeroMQ Requirements
files: ^requirements/((base|zeromq|pytest)\.txt|static/((ci|pkg)/(linux\.in|common\.in)|pkg/py3\.6/linux\.txt))$
pass_filenames: false
args:
- -v
- --py-version=3.6
- --platform=linux
- --include=requirements/base.txt
- --include=requirements/zeromq.txt
- --include=requirements/pytest.txt
- --include=requirements/static/pkg/linux.in
- --include=requirements/static/ci/common.in
- --pip-args=--constraint=requirements/static/pkg/py{py_version}/linux.txt
- requirements/static/ci/linux.in
- id: pip-tools-compile
alias: compile-ci-linux-3.7-zmq-requirements
@ -285,18 +285,18 @@ repos:
- --pip-args=--constraint=requirements/static/pkg/py{py_version}/linux.txt
- requirements/static/ci/linux.in
## - id: pip-tools-compile
## alias: compile-ci-linux-crypto-3.6-requirements
## name: Linux CI Py3.6 Crypto Requirements
## files: ^requirements/(crypto\.txt|static/ci/(crypto\.in|py3\.6/linux-crypto\.txt))$
## pass_filenames: false
## args:
## - -v
## - --py-version=3.6
## - --platform=linux
## - --out-prefix=linux
## - --pip-args=--constraint=requirements/static/ci/py{py_version}/linux.txt
## - requirements/static/ci/crypto.in
- id: pip-tools-compile
alias: compile-ci-linux-crypto-3.6-requirements
name: Linux CI Py3.6 Crypto Requirements
files: ^requirements/(crypto\.txt|static/ci/(crypto\.in|py3\.6/linux-crypto\.txt))$
pass_filenames: false
args:
- -v
- --py-version=3.6
- --platform=linux
- --out-prefix=linux
- --pip-args=--constraint=requirements/static/ci/py{py_version}/linux.txt
- requirements/static/ci/crypto.in
- id: pip-tools-compile
alias: compile-ci-linux-crypto-3.7-requirements
@ -651,21 +651,21 @@ repos:
# ----- Cloud CI Requirements ------------------------------------------------------------------------------------->
## - id: pip-tools-compile
## alias: compile-ci-cloud-3.6-requirements
## name: Cloud CI Py3.6 Requirements
## files: ^requirements/((base|zeromq|pytest)\.txt|static/(pkg/linux\.in|ci/((cloud|common)\.in|py3\.6/cloud\.txt)))$
## pass_filenames: false
## args:
## - -v
## - --py-version=3.6
## - --include=requirements/base.txt
## - --include=requirements/zeromq.txt
## - --include=requirements/pytest.txt
## - --include=requirements/static/pkg/linux.in
## - --include=requirements/static/ci/common.in
## - --pip-args=--constraint=requirements/static/pkg/py{py_version}/linux.txt
## - requirements/static/ci/cloud.in
- id: pip-tools-compile
alias: compile-ci-cloud-3.6-requirements
name: Cloud CI Py3.6 Requirements
files: ^requirements/((base|zeromq|pytest)\.txt|static/(pkg/linux\.in|ci/((cloud|common)\.in|py3\.6/cloud\.txt)))$
pass_filenames: false
args:
- -v
- --py-version=3.6
- --include=requirements/base.txt
- --include=requirements/zeromq.txt
- --include=requirements/pytest.txt
- --include=requirements/static/pkg/linux.in
- --include=requirements/static/ci/common.in
- --pip-args=--constraint=requirements/static/pkg/py{py_version}/linux.txt
- requirements/static/ci/cloud.in
- id: pip-tools-compile
alias: compile-ci-cloud-3.7-requirements
@ -733,22 +733,22 @@ repos:
# <---- Cloud CI Requirements --------------------------------------------------------------------------------------
# ----- Doc CI Requirements --------------------------------------------------------------------------------------->
## - id: pip-tools-compile
## alias: compile-doc-requirements
## name: Docs CI Py3.6 Requirements
## files: ^requirements/((base|zeromq|pytest)\.txt|static/ci/(docs|common|linux)\.in|static/pkg/linux\.in|static/pkg/.*/linux\.txt)$
## pass_filenames: false
## args:
## - -v
## - --py-version=3.6
## - --platform=linux
## - --include=requirements/base.txt
## - --include=requirements/zeromq.txt
## - --include=requirements/static/pkg/linux.in
## - --include=requirements/static/ci/linux.in
## - --include=requirements/static/ci/common.in
## - --pip-args=--constraint=requirements/static/ci/py{py_version}/linux.txt
## - requirements/static/ci/docs.in
- id: pip-tools-compile
alias: compile-doc-requirements
name: Docs CI Py3.6 Requirements
files: ^requirements/((base|zeromq|pytest)\.txt|static/ci/(docs|common|linux)\.in|static/pkg/linux\.in|static/pkg/.*/linux\.txt)$
pass_filenames: false
args:
- -v
- --py-version=3.6
- --platform=linux
- --include=requirements/base.txt
- --include=requirements/zeromq.txt
- --include=requirements/static/pkg/linux.in
- --include=requirements/static/ci/linux.in
- --include=requirements/static/ci/common.in
- --pip-args=--constraint=requirements/static/ci/py{py_version}/linux.txt
- requirements/static/ci/docs.in
- id: pip-tools-compile
alias: compile-doc-requirements
@ -821,22 +821,22 @@ repos:
# <---- Doc CI Requirements ----------------------------------------------------------------------------------------
# ----- Lint CI Requirements -------------------------------------------------------------------------------------->
## - id: pip-tools-compile
## alias: compile-ci-lint-3.6-requirements
## name: Lint CI Py3.6 Requirements
## files: ^requirements/((base|zeromq)\.txt|static/(pkg/linux\.in|ci/(linux\.in|common\.in|lint\.in|py3\.6/linux\.txt)))$
## pass_filenames: false
## args:
## - -v
## - --py-version=3.6
## - --platform=linux
## - --include=requirements/base.txt
## - --include=requirements/zeromq.txt
## - --include=requirements/static/pkg/linux.in
## - --include=requirements/static/ci/linux.in
## - --include=requirements/static/ci/common.in
## - --pip-args=--constraint=requirements/static/ci/py{py_version}/linux.txt
## - requirements/static/ci/lint.in
- id: pip-tools-compile
alias: compile-ci-lint-3.6-requirements
name: Lint CI Py3.6 Requirements
files: ^requirements/((base|zeromq)\.txt|static/(pkg/linux\.in|ci/(linux\.in|common\.in|lint\.in|py3\.6/linux\.txt)))$
pass_filenames: false
args:
- -v
- --py-version=3.6
- --platform=linux
- --include=requirements/base.txt
- --include=requirements/zeromq.txt
- --include=requirements/static/pkg/linux.in
- --include=requirements/static/ci/linux.in
- --include=requirements/static/ci/common.in
- --pip-args=--constraint=requirements/static/ci/py{py_version}/linux.txt
- requirements/static/ci/lint.in
- id: pip-tools-compile
alias: compile-ci-lint-3.7-requirements
@ -909,17 +909,17 @@ repos:
# <---- Lint CI Requirements ---------------------------------------------------------------------------------------
# ----- Changelog ------------------------------------------------------------------------------------------------->
## - id: pip-tools-compile
## alias: compile-ci-changelog-3.6-requirements
## name: Changelog CI Py3.6 Requirements
## files: ^requirements/static/ci/(changelog\.in|py3\.6/(changelog|linux)\.txt)$
## pass_filenames: false
## args:
## - -v
## - --py-version=3.6
## - --platform=linux
## - --pip-args=--constraint=requirements/static/ci/py{py_version}/linux.txt
## - requirements/static/ci/changelog.in
- id: pip-tools-compile
alias: compile-ci-changelog-3.6-requirements
name: Changelog CI Py3.6 Requirements
files: ^requirements/static/ci/(changelog\.in|py3\.6/(changelog|linux)\.txt)$
pass_filenames: false
args:
- -v
- --py-version=3.6
- --platform=linux
- --pip-args=--constraint=requirements/static/ci/py{py_version}/linux.txt
- requirements/static/ci/changelog.in
- id: pip-tools-compile
alias: compile-ci-changelog-3.7-requirements
@ -971,16 +971,16 @@ repos:
# <---- Changelog --------------------------------------------------------------------------------------------------
# ----- Invoke ---------------------------------------------------------------------------------------------------->
## - id: pip-tools-compile
## alias: compile-ci-invoke-3.6-requirements
## name: Linux CI Py3.6 Invoke Requirements
## files: ^requirements/static/ci/(invoke\.in|py3.6/(invoke|linux)\.txt)$
## pass_filenames: false
## args:
## - -v
## - --py-version=3.6
## - --pip-args=--constraint=requirements/static/ci/py{py_version}/linux.txt
## - requirements/static/ci/invoke.in
- id: pip-tools-compile
alias: compile-ci-invoke-3.6-requirements
name: Linux CI Py3.6 Invoke Requirements
files: ^requirements/static/ci/(invoke\.in|py3.6/(invoke|linux)\.txt)$
pass_filenames: false
args:
- -v
- --py-version=3.6
- --pip-args=--constraint=requirements/static/ci/py{py_version}/linux.txt
- requirements/static/ci/invoke.in
- id: pip-tools-compile
alias: compile-ci-invoke-3.7-requirements
@ -1186,6 +1186,8 @@ repos:
- distro==1.7.0
- jinja2==3.0.3
- msgpack==1.0.3
- packaging
- looseversion
- repo: https://github.com/saltstack/invoke-pre-commit
rev: v1.9.0
@ -1203,6 +1205,8 @@ repos:
- distro==1.7.0
- jinja2==3.0.3
- msgpack==1.0.3
- packaging
- looseversion
- repo: https://github.com/saltstack/invoke-pre-commit
rev: v1.9.0
@ -1224,6 +1228,8 @@ repos:
- distro==1.7.0
- jinja2==3.0.3
- msgpack==1.0.3
- packaging
- looseversion
- repo: https://github.com/saltstack/invoke-pre-commit
rev: v1.9.0
@ -1245,6 +1251,8 @@ repos:
- distro==1.7.0
- jinja2==3.0.3
- msgpack==1.0.3
- packaging
- looseversion
- repo: https://github.com/saltstack/invoke-pre-commit
rev: v1.9.0
@ -1268,6 +1276,8 @@ repos:
- distro==1.7.0
- jinja2==3.0.3
- msgpack==1.0.3
- packaging
- looseversion
- repo: https://github.com/pre-commit/mirrors-mypy
rev: v0.971

View file

@ -696,7 +696,8 @@ allowed-3rd-party-modules=msgpack,
tempfile,
fnmatch,
ptscripts,
packaging
packaging,
looseversion
[EXCEPTIONS]

View file

@ -19,6 +19,7 @@ recursive-include conf *
recursive-include pkg *
recursive-include salt *.jinja
recursive-include templates *
include salt/_version.txt
include salt/templates/git/*
include salt/templates/lxc/*
include salt/utils/pyinstaller/rthooks.dat

1
changelog/31468.added Normal file
View file

@ -0,0 +1 @@
Allow users to enable 'queue=True' for all state runs via config file

1
changelog/62185.fixed Normal file
View file

@ -0,0 +1 @@
Restored Salt's DeprecationWarnings

1
changelog/63315.added Normal file
View file

@ -0,0 +1 @@
Added deprecation_warning test state for ensuring that deprecation warnings are correctly emitted.

1
changelog/63356.added Normal file
View file

@ -0,0 +1 @@
Allow max queue size setting for state runs to prevent performance problems from queue growth

1
changelog/63383.changed Normal file
View file

@ -0,0 +1 @@
Stop relying on `salt/_version.py` to write Salt's version. Instead use `salt/_version.txt` which only contains the version string.

View file

@ -0,0 +1 @@
`salt.utils.version.StrictVersion` is now deprecated and it's use should be replaced with `salt.utils.version.Version`.

View file

@ -591,6 +591,16 @@
#
#state_aggregate: False
# Instead of failing immediately when another state run is in progress, a value
# of True will queue the new state run to begin running once the other has
# finished. This option starts a new thread for each queued state run, so use
# this option sparingly. Additionally, it can be set to an integer representing
# the maximum queue size which can be attained before the state runs will fail
# to be queued. This can prevent runaway conditions where new threads are
# started until system performance is hampered.
#
#state_queue: False
# Disable requisites during state runs by specifying a single requisite
# or a list of requisites to disable.
#

View file

@ -2274,6 +2274,31 @@ aggregate just those types.
state_aggregate:
- pkg
.. conf_minion:: state_queue
``state_queue``
---------------
Default: ``False``
Instead of failing immediately when another state run is in progress, a value
of ``True`` will queue the new state run to begin running once the other has
finished. This option starts a new thread for each queued state run, so use
this option sparingly.
.. code-block:: yaml
state_queue: True
Additionally, it can be set to an integer representing the maximum queue size
which can be attained before the state runs will fail to be queued. This can
prevent runaway conditions where new threads are started until system
performance is hampered.
.. code-block:: yaml
state_queue: 2
.. conf_minion:: state_verbose
``state_verbose``

View file

@ -55,6 +55,5 @@ the :command:`salt` command.
.. toctree::
../tutorials/http
writing

View file

@ -41,9 +41,10 @@ $SCRIPT_DIR = (Get-ChildItem "$($myInvocation.MyCommand.Definition)").Direct
$BUILD_DIR = "$SCRIPT_DIR\buildenv"
$PREREQ_DIR = "$SCRIPT_DIR\prereqs"
$SCRIPTS_DIR = "$BUILD_DIR\Scripts"
$PYTHON_BIN = "$SCRIPTS_DIR\python.exe"
$BUILD_SALT_DIR = "$BUILD_DIR\Lib\site-packages\salt"
$BUILD_CONF_DIR = "$BUILD_DIR\configs"
$SITE_PKGS_DIR = "$BUILD_DIR\Lib\site-packages"
$BUILD_SALT_DIR = "$SITE_PKGS_DIR\salt"
$PYTHON_BIN = "$SCRIPTS_DIR\python.exe"
$PY_VERSION = [Version]((Get-Command $PYTHON_BIN).FileVersionInfo.ProductVersion)
$PY_VERSION = "$($PY_VERSION.Major).$($PY_VERSION.Minor)"
$ARCH = $(. $PYTHON_BIN -c "import platform; print(platform.architecture()[0])")
@ -181,6 +182,53 @@ $binaries | ForEach-Object {
}
Write-Result "Success" -ForegroundColor Green
#-------------------------------------------------------------------------------
# Remove pywin32 components not needed by Salt
#-------------------------------------------------------------------------------
$directories = "adodbapi",
"isapi",
"pythonwin",
"win32\demos"
$directories | ForEach-Object {
if ( Test-Path -Path "$SITE_PKGS_DIR\$_" ) {
Write-Host "Removing $_ directory: " -NoNewline
Remove-Item -Path "$SITE_PKGS_DIR\$_" -Recurse | Out-Null
if ( ! (Test-Path -Path "$SITE_PKGS_DIR\$_") ) {
Write-Result "Success" -ForegroundColor Green
} else {
Write-Result "Failed" -ForegroundColor Red
exit 1
}
}
}
#-------------------------------------------------------------------------------
# Remove pywin32 components not needed by Salt
#-------------------------------------------------------------------------------
$directories = "cheroot\test",
"cherrypy\test",
"gitdb\test",
"psutil\tests",
"smmap\test",
"tempora\tests",
"win32\test",
"win32com\test",
"zmq\tests"
$directories | ForEach-Object {
if ( Test-Path -Path "$SITE_PKGS_DIR\$_" ) {
Write-Host "Removing $_ directory: " -NoNewline
Remove-Item -Path "$SITE_PKGS_DIR\$_" -Recurse | Out-Null
if ( ! (Test-Path -Path "$SITE_PKGS_DIR\$_") ) {
Write-Result "Success" -ForegroundColor Green
} else {
Write-Result "Failed" -ForegroundColor Red
exit 1
}
}
}
#-------------------------------------------------------------------------------
# Remove Non-Windows Execution Modules
#-------------------------------------------------------------------------------

View file

@ -6,6 +6,7 @@ MarkupSafe
requests>=1.0.0
distro>=1.0.1
psutil>=5.0.0
packaging>=21.3
looseversion
# We need contextvars for salt-ssh
contextvars

View file

@ -485,6 +485,8 @@ kubernetes==3.0.0
# via -r requirements/static/ci/common.in
libnacl==1.8.0 ; sys_platform != "win32" and sys_platform != "darwin"
# via -r requirements/static/ci/common.in
looseversion==1.0.2
# via -r requirements/base.txt
lxml==4.9.1
# via
# junos-eznc
@ -622,7 +624,9 @@ oauthlib==3.2.1
oscrypto==1.2.1
# via certvalidator
packaging==21.3
# via pytest
# via
# -r requirements/base.txt
# pytest
paramiko==2.10.1 ; sys_platform != "win32" and sys_platform != "darwin"
# via
# -r requirements/static/ci/common.in

View file

@ -486,6 +486,8 @@ kubernetes==3.0.0
# via -r requirements/static/ci/common.in
linode-python==1.1.1
# via -r requirements/darwin.txt
looseversion==1.0.2
# via -r requirements/base.txt
lxml==4.9.1
# via
# junos-eznc
@ -621,7 +623,9 @@ oauthlib==3.2.1
oscrypto==1.2.0
# via certvalidator
packaging==21.3
# via pytest
# via
# -r requirements/base.txt
# pytest
paramiko==2.10.1
# via
# junos-eznc

View file

@ -492,6 +492,8 @@ kubernetes==3.0.0
# via -r requirements/static/ci/common.in
libnacl==1.8.0 ; sys_platform != "win32" and sys_platform != "darwin"
# via -r requirements/static/ci/common.in
looseversion==1.0.2
# via -r requirements/base.txt
lxml==4.9.1
# via
# junos-eznc
@ -622,6 +624,7 @@ oscrypto==1.2.1
# via certvalidator
packaging==21.3
# via
# -r requirements/base.txt
# ansible-core
# sphinx
paramiko==2.10.1 ; sys_platform != "win32" and sys_platform != "darwin"

View file

@ -483,6 +483,8 @@ kubernetes==3.0.0
# via -r requirements/static/ci/common.in
libnacl==1.7.1 ; sys_platform != "win32" and sys_platform != "darwin"
# via -r requirements/static/ci/common.in
looseversion==1.0.2
# via -r requirements/base.txt
lxml==4.9.1
# via
# junos-eznc
@ -616,7 +618,9 @@ oauthlib==3.2.1
oscrypto==1.2.0
# via certvalidator
packaging==21.3
# via pytest
# via
# -r requirements/base.txt
# pytest
paramiko==2.10.1 ; sys_platform != "win32" and sys_platform != "darwin"
# via
# -r requirements/static/ci/common.in

View file

@ -486,6 +486,8 @@ lazy-object-proxy==1.4.3
# via astroid
libnacl==1.8.0 ; sys_platform != "win32" and sys_platform != "darwin"
# via -r requirements/static/ci/common.in
looseversion==1.0.2
# via -r requirements/base.txt
lxml==4.9.1
# via
# junos-eznc
@ -619,7 +621,9 @@ oauthlib==3.2.1
oscrypto==1.2.1
# via certvalidator
packaging==21.3
# via ansible-core
# via
# -r requirements/base.txt
# ansible-core
paramiko==2.10.1 ; sys_platform != "win32" and sys_platform != "darwin"
# via
# -r requirements/static/ci/common.in

View file

@ -500,6 +500,8 @@ kubernetes==3.0.0
# via -r requirements/static/ci/common.in
libnacl==1.7.1 ; sys_platform != "win32" and sys_platform != "darwin"
# via -r requirements/static/ci/common.in
looseversion==1.0.2
# via -r requirements/base.txt
lxml==4.9.1
# via
# junos-eznc
@ -631,6 +633,7 @@ oscrypto==1.2.0
# via certvalidator
packaging==21.3
# via
# -r requirements/base.txt
# ansible-core
# pytest
paramiko==2.10.1 ; sys_platform != "win32" and sys_platform != "darwin"

View file

@ -158,6 +158,8 @@ keyring==5.7.1
# via -r requirements/static/ci/common.in
kubernetes==3.0.0
# via -r requirements/static/ci/common.in
looseversion==1.0.2
# via -r requirements/base.txt
lxml==4.9.1
# via -r requirements/windows.txt
mako==1.2.2
@ -192,7 +194,9 @@ multidict==6.0.2
ntlm-auth==1.5.0
# via requests-ntlm
packaging==21.3
# via pytest
# via
# -r requirements/base.txt
# pytest
passlib[bcrypt]==1.7.4
# via -r requirements/static/ci/common.in
patch==1.16

View file

@ -502,6 +502,8 @@ kubernetes==3.0.0
# via -r requirements/static/ci/common.in
libnacl==1.8.0 ; sys_platform != "win32" and sys_platform != "darwin"
# via -r requirements/static/ci/common.in
looseversion==1.0.3
# via -r requirements/base.txt
lxml==4.9.1
# via
# junos-eznc
@ -641,7 +643,9 @@ oauthlib==3.2.1
oscrypto==1.2.1
# via certvalidator
packaging==21.3
# via pytest
# via
# -r requirements/base.txt
# pytest
paramiko==2.10.1 ; sys_platform != "win32" and sys_platform != "darwin"
# via
# -r requirements/static/ci/common.in
@ -687,7 +691,7 @@ pyopenssl==20.0.1
# via
# -r requirements/static/pkg/linux.in
# etcd3-py
pyparsing==3.0.9
pyparsing==3.0.6
# via
# junos-eznc
# packaging

View file

@ -511,6 +511,8 @@ kubernetes==3.0.0
# via -r requirements/static/ci/common.in
libnacl==1.8.0 ; sys_platform != "win32" and sys_platform != "darwin"
# via -r requirements/static/ci/common.in
looseversion==1.0.3
# via -r requirements/base.txt
lxml==4.9.1
# via
# junos-eznc
@ -643,6 +645,7 @@ oscrypto==1.2.1
# via certvalidator
packaging==21.3
# via
# -r requirements/base.txt
# ansible-core
# sphinx
paramiko==2.10.1 ; sys_platform != "win32" and sys_platform != "darwin"
@ -691,7 +694,7 @@ pyopenssl==19.1.0
# via
# -r requirements/static/pkg/linux.in
# etcd3-py
pyparsing==3.0.9
pyparsing==3.0.6
# via
# junos-eznc
# packaging

View file

@ -507,6 +507,8 @@ lazy-object-proxy==1.4.3
# via astroid
libnacl==1.8.0 ; sys_platform != "win32" and sys_platform != "darwin"
# via -r requirements/static/ci/common.in
looseversion==1.0.3
# via -r requirements/base.txt
lxml==4.9.1
# via
# junos-eznc
@ -642,7 +644,9 @@ oauthlib==3.2.1
oscrypto==1.2.1
# via certvalidator
packaging==21.3
# via ansible-core
# via
# -r requirements/base.txt
# ansible-core
paramiko==2.10.1 ; sys_platform != "win32" and sys_platform != "darwin"
# via
# -r requirements/static/ci/common.in
@ -693,7 +697,7 @@ pyopenssl==20.0.1
# via
# -r requirements/static/pkg/linux.in
# etcd3-py
pyparsing==3.0.9
pyparsing==3.0.6
# via
# junos-eznc
# packaging

View file

@ -517,6 +517,8 @@ kubernetes==3.0.0
# via -r requirements/static/ci/common.in
libnacl==1.7.1 ; sys_platform != "win32" and sys_platform != "darwin"
# via -r requirements/static/ci/common.in
looseversion==1.0.3
# via -r requirements/base.txt
lxml==4.9.1
# via
# junos-eznc
@ -650,6 +652,7 @@ oscrypto==1.2.0
# via certvalidator
packaging==21.3
# via
# -r requirements/base.txt
# ansible-core
# pytest
paramiko==2.10.1 ; sys_platform != "win32" and sys_platform != "darwin"
@ -706,7 +709,7 @@ pyopenssl==19.1.0
# via
# -r requirements/static/pkg/linux.in
# etcd3-py
pyparsing==3.0.9
pyparsing==3.0.6
# via
# junos-eznc
# packaging

View file

@ -511,6 +511,8 @@ libnacl==1.8.0 ; sys_platform != "win32" and sys_platform != "darwin"
# via -r requirements/static/ci/common.in
loguru==0.6.0
# via ciscoconfparse
looseversion==1.0.2
# via -r requirements/base.txt
lxml==4.9.1
# via
# junos-eznc
@ -661,7 +663,9 @@ oauthlib==3.2.1
oscrypto==1.2.1
# via certvalidator
packaging==21.3
# via pytest
# via
# -r requirements/base.txt
# pytest
paramiko==2.10.1 ; sys_platform != "win32" and sys_platform != "darwin"
# via
# -r requirements/static/ci/common.in

View file

@ -516,6 +516,8 @@ libnacl==1.8.0 ; sys_platform != "win32" and sys_platform != "darwin"
# via -r requirements/static/ci/common.in
loguru==0.6.0
# via ciscoconfparse
looseversion==1.0.2
# via -r requirements/base.txt
lxml==4.9.1
# via
# junos-eznc
@ -660,6 +662,7 @@ oscrypto==1.2.1
# via certvalidator
packaging==21.3
# via
# -r requirements/base.txt
# ansible-core
# sphinx
paramiko==2.10.1 ; sys_platform != "win32" and sys_platform != "darwin"

View file

@ -508,6 +508,8 @@ kubernetes==3.0.0
# via -r requirements/static/ci/common.in
libnacl==1.7.1 ; sys_platform != "win32" and sys_platform != "darwin"
# via -r requirements/static/ci/common.in
looseversion==1.0.2
# via -r requirements/base.txt
lxml==4.9.1
# via
# junos-eznc
@ -651,7 +653,9 @@ oauthlib==3.2.1
oscrypto==1.2.0
# via certvalidator
packaging==21.3
# via pytest
# via
# -r requirements/base.txt
# pytest
paramiko==2.10.1 ; sys_platform != "win32" and sys_platform != "darwin"
# via
# -r requirements/static/ci/common.in

View file

@ -512,6 +512,8 @@ libnacl==1.8.0 ; sys_platform != "win32" and sys_platform != "darwin"
# via -r requirements/static/ci/common.in
loguru==0.6.0
# via ciscoconfparse
looseversion==1.0.2
# via -r requirements/base.txt
lxml==4.9.1
# via
# junos-eznc
@ -659,7 +661,9 @@ oauthlib==3.2.1
oscrypto==1.2.1
# via certvalidator
packaging==21.3
# via ansible-core
# via
# -r requirements/base.txt
# ansible-core
paramiko==2.10.1 ; sys_platform != "win32" and sys_platform != "darwin"
# via
# -r requirements/static/ci/common.in

View file

@ -523,6 +523,8 @@ kubernetes==3.0.0
# via -r requirements/static/ci/common.in
libnacl==1.7.1 ; sys_platform != "win32" and sys_platform != "darwin"
# via -r requirements/static/ci/common.in
looseversion==1.0.2
# via -r requirements/base.txt
lxml==4.9.1
# via
# junos-eznc
@ -664,6 +666,7 @@ oscrypto==1.2.0
# via certvalidator
packaging==21.3
# via
# -r requirements/base.txt
# ansible-core
# pytest
paramiko==2.10.1 ; sys_platform != "win32" and sys_platform != "darwin"

View file

@ -174,6 +174,8 @@ keyring==5.7.1
# via -r requirements/static/ci/common.in
kubernetes==3.0.0
# via -r requirements/static/ci/common.in
looseversion==1.0.2
# via -r requirements/base.txt
lxml==4.9.1
# via -r requirements/windows.txt
mako==1.2.2
@ -207,7 +209,9 @@ multidict==6.0.2
ntlm-auth==1.5.0
# via requests-ntlm
packaging==21.3
# via pytest
# via
# -r requirements/base.txt
# pytest
passlib[bcrypt]==1.7.4
# via -r requirements/static/ci/common.in
patch==1.16

View file

@ -500,6 +500,8 @@ libnacl==1.8.0 ; sys_platform != "win32" and sys_platform != "darwin"
# via -r requirements/static/ci/common.in
loguru==0.6.0
# via ciscoconfparse
looseversion==1.0.2
# via -r requirements/base.txt
lxml==4.9.1
# via
# junos-eznc
@ -650,7 +652,9 @@ oauthlib==3.2.1
oscrypto==1.2.1
# via certvalidator
packaging==21.3
# via pytest
# via
# -r requirements/base.txt
# pytest
paramiko==2.10.1 ; sys_platform != "win32" and sys_platform != "darwin"
# via
# -r requirements/static/ci/common.in

View file

@ -507,6 +507,8 @@ libnacl==1.8.0 ; sys_platform != "win32" and sys_platform != "darwin"
# via -r requirements/static/ci/common.in
loguru==0.6.0
# via ciscoconfparse
looseversion==1.0.2
# via -r requirements/base.txt
lxml==4.9.1
# via
# junos-eznc
@ -651,6 +653,7 @@ oscrypto==1.2.1
# via certvalidator
packaging==21.3
# via
# -r requirements/base.txt
# ansible-core
# sphinx
paramiko==2.10.1 ; sys_platform != "win32" and sys_platform != "darwin"

View file

@ -498,6 +498,8 @@ kubernetes==3.0.0
# via -r requirements/static/ci/common.in
libnacl==1.7.1 ; sys_platform != "win32" and sys_platform != "darwin"
# via -r requirements/static/ci/common.in
looseversion==1.0.2
# via -r requirements/base.txt
lxml==4.9.1
# via
# junos-eznc
@ -641,7 +643,9 @@ oauthlib==3.2.1
oscrypto==1.2.0
# via certvalidator
packaging==21.3
# via pytest
# via
# -r requirements/base.txt
# pytest
paramiko==2.10.1 ; sys_platform != "win32" and sys_platform != "darwin"
# via
# -r requirements/static/ci/common.in

View file

@ -503,6 +503,8 @@ libnacl==1.8.0 ; sys_platform != "win32" and sys_platform != "darwin"
# via -r requirements/static/ci/common.in
loguru==0.6.0
# via ciscoconfparse
looseversion==1.0.2
# via -r requirements/base.txt
lxml==4.9.1
# via
# junos-eznc
@ -650,7 +652,9 @@ oauthlib==3.2.1
oscrypto==1.2.1
# via certvalidator
packaging==21.3
# via ansible-core
# via
# -r requirements/base.txt
# ansible-core
paramiko==2.10.1 ; sys_platform != "win32" and sys_platform != "darwin"
# via
# -r requirements/static/ci/common.in

View file

@ -513,6 +513,8 @@ kubernetes==3.0.0
# via -r requirements/static/ci/common.in
libnacl==1.7.1 ; sys_platform != "win32" and sys_platform != "darwin"
# via -r requirements/static/ci/common.in
looseversion==1.0.2
# via -r requirements/base.txt
lxml==4.9.1
# via
# junos-eznc
@ -654,6 +656,7 @@ oscrypto==1.2.0
# via certvalidator
packaging==21.3
# via
# -r requirements/base.txt
# ansible-core
# pytest
paramiko==2.10.1 ; sys_platform != "win32" and sys_platform != "darwin"

View file

@ -162,6 +162,8 @@ keyring==5.7.1
# via -r requirements/static/ci/common.in
kubernetes==3.0.0
# via -r requirements/static/ci/common.in
looseversion==1.0.2
# via -r requirements/base.txt
lxml==4.9.1
# via -r requirements/windows.txt
mako==1.2.2
@ -195,7 +197,9 @@ multidict==6.0.2
ntlm-auth==1.5.0
# via requests-ntlm
packaging==21.3
# via pytest
# via
# -r requirements/base.txt
# pytest
passlib[bcrypt]==1.7.4
# via -r requirements/static/ci/common.in
patch==1.16

View file

@ -500,6 +500,8 @@ libnacl==1.8.0 ; sys_platform != "win32" and sys_platform != "darwin"
# via -r requirements/static/ci/common.in
loguru==0.6.0
# via ciscoconfparse
looseversion==1.0.2
# via -r requirements/base.txt
lxml==4.9.1
# via
# junos-eznc
@ -650,7 +652,9 @@ oauthlib==3.2.1
oscrypto==1.2.1
# via certvalidator
packaging==21.3
# via pytest
# via
# -r requirements/base.txt
# pytest
paramiko==2.10.1 ; sys_platform != "win32" and sys_platform != "darwin"
# via
# -r requirements/static/ci/common.in

View file

@ -501,6 +501,8 @@ kubernetes==3.0.0
# via -r requirements/static/ci/common.in
linode-python==1.1.1
# via -r requirements/darwin.txt
looseversion==1.0.2
# via -r requirements/base.txt
lxml==4.9.1
# via
# junos-eznc
@ -646,7 +648,9 @@ oauthlib==3.2.1
oscrypto==1.2.0
# via certvalidator
packaging==21.3
# via pytest
# via
# -r requirements/base.txt
# pytest
paramiko==2.10.1
# via
# junos-eznc

View file

@ -505,6 +505,8 @@ libnacl==1.8.0 ; sys_platform != "win32" and sys_platform != "darwin"
# via -r requirements/static/ci/common.in
loguru==0.6.0
# via ciscoconfparse
looseversion==1.0.2
# via -r requirements/base.txt
lxml==4.9.1
# via
# junos-eznc
@ -649,6 +651,7 @@ oscrypto==1.2.1
# via certvalidator
packaging==21.3
# via
# -r requirements/base.txt
# ansible-core
# sphinx
paramiko==2.10.1 ; sys_platform != "win32" and sys_platform != "darwin"

View file

@ -498,6 +498,8 @@ kubernetes==3.0.0
# via -r requirements/static/ci/common.in
libnacl==1.7.1 ; sys_platform != "win32" and sys_platform != "darwin"
# via -r requirements/static/ci/common.in
looseversion==1.0.2
# via -r requirements/base.txt
lxml==4.9.1
# via
# junos-eznc
@ -641,7 +643,9 @@ oauthlib==3.2.1
oscrypto==1.2.0
# via certvalidator
packaging==21.3
# via pytest
# via
# -r requirements/base.txt
# pytest
paramiko==2.10.1 ; sys_platform != "win32" and sys_platform != "darwin"
# via
# -r requirements/static/ci/common.in

View file

@ -501,6 +501,8 @@ libnacl==1.8.0 ; sys_platform != "win32" and sys_platform != "darwin"
# via -r requirements/static/ci/common.in
loguru==0.6.0
# via ciscoconfparse
looseversion==1.0.2
# via -r requirements/base.txt
lxml==4.9.1
# via
# junos-eznc
@ -648,7 +650,9 @@ oauthlib==3.2.1
oscrypto==1.2.1
# via certvalidator
packaging==21.3
# via ansible-core
# via
# -r requirements/base.txt
# ansible-core
paramiko==2.10.1 ; sys_platform != "win32" and sys_platform != "darwin"
# via
# -r requirements/static/ci/common.in

View file

@ -515,6 +515,8 @@ kubernetes==3.0.0
# via -r requirements/static/ci/common.in
libnacl==1.7.1 ; sys_platform != "win32" and sys_platform != "darwin"
# via -r requirements/static/ci/common.in
looseversion==1.0.2
# via -r requirements/base.txt
lxml==4.9.1
# via
# junos-eznc
@ -656,6 +658,7 @@ oscrypto==1.2.0
# via certvalidator
packaging==21.3
# via
# -r requirements/base.txt
# ansible-core
# pytest
paramiko==2.10.1 ; sys_platform != "win32" and sys_platform != "darwin"

View file

@ -162,6 +162,8 @@ keyring==5.7.1
# via -r requirements/static/ci/common.in
kubernetes==3.0.0
# via -r requirements/static/ci/common.in
looseversion==1.0.2
# via -r requirements/base.txt
lxml==4.9.1
# via -r requirements/windows.txt
mako==1.2.2
@ -195,7 +197,9 @@ multidict==6.0.2
ntlm-auth==1.5.0
# via requests-ntlm
packaging==21.3
# via pytest
# via
# -r requirements/base.txt
# pytest
passlib[bcrypt]==1.7.4
# via -r requirements/static/ci/common.in
patch==1.16

View file

@ -51,6 +51,8 @@ jmespath==1.0.1
# via -r requirements/base.txt
linode-python==1.1.1
# via -r requirements/darwin.txt
looseversion==1.0.2
# via -r requirements/base.txt
mako==1.2.2
# via -r requirements/darwin.txt
markupsafe==2.0.1
@ -66,6 +68,8 @@ more-itertools==8.2.0
# jaraco.functools
msgpack==1.0.2
# via -r requirements/base.txt
packaging==22.0
# via -r requirements/base.txt
portend==2.6
# via cherrypy
psutil==5.8.0

View file

@ -41,6 +41,8 @@ jinja2==3.1.0
# via -r requirements/base.txt
jmespath==1.0.1
# via -r requirements/base.txt
looseversion==1.0.2
# via -r requirements/base.txt
markupsafe==2.0.1
# via
# -r requirements/base.txt
@ -53,6 +55,8 @@ more-itertools==5.0.0
# jaraco.functools
msgpack==1.0.2
# via -r requirements/base.txt
packaging==22.0
# via -r requirements/base.txt
portend==2.4
# via cherrypy
psutil==5.8.0

View file

@ -41,6 +41,8 @@ jinja2==3.1.0
# via -r requirements/base.txt
jmespath==1.0.1
# via -r requirements/base.txt
looseversion==1.0.2
# via -r requirements/base.txt
markupsafe==2.0.1
# via
# -r requirements/base.txt
@ -53,6 +55,8 @@ more-itertools==5.0.0
# jaraco.functools
msgpack==1.0.2
# via -r requirements/base.txt
packaging==22.0
# via -r requirements/base.txt
portend==2.4
# via cherrypy
psutil==5.8.0

View file

@ -54,6 +54,8 @@ jinja2==3.0.3
# via -r requirements/base.txt
jmespath==1.0.1
# via -r requirements/base.txt
looseversion==1.0.2
# via -r requirements/base.txt
lxml==4.9.1
# via -r requirements/windows.txt
mako==1.2.2
@ -71,6 +73,8 @@ more-itertools==8.2.0
# jaraco.functools
msgpack==1.0.2
# via -r requirements/base.txt
packaging==22.0
# via -r requirements/base.txt
portend==2.6
# via cherrypy
psutil==5.8.0

View file

@ -45,6 +45,8 @@ jinja2==3.0.3
# via -r requirements/base.txt
jmespath==0.10.0
# via -r requirements/base.txt
looseversion==1.0.3
# via -r requirements/base.txt
markupsafe==2.0.1
# via
# -r requirements/base.txt
@ -57,6 +59,8 @@ more-itertools==5.0.0
# jaraco.functools
msgpack==1.0.2
# via -r requirements/base.txt
packaging==21.3
# via -r requirements/base.txt
portend==2.4
# via cherrypy
psutil==5.8.0
@ -67,6 +71,8 @@ pycryptodomex==3.9.8
# via -r requirements/crypto.txt
pyopenssl==19.1.0
# via -r requirements/static/pkg/linux.in
pyparsing==3.0.6
# via packaging
python-dateutil==2.8.1
# via -r requirements/static/pkg/linux.in
python-gnupg==0.4.8

View file

@ -43,6 +43,8 @@ jinja2==3.1.0
# via -r requirements/base.txt
jmespath==1.0.1
# via -r requirements/base.txt
looseversion==1.0.2
# via -r requirements/base.txt
markupsafe==2.0.1
# via
# -r requirements/base.txt
@ -55,6 +57,8 @@ more-itertools==5.0.0
# jaraco.functools
msgpack==1.0.2
# via -r requirements/base.txt
packaging==22.0
# via -r requirements/base.txt
portend==2.4
# via cherrypy
psutil==5.8.0

View file

@ -41,6 +41,8 @@ jinja2==3.1.0
# via -r requirements/base.txt
jmespath==1.0.1
# via -r requirements/base.txt
looseversion==1.0.2
# via -r requirements/base.txt
markupsafe==2.0.1
# via
# -r requirements/base.txt
@ -53,6 +55,8 @@ more-itertools==5.0.0
# jaraco.functools
msgpack==1.0.2
# via -r requirements/base.txt
packaging==22.0
# via -r requirements/base.txt
portend==2.4
# via cherrypy
psutil==5.8.0

View file

@ -58,6 +58,8 @@ jinja2==3.1.0
# via -r requirements/base.txt
jmespath==1.0.1
# via -r requirements/base.txt
looseversion==1.0.2
# via -r requirements/base.txt
lxml==4.9.1
# via -r requirements/windows.txt
mako==1.2.2
@ -75,6 +77,8 @@ more-itertools==8.2.0
# jaraco.functools
msgpack==1.0.2
# via -r requirements/base.txt
packaging==22.0
# via -r requirements/base.txt
portend==2.6
# via cherrypy
psutil==5.8.0

View file

@ -43,6 +43,8 @@ jinja2==3.1.0
# via -r requirements/base.txt
jmespath==1.0.1
# via -r requirements/base.txt
looseversion==1.0.2
# via -r requirements/base.txt
markupsafe==2.0.1
# via
# -r requirements/base.txt
@ -55,6 +57,8 @@ more-itertools==5.0.0
# jaraco.functools
msgpack==1.0.2
# via -r requirements/base.txt
packaging==22.0
# via -r requirements/base.txt
portend==2.4
# via cherrypy
psutil==5.8.0

View file

@ -41,6 +41,8 @@ jinja2==3.1.0
# via -r requirements/base.txt
jmespath==1.0.1
# via -r requirements/base.txt
looseversion==1.0.2
# via -r requirements/base.txt
markupsafe==2.0.1
# via
# -r requirements/base.txt
@ -53,6 +55,8 @@ more-itertools==5.0.0
# jaraco.functools
msgpack==1.0.2
# via -r requirements/base.txt
packaging==22.0
# via -r requirements/base.txt
portend==2.4
# via cherrypy
psutil==5.8.0

View file

@ -56,6 +56,8 @@ jinja2==3.1.0
# via -r requirements/base.txt
jmespath==1.0.1
# via -r requirements/base.txt
looseversion==1.0.2
# via -r requirements/base.txt
lxml==4.9.1
# via -r requirements/windows.txt
mako==1.2.2
@ -73,6 +75,8 @@ more-itertools==8.2.0
# jaraco.functools
msgpack==1.0.2
# via -r requirements/base.txt
packaging==22.0
# via -r requirements/base.txt
portend==2.6
# via cherrypy
psutil==5.8.0

View file

@ -53,6 +53,8 @@ jmespath==1.0.1
# via -r requirements/base.txt
linode-python==1.1.1
# via -r requirements/darwin.txt
looseversion==1.0.2
# via -r requirements/base.txt
mako==1.2.2
# via -r requirements/darwin.txt
markupsafe==2.0.1
@ -68,6 +70,8 @@ more-itertools==8.2.0
# jaraco.functools
msgpack==1.0.2
# via -r requirements/base.txt
packaging==22.0
# via -r requirements/base.txt
portend==2.6
# via cherrypy
psutil==5.8.0

View file

@ -43,6 +43,8 @@ jinja2==3.1.0
# via -r requirements/base.txt
jmespath==1.0.1
# via -r requirements/base.txt
looseversion==1.0.2
# via -r requirements/base.txt
markupsafe==2.0.1
# via
# -r requirements/base.txt
@ -55,6 +57,8 @@ more-itertools==5.0.0
# jaraco.functools
msgpack==1.0.2
# via -r requirements/base.txt
packaging==22.0
# via -r requirements/base.txt
portend==2.4
# via cherrypy
psutil==5.8.0

View file

@ -41,6 +41,8 @@ jinja2==3.1.0
# via -r requirements/base.txt
jmespath==1.0.1
# via -r requirements/base.txt
looseversion==1.0.2
# via -r requirements/base.txt
markupsafe==2.0.1
# via
# -r requirements/base.txt
@ -53,6 +55,8 @@ more-itertools==5.0.0
# jaraco.functools
msgpack==1.0.2
# via -r requirements/base.txt
packaging==22.0
# via -r requirements/base.txt
portend==2.4
# via cherrypy
psutil==5.8.0

View file

@ -56,6 +56,8 @@ jinja2==3.1.0
# via -r requirements/base.txt
jmespath==1.0.1
# via -r requirements/base.txt
looseversion==1.0.2
# via -r requirements/base.txt
lxml==4.9.1
# via -r requirements/windows.txt
mako==1.2.2
@ -73,6 +75,8 @@ more-itertools==8.2.0
# jaraco.functools
msgpack==1.0.2
# via -r requirements/base.txt
packaging==22.0
# via -r requirements/base.txt
portend==2.6
# via cherrypy
psutil==5.8.0

View file

@ -70,7 +70,8 @@ warnings.filterwarnings(
"", # No deprecation message match
DeprecationWarning, # This filter is for DeprecationWarnings
r"^(salt|salt\.(.*))$", # Match module(s) 'salt' and 'salt.<whatever>'
append=True,
# Do *NOT* add append=True here - if we do, salt's DeprecationWarnings will
# never show up
)
# Filter the backports package UserWarning about being re-imported

View file

@ -31,7 +31,7 @@ import salt.utils.event
from salt.cloud.libcloudfuncs import * # pylint: disable=redefined-builtin,wildcard-import,unused-wildcard-import
from salt.exceptions import SaltCloudSystemExit
from salt.utils.functools import namespaced_function
from salt.utils.versions import LooseVersion as _LooseVersion
from salt.utils.versions import Version
# CloudStackNetwork will be needed during creation of a new node
# pylint: disable=import-error
@ -43,7 +43,7 @@ try:
# this work-around. This work-around can be removed when the required
# minimum version of libcloud is 2.0.0 (See PR #40837 - which is
# implemented in Salt 2018.3.0).
if _LooseVersion(libcloud.__version__) < _LooseVersion("1.4.0"):
if Version(libcloud.__version__) < Version("1.4.0"):
# See https://github.com/saltstack/salt/issues/32743
import libcloud.security

View file

@ -34,7 +34,7 @@ from salt.exceptions import (
SaltCloudSystemExit,
)
from salt.utils.functools import namespaced_function
from salt.utils.versions import LooseVersion as _LooseVersion
from salt.utils.versions import Version
# Import libcloud
try:
@ -51,7 +51,7 @@ try:
# this work-around. This work-around can be removed when the required
# minimum version of libcloud is 2.0.0 (See PR #40837 - which is
# implemented in Salt 2018.3.0).
if _LooseVersion(libcloud.__version__) < _LooseVersion("1.4.0"):
if Version(libcloud.__version__) < Version("1.4.0"):
# See https://github.com/saltstack/salt/issues/32743
import libcloud.security

View file

@ -60,7 +60,7 @@ import salt.utils.msgpack
from salt.cloud.libcloudfuncs import * # pylint: disable=redefined-builtin,wildcard-import,unused-wildcard-import
from salt.exceptions import SaltCloudSystemExit
from salt.utils.functools import namespaced_function
from salt.utils.versions import LooseVersion as _LooseVersion
from salt.utils.versions import Version
# pylint: disable=import-error
LIBCLOUD_IMPORT_ERROR = None
@ -107,7 +107,7 @@ def __virtual__():
if not HAS_LIBCLOUD:
return False, "apache-libcloud is not installed"
if _LooseVersion(libcloud.__version__) < _LooseVersion("2.5.0"):
if Version(libcloud.__version__) < Version("2.5.0"):
return False, "The salt-cloud GCE driver requires apache-libcloud>=2.5.0"
if get_configured_provider() is False:

View file

@ -231,13 +231,13 @@ import pprint
import socket
import salt.config as config
import salt.utils.versions
from salt.exceptions import (
SaltCloudConfigError,
SaltCloudExecutionFailure,
SaltCloudExecutionTimeout,
SaltCloudSystemExit,
)
from salt.utils.versions import Version
try:
import os_client_config
@ -246,8 +246,7 @@ try:
import shade.openstackcloud
HAS_SHADE = (
salt.utils.versions._LooseVersion(shade.__version__)
>= salt.utils.versions._LooseVersion("1.19.0"),
Version(shade.__version__) >= Version("1.19.0"),
"Please install newer version of shade: >= 1.19.0",
)
except ImportError:

View file

@ -108,7 +108,7 @@ from salt.exceptions import (
SaltCloudNotFound,
SaltCloudSystemExit,
)
from salt.utils.versions import LooseVersion
from salt.utils.versions import Version
try:
# pylint: disable=no-name-in-module
@ -174,7 +174,7 @@ def version_compatible(version):
"""
Checks profitbricks version
"""
return LooseVersion(profitbricks.API_VERSION) >= LooseVersion(version)
return Version(profitbricks.API_VERSION) >= Version(version)
def get_dependencies():

View file

@ -366,6 +366,8 @@ VALID_OPTS = immutabletypes.freeze(
# to the jid. WARNING: A change to the jid format may break external
# applications that depend on the original format.
"unique_jid": bool,
# Governs whether state runs will queue or fail to run when a state is already running
"state_queue": bool,
# Tells the highstate outputter to show successful states. False will omit successes.
"state_verbose": bool,
# Specify the format for state outputs. See highstate outputter for additional details.
@ -1181,6 +1183,7 @@ DEFAULT_MINION_OPTS = immutabletypes.freeze(
"state_auto_order": True,
"state_events": False,
"state_aggregate": False,
"state_queue": False,
"snapper_states": False,
"snapper_states_config": "root",
"acceptance_wait_time": 10,

View file

@ -58,12 +58,12 @@ import salt.utils.hashutils
import salt.utils.json
import salt.utils.path
import salt.utils.stringutils
from salt.utils.versions import LooseVersion
from salt.utils.versions import Version
try:
import azure.storage
if LooseVersion(azure.storage.__version__) < LooseVersion("0.20.0"):
if Version(azure.storage.__version__) < Version("0.20.0"):
raise ImportError("azure.storage.__version__ must be >= 0.20.0")
HAS_AZURE = True
except (ImportError, AttributeError):

View file

@ -14,7 +14,7 @@ import shlex
import salt.utils.json
import salt.utils.path
from salt.exceptions import CommandExecutionError
from salt.utils.versions import LooseVersion as _LooseVersion
from salt.utils.versions import Version
log = logging.getLogger(__name__)
@ -37,10 +37,10 @@ def _check_valid_version():
bower must be at least version 1.3.
"""
# pylint: disable=no-member
bower_version = _LooseVersion(
bower_version = Version(
__salt__["cmd.run"]("{} --version".format(salt.utils.path.which("bower")))
)
valid_version = _LooseVersion("1.3")
valid_version = Version("1.3")
# pylint: enable=no-member
if bower_version < valid_version:
raise CommandExecutionError(

View file

@ -21,7 +21,7 @@ from salt.exceptions import (
SaltInvocationError,
)
from salt.utils.data import CaseInsensitiveDict
from salt.utils.versions import LooseVersion as _LooseVersion
from salt.utils.versions import Version
log = logging.getLogger(__name__)
@ -68,7 +68,7 @@ def _yes():
"""
if "chocolatey._yes" in __context__:
return __context__["chocolatey._yes"]
if _LooseVersion(chocolatey_version()) >= _LooseVersion("0.9.9"):
if Version(chocolatey_version()) >= Version("0.9.9"):
answer = ["--yes"]
else:
answer = []
@ -83,7 +83,7 @@ def _no_progress():
"""
if "chocolatey._no_progress" in __context__:
return __context__["chocolatey._no_progress"]
if _LooseVersion(chocolatey_version()) >= _LooseVersion("0.10.4"):
if Version(chocolatey_version()) >= Version("0.10.4"):
answer = ["--no-progress"]
else:
log.warning("--no-progress unsupported in choco < 0.10.4")
@ -778,7 +778,7 @@ def install_missing(name, version=None, source=None):
salt '*' chocolatey.install_missing <package name>
salt '*' chocolatey.install_missing <package name> version=<package version>
"""
if _LooseVersion(chocolatey_version()) >= _LooseVersion("0.9.8.24"):
if Version(chocolatey_version()) >= Version("0.9.8.24"):
log.warning("installmissing is deprecated, using install")
return install(name, version=version)
@ -1049,7 +1049,7 @@ def update(name, source=None, pre_versions=False):
salt "*" chocolatey.update <package name> pre_versions=True
"""
# chocolatey helpfully only supports a single package argument
if _LooseVersion(chocolatey_version()) >= _LooseVersion("0.9.8.24"):
if Version(chocolatey_version()) >= Version("0.9.8.24"):
log.warning("update is deprecated, using upgrade")
return upgrade(name, source=source, pre_versions=pre_versions)

View file

@ -44,10 +44,10 @@ import salt.utils.stringutils
import salt.utils.templates
import salt.utils.url
import salt.utils.user
import salt.utils.versions
from salt.exceptions import CommandExecutionError, MinionError, SaltInvocationError
from salt.exceptions import get_error_message as _get_error_message
from salt.utils.files import HASHES, HASHES_REVMAP
from salt.utils.versions import Version
try:
import grp
@ -192,8 +192,8 @@ def _chattr_has_extended_attrs():
if ver is None:
return False
needed_version = salt.utils.versions.LooseVersion("1.41.12")
chattr_version = salt.utils.versions.LooseVersion(ver)
needed_version = Version("1.41.12")
chattr_version = Version(ver)
return chattr_version > needed_version

View file

@ -20,7 +20,7 @@ import salt.utils.stringutils
import salt.utils.templates
import salt.utils.url
from salt.exceptions import CommandExecutionError, SaltInvocationError
from salt.utils.versions import LooseVersion as _LooseVersion
from salt.utils.versions import LooseVersion
log = logging.getLogger(__name__)
@ -42,7 +42,7 @@ def _check_worktree_support(failhard=True):
Ensure that we don't try to operate on worktrees in git < 2.5.0.
"""
git_version = version(versioninfo=False)
if _LooseVersion(git_version) < _LooseVersion("2.5.0"):
if LooseVersion(git_version) < LooseVersion("2.5.0"):
if failhard:
raise CommandExecutionError(
"Worktrees are only supported in git 2.5.0 and newer "
@ -175,7 +175,7 @@ def _format_git_opts(opts):
"""
if opts:
version_ = version(versioninfo=False)
if _LooseVersion(version_) < _LooseVersion("1.7.2"):
if LooseVersion(version_) < LooseVersion("1.7.2"):
raise SaltInvocationError(
"git_opts is only supported for git versions >= 1.7.2 "
"(detected: {})".format(version_)
@ -450,8 +450,8 @@ def _which_git_config(global_, cwd, user, password, output_encoding=None):
"""
if global_:
return ["--global"]
version_ = _LooseVersion(version(versioninfo=False))
if version_ >= _LooseVersion("1.7.10.2"):
version_ = LooseVersion(version(versioninfo=False))
if version_ >= LooseVersion("1.7.10.2"):
# --local added in 1.7.10.2
return ["--local"]
else:
@ -1825,7 +1825,7 @@ def describe(
"""
cwd = _expand_path(cwd, user)
command = ["git", "describe"]
if _LooseVersion(version(versioninfo=False)) >= _LooseVersion("1.5.6"):
if LooseVersion(version(versioninfo=False)) >= LooseVersion("1.5.6"):
command.append("--always")
command.append(rev)
return _git_run(
@ -1970,7 +1970,7 @@ def diff(
failhard = True
if no_index:
if _LooseVersion(version(versioninfo=False)) < _LooseVersion("1.5.1"):
if LooseVersion(version(versioninfo=False)) < LooseVersion("1.5.1"):
raise CommandExecutionError(
"The 'no_index' option is only supported in Git 1.5.1 and newer"
)
@ -2701,8 +2701,8 @@ def list_worktrees(
tracked_data_points = ("worktree", "HEAD", "branch")
ret = {}
git_version = _LooseVersion(version(versioninfo=False))
has_native_list_subcommand = git_version >= _LooseVersion("2.7.0")
git_version = LooseVersion(version(versioninfo=False))
has_native_list_subcommand = git_version >= LooseVersion("2.7.0")
if has_native_list_subcommand:
out = _git_run(
["git", "worktree", "list", "--porcelain"],
@ -3356,7 +3356,7 @@ def merge_base(
refs = ["HEAD"]
if is_ancestor:
if _LooseVersion(version(versioninfo=False)) < _LooseVersion("1.8.0"):
if LooseVersion(version(versioninfo=False)) < LooseVersion("1.8.0"):
# Pre 1.8.0 git doesn't have --is-ancestor, so the logic here is a
# little different. First we need to resolve the first ref to a
# full SHA1, and then if running git merge-base on both commits
@ -5229,8 +5229,7 @@ def version(versioninfo=False):
Returns the version of Git installed on the minion
versioninfo : False
If ``True``, return the version in a versioninfo list (e.g. ``[2, 5,
0]``)
If ``True``, return the version in a versioninfo list (e.g. ``[2, 5, 0]``)
CLI Example:
@ -5249,9 +5248,15 @@ def version(versioninfo=False):
try:
# On macOS, the git version is displayed in a different format
# git version 2.21.1 (Apple Git-122.3)
# On Windows:
# git version 2.21.1.windows.1
# As opposed to:
# git version 2.21.1
__context__[contextkey] = version_.split("(")[0].strip().split()[-1]
if "(" in version_:
version_ = version_.split("(")[0].strip()
if ".windows" in version_:
version_ = version_.split(".windows")[0].strip()
__context__[contextkey] = version_.strip().split()[-1].strip()
except IndexError:
# Somehow git --version returned no stdout while not raising an
# error. Should never happen but we should still account for this
@ -5540,7 +5545,7 @@ def worktree_prune(
output_encoding=output_encoding,
)
git_version = version(versioninfo=False)
if _LooseVersion(git_version) > _LooseVersion("2.35.0"):
if LooseVersion(git_version) > LooseVersion("2.35.0"):
return result["stderr"]
return result["stdout"]

View file

@ -6,13 +6,8 @@ import functools
import logging
import re
try:
from salt.exceptions import CommandExecutionError
from salt.utils.versions import LooseVersion as _LooseVersion
HAS_REQUIRED_LIBS = True
except ImportError:
HAS_REQUIRED_LIBS = False
from salt.exceptions import CommandExecutionError
from salt.utils.versions import LooseVersion
log = logging.getLogger(__name__)
@ -24,10 +19,6 @@ def __virtual__():
"""
Load this module on Debian-based systems only
"""
if not HAS_REQUIRED_LIBS:
return (False, "Required library could not be imported")
if __grains__.get("os_family", "") in ("Kali", "Debian"):
return __virtualname__
elif __grains__.get("os_family", "") == "Cumulus":
@ -133,7 +124,7 @@ def needs_reboot():
salt '*' kernelpkg.needs_reboot
"""
return _LooseVersion(active()) < _LooseVersion(latest_installed())
return LooseVersion(active()) < LooseVersion(latest_installed())
def upgrade(reboot=False, at_time=None):
@ -192,7 +183,7 @@ def upgrade_available():
salt '*' kernelpkg.upgrade_available
"""
return _LooseVersion(latest_available()) > _LooseVersion(latest_installed())
return LooseVersion(latest_available()) > LooseVersion(latest_installed())
def remove(release):
@ -278,8 +269,8 @@ def _cmp_version(item1, item2):
"""
Compare function for package version sorting
"""
vers1 = _LooseVersion(item1)
vers2 = _LooseVersion(item2)
vers1 = LooseVersion(item1)
vers2 = LooseVersion(item2)
if vers1 < vers2:
return -1

View file

@ -5,37 +5,27 @@ Manage Linux kernel packages on YUM-based systems
import functools
import logging
try:
import salt.modules.yumpkg
import salt.utils.data
import salt.utils.functools
import salt.utils.systemd
from salt.exceptions import CommandExecutionError
from salt.utils.versions import LooseVersion as _LooseVersion
__IMPORT_ERROR = None
except ImportError as exc:
__IMPORT_ERROR = exc.__str__()
import salt.modules.yumpkg
import salt.utils.data
import salt.utils.functools
import salt.utils.systemd
from salt.exceptions import CommandExecutionError
from salt.utils.versions import LooseVersion
log = logging.getLogger(__name__)
__virtualname__ = "kernelpkg"
if __IMPORT_ERROR is None:
# Import functions from yumpkg
# pylint: disable=invalid-name, protected-access
_yum = salt.utils.functools.namespaced_function(salt.modules.yumpkg._yum, globals())
# pylint: enable=invalid-name, protected-access
# Import functions from yumpkg
# pylint: disable=invalid-name, protected-access
_yum = salt.utils.functools.namespaced_function(salt.modules.yumpkg._yum, globals())
# pylint: enable=invalid-name, protected-access
def __virtual__():
"""
Load this module on RedHat-based systems only
"""
if __IMPORT_ERROR:
return False, __IMPORT_ERROR
if __grains__.get("os_family", "") == "RedHat":
return __virtualname__
elif __grains__.get("os", "").lower() in (
@ -133,7 +123,7 @@ def needs_reboot():
salt '*' kernelpkg.needs_reboot
"""
return _LooseVersion(active()) < _LooseVersion(latest_installed())
return LooseVersion(active()) < LooseVersion(latest_installed())
def upgrade(reboot=False, at_time=None):
@ -190,7 +180,7 @@ def upgrade_available():
salt '*' kernelpkg.upgrade_available
"""
return _LooseVersion(latest_available()) > _LooseVersion(latest_installed())
return LooseVersion(latest_available()) > LooseVersion(latest_installed())
def remove(release):
@ -291,8 +281,8 @@ def _cmp_version(item1, item2):
"""
Compare function for package version sorting
"""
vers1 = _LooseVersion(item1)
vers2 = _LooseVersion(item2)
vers1 = LooseVersion(item1)
vers2 = LooseVersion(item2)
if vers1 < vers2:
return -1

View file

@ -23,7 +23,7 @@ import salt.utils.files
import salt.utils.path
import salt.utils.platform
import salt.utils.stringutils
from salt.utils.versions import LooseVersion as _LooseVersion
from salt.utils.versions import Version
# Set up logging
log = logging.getLogger(__name__)
@ -51,14 +51,14 @@ def __virtual__():
'Required binary not found: "/bin/launchctl"',
)
if _LooseVersion(__grains__["osrelease"]) >= _LooseVersion("10.11"):
if Version(__grains__["osrelease"]) >= Version("10.11"):
return (
False,
"Failed to load the mac_service module:\n"
"Not available on El Capitan, uses mac_service.py",
)
if _LooseVersion(__grains__["osrelease"]) >= _LooseVersion("10.10"):
if Version(__grains__["osrelease"]) >= Version("10.10"):
global BEFORE_YOSEMITE
BEFORE_YOSEMITE = False

View file

@ -35,7 +35,7 @@ import os.path
import salt.utils.args
import salt.utils.compat
from salt.utils.versions import LooseVersion as _LooseVersion
from salt.utils.versions import Version
log = logging.getLogger(__name__)
@ -47,9 +47,9 @@ try:
from libcloud.compute.providers import get_driver
# pylint: enable=unused-import
if hasattr(libcloud, "__version__") and _LooseVersion(
libcloud.__version__
) < _LooseVersion(REQUIRED_LIBCLOUD_VERSION):
if hasattr(libcloud, "__version__") and Version(libcloud.__version__) < Version(
REQUIRED_LIBCLOUD_VERSION
):
raise ImportError()
logging.getLogger("libcloud").setLevel(logging.CRITICAL)
HAS_LIBCLOUD = True

View file

@ -30,7 +30,7 @@ Connection module for Apache Libcloud DNS management
import logging
from salt.utils.versions import LooseVersion as _LooseVersion
from salt.utils.versions import Version
log = logging.getLogger(__name__)
@ -42,9 +42,9 @@ try:
from libcloud.dns.types import RecordType
# pylint: enable=unused-import
if hasattr(libcloud, "__version__") and _LooseVersion(
libcloud.__version__
) < _LooseVersion(REQUIRED_LIBCLOUD_VERSION):
if hasattr(libcloud, "__version__") and Version(libcloud.__version__) < Version(
REQUIRED_LIBCLOUD_VERSION
):
raise ImportError()
logging.getLogger("libcloud").setLevel(logging.CRITICAL)
HAS_LIBCLOUD = True

View file

@ -34,7 +34,7 @@ import logging
import salt.utils.args
import salt.utils.compat
from salt.utils.versions import LooseVersion as _LooseVersion
from salt.utils.versions import Version
log = logging.getLogger(__name__)
@ -46,9 +46,9 @@ try:
from libcloud.loadbalancer.providers import get_driver
# pylint: enable=unused-import
if hasattr(libcloud, "__version__") and _LooseVersion(
libcloud.__version__
) < _LooseVersion(REQUIRED_LIBCLOUD_VERSION):
if hasattr(libcloud, "__version__") and Version(libcloud.__version__) < Version(
REQUIRED_LIBCLOUD_VERSION
):
raise ImportError()
logging.getLogger("libcloud").setLevel(logging.CRITICAL)
HAS_LIBCLOUD = True

View file

@ -34,7 +34,7 @@ import logging
import salt.utils.args
import salt.utils.compat
from salt.utils.versions import LooseVersion as _LooseVersion
from salt.utils.versions import Version
log = logging.getLogger(__name__)
@ -45,9 +45,9 @@ try:
from libcloud.storage.providers import get_driver
# pylint: enable=unused-import
if hasattr(libcloud, "__version__") and _LooseVersion(
libcloud.__version__
) < _LooseVersion(REQUIRED_LIBCLOUD_VERSION):
if hasattr(libcloud, "__version__") and Version(libcloud.__version__) < Version(
REQUIRED_LIBCLOUD_VERSION
):
raise ImportError()
logging.getLogger("libcloud").setLevel(logging.CRITICAL)
HAS_LIBCLOUD = True

View file

@ -35,7 +35,7 @@ import salt.utils.odict
import salt.utils.path
import salt.utils.stringutils
from salt.exceptions import CommandExecutionError, SaltInvocationError
from salt.utils.versions import LooseVersion as _LooseVersion
from salt.utils.versions import Version
# Set up logging
log = logging.getLogger(__name__)
@ -116,8 +116,8 @@ def version():
if not __context__.get(k, None):
cversion = __salt__["cmd.run_all"]("lxc-info --version")
if not cversion["retcode"]:
ver = _LooseVersion(cversion["stdout"])
if ver < _LooseVersion("1.0"):
ver = Version(cversion["stdout"])
if ver < Version("1.0"):
raise CommandExecutionError("LXC should be at least 1.0")
__context__[k] = "{}".format(ver)
return __context__.get(k, None)
@ -878,7 +878,7 @@ def _network_conf(conf_tuples=None, **kwargs):
# if we didn't explicitly say no to
# (lxc.network.ipv4.gateway: auto)
if (
_LooseVersion(version()) <= _LooseVersion("1.0.7")
Version(version()) <= Version("1.0.7")
and True not in ["lxc.network.ipv4.gateway" in a for a in ret]
and True in ["lxc.network.ipv4" in a for a in ret]
):
@ -2129,7 +2129,7 @@ def clone(name, orig, profile=None, network_profile=None, nic_opts=None, **kwarg
if backing in ("dir", "overlayfs", "btrfs"):
size = None
# LXC commands and options changed in 2.0 - CF issue #34086 for details
if _LooseVersion(version()) >= _LooseVersion("2.0"):
if Version(version()) >= Version("2.0"):
# https://linuxcontainers.org/lxc/manpages//man1/lxc-copy.1.html
cmd = "lxc-copy"
cmd += " {} -n {} -N {}".format(snapshot, orig, name)

View file

@ -39,7 +39,7 @@ from datetime import datetime
import salt.utils.decorators.path
import salt.utils.files
from salt.exceptions import CommandExecutionError, SaltInvocationError
from salt.utils.versions import LooseVersion
from salt.utils.versions import Version
try:
import pylxd
@ -82,7 +82,7 @@ _connection_pool = {}
def __virtual__():
if HAS_PYLXD:
if LooseVersion(pylxd_version()) < LooseVersion(_pylxd_minimal_version):
if Version(pylxd_version()) < Version(_pylxd_minimal_version):
return (
False,
'The lxd execution module cannot be loaded: pylxd "{}" is '

View file

@ -15,7 +15,7 @@ import sqlite3
import salt.utils.platform
import salt.utils.stringutils
from salt.exceptions import CommandExecutionError
from salt.utils.versions import LooseVersion as _LooseVersion
from salt.utils.versions import Version
log = logging.getLogger(__name__)
@ -31,7 +31,7 @@ def __virtual__():
"""
if not salt.utils.platform.is_darwin():
return False, "Must be run on macOS"
if _LooseVersion(__grains__["osrelease"]) < salt.utils.stringutils.to_str("10.9"):
if Version(__grains__["osrelease"]) < Version("10.9"):
return False, "Must be run on macOS 10.9 or newer"
return __virtualname__

View file

@ -36,7 +36,7 @@ import salt.utils.path
import salt.utils.platform
import salt.utils.stringutils
from salt.exceptions import CommandExecutionError
from salt.utils.versions import LooseVersion as _LooseVersion
from salt.utils.versions import Version
# Define the module's virtual name
__virtualname__ = "service"
@ -79,7 +79,7 @@ def __virtual__():
'Required binary not found: "plutil"',
)
if _LooseVersion(__grains__["osrelease"]) < _LooseVersion("10.11"):
if Version(__grains__["osrelease"]) < Version("10.11"):
return (
False,
"Failed to load the mac_service module:\nRequires macOS 10.11 or newer",

View file

@ -18,7 +18,7 @@ import re
import salt.utils.json
from salt.exceptions import get_error_message as _get_error_message
from salt.utils.versions import LooseVersion as _LooseVersion
from salt.utils.versions import Version
try:
import pymongo
@ -336,7 +336,7 @@ def user_list(
output = []
mongodb_version = _version(mdb)
if _LooseVersion(mongodb_version) >= _LooseVersion("2.6"):
if Version(mongodb_version) >= Version("2.6"):
for user in mdb.command("usersInfo")["users"]:
output.append({"user": user["user"], "roles": user["roles"]})
else:

View file

@ -11,7 +11,7 @@ import salt.utils.json
import salt.utils.path
import salt.utils.user
from salt.exceptions import CommandExecutionError
from salt.utils.versions import LooseVersion as _LooseVersion
from salt.utils.versions import Version
log = logging.getLogger(__name__)
@ -50,7 +50,8 @@ def _check_valid_version():
res = salt.modules.cmdmod.run(
"{npm} --version".format(npm=npm_path), output_loglevel="quiet"
)
npm_version, valid_version = _LooseVersion(res), _LooseVersion("1.2")
npm_version = Version(res)
valid_version = Version("1.2")
# pylint: enable=no-member
if npm_version < valid_version:
raise CommandExecutionError(

View file

@ -33,6 +33,7 @@ import salt.utils.pkg
import salt.utils.stringutils
import salt.utils.versions
from salt.exceptions import CommandExecutionError, MinionError, SaltInvocationError
from salt.utils.versions import Version
REPO_REGEXP = r'^#?\s*(src|src/gz)\s+([^\s<>]+|"[^<>]+")\s+[^\s<>]+'
OPKG_CONFDIR = "/etc/opkg"
@ -1229,9 +1230,7 @@ def version_cmp(
["opkg", "--version"], output_loglevel="trace", python_shell=False
)
opkg_version = output.split(" ")[2].strip()
if salt.utils.versions.LooseVersion(
opkg_version
) >= salt.utils.versions.LooseVersion("0.3.4"):
if Version(opkg_version) >= Version("0.3.4"):
cmd_compare = ["opkg", "compare-versions"]
elif salt.utils.path.which("opkg-compare-versions"):
cmd_compare = ["opkg-compare-versions"]

View file

@ -20,7 +20,7 @@ import salt.utils.itertools
import salt.utils.pkg
import salt.utils.systemd
from salt.exceptions import CommandExecutionError, MinionError
from salt.utils.versions import LooseVersion as _LooseVersion
from salt.utils.versions import LooseVersion
log = logging.getLogger(__name__)
@ -1036,7 +1036,7 @@ def list_repo_pkgs(*args, **kwargs):
# Sort versions newest to oldest
for pkgname in ret[reponame]:
sorted_versions = sorted(
(_LooseVersion(x) for x in ret[reponame][pkgname]), reverse=True
(LooseVersion(x) for x in ret[reponame][pkgname]), reverse=True
)
ret[reponame][pkgname] = [x.vstring for x in sorted_versions]
return ret
@ -1047,7 +1047,7 @@ def list_repo_pkgs(*args, **kwargs):
byrepo_ret.setdefault(pkgname, []).extend(ret[reponame][pkgname])
for pkgname in byrepo_ret:
sorted_versions = sorted(
(_LooseVersion(x) for x in byrepo_ret[pkgname]), reverse=True
(LooseVersion(x) for x in byrepo_ret[pkgname]), reverse=True
)
byrepo_ret[pkgname] = [x.vstring for x in sorted_versions]
return byrepo_ret

View file

@ -154,10 +154,8 @@ def _get_pip_bin(bin_env):
Locate the pip binary, either from `bin_env` as a virtualenv, as the
executable itself, or from searching conventional filesystem locations
"""
bundled = _check_bundled()
if not bin_env:
if bundled:
if _check_bundled():
logger.debug("pip: Using pip from bundled app")
return [os.path.normpath(sys.executable), "pip"]
else:

View file

@ -57,7 +57,7 @@ import salt.utils.path
import salt.utils.stringutils
from salt.exceptions import CommandExecutionError, SaltInvocationError
from salt.ext.saslprep import saslprep
from salt.utils.versions import LooseVersion as _LooseVersion
from salt.utils.versions import LooseVersion
try:
import csv
@ -336,7 +336,7 @@ def _parsed_version(
)
if psql_version:
return _LooseVersion(psql_version)
return LooseVersion(psql_version)
else:
log.warning(
"Attempt to parse version of Postgres server failed. "
@ -998,11 +998,11 @@ def user_list(
runas=runas,
)
if ver:
if ver >= _LooseVersion("9.1"):
if ver >= LooseVersion("9.1"):
replication_column = "pg_roles.rolreplication"
else:
replication_column = "NULL"
if ver >= _LooseVersion("9.5"):
if ver >= LooseVersion("9.5"):
rolcatupdate_column = "NULL"
else:
rolcatupdate_column = "pg_roles.rolcatupdate"
@ -1790,11 +1790,11 @@ def is_available_extension(
def _pg_is_older_ext_ver(a, b):
"""
Compare versions of extensions using salt.utils.versions.LooseVersion.
Compare versions of extensions using `looseversion.LooseVersion`.
Returns ``True`` if version a is lesser than b.
"""
return _LooseVersion(a) < _LooseVersion(b)
return LooseVersion(a) < LooseVersion(b)
def is_installed_extension(

View file

@ -16,7 +16,7 @@ import salt.utils.path
import salt.utils.platform
import salt.utils.user
from salt.exceptions import CommandExecutionError, SaltInvocationError
from salt.utils.versions import LooseVersion as _LooseVersion
from salt.utils.versions import Version
log = logging.getLogger(__name__)
@ -973,7 +973,7 @@ def list_policies(vhost="/", runas=None):
ret[vhost] = {}
ret[vhost][name] = {}
if _LooseVersion(version) >= _LooseVersion("3.7"):
if Version(version) >= Version("3.7"):
# in version 3.7 the position of apply_to and pattern has been
# switched
ret[vhost][name]["pattern"] = parts[2]

View file

@ -163,7 +163,11 @@ def _check_release_cmp(name):
log.info("Release code name %s was not found.", name)
return None
current_version = str(salt.version.SaltStackVersion(*salt.version.__version_info__))
current_version = str(
salt.version.SaltStackVersion( # pylint: disable=no-value-for-parameter
*salt.version.__version_info__
)
)
current_version = current_version.rsplit(".", 1)[0]
version_cmp = salt.utils.versions.version_cmp(current_version, map_version)
return version_cmp

View file

@ -119,16 +119,19 @@ def _get_pillar_errors(kwargs, pillar=None):
return None if kwargs.get("force") else (pillar or __pillar__).get("_errors")
def _wait(jid):
def _wait(jid, max_queue=0):
"""
Wait for all previously started state jobs to finish running
"""
if jid is None:
jid = salt.utils.jid.gen_jid(__opts__)
states = _prior_running_states(jid)
while states:
time.sleep(1)
states = _prior_running_states(jid)
if not max_queue or len(states) < max_queue:
while states:
time.sleep(1)
states = _prior_running_states(jid)
return True
return False
def _snapper_pre(opts, jid):
@ -413,13 +416,23 @@ def _check_queue(queue, kwargs):
Utility function to queue the state run if requested
and to check for conflicts in currently running states
"""
if queue:
if queue is None:
queue = __salt__["config.option"]("state_queue", False)
if queue is True:
_wait(kwargs.get("__pub_jid"))
else:
conflict = running(concurrent=kwargs.get("concurrent", False))
if conflict:
__context__["retcode"] = salt.defaults.exitcodes.EX_STATE_COMPILER_ERROR
return conflict
queue_ret = False
if not isinstance(queue, bool) and isinstance(queue, int):
queue_ret = _wait(kwargs.get("__pub_jid"), max_queue=queue)
if not queue_ret:
conflict = running(concurrent=kwargs.get("concurrent", False))
if conflict:
__context__["retcode"] = salt.defaults.exitcodes.EX_STATE_COMPILER_ERROR
return conflict
return
def _get_initial_pillar(opts):
@ -431,7 +444,7 @@ def _get_initial_pillar(opts):
)
def low(data, queue=False, **kwargs):
def low(data, queue=None, **kwargs):
"""
Execute a single low data call
@ -480,7 +493,7 @@ def _get_test_value(test=None, **kwargs):
return ret
def high(data, test=None, queue=False, **kwargs):
def high(data, test=None, queue=None, **kwargs):
"""
Execute the compound calls stored in a single set of high data
@ -533,7 +546,7 @@ def high(data, test=None, queue=False, **kwargs):
return ret
def template(tem, queue=False, **kwargs):
def template(tem, queue=None, **kwargs):
"""
Execute the information stored in a template file on the minion.
@ -586,7 +599,7 @@ def template(tem, queue=False, **kwargs):
return ret
def template_str(tem, queue=False, **kwargs):
def template_str(tem, queue=None, **kwargs):
"""
Execute the information stored in a string from an sls template
@ -668,11 +681,19 @@ def apply_(mods=None, **kwargs):
queue : False
Instead of failing immediately when another state run is in progress,
queue the new state run to begin running once the other has finished.
a value of ``True`` will queue the new state run to begin running once
the other has finished.
This option starts a new thread for each queued state run, so use this
option sparingly.
.. versionchanged:: 3006.0
This parameter can also be set via the ``state_queue`` configuration
option. Additionally, it can now be set to an integer representing
the maximum queue size which can be attained before the state runs
will fail to be queued. This can prevent runaway conditions where
new threads are started until system performance is hampered.
localconfig
Optionally, instead of using the minion config, load minion opts from
the file specified by this argument, and then merge them with the
@ -727,11 +748,19 @@ def apply_(mods=None, **kwargs):
queue : False
Instead of failing immediately when another state run is in progress,
queue the new state run to begin running once the other has finished.
a value of ``True`` will queue the new state run to begin running once
the other has finished.
This option starts a new thread for each queued state run, so use this
option sparingly.
.. versionchanged:: 3006.0
This parameter can also be set via the ``state_queue`` configuration
option. Additionally, it can now be set to an integer representing
the maximum queue size which can be attained before the state runs
will fail to be queued. This can prevent runaway conditions where
new threads are started until system performance is hampered.
concurrent : False
Execute state runs concurrently instead of serially
@ -945,7 +974,7 @@ def run_request(name="default", **kwargs):
return {}
def highstate(test=None, queue=False, **kwargs):
def highstate(test=None, queue=None, **kwargs):
"""
Retrieve the state data from the salt master for this minion and execute it
@ -1007,11 +1036,19 @@ def highstate(test=None, queue=False, **kwargs):
queue : False
Instead of failing immediately when another state run is in progress,
queue the new state run to begin running once the other has finished.
a value of ``True`` will queue the new state run to begin running once
the other has finished.
This option starts a new thread for each queued state run, so use this
option sparingly.
.. versionchanged:: 3006.0
This parameter can also be set via the ``state_queue`` configuration
option. Additionally, it can now be set to an integer representing
the maximum queue size which can be attained before the state runs
will fail to be queued. This can prevent runaway conditions where
new threads are started until system performance is hampered.
concurrent : False
Execute state runs concurrently instead of serially
@ -1061,15 +1098,9 @@ def highstate(test=None, queue=False, **kwargs):
}
return ret
concurrent = kwargs.get("concurrent", False)
if queue:
_wait(kwargs.get("__pub_jid"))
else:
conflict = running(concurrent)
if conflict:
__context__["retcode"] = salt.defaults.exitcodes.EX_STATE_COMPILER_ERROR
return conflict
conflict = _check_queue(queue, kwargs)
if conflict is not None:
return conflict
orig_test = __opts__.get("test", None)
opts = salt.utils.state.get_sls_opts(__opts__, **kwargs)
@ -1155,7 +1186,7 @@ def highstate(test=None, queue=False, **kwargs):
return ret
def sls(mods, test=None, exclude=None, queue=False, sync_mods=None, **kwargs):
def sls(mods, test=None, exclude=None, queue=None, sync_mods=None, **kwargs):
"""
Execute the states in one or more SLS files
@ -1198,11 +1229,19 @@ def sls(mods, test=None, exclude=None, queue=False, sync_mods=None, **kwargs):
queue : False
Instead of failing immediately when another state run is in progress,
queue the new state run to begin running once the other has finished.
a value of ``True`` will queue the new state run to begin running once
the other has finished.
This option starts a new thread for each queued state run, so use this
option sparingly.
.. versionchanged:: 3006.0
This parameter can also be set via the ``state_queue`` configuration
option. Additionally, it can now be set to an integer representing
the maximum queue size which can be attained before the state runs
will fail to be queued. This can prevent runaway conditions where
new threads are started until system performance is hampered.
concurrent : False
Execute state runs concurrently instead of serially
@ -1279,14 +1318,10 @@ def sls(mods, test=None, exclude=None, queue=False, sync_mods=None, **kwargs):
# "env" is not supported; Use "saltenv".
kwargs.pop("env")
# Modification to __opts__ lost after this if-else
if queue:
_wait(kwargs.get("__pub_jid"))
else:
conflict = running(concurrent)
if conflict:
__context__["retcode"] = salt.defaults.exitcodes.EX_STATE_COMPILER_ERROR
return conflict
# Modification to __opts__ lost after this
conflict = _check_queue(queue, kwargs)
if conflict is not None:
return conflict
if isinstance(mods, list):
disabled = _disabled(mods)
@ -1442,7 +1477,7 @@ def sls(mods, test=None, exclude=None, queue=False, sync_mods=None, **kwargs):
return ret
def top(topfn, test=None, queue=False, **kwargs):
def top(topfn, test=None, queue=None, **kwargs):
"""
Execute a specific top file instead of the default. This is useful to apply
configurations from a different environment (for example, dev or prod), without
@ -1450,11 +1485,19 @@ def top(topfn, test=None, queue=False, **kwargs):
queue : False
Instead of failing immediately when another state run is in progress,
queue the new state run to begin running once the other has finished.
a value of ``True`` will queue the new state run to begin running once
the other has finished.
This option starts a new thread for each queued state run, so use this
option sparingly.
.. versionchanged:: 3006.0
This parameter can also be set via the ``state_queue`` configuration
option. Additionally, it can now be set to an integer representing
the maximum queue size which can be attained before the state runs
will fail to be queued. This can prevent runaway conditions where
new threads are started until system performance is hampered.
saltenv
Specify a salt fileserver environment to be used when applying states
@ -1542,7 +1585,7 @@ def top(topfn, test=None, queue=False, **kwargs):
return ret
def show_highstate(queue=False, **kwargs):
def show_highstate(queue=None, **kwargs):
"""
Retrieve the highstate data from the salt master and display it
@ -1601,7 +1644,7 @@ def show_highstate(queue=False, **kwargs):
return ret
def show_lowstate(queue=False, **kwargs):
def show_lowstate(queue=None, **kwargs):
"""
List out the low data that will be applied to this minion
@ -1638,7 +1681,7 @@ def show_lowstate(queue=False, **kwargs):
return ret
def show_state_usage(queue=False, **kwargs):
def show_state_usage(queue=None, **kwargs):
"""
Retrieve the highstate data from the salt master to analyse used and unused states
@ -1672,7 +1715,7 @@ def show_state_usage(queue=False, **kwargs):
return ret
def show_states(queue=False, **kwargs):
def show_states(queue=None, **kwargs):
"""
Returns the list of states that will be applied on highstate.
@ -1722,7 +1765,7 @@ def show_states(queue=False, **kwargs):
return list(states.keys())
def sls_id(id_, mods, test=None, queue=False, **kwargs):
def sls_id(id_, mods, test=None, queue=None, **kwargs):
"""
Call a single ID from the named module(s) and handle all requisites
@ -1849,7 +1892,7 @@ def sls_id(id_, mods, test=None, queue=False, **kwargs):
return ret
def show_low_sls(mods, test=None, queue=False, **kwargs):
def show_low_sls(mods, test=None, queue=None, **kwargs):
"""
Display the low data from a specific sls. The default environment is
``base``, use ``saltenv`` to specify a different environment.
@ -1945,7 +1988,7 @@ def show_low_sls(mods, test=None, queue=False, **kwargs):
return ret
def show_sls(mods, test=None, queue=False, **kwargs):
def show_sls(mods, test=None, queue=None, **kwargs):
"""
Display the state data from a specific sls or list of sls files on the
master. The default environment is ``base``, use ``saltenv`` to specify a
@ -2039,7 +2082,7 @@ def show_sls(mods, test=None, queue=False, **kwargs):
return high_
def sls_exists(mods, test=None, queue=False, **kwargs):
def sls_exists(mods, test=None, queue=None, **kwargs):
"""
Tests for the existence the of a specific SLS or list of SLS files on the
master. Similar to :py:func:`state.show_sls <salt.modules.state.show_sls>`,
@ -2061,7 +2104,7 @@ def sls_exists(mods, test=None, queue=False, **kwargs):
return isinstance(show_sls(mods, test=test, queue=queue, **kwargs), dict)
def id_exists(ids, mods, test=None, queue=False, **kwargs):
def id_exists(ids, mods, test=None, queue=None, **kwargs):
"""
Tests for the existence of a specific ID or list of IDs within the
specified SLS file(s). Similar to :py:func:`state.sls_exists
@ -2088,7 +2131,7 @@ def id_exists(ids, mods, test=None, queue=False, **kwargs):
return ids.issubset(sls_ids)
def show_top(queue=False, **kwargs):
def show_top(queue=None, **kwargs):
"""
Return the top data that the minion will use for a highstate
@ -2130,7 +2173,7 @@ def show_top(queue=False, **kwargs):
return matches
def single(fun, name, test=None, queue=False, **kwargs):
def single(fun, name, test=None, queue=None, **kwargs):
"""
Execute a single state function with the named kwargs, returns False if
insufficient data is sent to the command

View file

@ -16,6 +16,7 @@ import salt.utils.args
import salt.utils.functools
import salt.utils.hashutils
import salt.utils.platform
import salt.utils.versions
import salt.version
from salt.utils.decorators import depends
@ -675,3 +676,27 @@ def raise_exception(name, *args, **kwargs):
except AttributeError:
log.error("No such exception: %s", name)
return False
def deprecation_warning():
r"""
Return True, but also produce two DeprecationWarnings. One by date, the
other by the codename - release Oganesson, which should correspond to Salt
3108.
CLI Example:
.. code-block:: bash
salt \* test.deprecation_warning
"""
# This warn should always stay in Salt.
salt.utils.versions.warn_until(
"Oganesson",
"This is a test deprecation warning by version.",
)
salt.utils.versions.warn_until_date(
"30000101",
"This is a test deprecation warning by date very far into the future ({date}).",
)
return True

View file

@ -111,7 +111,7 @@ import salt.utils.data
import salt.utils.files
import salt.utils.stringutils
from salt.exceptions import CommandExecutionError
from salt.utils.versions import LooseVersion as _LooseVersion
from salt.utils.versions import Version
# pylint: disable=C0103
@ -122,7 +122,7 @@ try:
import OpenSSL
HAS_SSL = True
OpenSSL_version = _LooseVersion(OpenSSL.__dict__.get("__version__", "0.0"))
OpenSSL_version = Version(OpenSSL.__dict__.get("__version__", "0.0"))
except ImportError:
pass
@ -138,14 +138,14 @@ def __virtual__():
Only load this module if the ca config options are set
"""
global X509_EXT_ENABLED
if HAS_SSL and OpenSSL_version >= _LooseVersion("0.10"):
if OpenSSL_version < _LooseVersion("0.14"):
if HAS_SSL and OpenSSL_version >= Version("0.10"):
if OpenSSL_version < Version("0.14"):
X509_EXT_ENABLED = False
log.debug(
"You should upgrade pyOpenSSL to at least 0.14.1 to "
"enable the use of X509 extensions in the tls module"
)
elif OpenSSL_version <= _LooseVersion("0.15"):
elif OpenSSL_version <= Version("0.15"):
log.debug(
"You should upgrade pyOpenSSL to at least 0.15.1 to "
"enable the full use of X509 extensions in the tls module"

View file

@ -7,7 +7,7 @@ import base64
import urllib.parse
import salt.utils.json
from salt.utils.versions import LooseVersion as _LooseVersion
from salt.utils.versions import Version
try:
import OpenSSL
@ -30,8 +30,8 @@ def __virtual__():
OPENSSL_MIN_VER
),
)
cur_version = _LooseVersion(OpenSSL.__version__)
min_version = _LooseVersion(OPENSSL_MIN_VER)
cur_version = Version(OpenSSL.__version__)
min_version = Version(OPENSSL_MIN_VER)
if cur_version < min_version:
return (
False,

View file

@ -65,7 +65,7 @@ from salt.exceptions import (
SaltInvocationError,
SaltRenderError,
)
from salt.utils.versions import LooseVersion
from salt.utils.versions import Version
log = logging.getLogger(__name__)
@ -2356,7 +2356,7 @@ def _reverse_cmp_pkg_versions(pkg1, pkg2):
"""
Compare software package versions
"""
return 1 if LooseVersion(pkg1) > LooseVersion(pkg2) else -1
return 1 if Version(pkg1) > Version(pkg2) else -1
def _get_latest_pkg_version(pkginfo):

Some files were not shown because too many files have changed in this diff Show more