diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6d2c98b6280e..9b5fbaa3f424 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -470,7 +470,7 @@ jobs: cache-seed: ${{ needs.prepare-workflow.outputs.cache-seed }} salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" relenv-version: "0.22.4" - python-version: "3.11.14" + python-version: "3.12.12" ci-python-version: "3.11" matrix: ${{ toJSON(fromJSON(needs.prepare-workflow.outputs.config)['build-matrix']) }} linux_arm_runner: ${{ fromJSON(needs.prepare-workflow.outputs.config)['linux_arm_runner'] }} @@ -487,7 +487,7 @@ jobs: salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }} relenv-version: "0.22.4" - python-version: "3.11.14" + python-version: "3.12.12" ci-python-version: "3.11" source: "onedir" matrix: ${{ toJSON(fromJSON(needs.prepare-workflow.outputs.config)['build-matrix']) }} @@ -504,7 +504,7 @@ jobs: salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }} relenv-version: "0.22.4" - python-version: "3.11.14" + python-version: "3.12.12" ci-python-version: "3.11" source: "src" matrix: ${{ toJSON(fromJSON(needs.prepare-workflow.outputs.config)['build-matrix']) }} @@ -519,10 +519,10 @@ jobs: with: nox-session: ci-test-onedir nox-version: 2022.8.7 - python-version: "3.11.14" + python-version: "3.12.12" ci-python-version: "3.11" salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.11.14 + cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.12.12 nox-archive-hash: "${{ needs.prepare-workflow.outputs.nox-archive-hash }}" matrix: ${{ toJSON(fromJSON(needs.prepare-workflow.outputs.config)['build-matrix']) }} linux_arm_runner: ${{ fromJSON(needs.prepare-workflow.outputs.config)['linux_arm_runner'] }} @@ -539,7 +539,7 @@ jobs: salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" nox-version: 2022.8.7 ci-python-version: "3.11" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.11.14 + cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.12.12 skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.config)['skip_code_coverage'] }} testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} matrix: ${{ toJSON(fromJSON(needs.prepare-workflow.outputs.config)['pkg-test-matrix']) }} @@ -557,7 +557,7 @@ jobs: ci-python-version: "3.11" testrun: ${{ toJSON(fromJSON(needs.prepare-workflow.outputs.config)['testrun']) }} salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.11.14 + cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.12.12 skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.config)['skip_code_coverage'] }} workflow-slug: ci default-timeout: 180 diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index 5020f2a760e8..8e7c34b28860 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -465,7 +465,7 @@ jobs: cache-seed: ${{ needs.prepare-workflow.outputs.cache-seed }} salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" relenv-version: "0.22.4" - python-version: "3.11.14" + python-version: "3.12.12" ci-python-version: "3.11" matrix: ${{ toJSON(fromJSON(needs.prepare-workflow.outputs.config)['build-matrix']) }} linux_arm_runner: ${{ fromJSON(needs.prepare-workflow.outputs.config)['linux_arm_runner'] }} @@ -482,7 +482,7 @@ jobs: salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }} relenv-version: "0.22.4" - python-version: "3.11.14" + python-version: "3.12.12" ci-python-version: "3.11" source: "onedir" matrix: ${{ toJSON(fromJSON(needs.prepare-workflow.outputs.config)['build-matrix']) }} @@ -503,7 +503,7 @@ jobs: salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }} relenv-version: "0.22.4" - python-version: "3.11.14" + python-version: "3.12.12" ci-python-version: "3.11" source: "src" matrix: ${{ toJSON(fromJSON(needs.prepare-workflow.outputs.config)['build-matrix']) }} @@ -522,10 +522,10 @@ jobs: with: nox-session: ci-test-onedir nox-version: 2022.8.7 - python-version: "3.11.14" + python-version: "3.12.12" ci-python-version: "3.11" salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.11.14 + cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.12.12 nox-archive-hash: "${{ needs.prepare-workflow.outputs.nox-archive-hash }}" matrix: ${{ toJSON(fromJSON(needs.prepare-workflow.outputs.config)['build-matrix']) }} linux_arm_runner: ${{ fromJSON(needs.prepare-workflow.outputs.config)['linux_arm_runner'] }} @@ -542,7 +542,7 @@ jobs: salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" nox-version: 2022.8.7 ci-python-version: "3.11" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.11.14 + cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.12.12 skip-code-coverage: true testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} matrix: ${{ toJSON(fromJSON(needs.prepare-workflow.outputs.config)['pkg-test-matrix']) }} @@ -560,7 +560,7 @@ jobs: ci-python-version: "3.11" testrun: ${{ toJSON(fromJSON(needs.prepare-workflow.outputs.config)['testrun']) }} salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.11.14 + cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.12.12 skip-code-coverage: true workflow-slug: nightly default-timeout: 360 diff --git a/.github/workflows/scheduled.yml b/.github/workflows/scheduled.yml index 83d32acdeef7..007ef715d89e 100644 --- a/.github/workflows/scheduled.yml +++ b/.github/workflows/scheduled.yml @@ -513,7 +513,7 @@ jobs: cache-seed: ${{ needs.prepare-workflow.outputs.cache-seed }} salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" relenv-version: "0.22.4" - python-version: "3.11.14" + python-version: "3.12.12" ci-python-version: "3.11" matrix: ${{ toJSON(fromJSON(needs.prepare-workflow.outputs.config)['build-matrix']) }} linux_arm_runner: ${{ fromJSON(needs.prepare-workflow.outputs.config)['linux_arm_runner'] }} @@ -530,7 +530,7 @@ jobs: salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }} relenv-version: "0.22.4" - python-version: "3.11.14" + python-version: "3.12.12" ci-python-version: "3.11" source: "onedir" matrix: ${{ toJSON(fromJSON(needs.prepare-workflow.outputs.config)['build-matrix']) }} @@ -547,7 +547,7 @@ jobs: salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }} relenv-version: "0.22.4" - python-version: "3.11.14" + python-version: "3.12.12" ci-python-version: "3.11" source: "src" matrix: ${{ toJSON(fromJSON(needs.prepare-workflow.outputs.config)['build-matrix']) }} @@ -562,10 +562,10 @@ jobs: with: nox-session: ci-test-onedir nox-version: 2022.8.7 - python-version: "3.11.14" + python-version: "3.12.12" ci-python-version: "3.11" salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.11.14 + cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.12.12 nox-archive-hash: "${{ needs.prepare-workflow.outputs.nox-archive-hash }}" matrix: ${{ toJSON(fromJSON(needs.prepare-workflow.outputs.config)['build-matrix']) }} linux_arm_runner: ${{ fromJSON(needs.prepare-workflow.outputs.config)['linux_arm_runner'] }} @@ -582,7 +582,7 @@ jobs: salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" nox-version: 2022.8.7 ci-python-version: "3.11" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.11.14 + cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.12.12 skip-code-coverage: true testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} matrix: ${{ toJSON(fromJSON(needs.prepare-workflow.outputs.config)['pkg-test-matrix']) }} @@ -600,7 +600,7 @@ jobs: ci-python-version: "3.11" testrun: ${{ toJSON(fromJSON(needs.prepare-workflow.outputs.config)['testrun']) }} salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.11.14 + cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.12.12 skip-code-coverage: true workflow-slug: scheduled default-timeout: 360 diff --git a/.github/workflows/staging.yml b/.github/workflows/staging.yml index 0b5de3fadb67..ce8cb4e7419c 100644 --- a/.github/workflows/staging.yml +++ b/.github/workflows/staging.yml @@ -497,7 +497,7 @@ jobs: cache-seed: ${{ needs.prepare-workflow.outputs.cache-seed }} salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" relenv-version: "0.22.4" - python-version: "3.11.14" + python-version: "3.12.12" ci-python-version: "3.11" matrix: ${{ toJSON(fromJSON(needs.prepare-workflow.outputs.config)['build-matrix']) }} linux_arm_runner: ${{ fromJSON(needs.prepare-workflow.outputs.config)['linux_arm_runner'] }} @@ -515,7 +515,7 @@ jobs: salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }} relenv-version: "0.22.4" - python-version: "3.11.14" + python-version: "3.12.12" ci-python-version: "3.11" source: "onedir" matrix: ${{ toJSON(fromJSON(needs.prepare-workflow.outputs.config)['build-matrix']) }} @@ -537,7 +537,7 @@ jobs: salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }} relenv-version: "0.22.4" - python-version: "3.11.14" + python-version: "3.12.12" ci-python-version: "3.11" source: "src" matrix: ${{ toJSON(fromJSON(needs.prepare-workflow.outputs.config)['build-matrix']) }} @@ -556,10 +556,10 @@ jobs: with: nox-session: ci-test-onedir nox-version: 2022.8.7 - python-version: "3.11.14" + python-version: "3.12.12" ci-python-version: "3.11" salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.11.14 + cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.12.12 nox-archive-hash: "${{ needs.prepare-workflow.outputs.nox-archive-hash }}" matrix: ${{ toJSON(fromJSON(needs.prepare-workflow.outputs.config)['build-matrix']) }} linux_arm_runner: ${{ fromJSON(needs.prepare-workflow.outputs.config)['linux_arm_runner'] }} @@ -576,7 +576,7 @@ jobs: salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" nox-version: 2022.8.7 ci-python-version: "3.11" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.11.14 + cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.12.12 skip-code-coverage: true testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} matrix: ${{ toJSON(fromJSON(needs.prepare-workflow.outputs.config)['pkg-test-matrix']) }} @@ -594,7 +594,7 @@ jobs: ci-python-version: "3.11" testrun: ${{ toJSON(fromJSON(needs.prepare-workflow.outputs.config)['testrun']) }} salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.11.14 + cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.12.12 skip-code-coverage: true workflow-slug: staging default-timeout: 180 diff --git a/cicd/shared-gh-workflows-context.yml b/cicd/shared-gh-workflows-context.yml index 1632de2dd513..3f7df6dd43bb 100644 --- a/cicd/shared-gh-workflows-context.yml +++ b/cicd/shared-gh-workflows-context.yml @@ -3,7 +3,7 @@ # Tool versions nox_version: "2022.8.7" -python_version: "3.11.14" +python_version: "3.12.12" relenv_version: "0.22.4" release_branches: - "3006.x" diff --git a/pkg/macos/install_salt.sh b/pkg/macos/install_salt.sh index fc6d23d7b88a..5e3211fab8f6 100755 --- a/pkg/macos/install_salt.sh +++ b/pkg/macos/install_salt.sh @@ -127,7 +127,7 @@ fi # Install Requirements into the Python Environment #------------------------------------------------------------------------------- _msg "Installing Salt requirements" -$PIP_BIN install -r "$REQ_FILE" > /dev/null 2>&1 +CFLAGS="${CFLAGS} -Wno-int-conversion" $PIP_BIN install -r "$REQ_FILE" > /dev/null 2>&1 if [ -f "$BUILD_DIR/bin/distro" ]; then _success else diff --git a/requirements/static/ci/common.in b/requirements/static/ci/common.in index 6358a8b1f95d..78b74709d74e 100644 --- a/requirements/static/ci/common.in +++ b/requirements/static/ci/common.in @@ -24,6 +24,7 @@ google-auth==2.35.0; python_version == '3.9' jmespath>=1.1.0 jsonschema junos-eznc; sys_platform != 'win32' +ncclient>=0.6.16; sys_platform != 'win32' junit-xml>=1.9 jxmlease; sys_platform != 'win32' kazoo; sys_platform != 'win32' and sys_platform != 'darwin' diff --git a/requirements/static/ci/darwin.in b/requirements/static/ci/darwin.in index 96ded57cab8f..2420386d3778 100644 --- a/requirements/static/ci/darwin.in +++ b/requirements/static/ci/darwin.in @@ -1,6 +1,6 @@ -pygit2>=1.10.1 +pygit2>=1.14.0 yamllint -mercurial +mercurial>=6.7 hglib # Pin versions to match 3007.x apache-libcloud>=3.8.0 diff --git a/requirements/static/ci/freebsd.in b/requirements/static/ci/freebsd.in index a6d21d5a499a..7b24f942361c 100644 --- a/requirements/static/ci/freebsd.in +++ b/requirements/static/ci/freebsd.in @@ -1,5 +1,5 @@ # FreeBSD static CI requirements yamllint -mercurial +mercurial>=6.7 hglib diff --git a/requirements/static/ci/linux.in b/requirements/static/ci/linux.in index 73cd0bfed347..f39cbdd0eccf 100644 --- a/requirements/static/ci/linux.in +++ b/requirements/static/ci/linux.in @@ -1,6 +1,6 @@ # Linux static CI requirements pyiface -pygit2>=1.10.1 +pygit2>=1.14.0 pymysql>=1.1.1 ansible>=10.7.0; python_version >= '3.10' and python_version < '3.11' ansible>=12.3.0; python_version >= '3.11' and python_version < '3.12' @@ -10,7 +10,7 @@ ansible>=4.4.0,<5.0.1; python_version < '3.9' twilio python-telegram-bot>=13.7 yamllint -mercurial +mercurial>=6.7 hglib redis-py-cluster python-consul diff --git a/requirements/static/ci/py3.10/cloud.txt b/requirements/static/ci/py3.10/cloud.txt index 6b87e8e50e81..2d38440ac0d7 100644 --- a/requirements/static/ci/py3.10/cloud.txt +++ b/requirements/static/ci/py3.10/cloud.txt @@ -231,6 +231,10 @@ iniconfig==2.0.0 # via # -c requirements/static/ci/py3.10/linux.txt # pytest +invoke==2.2.1 + # via + # -c requirements/static/ci/py3.10/linux.txt + # paramiko jaraco-collections==4.1.0 # via # -c requirements/static/ci/py3.10/linux.txt @@ -279,7 +283,7 @@ junit-xml==1.9 # via # -c requirements/static/ci/py3.10/linux.txt # -r requirements/static/ci/common.in -junos-eznc==2.6.7 +junos-eznc==2.7.6 # via # -c requirements/static/ci/py3.10/linux.txt # -r requirements/static/ci/common.in @@ -308,7 +312,7 @@ looseversion==1.3.0 # -c requirements/static/ci/py3.10/linux.txt # -c requirements/static/pkg/py3.10/linux.txt # -r requirements/base.txt -lxml==4.9.2 +lxml==6.0.2 # via # -c requirements/static/ci/py3.10/linux.txt # junos-eznc @@ -357,15 +361,13 @@ multidict==6.7.1 # -c requirements/static/pkg/py3.10/linux.txt # aiohttp # yarl -ncclient==0.6.13 +ncclient==0.7.0 # via # -c requirements/static/ci/py3.10/linux.txt + # -r requirements/static/ci/common.in # junos-eznc netaddr==0.8.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # -r requirements/static/ci/cloud.in - # junos-eznc + # via -r requirements/static/ci/cloud.in oauthlib==3.3.1 # via # -c requirements/static/ci/py3.10/linux.txt @@ -380,7 +382,7 @@ packaging==24.0 # -c requirements/static/pkg/py3.10/linux.txt # -r requirements/base.txt # pytest -paramiko==3.4.0 +paramiko==4.0.0 # via # -c requirements/static/ci/py3.10/linux.txt # -r requirements/static/ci/common.in @@ -580,7 +582,7 @@ pyyaml==6.0.1 # kubernetes # pytest-salt-factories # responses - # yamlordereddictloader + # yamlloader pyzmq==25.1.2 # via # -c requirements/static/ci/py3.10/linux.txt @@ -653,7 +655,6 @@ six==1.16.0 # junos-eznc # kazoo # kubernetes - # ncclient # profitbricks # python-dateutil # pyvmomi @@ -783,7 +784,7 @@ xmltodict==0.13.0 # -c requirements/static/ci/py3.10/linux.txt # moto # pywinrm -yamlordereddictloader==0.4.0 +yamlloader==1.6.0 # via # -c requirements/static/ci/py3.10/linux.txt # junos-eznc diff --git a/requirements/static/ci/py3.10/darwin.txt b/requirements/static/ci/py3.10/darwin.txt index f63095453885..e602844d0b46 100644 --- a/requirements/static/ci/py3.10/darwin.txt +++ b/requirements/static/ci/py3.10/darwin.txt @@ -176,6 +176,8 @@ importlib-metadata==8.7.0 # -r requirements/base.txt iniconfig==2.0.0 # via pytest +invoke==2.2.1 + # via paramiko jaraco-collections==4.1.0 # via # -c requirements/static/pkg/py3.10/darwin.txt @@ -214,7 +216,7 @@ jsonschema==3.2.0 # via -r requirements/static/ci/common.in junit-xml==1.9 # via -r requirements/static/ci/common.in -junos-eznc==2.6.7 +junos-eznc==2.7.6 # via -r requirements/static/ci/common.in jxmlease==1.0.3 # via -r requirements/static/ci/common.in @@ -226,7 +228,7 @@ looseversion==1.3.0 # via # -c requirements/static/pkg/py3.10/darwin.txt # -r requirements/base.txt -lxml==4.9.2 +lxml==6.0.2 # via # junos-eznc # ncclient @@ -240,7 +242,7 @@ markupsafe==2.1.3 # jinja2 # mako # werkzeug -mercurial==6.4.4 +mercurial==7.2 # via -r requirements/static/ci/darwin.in mock==5.1.0 # via -r requirements/pytest.txt @@ -265,10 +267,10 @@ multidict==6.7.1 # -c requirements/static/pkg/py3.10/darwin.txt # aiohttp # yarl -ncclient==0.6.13 - # via junos-eznc -netaddr==0.8.0 - # via junos-eznc +ncclient==0.7.0 + # via + # -r requirements/static/ci/common.in + # junos-eznc oauthlib==3.3.1 # via requests-oauthlib oscrypto==1.3.0 @@ -278,7 +280,7 @@ packaging==24.0 # -c requirements/static/pkg/py3.10/darwin.txt # -r requirements/base.txt # pytest -paramiko==3.4.0 +paramiko==4.0.0 # via # junos-eznc # ncclient @@ -325,7 +327,7 @@ pycryptodomex==3.19.1 # -r requirements/crypto.txt pyfakefs==5.3.1 # via -r requirements/pytest.txt -pygit2==1.13.1 +pygit2==1.18.2 # via -r requirements/static/ci/darwin.in pynacl==1.5.0 # via @@ -416,7 +418,7 @@ pyyaml==6.0.1 # pytest-salt-factories # responses # yamllint - # yamlordereddictloader + # yamlloader pyzmq==25.1.2 # via # -c requirements/static/pkg/py3.10/darwin.txt @@ -460,7 +462,6 @@ six==1.16.0 # junit-xml # junos-eznc # kubernetes - # ncclient # python-dateutil # pyvmomi # textfsm @@ -548,7 +549,7 @@ xmltodict==0.13.0 # via moto yamllint==1.32.0 # via -r requirements/static/ci/darwin.in -yamlordereddictloader==0.4.0 +yamlloader==1.6.0 # via junos-eznc yarl==1.23.0 # via diff --git a/requirements/static/ci/py3.10/freebsd.txt b/requirements/static/ci/py3.10/freebsd.txt index 1327c666177a..65059180a699 100644 --- a/requirements/static/ci/py3.10/freebsd.txt +++ b/requirements/static/ci/py3.10/freebsd.txt @@ -186,6 +186,8 @@ importlib-metadata==8.7.0 # -r requirements/static/pkg/freebsd.in iniconfig==2.0.0 # via pytest +invoke==2.2.1 ; sys_platform != 'win32' + # via paramiko jaraco-collections==4.1.0 # via # -c requirements/static/pkg/py3.10/freebsd.txt @@ -224,7 +226,7 @@ jsonschema==3.2.0 # via -r requirements/static/ci/common.in junit-xml==1.9 # via -r requirements/static/ci/common.in -junos-eznc==2.6.7 ; sys_platform != 'win32' +junos-eznc==2.7.6 ; sys_platform != 'win32' # via -r requirements/static/ci/common.in jxmlease==1.0.3 ; sys_platform != 'win32' # via -r requirements/static/ci/common.in @@ -256,7 +258,7 @@ markupsafe==2.1.3 # jinja2 # mako # werkzeug -mercurial==6.4.4 +mercurial==7.2 # via -r requirements/static/ci/freebsd.in mock==5.1.0 # via -r requirements/pytest.txt @@ -281,10 +283,10 @@ multidict==6.7.1 # -c requirements/static/pkg/py3.10/freebsd.txt # aiohttp # yarl -ncclient==0.6.13 ; sys_platform != 'win32' - # via junos-eznc -netaddr==0.8.0 ; sys_platform != 'win32' - # via junos-eznc +ncclient==0.7.0 ; sys_platform != 'win32' + # via + # -r requirements/static/ci/common.in + # junos-eznc oauthlib==3.3.1 # via requests-oauthlib oscrypto==1.3.0 ; sys_platform != 'win32' @@ -294,7 +296,7 @@ packaging==24.0 # -c requirements/static/pkg/py3.10/freebsd.txt # -r requirements/base.txt # pytest -paramiko==3.4.0 ; sys_platform != 'win32' +paramiko==4.0.0 ; sys_platform != 'win32' # via # -r requirements/static/ci/common.in # junos-eznc @@ -460,7 +462,7 @@ pyyaml==6.0.1 # pytest-salt-factories # responses # yamllint - # yamlordereddictloader + # yamlloader pyzmq==27.1.0 # via # -c requirements/static/pkg/py3.10/freebsd.txt @@ -523,7 +525,6 @@ six==1.16.0 # junos-eznc # kazoo # kubernetes - # ncclient # python-dateutil # pyvmomi # textfsm @@ -619,7 +620,7 @@ xmltodict==1.0.4 # moto yamllint==1.32.0 # via -r requirements/static/ci/freebsd.in -yamlordereddictloader==0.4.0 ; sys_platform != 'win32' +yamlloader==1.6.0 ; sys_platform != 'win32' # via junos-eznc yarl==1.23.0 # via diff --git a/requirements/static/ci/py3.10/lint.txt b/requirements/static/ci/py3.10/lint.txt index f83bef8d3d90..63529b972d0e 100644 --- a/requirements/static/ci/py3.10/lint.txt +++ b/requirements/static/ci/py3.10/lint.txt @@ -255,6 +255,10 @@ importlib-metadata==8.7.0 # -c requirements/static/pkg/py3.10/linux.txt # -r requirements/base.txt # -r requirements/static/pkg/linux.in +invoke==2.2.1 + # via + # -c requirements/static/ci/py3.10/linux.txt + # paramiko isort==4.3.21 # via pylint jaraco-collections==4.1.0 @@ -306,7 +310,7 @@ junit-xml==1.9 # via # -c requirements/static/ci/py3.10/linux.txt # -r requirements/static/ci/common.in -junos-eznc==2.6.7 +junos-eznc==2.7.6 # via # -c requirements/static/ci/py3.10/linux.txt # -r requirements/static/ci/common.in @@ -335,7 +339,7 @@ looseversion==1.3.0 # -c requirements/static/ci/py3.10/linux.txt # -c requirements/static/pkg/py3.10/linux.txt # -r requirements/base.txt -lxml==4.9.2 +lxml==6.0.2 # via # -c requirements/static/ci/py3.10/linux.txt # junos-eznc @@ -355,7 +359,7 @@ markupsafe==2.1.3 # werkzeug mccabe==0.6.1 # via pylint -mercurial==6.4.4 +mercurial==7.2 # via # -c requirements/static/ci/py3.10/linux.txt # -r requirements/static/ci/linux.in @@ -384,13 +388,10 @@ multidict==6.7.1 # -c requirements/static/pkg/py3.10/linux.txt # aiohttp # yarl -ncclient==0.6.13 - # via - # -c requirements/static/ci/py3.10/linux.txt - # junos-eznc -netaddr==0.8.0 +ncclient==0.7.0 # via # -c requirements/static/ci/py3.10/linux.txt + # -r requirements/static/ci/common.in # junos-eznc oauthlib==3.3.1 # via @@ -406,7 +407,7 @@ packaging==24.0 # -c requirements/static/pkg/py3.10/linux.txt # -r requirements/base.txt # ansible-core -paramiko==3.4.0 +paramiko==4.0.0 # via # -c requirements/static/ci/py3.10/linux.txt # -r requirements/static/ci/common.in @@ -461,7 +462,7 @@ pycryptodomex==3.19.1 # -c requirements/static/ci/py3.10/linux.txt # -c requirements/static/pkg/py3.10/linux.txt # -r requirements/crypto.txt -pygit2==1.13.1 +pygit2==1.18.2 # via # -c requirements/static/ci/py3.10/linux.txt # -r requirements/static/ci/linux.in @@ -565,7 +566,7 @@ pyyaml==6.0.1 # kubernetes # responses # yamllint - # yamlordereddictloader + # yamlloader pyzmq==25.1.2 # via # -c requirements/static/ci/py3.10/linux.txt @@ -648,7 +649,6 @@ six==1.16.0 # junos-eznc # kazoo # kubernetes - # ncclient # python-consul # python-dateutil # pyvmomi @@ -791,7 +791,7 @@ yamllint==1.32.0 # via # -c requirements/static/ci/py3.10/linux.txt # -r requirements/static/ci/linux.in -yamlordereddictloader==0.4.0 +yamlloader==1.6.0 # via # -c requirements/static/ci/py3.10/linux.txt # junos-eznc diff --git a/requirements/static/ci/py3.10/linux.txt b/requirements/static/ci/py3.10/linux.txt index 0ccdfbdeadac..02cd6dcaa476 100644 --- a/requirements/static/ci/py3.10/linux.txt +++ b/requirements/static/ci/py3.10/linux.txt @@ -197,6 +197,8 @@ importlib-metadata==8.7.0 # -r requirements/base.txt iniconfig==2.0.0 # via pytest +invoke==2.2.1 + # via paramiko jaraco-collections==4.1.0 # via # -c requirements/static/pkg/py3.10/linux.txt @@ -236,7 +238,7 @@ jsonschema==3.2.0 # via -r requirements/static/ci/common.in junit-xml==1.9 # via -r requirements/static/ci/common.in -junos-eznc==2.6.7 +junos-eznc==2.7.6 # via -r requirements/static/ci/common.in jxmlease==1.0.3 # via -r requirements/static/ci/common.in @@ -252,7 +254,7 @@ looseversion==1.3.0 # via # -c requirements/static/pkg/py3.10/linux.txt # -r requirements/base.txt -lxml==4.9.2 +lxml==6.0.2 # via # junos-eznc # ncclient @@ -266,7 +268,7 @@ markupsafe==2.1.3 # jinja2 # mako # werkzeug -mercurial==6.4.4 +mercurial==7.2 # via -r requirements/static/ci/linux.in mock==5.1.0 # via -r requirements/pytest.txt @@ -291,10 +293,10 @@ multidict==6.7.1 # -c requirements/static/pkg/py3.10/linux.txt # aiohttp # yarl -ncclient==0.6.13 - # via junos-eznc -netaddr==0.8.0 - # via junos-eznc +ncclient==0.7.0 + # via + # -r requirements/static/ci/common.in + # junos-eznc oauthlib==3.3.1 # via requests-oauthlib oscrypto==1.3.0 @@ -305,7 +307,7 @@ packaging==24.0 # -r requirements/base.txt # ansible-core # pytest -paramiko==3.4.0 +paramiko==4.0.0 # via # -r requirements/static/ci/common.in # junos-eznc @@ -353,7 +355,7 @@ pycryptodomex==3.19.1 # -r requirements/crypto.txt pyfakefs==5.3.1 # via -r requirements/pytest.txt -pygit2==1.13.1 +pygit2==1.18.2 # via -r requirements/static/ci/linux.in pyiface==0.0.11 # via -r requirements/static/ci/linux.in @@ -458,7 +460,7 @@ pyyaml==6.0.1 # pytest-salt-factories # responses # yamllint - # yamlordereddictloader + # yamlloader pyzmq==25.1.2 # via # -c requirements/static/pkg/py3.10/linux.txt @@ -515,7 +517,6 @@ six==1.16.0 # junos-eznc # kazoo # kubernetes - # ncclient # python-consul # python-dateutil # pyvmomi @@ -615,7 +616,7 @@ xmltodict==0.13.0 # via moto yamllint==1.32.0 # via -r requirements/static/ci/linux.in -yamlordereddictloader==0.4.0 +yamlloader==1.6.0 # via junos-eznc yarl==1.23.0 # via diff --git a/requirements/static/ci/py3.10/windows.txt b/requirements/static/ci/py3.10/windows.txt index a5dff327b583..3f8689ce0fa0 100644 --- a/requirements/static/ci/py3.10/windows.txt +++ b/requirements/static/ci/py3.10/windows.txt @@ -301,7 +301,7 @@ pycryptodomex==3.19.1 # -r requirements/crypto.txt pyfakefs==5.3.1 # via -r requirements/pytest.txt -pygit2==1.13.1 +pygit2==1.18.2 # via -r requirements/static/ci/windows.in pymssql==2.3.1 # via diff --git a/requirements/static/ci/py3.11/cloud.txt b/requirements/static/ci/py3.11/cloud.txt index 4d932e099d4f..4841c8dfdfc8 100644 --- a/requirements/static/ci/py3.11/cloud.txt +++ b/requirements/static/ci/py3.11/cloud.txt @@ -221,6 +221,10 @@ iniconfig==2.0.0 # via # -c requirements/static/ci/py3.11/linux.txt # pytest +invoke==2.2.1 + # via + # -c requirements/static/ci/py3.11/linux.txt + # paramiko jaraco-collections==4.1.0 # via # -c requirements/static/ci/py3.11/linux.txt @@ -269,7 +273,7 @@ junit-xml==1.9 # via # -c requirements/static/ci/py3.11/linux.txt # -r requirements/static/ci/common.in -junos-eznc==2.6.7 +junos-eznc==2.7.6 # via # -c requirements/static/ci/py3.11/linux.txt # -r requirements/static/ci/common.in @@ -298,7 +302,7 @@ looseversion==1.3.0 # -c requirements/static/ci/py3.11/linux.txt # -c requirements/static/pkg/py3.11/linux.txt # -r requirements/base.txt -lxml==4.9.2 +lxml==6.0.2 # via # -c requirements/static/ci/py3.11/linux.txt # junos-eznc @@ -347,15 +351,13 @@ multidict==6.0.4 # -c requirements/static/pkg/py3.11/linux.txt # aiohttp # yarl -ncclient==0.6.13 +ncclient==0.7.0 # via # -c requirements/static/ci/py3.11/linux.txt + # -r requirements/static/ci/common.in # junos-eznc netaddr==0.8.0 - # via - # -c requirements/static/ci/py3.11/linux.txt - # -r requirements/static/ci/cloud.in - # junos-eznc + # via -r requirements/static/ci/cloud.in oauthlib==3.3.1 # via # -c requirements/static/ci/py3.11/linux.txt @@ -370,7 +372,7 @@ packaging==24.0 # -c requirements/static/pkg/py3.11/linux.txt # -r requirements/base.txt # pytest -paramiko==3.4.0 +paramiko==4.0.0 # via # -c requirements/static/ci/py3.11/linux.txt # -r requirements/static/ci/common.in @@ -570,7 +572,7 @@ pyyaml==6.0.1 # kubernetes # pytest-salt-factories # responses - # yamlordereddictloader + # yamlloader pyzmq==25.1.2 # via # -c requirements/static/ci/py3.11/linux.txt @@ -643,7 +645,6 @@ six==1.16.0 # junos-eznc # kazoo # kubernetes - # ncclient # profitbricks # python-dateutil # pyvmomi @@ -766,7 +767,7 @@ xmltodict==0.13.0 # -c requirements/static/ci/py3.11/linux.txt # moto # pywinrm -yamlordereddictloader==0.4.0 +yamlloader==1.6.0 # via # -c requirements/static/ci/py3.11/linux.txt # junos-eznc diff --git a/requirements/static/ci/py3.11/darwin.txt b/requirements/static/ci/py3.11/darwin.txt index eba17cafb994..0304196fa61f 100644 --- a/requirements/static/ci/py3.11/darwin.txt +++ b/requirements/static/ci/py3.11/darwin.txt @@ -169,6 +169,8 @@ importlib-metadata==8.7.0 # -r requirements/base.txt iniconfig==2.0.0 # via pytest +invoke==2.2.1 + # via paramiko jaraco-collections==4.1.0 # via # -c requirements/static/pkg/py3.11/darwin.txt @@ -207,7 +209,7 @@ jsonschema==3.2.0 # via -r requirements/static/ci/common.in junit-xml==1.9 # via -r requirements/static/ci/common.in -junos-eznc==2.6.7 +junos-eznc==2.7.6 # via -r requirements/static/ci/common.in jxmlease==1.0.3 # via -r requirements/static/ci/common.in @@ -219,7 +221,7 @@ looseversion==1.3.0 # via # -c requirements/static/pkg/py3.11/darwin.txt # -r requirements/base.txt -lxml==4.9.2 +lxml==6.0.2 # via # junos-eznc # ncclient @@ -233,7 +235,7 @@ markupsafe==2.1.3 # jinja2 # mako # werkzeug -mercurial==6.0.1 +mercurial==7.2 # via -r requirements/static/ci/darwin.in mock==5.1.0 # via -r requirements/pytest.txt @@ -258,10 +260,10 @@ multidict==6.0.4 # -c requirements/static/pkg/py3.11/darwin.txt # aiohttp # yarl -ncclient==0.6.13 - # via junos-eznc -netaddr==0.8.0 - # via junos-eznc +ncclient==0.7.0 + # via + # -r requirements/static/ci/common.in + # junos-eznc oauthlib==3.3.1 # via requests-oauthlib oscrypto==1.3.0 @@ -271,7 +273,7 @@ packaging==24.0 # -c requirements/static/pkg/py3.11/darwin.txt # -r requirements/base.txt # pytest -paramiko==3.4.0 +paramiko==4.0.0 # via # junos-eznc # ncclient @@ -318,7 +320,7 @@ pycryptodomex==3.19.1 # -r requirements/crypto.txt pyfakefs==5.3.1 # via -r requirements/pytest.txt -pygit2==1.13.1 +pygit2==1.19.1 # via -r requirements/static/ci/darwin.in pynacl==1.5.0 # via @@ -409,7 +411,7 @@ pyyaml==6.0.1 # pytest-salt-factories # responses # yamllint - # yamlordereddictloader + # yamlloader pyzmq==25.1.2 # via # -c requirements/static/pkg/py3.11/darwin.txt @@ -453,7 +455,6 @@ six==1.16.0 # junit-xml # junos-eznc # kubernetes - # ncclient # python-dateutil # pyvmomi # textfsm @@ -536,7 +537,7 @@ xmltodict==0.13.0 # via moto yamllint==1.32.0 # via -r requirements/static/ci/darwin.in -yamlordereddictloader==0.4.0 +yamlloader==1.6.0 # via junos-eznc yarl==1.20.1 # via diff --git a/requirements/static/ci/py3.11/freebsd.txt b/requirements/static/ci/py3.11/freebsd.txt index df3ee8615662..c55fc0aada74 100644 --- a/requirements/static/ci/py3.11/freebsd.txt +++ b/requirements/static/ci/py3.11/freebsd.txt @@ -179,6 +179,8 @@ importlib-metadata==8.7.0 # -r requirements/static/pkg/freebsd.in iniconfig==2.0.0 # via pytest +invoke==2.2.1 ; sys_platform != 'win32' + # via paramiko jaraco-collections==4.1.0 # via # -c requirements/static/pkg/py3.11/freebsd.txt @@ -217,7 +219,7 @@ jsonschema==3.2.0 # via -r requirements/static/ci/common.in junit-xml==1.9 # via -r requirements/static/ci/common.in -junos-eznc==2.6.7 ; sys_platform != 'win32' +junos-eznc==2.7.6 ; sys_platform != 'win32' # via -r requirements/static/ci/common.in jxmlease==1.0.3 ; sys_platform != 'win32' # via -r requirements/static/ci/common.in @@ -249,7 +251,7 @@ markupsafe==2.1.3 # jinja2 # mako # werkzeug -mercurial==6.0.1 +mercurial==7.2 # via -r requirements/static/ci/freebsd.in mock==5.1.0 # via -r requirements/pytest.txt @@ -274,10 +276,10 @@ multidict==6.0.4 # -c requirements/static/pkg/py3.11/freebsd.txt # aiohttp # yarl -ncclient==0.6.13 ; sys_platform != 'win32' - # via junos-eznc -netaddr==0.8.0 ; sys_platform != 'win32' - # via junos-eznc +ncclient==0.7.0 ; sys_platform != 'win32' + # via + # -r requirements/static/ci/common.in + # junos-eznc oauthlib==3.3.1 # via requests-oauthlib oscrypto==1.3.0 ; sys_platform != 'win32' @@ -287,7 +289,7 @@ packaging==24.0 # -c requirements/static/pkg/py3.11/freebsd.txt # -r requirements/base.txt # pytest -paramiko==3.4.0 ; sys_platform != 'win32' +paramiko==4.0.0 ; sys_platform != 'win32' # via # -r requirements/static/ci/common.in # junos-eznc @@ -449,7 +451,7 @@ pyyaml==6.0.1 # pytest-salt-factories # responses # yamllint - # yamlordereddictloader + # yamlloader pyzmq==27.1.0 # via # -c requirements/static/pkg/py3.11/freebsd.txt @@ -499,7 +501,6 @@ six==1.16.0 # junos-eznc # kazoo # kubernetes - # ncclient # python-dateutil # pyvmomi # textfsm @@ -590,7 +591,7 @@ xmltodict==1.0.4 # moto yamllint==1.32.0 # via -r requirements/static/ci/freebsd.in -yamlordereddictloader==0.4.0 ; sys_platform != 'win32' +yamlloader==1.6.0 ; sys_platform != 'win32' # via junos-eznc yarl==1.20.1 # via diff --git a/requirements/static/ci/py3.11/lint.txt b/requirements/static/ci/py3.11/lint.txt index ae1853d1fb83..c75a90e6c595 100644 --- a/requirements/static/ci/py3.11/lint.txt +++ b/requirements/static/ci/py3.11/lint.txt @@ -246,6 +246,10 @@ importlib-metadata==8.7.0 # -c requirements/static/pkg/py3.11/linux.txt # -r requirements/base.txt # -r requirements/static/pkg/linux.in +invoke==2.2.1 + # via + # -c requirements/static/ci/py3.11/linux.txt + # paramiko isort==4.3.21 # via pylint jaraco-collections==4.1.0 @@ -297,7 +301,7 @@ junit-xml==1.9 # via # -c requirements/static/ci/py3.11/linux.txt # -r requirements/static/ci/common.in -junos-eznc==2.6.7 +junos-eznc==2.7.6 # via # -c requirements/static/ci/py3.11/linux.txt # -r requirements/static/ci/common.in @@ -326,7 +330,7 @@ looseversion==1.3.0 # -c requirements/static/ci/py3.11/linux.txt # -c requirements/static/pkg/py3.11/linux.txt # -r requirements/base.txt -lxml==4.9.2 +lxml==6.0.2 # via # -c requirements/static/ci/py3.11/linux.txt # junos-eznc @@ -346,7 +350,7 @@ markupsafe==2.1.3 # werkzeug mccabe==0.6.1 # via pylint -mercurial==6.0.1 +mercurial==7.2 # via # -c requirements/static/ci/py3.11/linux.txt # -r requirements/static/ci/linux.in @@ -375,13 +379,10 @@ multidict==6.0.4 # -c requirements/static/pkg/py3.11/linux.txt # aiohttp # yarl -ncclient==0.6.13 - # via - # -c requirements/static/ci/py3.11/linux.txt - # junos-eznc -netaddr==0.8.0 +ncclient==0.7.0 # via # -c requirements/static/ci/py3.11/linux.txt + # -r requirements/static/ci/common.in # junos-eznc oauthlib==3.3.1 # via @@ -397,7 +398,7 @@ packaging==24.0 # -c requirements/static/pkg/py3.11/linux.txt # -r requirements/base.txt # ansible-core -paramiko==3.4.0 +paramiko==4.0.0 # via # -c requirements/static/ci/py3.11/linux.txt # -r requirements/static/ci/common.in @@ -452,7 +453,7 @@ pycryptodomex==3.19.1 # -c requirements/static/ci/py3.11/linux.txt # -c requirements/static/pkg/py3.11/linux.txt # -r requirements/crypto.txt -pygit2==1.13.1 +pygit2==1.19.1 # via # -c requirements/static/ci/py3.11/linux.txt # -r requirements/static/ci/linux.in @@ -556,7 +557,7 @@ pyyaml==6.0.1 # kubernetes # responses # yamllint - # yamlordereddictloader + # yamlloader pyzmq==25.1.2 # via # -c requirements/static/ci/py3.11/linux.txt @@ -639,7 +640,6 @@ six==1.16.0 # junos-eznc # kazoo # kubernetes - # ncclient # python-consul # python-dateutil # pyvmomi @@ -774,7 +774,7 @@ yamllint==1.32.0 # via # -c requirements/static/ci/py3.11/linux.txt # -r requirements/static/ci/linux.in -yamlordereddictloader==0.4.0 +yamlloader==1.6.0 # via # -c requirements/static/ci/py3.11/linux.txt # junos-eznc diff --git a/requirements/static/ci/py3.11/linux.txt b/requirements/static/ci/py3.11/linux.txt index 44a1715083db..da59910b6ea8 100644 --- a/requirements/static/ci/py3.11/linux.txt +++ b/requirements/static/ci/py3.11/linux.txt @@ -188,6 +188,8 @@ importlib-metadata==8.7.0 # -r requirements/base.txt iniconfig==2.0.0 # via pytest +invoke==2.2.1 + # via paramiko jaraco-collections==4.1.0 # via # -c requirements/static/pkg/py3.11/linux.txt @@ -227,7 +229,7 @@ jsonschema==3.2.0 # via -r requirements/static/ci/common.in junit-xml==1.9 # via -r requirements/static/ci/common.in -junos-eznc==2.6.7 +junos-eznc==2.7.6 # via -r requirements/static/ci/common.in jxmlease==1.0.3 # via -r requirements/static/ci/common.in @@ -243,7 +245,7 @@ looseversion==1.3.0 # via # -c requirements/static/pkg/py3.11/linux.txt # -r requirements/base.txt -lxml==4.9.2 +lxml==6.0.2 # via # junos-eznc # ncclient @@ -257,7 +259,7 @@ markupsafe==2.1.3 # jinja2 # mako # werkzeug -mercurial==6.0.1 +mercurial==7.2 # via -r requirements/static/ci/linux.in mock==5.1.0 # via -r requirements/pytest.txt @@ -282,10 +284,10 @@ multidict==6.0.4 # -c requirements/static/pkg/py3.11/linux.txt # aiohttp # yarl -ncclient==0.6.13 - # via junos-eznc -netaddr==0.8.0 - # via junos-eznc +ncclient==0.7.0 + # via + # -r requirements/static/ci/common.in + # junos-eznc oauthlib==3.3.1 # via requests-oauthlib oscrypto==1.3.0 @@ -296,7 +298,7 @@ packaging==24.0 # -r requirements/base.txt # ansible-core # pytest -paramiko==3.4.0 +paramiko==4.0.0 # via # -r requirements/static/ci/common.in # junos-eznc @@ -344,7 +346,7 @@ pycryptodomex==3.19.1 # -r requirements/crypto.txt pyfakefs==5.3.1 # via -r requirements/pytest.txt -pygit2==1.13.1 +pygit2==1.19.1 # via -r requirements/static/ci/linux.in pyiface==0.0.11 # via -r requirements/static/ci/linux.in @@ -449,7 +451,7 @@ pyyaml==6.0.1 # pytest-salt-factories # responses # yamllint - # yamlordereddictloader + # yamlloader pyzmq==25.1.2 # via # -c requirements/static/pkg/py3.11/linux.txt @@ -506,7 +508,6 @@ six==1.16.0 # junos-eznc # kazoo # kubernetes - # ncclient # python-consul # python-dateutil # pyvmomi @@ -601,7 +602,7 @@ xmltodict==0.13.0 # via moto yamllint==1.32.0 # via -r requirements/static/ci/linux.in -yamlordereddictloader==0.4.0 +yamlloader==1.6.0 # via junos-eznc yarl==1.20.1 # via diff --git a/requirements/static/ci/py3.11/windows.txt b/requirements/static/ci/py3.11/windows.txt index f2758a58dfe7..bc598e7755bf 100644 --- a/requirements/static/ci/py3.11/windows.txt +++ b/requirements/static/ci/py3.11/windows.txt @@ -294,7 +294,7 @@ pycryptodomex==3.19.1 # -r requirements/crypto.txt pyfakefs==5.3.1 # via -r requirements/pytest.txt -pygit2==1.13.1 +pygit2==1.19.1 # via -r requirements/static/ci/windows.in pymssql==2.3.11 # via diff --git a/requirements/static/ci/py3.12/cloud.txt b/requirements/static/ci/py3.12/cloud.txt index be3a24e84056..92766f035e5c 100644 --- a/requirements/static/ci/py3.12/cloud.txt +++ b/requirements/static/ci/py3.12/cloud.txt @@ -216,6 +216,10 @@ iniconfig==2.0.0 # via # -c requirements/static/ci/py3.12/linux.txt # pytest +invoke==2.2.1 + # via + # -c requirements/static/ci/py3.12/linux.txt + # paramiko jaraco-collections==4.1.0 # via # -c requirements/static/ci/py3.12/linux.txt @@ -264,7 +268,7 @@ junit-xml==1.9 # via # -c requirements/static/ci/py3.12/linux.txt # -r requirements/static/ci/common.in -junos-eznc==2.6.7 +junos-eznc==2.7.6 # via # -c requirements/static/ci/py3.12/linux.txt # -r requirements/static/ci/common.in @@ -293,7 +297,7 @@ looseversion==1.3.0 # -c requirements/static/ci/py3.12/linux.txt # -c requirements/static/pkg/py3.12/linux.txt # -r requirements/base.txt -lxml==4.9.2 +lxml==6.0.2 # via # -c requirements/static/ci/py3.12/linux.txt # junos-eznc @@ -342,15 +346,13 @@ multidict==6.0.4 # -c requirements/static/pkg/py3.12/linux.txt # aiohttp # yarl -ncclient==0.6.13 +ncclient==0.7.0 # via # -c requirements/static/ci/py3.12/linux.txt + # -r requirements/static/ci/common.in # junos-eznc netaddr==0.8.0 - # via - # -c requirements/static/ci/py3.12/linux.txt - # -r requirements/static/ci/cloud.in - # junos-eznc + # via -r requirements/static/ci/cloud.in oauthlib==3.3.1 # via # -c requirements/static/ci/py3.12/linux.txt @@ -365,7 +367,7 @@ packaging==24.0 # -c requirements/static/pkg/py3.12/linux.txt # -r requirements/base.txt # pytest -paramiko==3.4.0 +paramiko==4.0.0 # via # -c requirements/static/ci/py3.12/linux.txt # -r requirements/static/ci/common.in @@ -565,7 +567,7 @@ pyyaml==6.0.1 # kubernetes # pytest-salt-factories # responses - # yamlordereddictloader + # yamlloader pyzmq==25.1.2 # via # -c requirements/static/ci/py3.12/linux.txt @@ -638,7 +640,6 @@ six==1.16.0 # junos-eznc # kazoo # kubernetes - # ncclient # profitbricks # python-dateutil # pyvmomi @@ -761,7 +762,7 @@ xmltodict==0.13.0 # -c requirements/static/ci/py3.12/linux.txt # moto # pywinrm -yamlordereddictloader==0.4.0 +yamlloader==1.6.0 # via # -c requirements/static/ci/py3.12/linux.txt # junos-eznc diff --git a/requirements/static/ci/py3.12/darwin.txt b/requirements/static/ci/py3.12/darwin.txt index 3cee9aa09400..c670932aad72 100644 --- a/requirements/static/ci/py3.12/darwin.txt +++ b/requirements/static/ci/py3.12/darwin.txt @@ -165,6 +165,8 @@ importlib-metadata==8.7.0 # -r requirements/base.txt iniconfig==2.0.0 # via pytest +invoke==2.2.1 + # via paramiko jaraco-collections==4.1.0 # via # -c requirements/static/pkg/py3.12/darwin.txt @@ -203,7 +205,7 @@ jsonschema==3.2.0 # via -r requirements/static/ci/common.in junit-xml==1.9 # via -r requirements/static/ci/common.in -junos-eznc==2.6.7 +junos-eznc==2.7.6 # via -r requirements/static/ci/common.in jxmlease==1.0.3 # via -r requirements/static/ci/common.in @@ -215,7 +217,7 @@ looseversion==1.3.0 # via # -c requirements/static/pkg/py3.12/darwin.txt # -r requirements/base.txt -lxml==4.9.2 +lxml==6.0.2 # via # junos-eznc # ncclient @@ -229,7 +231,7 @@ markupsafe==2.1.3 # jinja2 # mako # werkzeug -mercurial==6.0.1 +mercurial==7.2 # via -r requirements/static/ci/darwin.in mock==5.1.0 # via -r requirements/pytest.txt @@ -254,10 +256,10 @@ multidict==6.0.4 # -c requirements/static/pkg/py3.12/darwin.txt # aiohttp # yarl -ncclient==0.6.13 - # via junos-eznc -netaddr==0.8.0 - # via junos-eznc +ncclient==0.7.0 + # via + # -r requirements/static/ci/common.in + # junos-eznc oauthlib==3.3.1 # via requests-oauthlib oscrypto==1.3.0 @@ -267,7 +269,7 @@ packaging==24.0 # -c requirements/static/pkg/py3.12/darwin.txt # -r requirements/base.txt # pytest -paramiko==3.4.0 +paramiko==4.0.0 # via # junos-eznc # ncclient @@ -314,7 +316,7 @@ pycryptodomex==3.19.1 # -r requirements/crypto.txt pyfakefs==5.3.1 # via -r requirements/pytest.txt -pygit2==1.13.1 +pygit2==1.19.1 # via -r requirements/static/ci/darwin.in pynacl==1.5.0 # via @@ -405,7 +407,7 @@ pyyaml==6.0.1 # pytest-salt-factories # responses # yamllint - # yamlordereddictloader + # yamlloader pyzmq==25.1.2 # via # -c requirements/static/pkg/py3.12/darwin.txt @@ -449,7 +451,6 @@ six==1.16.0 # junit-xml # junos-eznc # kubernetes - # ncclient # python-dateutil # pyvmomi # textfsm @@ -532,7 +533,7 @@ xmltodict==0.13.0 # via moto yamllint==1.32.0 # via -r requirements/static/ci/darwin.in -yamlordereddictloader==0.4.0 +yamlloader==1.6.0 # via junos-eznc yarl==1.20.1 # via diff --git a/requirements/static/ci/py3.12/freebsd.txt b/requirements/static/ci/py3.12/freebsd.txt index 7027a6a620f8..4bb11e30b963 100644 --- a/requirements/static/ci/py3.12/freebsd.txt +++ b/requirements/static/ci/py3.12/freebsd.txt @@ -175,6 +175,8 @@ importlib-metadata==8.7.0 # -r requirements/static/pkg/freebsd.in iniconfig==2.0.0 # via pytest +invoke==2.2.1 ; sys_platform != 'win32' + # via paramiko jaraco-collections==4.1.0 # via # -c requirements/static/pkg/py3.12/freebsd.txt @@ -213,7 +215,7 @@ jsonschema==3.2.0 # via -r requirements/static/ci/common.in junit-xml==1.9 # via -r requirements/static/ci/common.in -junos-eznc==2.6.7 ; sys_platform != 'win32' +junos-eznc==2.7.6 ; sys_platform != 'win32' # via -r requirements/static/ci/common.in jxmlease==1.0.3 ; sys_platform != 'win32' # via -r requirements/static/ci/common.in @@ -245,7 +247,7 @@ markupsafe==2.1.3 # jinja2 # mako # werkzeug -mercurial==6.0.1 +mercurial==7.2 # via -r requirements/static/ci/freebsd.in mock==5.1.0 # via -r requirements/pytest.txt @@ -270,10 +272,10 @@ multidict==6.0.4 # -c requirements/static/pkg/py3.12/freebsd.txt # aiohttp # yarl -ncclient==0.6.13 ; sys_platform != 'win32' - # via junos-eznc -netaddr==0.8.0 ; sys_platform != 'win32' - # via junos-eznc +ncclient==0.7.0 ; sys_platform != 'win32' + # via + # -r requirements/static/ci/common.in + # junos-eznc oauthlib==3.3.1 # via requests-oauthlib oscrypto==1.3.0 ; sys_platform != 'win32' @@ -283,7 +285,7 @@ packaging==24.0 # -c requirements/static/pkg/py3.12/freebsd.txt # -r requirements/base.txt # pytest -paramiko==3.4.0 ; sys_platform != 'win32' +paramiko==4.0.0 ; sys_platform != 'win32' # via # -r requirements/static/ci/common.in # junos-eznc @@ -445,7 +447,7 @@ pyyaml==6.0.1 # pytest-salt-factories # responses # yamllint - # yamlordereddictloader + # yamlloader pyzmq==27.1.0 # via # -c requirements/static/pkg/py3.12/freebsd.txt @@ -495,7 +497,6 @@ six==1.16.0 # junos-eznc # kazoo # kubernetes - # ncclient # python-dateutil # pyvmomi # textfsm @@ -586,7 +587,7 @@ xmltodict==1.0.4 # moto yamllint==1.32.0 # via -r requirements/static/ci/freebsd.in -yamlordereddictloader==0.4.0 ; sys_platform != 'win32' +yamlloader==1.6.0 ; sys_platform != 'win32' # via junos-eznc yarl==1.20.1 # via diff --git a/requirements/static/ci/py3.12/lint.txt b/requirements/static/ci/py3.12/lint.txt index 5ba7e3748136..adf5e4aceff4 100644 --- a/requirements/static/ci/py3.12/lint.txt +++ b/requirements/static/ci/py3.12/lint.txt @@ -241,6 +241,10 @@ importlib-metadata==8.7.0 # -c requirements/static/pkg/py3.12/linux.txt # -r requirements/base.txt # -r requirements/static/pkg/linux.in +invoke==2.2.1 + # via + # -c requirements/static/ci/py3.12/linux.txt + # paramiko isort==4.3.21 # via pylint jaraco-collections==4.1.0 @@ -292,7 +296,7 @@ junit-xml==1.9 # via # -c requirements/static/ci/py3.12/linux.txt # -r requirements/static/ci/common.in -junos-eznc==2.6.7 +junos-eznc==2.7.6 # via # -c requirements/static/ci/py3.12/linux.txt # -r requirements/static/ci/common.in @@ -321,7 +325,7 @@ looseversion==1.3.0 # -c requirements/static/ci/py3.12/linux.txt # -c requirements/static/pkg/py3.12/linux.txt # -r requirements/base.txt -lxml==4.9.2 +lxml==6.0.2 # via # -c requirements/static/ci/py3.12/linux.txt # junos-eznc @@ -341,7 +345,7 @@ markupsafe==2.1.3 # werkzeug mccabe==0.6.1 # via pylint -mercurial==6.0.1 +mercurial==7.2 # via # -c requirements/static/ci/py3.12/linux.txt # -r requirements/static/ci/linux.in @@ -370,13 +374,10 @@ multidict==6.0.4 # -c requirements/static/pkg/py3.12/linux.txt # aiohttp # yarl -ncclient==0.6.13 - # via - # -c requirements/static/ci/py3.12/linux.txt - # junos-eznc -netaddr==0.8.0 +ncclient==0.7.0 # via # -c requirements/static/ci/py3.12/linux.txt + # -r requirements/static/ci/common.in # junos-eznc oauthlib==3.3.1 # via @@ -392,7 +393,7 @@ packaging==24.0 # -c requirements/static/pkg/py3.12/linux.txt # -r requirements/base.txt # ansible-core -paramiko==3.4.0 +paramiko==4.0.0 # via # -c requirements/static/ci/py3.12/linux.txt # -r requirements/static/ci/common.in @@ -447,7 +448,7 @@ pycryptodomex==3.19.1 # -c requirements/static/ci/py3.12/linux.txt # -c requirements/static/pkg/py3.12/linux.txt # -r requirements/crypto.txt -pygit2==1.13.1 +pygit2==1.19.1 # via # -c requirements/static/ci/py3.12/linux.txt # -r requirements/static/ci/linux.in @@ -551,7 +552,7 @@ pyyaml==6.0.1 # kubernetes # responses # yamllint - # yamlordereddictloader + # yamlloader pyzmq==25.1.2 # via # -c requirements/static/ci/py3.12/linux.txt @@ -634,7 +635,6 @@ six==1.16.0 # junos-eznc # kazoo # kubernetes - # ncclient # python-consul # python-dateutil # pyvmomi @@ -769,7 +769,7 @@ yamllint==1.32.0 # via # -c requirements/static/ci/py3.12/linux.txt # -r requirements/static/ci/linux.in -yamlordereddictloader==0.4.0 +yamlloader==1.6.0 # via # -c requirements/static/ci/py3.12/linux.txt # junos-eznc diff --git a/requirements/static/ci/py3.12/linux.txt b/requirements/static/ci/py3.12/linux.txt index 959ff5b4cd2d..e1ae72cc9868 100644 --- a/requirements/static/ci/py3.12/linux.txt +++ b/requirements/static/ci/py3.12/linux.txt @@ -184,6 +184,8 @@ importlib-metadata==8.7.0 # -r requirements/base.txt iniconfig==2.0.0 # via pytest +invoke==2.2.1 + # via paramiko jaraco-collections==4.1.0 # via # -c requirements/static/pkg/py3.12/linux.txt @@ -223,7 +225,7 @@ jsonschema==3.2.0 # via -r requirements/static/ci/common.in junit-xml==1.9 # via -r requirements/static/ci/common.in -junos-eznc==2.6.7 +junos-eznc==2.7.6 # via -r requirements/static/ci/common.in jxmlease==1.0.3 # via -r requirements/static/ci/common.in @@ -239,7 +241,7 @@ looseversion==1.3.0 # via # -c requirements/static/pkg/py3.12/linux.txt # -r requirements/base.txt -lxml==4.9.2 +lxml==6.0.2 # via # junos-eznc # ncclient @@ -253,7 +255,7 @@ markupsafe==2.1.3 # jinja2 # mako # werkzeug -mercurial==6.0.1 +mercurial==7.2 # via -r requirements/static/ci/linux.in mock==5.1.0 # via -r requirements/pytest.txt @@ -278,10 +280,10 @@ multidict==6.0.4 # -c requirements/static/pkg/py3.12/linux.txt # aiohttp # yarl -ncclient==0.6.13 - # via junos-eznc -netaddr==0.8.0 - # via junos-eznc +ncclient==0.7.0 + # via + # -r requirements/static/ci/common.in + # junos-eznc oauthlib==3.3.1 # via requests-oauthlib oscrypto==1.3.0 @@ -292,7 +294,7 @@ packaging==24.0 # -r requirements/base.txt # ansible-core # pytest -paramiko==3.4.0 +paramiko==4.0.0 # via # -r requirements/static/ci/common.in # junos-eznc @@ -340,7 +342,7 @@ pycryptodomex==3.19.1 # -r requirements/crypto.txt pyfakefs==5.3.1 # via -r requirements/pytest.txt -pygit2==1.13.1 +pygit2==1.19.1 # via -r requirements/static/ci/linux.in pyiface==0.0.11 # via -r requirements/static/ci/linux.in @@ -445,7 +447,7 @@ pyyaml==6.0.1 # pytest-salt-factories # responses # yamllint - # yamlordereddictloader + # yamlloader pyzmq==25.1.2 # via # -c requirements/static/pkg/py3.12/linux.txt @@ -502,7 +504,6 @@ six==1.16.0 # junos-eznc # kazoo # kubernetes - # ncclient # python-consul # python-dateutil # pyvmomi @@ -597,7 +598,7 @@ xmltodict==0.13.0 # via moto yamllint==1.32.0 # via -r requirements/static/ci/linux.in -yamlordereddictloader==0.4.0 +yamlloader==1.6.0 # via junos-eznc yarl==1.20.1 # via diff --git a/requirements/static/ci/py3.12/windows.txt b/requirements/static/ci/py3.12/windows.txt index 7f26bea8d655..4010bb0b7afc 100644 --- a/requirements/static/ci/py3.12/windows.txt +++ b/requirements/static/ci/py3.12/windows.txt @@ -288,7 +288,7 @@ pycryptodomex==3.19.1 # -r requirements/crypto.txt pyfakefs==5.3.1 # via -r requirements/pytest.txt -pygit2==1.13.1 +pygit2==1.19.1 # via -r requirements/static/ci/windows.in pymssql==2.3.11 # via diff --git a/requirements/static/ci/py3.13/cloud.txt b/requirements/static/ci/py3.13/cloud.txt index 82c91f3eded9..1866af498808 100644 --- a/requirements/static/ci/py3.13/cloud.txt +++ b/requirements/static/ci/py3.13/cloud.txt @@ -299,7 +299,7 @@ looseversion==1.3.0 # -c requirements/static/ci/py3.13/linux.txt # -c requirements/static/pkg/py3.13/linux.txt # -r requirements/base.txt -lxml==5.3.0 +lxml==6.0.2 # via # -c requirements/static/ci/py3.13/linux.txt # junos-eznc @@ -351,6 +351,7 @@ multidict==6.1.0 ncclient==0.6.16 # via # -c requirements/static/ci/py3.13/linux.txt + # -r requirements/static/ci/common.in # junos-eznc netaddr==1.3.0 # via -r requirements/static/ci/cloud.in diff --git a/requirements/static/ci/py3.13/darwin.txt b/requirements/static/ci/py3.13/darwin.txt index 0f3373c372f5..17d40fb7af4e 100644 --- a/requirements/static/ci/py3.13/darwin.txt +++ b/requirements/static/ci/py3.13/darwin.txt @@ -219,7 +219,7 @@ looseversion==1.3.0 # via # -c requirements/static/pkg/py3.13/darwin.txt # -r requirements/base.txt -lxml==5.3.0 +lxml==6.0.2 # via # junos-eznc # ncclient @@ -259,7 +259,9 @@ multidict==6.1.0 # aiohttp # yarl ncclient==0.6.16 - # via junos-eznc + # via + # -r requirements/static/ci/common.in + # junos-eznc oauthlib==3.3.1 # via requests-oauthlib oscrypto==1.3.0 diff --git a/requirements/static/ci/py3.13/freebsd.txt b/requirements/static/ci/py3.13/freebsd.txt index 49768aee3036..c7603e3bf04a 100644 --- a/requirements/static/ci/py3.13/freebsd.txt +++ b/requirements/static/ci/py3.13/freebsd.txt @@ -270,7 +270,9 @@ multidict==6.1.0 # aiohttp # yarl ncclient==0.6.16 ; sys_platform != 'win32' - # via junos-eznc + # via + # -r requirements/static/ci/common.in + # junos-eznc oauthlib==3.3.1 # via requests-oauthlib oscrypto==1.3.0 ; sys_platform != 'win32' diff --git a/requirements/static/ci/py3.13/lint.txt b/requirements/static/ci/py3.13/lint.txt index ebef2a98f3ba..123006a764b5 100644 --- a/requirements/static/ci/py3.13/lint.txt +++ b/requirements/static/ci/py3.13/lint.txt @@ -326,7 +326,7 @@ looseversion==1.3.0 # -c requirements/static/ci/py3.13/linux.txt # -c requirements/static/pkg/py3.13/linux.txt # -r requirements/base.txt -lxml==5.3.0 +lxml==6.0.2 # via # -c requirements/static/ci/py3.13/linux.txt # junos-eznc @@ -378,6 +378,7 @@ multidict==6.1.0 ncclient==0.6.16 # via # -c requirements/static/ci/py3.13/linux.txt + # -r requirements/static/ci/common.in # junos-eznc oauthlib==3.3.1 # via diff --git a/requirements/static/ci/py3.13/linux.txt b/requirements/static/ci/py3.13/linux.txt index 0ddf095dbec0..e73715bced33 100644 --- a/requirements/static/ci/py3.13/linux.txt +++ b/requirements/static/ci/py3.13/linux.txt @@ -243,7 +243,7 @@ looseversion==1.3.0 # via # -c requirements/static/pkg/py3.13/linux.txt # -r requirements/base.txt -lxml==5.3.0 +lxml==6.0.2 # via # junos-eznc # ncclient @@ -283,7 +283,9 @@ multidict==6.1.0 # aiohttp # yarl ncclient==0.6.16 - # via junos-eznc + # via + # -r requirements/static/ci/common.in + # junos-eznc oauthlib==3.3.1 # via requests-oauthlib oscrypto==1.3.0 diff --git a/requirements/static/ci/py3.9/cloud.txt b/requirements/static/ci/py3.9/cloud.txt index 95df1c126dcb..34dc4ac61e9e 100644 --- a/requirements/static/ci/py3.9/cloud.txt +++ b/requirements/static/ci/py3.9/cloud.txt @@ -241,6 +241,10 @@ iniconfig==2.0.0 # via # -c requirements/static/ci/py3.9/linux.txt # pytest +invoke==2.2.1 + # via + # -c requirements/static/ci/py3.9/linux.txt + # paramiko jaraco-collections==4.1.0 # via # -c requirements/static/ci/py3.9/linux.txt @@ -290,7 +294,7 @@ junit-xml==1.9 # via # -c requirements/static/ci/py3.9/linux.txt # -r requirements/static/ci/common.in -junos-eznc==2.6.7 +junos-eznc==2.7.6 # via # -c requirements/static/ci/py3.9/linux.txt # -r requirements/static/ci/common.in @@ -320,7 +324,7 @@ looseversion==1.3.0 # -c requirements/static/ci/py3.9/linux.txt # -c requirements/static/pkg/py3.9/linux.txt # -r requirements/base.txt -lxml==4.9.2 +lxml==6.0.2 # via # -c requirements/static/ci/py3.9/linux.txt # junos-eznc @@ -374,16 +378,16 @@ napalm==4.1.0 # via # -c requirements/static/ci/py3.9/linux.txt # -r requirements/static/ci/common.in -ncclient==0.6.13 +ncclient==0.7.0 # via # -c requirements/static/ci/py3.9/linux.txt + # -r requirements/static/ci/common.in # junos-eznc # napalm netaddr==0.8.0 # via # -c requirements/static/ci/py3.9/linux.txt # -r requirements/static/ci/cloud.in - # junos-eznc # napalm # pyeapi netmiko==4.2.0 @@ -412,7 +416,7 @@ packaging==24.0 # -c requirements/static/pkg/py3.9/linux.txt # -r requirements/base.txt # pytest -paramiko==3.4.0 +paramiko==4.0.0 # via # -c requirements/static/ci/py3.9/linux.txt # -r requirements/static/ci/common.in @@ -628,7 +632,7 @@ pyyaml==6.0.1 # netmiko # pytest-salt-factories # responses - # yamlordereddictloader + # yamlloader pyzmq==25.1.2 # via # -c requirements/static/ci/py3.9/linux.txt @@ -708,7 +712,6 @@ six==1.16.0 # junos-eznc # kazoo # kubernetes - # ncclient # profitbricks # python-dateutil # pyvmomi @@ -849,7 +852,7 @@ xmltodict==0.13.0 # -c requirements/static/ci/py3.9/linux.txt # moto # pywinrm -yamlordereddictloader==0.4.0 +yamlloader==1.6.0 # via # -c requirements/static/ci/py3.9/linux.txt # junos-eznc diff --git a/requirements/static/ci/py3.9/darwin.txt b/requirements/static/ci/py3.9/darwin.txt index d3d99fe91343..2c1416eb1752 100644 --- a/requirements/static/ci/py3.9/darwin.txt +++ b/requirements/static/ci/py3.9/darwin.txt @@ -183,6 +183,8 @@ importlib-metadata==8.7.0 # -r requirements/base.txt iniconfig==2.0.0 # via pytest +invoke==2.2.1 + # via paramiko jaraco-collections==4.1.0 # via # -c requirements/static/pkg/py3.9/darwin.txt @@ -222,7 +224,7 @@ jsonschema==3.2.0 # via -r requirements/static/ci/common.in junit-xml==1.9 # via -r requirements/static/ci/common.in -junos-eznc==2.6.7 +junos-eznc==2.7.6 # via # -r requirements/static/ci/common.in # napalm @@ -236,7 +238,7 @@ looseversion==1.3.0 # via # -c requirements/static/pkg/py3.9/darwin.txt # -r requirements/base.txt -lxml==4.9.2 +lxml==6.0.2 # via # junos-eznc # napalm @@ -251,7 +253,7 @@ markupsafe==2.1.3 # jinja2 # mako # werkzeug -mercurial==6.4.4 +mercurial==7.2 # via -r requirements/static/ci/darwin.in mock==5.1.0 # via -r requirements/pytest.txt @@ -278,13 +280,13 @@ multidict==6.7.1 # yarl napalm==4.1.0 # via -r requirements/static/ci/common.in -ncclient==0.6.13 +ncclient==0.7.0 # via + # -r requirements/static/ci/common.in # junos-eznc # napalm netaddr==0.8.0 # via - # junos-eznc # napalm # pyeapi netmiko==4.2.0 @@ -302,7 +304,7 @@ packaging==24.0 # -c requirements/static/pkg/py3.9/darwin.txt # -r requirements/base.txt # pytest -paramiko==3.4.0 +paramiko==4.0.0 # via # junos-eznc # napalm @@ -359,7 +361,7 @@ pyeapi==1.0.0 # via napalm pyfakefs==5.3.1 # via -r requirements/pytest.txt -pygit2==1.13.1 +pygit2==1.15.1 # via -r requirements/static/ci/darwin.in pynacl==1.5.0 # via @@ -454,7 +456,7 @@ pyyaml==6.0.1 # pytest-salt-factories # responses # yamllint - # yamlordereddictloader + # yamlloader pyzmq==25.1.2 # via # -c requirements/static/pkg/py3.9/darwin.txt @@ -504,7 +506,6 @@ six==1.16.0 # junit-xml # junos-eznc # kubernetes - # ncclient # python-dateutil # pyvmomi # textfsm @@ -605,7 +606,7 @@ xmltodict==0.13.0 # via moto yamllint==1.32.0 # via -r requirements/static/ci/darwin.in -yamlordereddictloader==0.4.0 +yamlloader==1.6.0 # via junos-eznc yarl==1.22.0 # via diff --git a/requirements/static/ci/py3.9/freebsd.txt b/requirements/static/ci/py3.9/freebsd.txt index 21fc718a61f1..f3b18125409d 100644 --- a/requirements/static/ci/py3.9/freebsd.txt +++ b/requirements/static/ci/py3.9/freebsd.txt @@ -210,6 +210,8 @@ importlib-metadata==8.7.0 # -r requirements/static/pkg/freebsd.in iniconfig==2.0.0 # via pytest +invoke==2.2.1 ; sys_platform != 'win32' + # via paramiko jaraco-collections==4.1.0 # via # -c requirements/static/pkg/py3.9/freebsd.txt @@ -249,7 +251,7 @@ jsonschema==3.2.0 # via -r requirements/static/ci/common.in junit-xml==1.9 # via -r requirements/static/ci/common.in -junos-eznc==2.6.7 ; sys_platform != 'win32' +junos-eznc==2.7.6 ; sys_platform != 'win32' # via # -r requirements/static/ci/common.in # napalm @@ -284,7 +286,7 @@ markupsafe==2.1.3 # jinja2 # mako # werkzeug -mercurial==6.4.4 +mercurial==7.2 # via -r requirements/static/ci/freebsd.in mock==5.1.0 # via -r requirements/pytest.txt @@ -311,13 +313,13 @@ multidict==6.7.1 # yarl napalm==4.1.0 ; python_full_version < '3.10' and sys_platform != 'win32' # via -r requirements/static/ci/common.in -ncclient==0.6.13 ; sys_platform != 'win32' +ncclient==0.7.0 ; sys_platform != 'win32' # via + # -r requirements/static/ci/common.in # junos-eznc # napalm -netaddr==0.8.0 ; sys_platform != 'win32' +netaddr==0.8.0 ; python_full_version < '3.10' and sys_platform != 'win32' # via - # junos-eznc # napalm # pyeapi netmiko==4.2.0 ; python_full_version < '3.10' and sys_platform != 'win32' @@ -335,7 +337,7 @@ packaging==24.0 # -c requirements/static/pkg/py3.9/freebsd.txt # -r requirements/base.txt # pytest -paramiko==3.4.0 ; sys_platform != 'win32' +paramiko==4.0.0 ; sys_platform != 'win32' # via # -r requirements/static/ci/common.in # junos-eznc @@ -525,7 +527,7 @@ pyyaml==6.0.1 # pytest-salt-factories # responses # yamllint - # yamlordereddictloader + # yamlloader pyzmq==27.1.0 # via # -c requirements/static/pkg/py3.9/freebsd.txt @@ -594,7 +596,6 @@ six==1.16.0 # junos-eznc # kazoo # kubernetes - # ncclient # python-dateutil # pyvmomi # textfsm @@ -713,7 +714,7 @@ xmltodict==1.0.4 # moto yamllint==1.32.0 # via -r requirements/static/ci/freebsd.in -yamlordereddictloader==0.4.0 ; sys_platform != 'win32' +yamlloader==1.6.0 ; sys_platform != 'win32' # via junos-eznc yarl==1.22.0 ; python_full_version < '3.10' # via diff --git a/requirements/static/ci/py3.9/lint.txt b/requirements/static/ci/py3.9/lint.txt index c334d6d0c5c5..fdede2f74014 100644 --- a/requirements/static/ci/py3.9/lint.txt +++ b/requirements/static/ci/py3.9/lint.txt @@ -269,6 +269,10 @@ importlib-resources==5.0.7 # via # -c requirements/static/ci/py3.9/linux.txt # ansible-core +invoke==2.2.1 + # via + # -c requirements/static/ci/py3.9/linux.txt + # paramiko isort==4.3.21 # via pylint jaraco-collections==4.1.0 @@ -321,7 +325,7 @@ junit-xml==1.9 # via # -c requirements/static/ci/py3.9/linux.txt # -r requirements/static/ci/common.in -junos-eznc==2.6.7 +junos-eznc==2.7.6 # via # -c requirements/static/ci/py3.9/linux.txt # -r requirements/static/ci/common.in @@ -351,7 +355,7 @@ looseversion==1.3.0 # -c requirements/static/ci/py3.9/linux.txt # -c requirements/static/pkg/py3.9/linux.txt # -r requirements/base.txt -lxml==4.9.2 +lxml==6.0.2 # via # -c requirements/static/ci/py3.9/linux.txt # junos-eznc @@ -372,7 +376,7 @@ markupsafe==2.1.3 # werkzeug mccabe==0.6.1 # via pylint -mercurial==6.4.4 +mercurial==7.2 # via # -c requirements/static/ci/py3.9/linux.txt # -r requirements/static/ci/linux.in @@ -405,15 +409,15 @@ napalm==4.1.0 # via # -c requirements/static/ci/py3.9/linux.txt # -r requirements/static/ci/common.in -ncclient==0.6.13 +ncclient==0.7.0 # via # -c requirements/static/ci/py3.9/linux.txt + # -r requirements/static/ci/common.in # junos-eznc # napalm netaddr==0.8.0 # via # -c requirements/static/ci/py3.9/linux.txt - # junos-eznc # napalm # pyeapi netmiko==4.2.0 @@ -442,7 +446,7 @@ packaging==24.0 # -c requirements/static/pkg/py3.9/linux.txt # -r requirements/base.txt # ansible-core -paramiko==3.4.0 +paramiko==4.0.0 # via # -c requirements/static/ci/py3.9/linux.txt # -r requirements/static/ci/common.in @@ -510,7 +514,7 @@ pyeapi==1.0.0 # via # -c requirements/static/ci/py3.9/linux.txt # napalm -pygit2==1.13.1 +pygit2==1.15.1 # via # -c requirements/static/ci/py3.9/linux.txt # -r requirements/static/ci/linux.in @@ -617,7 +621,7 @@ pyyaml==6.0.1 # netmiko # responses # yamllint - # yamlordereddictloader + # yamlloader pyzmq==25.1.2 # via # -c requirements/static/ci/py3.9/linux.txt @@ -707,7 +711,6 @@ six==1.16.0 # junos-eznc # kazoo # kubernetes - # ncclient # python-consul # python-dateutil # pyvmomi @@ -861,7 +864,7 @@ yamllint==1.32.0 # via # -c requirements/static/ci/py3.9/linux.txt # -r requirements/static/ci/linux.in -yamlordereddictloader==0.4.0 +yamlloader==1.6.0 # via # -c requirements/static/ci/py3.9/linux.txt # junos-eznc diff --git a/requirements/static/ci/py3.9/linux.txt b/requirements/static/ci/py3.9/linux.txt index 66150ac50104..11efe67724b2 100644 --- a/requirements/static/ci/py3.9/linux.txt +++ b/requirements/static/ci/py3.9/linux.txt @@ -206,6 +206,8 @@ importlib-resources==5.0.7 # via ansible-core iniconfig==2.0.0 # via pytest +invoke==2.2.1 + # via paramiko jaraco-collections==4.1.0 # via # -c requirements/static/pkg/py3.9/linux.txt @@ -246,7 +248,7 @@ jsonschema==3.2.0 # via -r requirements/static/ci/common.in junit-xml==1.9 # via -r requirements/static/ci/common.in -junos-eznc==2.6.7 +junos-eznc==2.7.6 # via # -r requirements/static/ci/common.in # napalm @@ -264,7 +266,7 @@ looseversion==1.3.0 # via # -c requirements/static/pkg/py3.9/linux.txt # -r requirements/base.txt -lxml==4.9.2 +lxml==6.0.2 # via # junos-eznc # napalm @@ -279,7 +281,7 @@ markupsafe==2.1.3 # jinja2 # mako # werkzeug -mercurial==6.4.4 +mercurial==7.2 # via -r requirements/static/ci/linux.in mock==5.1.0 # via -r requirements/pytest.txt @@ -306,13 +308,13 @@ multidict==6.7.1 # yarl napalm==4.1.0 # via -r requirements/static/ci/common.in -ncclient==0.6.13 +ncclient==0.7.0 # via + # -r requirements/static/ci/common.in # junos-eznc # napalm netaddr==0.8.0 # via - # junos-eznc # napalm # pyeapi netmiko==4.2.0 @@ -331,7 +333,7 @@ packaging==24.0 # -r requirements/base.txt # ansible-core # pytest -paramiko==3.4.0 +paramiko==4.0.0 # via # -r requirements/static/ci/common.in # junos-eznc @@ -389,7 +391,7 @@ pyeapi==1.0.0 # via napalm pyfakefs==5.3.1 # via -r requirements/pytest.txt -pygit2==1.13.1 +pygit2==1.15.1 # via -r requirements/static/ci/linux.in pyiface==0.0.11 # via -r requirements/static/ci/linux.in @@ -498,7 +500,7 @@ pyyaml==6.0.1 # pytest-salt-factories # responses # yamllint - # yamlordereddictloader + # yamlloader pyzmq==25.1.2 # via # -c requirements/static/pkg/py3.9/linux.txt @@ -561,7 +563,6 @@ six==1.16.0 # junos-eznc # kazoo # kubernetes - # ncclient # python-consul # python-dateutil # pyvmomi @@ -672,7 +673,7 @@ xmltodict==0.13.0 # via moto yamllint==1.32.0 # via -r requirements/static/ci/linux.in -yamlordereddictloader==0.4.0 +yamlloader==1.6.0 # via junos-eznc yarl==1.22.0 # via diff --git a/requirements/static/ci/py3.9/windows.txt b/requirements/static/ci/py3.9/windows.txt index 682caf74a84b..f0da35ae46fc 100644 --- a/requirements/static/ci/py3.9/windows.txt +++ b/requirements/static/ci/py3.9/windows.txt @@ -309,7 +309,7 @@ pycryptodomex==3.19.1 # -r requirements/crypto.txt pyfakefs==5.3.1 # via -r requirements/pytest.txt -pygit2==1.13.1 +pygit2==1.15.1 # via -r requirements/static/ci/windows.in pymssql==2.3.1 # via diff --git a/requirements/static/ci/windows.in b/requirements/static/ci/windows.in index 23eb32effcce..e9f317cb00b8 100644 --- a/requirements/static/ci/windows.in +++ b/requirements/static/ci/windows.in @@ -1,6 +1,6 @@ dmidecode patch -pygit2>=1.10.1 +pygit2>=1.14.0 sed pywinrm>=0.4.1 yamllint diff --git a/salt/beacons/status.py b/salt/beacons/status.py index 8c1210e7dbc7..cfb17715f3da 100644 --- a/salt/beacons/status.py +++ b/salt/beacons/status.py @@ -88,12 +88,12 @@ """ -import datetime import logging import salt.exceptions import salt.utils.beacons import salt.utils.platform +import salt.utils.timeutil log = logging.getLogger(__name__) @@ -118,7 +118,7 @@ def beacon(config): Return status for requested information """ log.debug(config) - ctime = datetime.datetime.utcnow().isoformat() + ctime = salt.utils.timeutil.utcnow().isoformat() whitelist = [] config = salt.utils.beacons.remove_hidden_options(config, whitelist) diff --git a/salt/client/ssh/__init__.py b/salt/client/ssh/__init__.py index d666dd2cc1ab..3fc6fe1ba623 100644 --- a/salt/client/ssh/__init__.py +++ b/salt/client/ssh/__init__.py @@ -46,6 +46,7 @@ import salt.utils.relenv import salt.utils.stringutils import salt.utils.thin +import salt.utils.timeutil import salt.utils.url import salt.utils.verify from salt._logging import LOG_LEVELS @@ -512,7 +513,7 @@ def _update_roster(self): '# Automatically added by "{s_user}" at {s_time}\n{hostname}:\n' " host: {hostname}\n user: {user}\n passwd: {passwd}\n".format( s_user=getpass.getuser(), - s_time=datetime.datetime.utcnow().isoformat(), + s_time=salt.utils.timeutil.utcnow().isoformat(), hostname=self.opts.get("tgt", ""), user=self.opts.get("ssh_user", ""), passwd=self.opts.get("ssh_passwd", ""), diff --git a/salt/modules/aptpkg.py b/salt/modules/aptpkg.py index d24eec77c0b1..4f5b8a59b2be 100644 --- a/salt/modules/aptpkg.py +++ b/salt/modules/aptpkg.py @@ -9,7 +9,6 @@ """ import copy -import datetime import fnmatch import logging import os @@ -33,6 +32,7 @@ import salt.utils.pkg.deb import salt.utils.stringutils import salt.utils.systemd +import salt.utils.timeutil import salt.utils.versions import salt.utils.yaml from salt.exceptions import ( @@ -3280,7 +3280,7 @@ def list_downloaded(root=None, **kwargs): "path": package_path, "size": os.path.getsize(package_path), "creation_date_time_t": pkg_timestamp, - "creation_date_time": datetime.datetime.utcfromtimestamp( + "creation_date_time": salt.utils.timeutil.utcfromtimestamp( pkg_timestamp ).isoformat(), } diff --git a/salt/modules/dpkg_lowpkg.py b/salt/modules/dpkg_lowpkg.py index 3a4058621630..322d651db4da 100644 --- a/salt/modules/dpkg_lowpkg.py +++ b/salt/modules/dpkg_lowpkg.py @@ -2,7 +2,6 @@ Support for DEB packages """ -import datetime import logging import os import re @@ -12,6 +11,7 @@ import salt.utils.files import salt.utils.path import salt.utils.stringutils +import salt.utils.timeutil from salt.exceptions import CommandExecutionError, SaltInvocationError log = logging.getLogger(__name__) @@ -338,7 +338,7 @@ def _get_pkg_install_time(pkg): location = f"/var/lib/dpkg/info/{pkg}.list" if os.path.exists(location): iso_time = ( - datetime.datetime.utcfromtimestamp( + salt.utils.timeutil.utcfromtimestamp( int(os.path.getmtime(location)) ).isoformat() + "Z" diff --git a/salt/modules/rpm_lowpkg.py b/salt/modules/rpm_lowpkg.py index cfd0c650bfd0..a41c7f4d2a0d 100644 --- a/salt/modules/rpm_lowpkg.py +++ b/salt/modules/rpm_lowpkg.py @@ -2,7 +2,6 @@ Support for rpm """ -import datetime import logging import os import re @@ -11,6 +10,7 @@ import salt.utils.itertools import salt.utils.path import salt.utils.pkg.rpm +import salt.utils.timeutil from salt.exceptions import CommandExecutionError, SaltInvocationError from salt.utils.versions import LooseVersion @@ -634,7 +634,8 @@ def info(*packages, **kwargs): if key in ["build_date", "install_date"]: try: pkg_data[key] = ( - datetime.datetime.utcfromtimestamp(int(value)).isoformat() + "Z" + salt.utils.timeutil.utcfromtimestamp(int(value)).isoformat() + + "Z" ) except ValueError: log.warning('Could not convert "%s" into Unix time', value) diff --git a/salt/modules/status.py b/salt/modules/status.py index 09f4d0cca491..2e5d4fba4749 100644 --- a/salt/modules/status.py +++ b/salt/modules/status.py @@ -22,6 +22,7 @@ import salt.utils.path import salt.utils.platform import salt.utils.stringutils +import salt.utils.timeutil from salt.exceptions import CommandExecutionError log = logging.getLogger(__file__) @@ -255,8 +256,8 @@ def uptime(): return __salt__["cmd.run"]("uptime") # Setup datetime and timedelta objects - boot_time = datetime.datetime.utcfromtimestamp(curr_seconds - seconds) - curr_time = datetime.datetime.utcfromtimestamp(curr_seconds) + boot_time = salt.utils.timeutil.utcfromtimestamp(curr_seconds - seconds) + curr_time = salt.utils.timeutil.utcfromtimestamp(curr_seconds) up_time = curr_time - boot_time # Construct return information diff --git a/salt/modules/system.py b/salt/modules/system.py index 059c4c26ba8e..1899742f2ba2 100644 --- a/salt/modules/system.py +++ b/salt/modules/system.py @@ -20,6 +20,7 @@ import salt.utils.files import salt.utils.path import salt.utils.platform +import salt.utils.timeutil from salt.exceptions import CommandExecutionError, SaltInvocationError from salt.utils.decorators import depends @@ -258,7 +259,7 @@ def _get_offset_time(utc_offset): if utc_offset is not None: minutes = _offset_to_min(utc_offset) offset = timedelta(minutes=minutes) - offset_time = datetime.utcnow() + offset + offset_time = salt.utils.timeutil.utcnow() + offset offset_time = offset_time.replace(tzinfo=_FixedOffset(minutes)) else: offset_time = datetime.now() diff --git a/salt/modules/tls.py b/salt/modules/tls.py index 85e599cccf36..3d20897fe37e 100644 --- a/salt/modules/tls.py +++ b/salt/modules/tls.py @@ -110,6 +110,7 @@ import salt.utils.data import salt.utils.files import salt.utils.stringutils +import salt.utils.timeutil from salt.exceptions import CommandExecutionError from salt.utils.versions import Version @@ -365,7 +366,7 @@ def maybe_fix_ssl_version(ca_name, cacert_path=None, ca_filename=None): try: days = ( datetime.strptime(cert.get_notAfter(), "%Y%m%d%H%M%SZ") - - datetime.utcnow() + - salt.utils.timeutil.utcnow() ).days except (ValueError, TypeError): days = 365 @@ -593,8 +594,10 @@ def validate(cert, ca_name, crl_file): builder = x509.CertificateRevocationListBuilder() builder = builder.issuer_name(ca_x509.subject) - builder = builder.last_update(datetime.utcnow()) - builder = builder.next_update(datetime.utcnow() + timedelta(days=36500)) + builder = builder.last_update(salt.utils.timeutil.utcnow()) + builder = builder.next_update( + salt.utils.timeutil.utcnow() + timedelta(days=36500) + ) # Load existing revocations from index file if it exists index_file = f"{ca_dir}/index.txt" @@ -845,7 +848,7 @@ def create_ca( err, ) bck = "{}.unloadable.{}".format( - ca_keyp, datetime.utcnow().strftime("%Y%m%d%H%M%S") + ca_keyp, salt.utils.timeutil.utcnow().strftime("%Y%m%d%H%M%S") ) log.info("Saving unloadable CA ssl key in %s", bck) os.rename(ca_keyp, bck) @@ -903,7 +906,9 @@ def create_ca( keycontent = OpenSSL.crypto.dump_privatekey(OpenSSL.crypto.FILETYPE_PEM, key) write_key = True if os.path.exists(ca_keyp): - bck = "{}.{}".format(ca_keyp, datetime.utcnow().strftime("%Y%m%d%H%M%S")) + bck = "{}.{}".format( + ca_keyp, salt.utils.timeutil.utcnow().strftime("%Y%m%d%H%M%S") + ) with salt.utils.files.fopen(ca_keyp) as fic: old_key = salt.utils.stringutils.to_unicode(fic.read()).strip() if old_key.strip() == keycontent.strip(): @@ -1905,8 +1910,10 @@ def create_empty_crl( builder = x509.CertificateRevocationListBuilder() builder = builder.issuer_name(ca_x509.subject) - builder = builder.last_update(datetime.utcnow()) - builder = builder.next_update(datetime.utcnow() + timedelta(days=36500)) + builder = builder.last_update(salt.utils.timeutil.utcnow()) + builder = builder.next_update( + salt.utils.timeutil.utcnow() + timedelta(days=36500) + ) # Mapping digest strings to cryptography hashes hash_algo = getattr(hashes, digest.upper(), hashes.SHA256)() @@ -2021,7 +2028,7 @@ def revoke_cert( ) index_r_data = "R\t{}\t{}\t{}".format( expire_date, - _four_digit_year_to_two_digit(datetime.utcnow()), + _four_digit_year_to_two_digit(salt.utils.timeutil.utcnow()), index_serial_subject, ) @@ -2063,8 +2070,10 @@ def revoke_cert( builder = x509.CertificateRevocationListBuilder() builder = builder.issuer_name(ca_x509.subject) - builder = builder.last_update(datetime.utcnow()) - builder = builder.next_update(datetime.utcnow() + timedelta(days=36500)) + builder = builder.last_update(salt.utils.timeutil.utcnow()) + builder = builder.next_update( + salt.utils.timeutil.utcnow() + timedelta(days=36500) + ) with salt.utils.files.fopen(index_file) as fp_: for line in fp_: diff --git a/salt/modules/virtualenv_mod.py b/salt/modules/virtualenv_mod.py index cd52435e6f51..d3abd597d857 100644 --- a/salt/modules/virtualenv_mod.py +++ b/salt/modules/virtualenv_mod.py @@ -382,8 +382,14 @@ def get_distribution_path(venv, distribution): ret = __salt__["cmd.exec_code_all"]( bin_path, - "import pkg_resources; " - "print(pkg_resources.get_distribution('{}').location)".format(distribution), + "try:\n" + " import importlib.metadata, pathlib\n" + " print(str(pathlib.Path(importlib.metadata.distribution('{dist}').locate_file('.')).resolve()))\n" + "except Exception:\n" + " import pkg_resources\n" + " print(pkg_resources.get_distribution('{dist}').location)\n".format( + dist=distribution + ), ) if ret["retcode"] != 0: diff --git a/salt/modules/vsphere.py b/salt/modules/vsphere.py index ff62e1ca3c65..c2eb7535326e 100644 --- a/salt/modules/vsphere.py +++ b/salt/modules/vsphere.py @@ -181,7 +181,6 @@ 6500 """ -import datetime import logging import sys from functools import wraps @@ -191,6 +190,7 @@ import salt.utils.http import salt.utils.path import salt.utils.pbm +import salt.utils.timeutil import salt.utils.vmware import salt.utils.vsan from salt.config.schemas.esxcluster import ( @@ -3877,7 +3877,7 @@ def update_host_datetime( host_ref = _get_host_ref(service_instance, host, host_name=host_name) date_time_manager = _get_date_time_mgr(host_ref) try: - date_time_manager.UpdateDateTime(datetime.datetime.utcnow()) + date_time_manager.UpdateDateTime(salt.utils.timeutil.utcnow()) except vim.fault.HostConfigFault as err: msg = "'vsphere.update_date_time' failed for host {}: {}".format( host_name, err diff --git a/salt/modules/win_timezone.py b/salt/modules/win_timezone.py index 85807a7503d0..da00c1d01c21 100644 --- a/salt/modules/win_timezone.py +++ b/salt/modules/win_timezone.py @@ -3,8 +3,8 @@ """ import logging -from datetime import datetime +import salt.utils.timeutil from salt.exceptions import CommandExecutionError try: @@ -242,7 +242,7 @@ def get_offset(): """ # http://craigglennie.com/programming/python/2013/07/21/working-with-timezones-using-Python-and-pytz-localize-vs-normalize/ tz_object = pytz.timezone(get_zone()) - utc_time = pytz.utc.localize(datetime.utcnow()) + utc_time = pytz.utc.localize(salt.utils.timeutil.utcnow()) loc_time = utc_time.astimezone(tz_object) norm_time = tz_object.normalize(loc_time) return norm_time.strftime("%z") @@ -262,7 +262,7 @@ def get_zonecode(): salt '*' timezone.get_zonecode """ tz_object = pytz.timezone(get_zone()) - loc_time = tz_object.localize(datetime.utcnow()) + loc_time = tz_object.localize(salt.utils.timeutil.utcnow()) return loc_time.tzname() diff --git a/salt/modules/x509.py b/salt/modules/x509.py index 0e68d38116be..baf8c2a65880 100644 --- a/salt/modules/x509.py +++ b/salt/modules/x509.py @@ -37,6 +37,7 @@ import salt.utils.path import salt.utils.platform import salt.utils.stringutils +import salt.utils.timeutil import salt.utils.versions from salt.state import STATE_INTERNAL_KEYWORDS as _STATE_INTERNAL_KEYWORDS @@ -1963,7 +1964,7 @@ def expired(certificate): ret["path"] = certificate cert = _get_certificate_obj(certificate) - _now = datetime.datetime.utcnow() + _now = salt.utils.timeutil.utcnow() _expiration_date = cert.get_not_after().get_datetime() ret["cn"] = _parse_subject(cert.get_subject())["CN"] @@ -2007,7 +2008,7 @@ def will_expire(certificate, days): cert = _get_certificate_obj(certificate) - _check_time = datetime.datetime.utcnow() + datetime.timedelta(days=days) + _check_time = salt.utils.timeutil.utcnow() + datetime.timedelta(days=days) _expiration_date = cert.get_not_after().get_datetime() ret["cn"] = _parse_subject(cert.get_subject())["CN"] diff --git a/salt/runners/winrepo.py b/salt/runners/winrepo.py index 0da7d57d8062..94ab49478922 100644 --- a/salt/runners/winrepo.py +++ b/salt/runners/winrepo.py @@ -224,7 +224,9 @@ def update_git_repos(opts=None, clean=False, masterless=False): # one level down. key = next(iter(result)) result = result[key] - winrepo_result[result["name"]] = result["result"] + # Store the target path (gittarget) not the boolean result, + # to match the behavior of the non-legacy gitfs code + winrepo_result[result["name"]] = gittarget ret.update(winrepo_result) else: # New winrepo code utilizing salt.utils.gitfs diff --git a/salt/spm/pkgdb/sqlite3.py b/salt/spm/pkgdb/sqlite3.py index c6c0fb1384f1..83a127cbf1b5 100644 --- a/salt/spm/pkgdb/sqlite3.py +++ b/salt/spm/pkgdb/sqlite3.py @@ -4,12 +4,13 @@ .. versionadded:: 2015.8.0 """ -import datetime import logging import os import sqlite3 from sqlite3 import OperationalError +import salt.utils.timeutil + # Get logging started log = logging.getLogger(__name__) @@ -166,7 +167,7 @@ def register_pkg(name, formula_def, conn=None): name, formula_def["version"], formula_def["release"], - datetime.datetime.utcnow().strftime("%a, %d %b %Y %H:%M:%S GMT"), + salt.utils.timeutil.utcnow().strftime("%a, %d %b %Y %H:%M:%S GMT"), formula_def.get("os", None), formula_def.get("os_family", None), formula_def.get("dependencies", None), diff --git a/salt/utils/aws.py b/salt/utils/aws.py index 615aee19040c..086329edafcf 100644 --- a/salt/utils/aws.py +++ b/salt/utils/aws.py @@ -18,12 +18,12 @@ import time import urllib.parse import xml.etree.ElementTree as ET -from datetime import datetime import requests import salt.config import salt.utils.hashutils +import salt.utils.timeutil import salt.utils.xmlutil as xml log = logging.getLogger(__name__) @@ -121,7 +121,7 @@ def creds(provider): ## if needed if provider["id"] == IROLE_CODE or provider["key"] == IROLE_CODE: # Check to see if we have cache credentials that are still good - if not __Expiration__ or __Expiration__ < datetime.utcnow().strftime( + if not __Expiration__ or __Expiration__ < salt.utils.timeutil.utcnow().strftime( "%Y-%m-%dT%H:%M:%SZ" ): # We don't have any cached credentials, or they are expired, get them @@ -164,7 +164,7 @@ def sig2(method, endpoint, params, provider, aws_api_version): http://docs.aws.amazon.com/general/latest/gr/signature-version-2.html """ - timenow = datetime.utcnow() + timenow = salt.utils.timeutil.utcnow() timestamp = timenow.strftime("%Y-%m-%dT%H:%M:%SZ") # Retrieve access credentials from meta-data, or use provided @@ -201,7 +201,7 @@ def assumed_creds(prov_dict, role_arn, location=None): valid_session_name_re = re.compile("[^a-z0-9A-Z+=,.@-]") # current time in epoch seconds - now = time.mktime(datetime.utcnow().timetuple()) + now = time.mktime(salt.utils.timeutil.utcnow().timetuple()) for key, creds in copy.deepcopy(__AssumeCache__).items(): if (creds["Expiration"] - now) <= 120: @@ -281,7 +281,7 @@ def sig4( http://docs.aws.amazon.com/general/latest/gr/sigv4-signed-request-examples.html http://docs.aws.amazon.com/general/latest/gr/sigv4-create-canonical-request.html """ - timenow = datetime.utcnow() + timenow = salt.utils.timeutil.utcnow() # Retrieve access credentials from meta-data, or use provided if role_arn is None: diff --git a/salt/utils/event.py b/salt/utils/event.py index 60257d56f850..44bb01d2e3a3 100644 --- a/salt/utils/event.py +++ b/salt/utils/event.py @@ -75,6 +75,7 @@ import salt.utils.platform import salt.utils.process import salt.utils.stringutils +import salt.utils.timeutil import salt.utils.zeromq from salt.exceptions import SaltDeserializationError, SaltInvocationError from salt.utils.versions import warn_until @@ -782,7 +783,7 @@ async def fire_event_async(self, data, tag, cb=None, timeout=1000): if not self.connect_pull(timeout=timeout_s): return False - data["_stamp"] = datetime.datetime.utcnow().isoformat() + data["_stamp"] = salt.utils.timeutil.utcnow().isoformat() event = self.pack(tag, data, max_size=self.opts["max_event_size"]) msg = salt.utils.stringutils.to_bytes(event, "utf-8") self.pusher.publish(msg) @@ -817,7 +818,7 @@ def fire_event(self, data, tag, timeout=1000): if not self.connect_pull(timeout=timeout_s): return False - data["_stamp"] = datetime.datetime.utcnow().isoformat() + data["_stamp"] = salt.utils.timeutil.utcnow().isoformat() event = self.pack(tag, data, max_size=self.opts["max_event_size"]) msg = salt.utils.stringutils.to_bytes(event, "utf-8") if self._run_io_loop_sync: diff --git a/salt/utils/timeutil.py b/salt/utils/timeutil.py index 0985ec504be6..462faff45f42 100644 --- a/salt/utils/timeutil.py +++ b/salt/utils/timeutil.py @@ -5,14 +5,48 @@ # Import Python import logging import re +import sys import time -from datetime import datetime, timedelta +from datetime import datetime, timedelta, timezone # Import Salt modules log = logging.getLogger(__name__) +def utcnow(): + """ + Return current UTC time as a naive datetime object. + + In Python 3.12+, datetime.utcnow() is deprecated in favor of + datetime.now(timezone.utc). This function provides compatibility + by returning a naive datetime (without timezone info) to match + the behavior of the deprecated datetime.utcnow(). + """ + if sys.version_info >= (3, 12): + return datetime.now(timezone.utc).replace(tzinfo=None) + else: + return datetime.utcnow() + + +def utcfromtimestamp(timestamp): + """ + Return a naive datetime from a POSIX timestamp. + + In Python 3.12+, datetime.utcfromtimestamp() is deprecated in favor of + datetime.fromtimestamp(timestamp, tz=timezone.utc). This function provides + compatibility by returning a naive datetime (without timezone info) to match + the behavior of the deprecated datetime.utcfromtimestamp(). + + Args: + timestamp: POSIX timestamp (seconds since epoch) + """ + if sys.version_info >= (3, 12): + return datetime.fromtimestamp(timestamp, tz=timezone.utc).replace(tzinfo=None) + else: + return datetime.utcfromtimestamp(timestamp) + + def get_timestamp_at(time_in=None, time_at=None): """ Computes the timestamp for a future event that may occur in ``time_in`` time @@ -34,7 +68,7 @@ def get_timestamp_at(time_in=None, time_at=None): minutes = 0 hours, minutes = int(hours), int(minutes) dt = timedelta(hours=hours, minutes=minutes) - time_now = datetime.utcnow() + time_now = utcnow() time_at = time_now + dt return time.mktime(time_at.timetuple()) elif time_at: diff --git a/salt/utils/versions.py b/salt/utils/versions.py index d64d2d66f3fd..9f535c91bd86 100644 --- a/salt/utils/versions.py +++ b/salt/utils/versions.py @@ -244,7 +244,7 @@ def warn_until_date( # Attribute the warning to the calling function, not to warn_until_date() stacklevel = 2 - today = _current_date or datetime.datetime.utcnow().date() + today = _current_date or datetime.datetime.now(datetime.timezone.utc).date() if today >= date: caller = inspect.getframeinfo(sys._getframe(stacklevel - 1)) deprecated_message = ( diff --git a/tests/integration/modules/test_saltcheck.py b/tests/integration/modules/test_saltcheck.py index 914b046fdd71..05dbb392e126 100644 --- a/tests/integration/modules/test_saltcheck.py +++ b/tests/integration/modules/test_saltcheck.py @@ -25,7 +25,7 @@ def test_saltcheck_run(self): "args": ["This works!"], } ret = self.run_function("saltcheck.run_test", test=saltcheck_test) - self.assertDictContainsSubset({"status": "Pass"}, ret) + self.assertEqual(ret.get("status"), "Pass") @pytest.mark.slow_test def test_saltcheck_state(self): @@ -34,10 +34,10 @@ def test_saltcheck_state(self): """ saltcheck_test = "validate-saltcheck" ret = self.run_function("saltcheck.run_state_tests", [saltcheck_test]) - self.assertDictContainsSubset( - {"status": "Pass"}, ret[0]["validate-saltcheck"]["echo_test_hello"] + self.assertEqual( + ret[0]["validate-saltcheck"]["echo_test_hello"].get("status"), "Pass" ) - self.assertDictContainsSubset({"Failed": 0}, ret[1]["TEST RESULTS"]) + self.assertEqual(ret[1]["TEST RESULTS"].get("Failed"), 0) @pytest.mark.slow_test def test_topfile_validation(self): @@ -61,11 +61,11 @@ def test_saltcheck_checkall(self): ret = self.run_function( "saltcheck.run_state_tests", [saltcheck_test], check_all=True ) - self.assertDictContainsSubset( - {"status": "Pass"}, ret[0]["validate-saltcheck"]["echo_test_hello"] + self.assertEqual( + ret[0]["validate-saltcheck"]["echo_test_hello"].get("status"), "Pass" ) - self.assertDictContainsSubset( - {"status": "Pass"}, ret[0]["validate-saltcheck"]["check_all_validate"] + self.assertEqual( + ret[0]["validate-saltcheck"]["check_all_validate"].get("status"), "Pass" ) @pytest.mark.slow_test @@ -82,11 +82,12 @@ def test_saltcheck_checkall_saltenv(self): saltenv="prod", check_all=True, ) - self.assertDictContainsSubset( - {"status": "Pass"}, ret[0]["validate-saltcheck"]["echo_test_prod_env"] + self.assertEqual( + ret[0]["validate-saltcheck"]["echo_test_prod_env"].get("status"), "Pass" ) - self.assertDictContainsSubset( - {"status": "Pass"}, ret[0]["validate-saltcheck"]["check_all_validate_prod"] + self.assertEqual( + ret[0]["validate-saltcheck"]["check_all_validate_prod"].get("status"), + "Pass", ) @pytest.mark.slow_test @@ -98,6 +99,6 @@ def test_saltcheck_saltenv(self): ret = self.run_function( "saltcheck.run_state_tests", [saltcheck_test], saltenv="prod" ) - self.assertDictContainsSubset( - {"status": "Pass"}, ret[0]["validate-saltcheck"]["echo_test_prod_env"] + self.assertEqual( + ret[0]["validate-saltcheck"]["echo_test_prod_env"].get("status"), "Pass" ) diff --git a/tests/pytests/functional/modules/test_pip.py b/tests/pytests/functional/modules/test_pip.py index 0537e0ca68d0..e7b621aefdd0 100644 --- a/tests/pytests/functional/modules/test_pip.py +++ b/tests/pytests/functional/modules/test_pip.py @@ -74,8 +74,20 @@ def _pip_successful_install( reason="'pip==9.0.3' is not available on Py >= 3.10", ), ), - "pip<20.0", - "pip<21.0", + pytest.param( + "pip<20.0", + marks=pytest.mark.skipif( + sys.version_info >= (3, 12), + reason="pip < 20.0 is not compatible with Python >= 3.12", + ), + ), + pytest.param( + "pip<21.0", + marks=pytest.mark.skipif( + sys.version_info >= (3, 12), + reason="pip < 21.0 is not compatible with Python >= 3.12", + ), + ), "pip>=21.0", ), ) @@ -92,17 +104,33 @@ def test_list_available_packages(pip, pip_version, tmp_path): @pytest.mark.parametrize( "pip_version", ( - "pip==9.0.3", - "pip<20.0", - "pip<21.0", + pytest.param( + "pip==9.0.3", + marks=pytest.mark.skipif( + sys.version_info >= (3, 10), + reason="'pip==9.0.3' is not available on Py >= 3.10", + ), + ), + pytest.param( + "pip<20.0", + marks=pytest.mark.skipif( + sys.version_info >= (3, 12), + reason="pip < 20.0 is not compatible with Python >= 3.12", + ), + ), + pytest.param( + "pip<21.0", + marks=pytest.mark.skipif( + sys.version_info >= (3, 12), + reason="pip < 21.0 is not compatible with Python >= 3.12", + ), + ), "pip>=21.0", ), ) def test_list_available_packages_with_index_url(pip, pip_version, tmp_path): if sys.version_info < (3, 6) and pip_version == "pip>=21.0": pytest.skip(f"{pip_version} is not available on Py3.5") - if sys.version_info >= (3, 10) and pip_version == "pip==9.0.3": - pytest.skip(f"{pip_version} is not available on Py3.10") with VirtualEnv(venv_dir=tmp_path, pip_requirement=pip_version) as virtualenv: virtualenv.install("-U", pip_version) package_name = "pep8" diff --git a/tests/pytests/functional/modules/test_pkg.py b/tests/pytests/functional/modules/test_pkg.py index ccbe5452b007..575efafbc317 100644 --- a/tests/pytests/functional/modules/test_pkg.py +++ b/tests/pytests/functional/modules/test_pkg.py @@ -218,9 +218,9 @@ def test_owner(modules, grains): test finding the package owning a file """ binary = "/bin/ls" - if grains["os"] == "Ubuntu" and grains["osmajorrelease"] >= 24: + if grains["os"] == "Ubuntu" and grains.get("osmajorrelease", 0) >= 24: binary = "/usr/bin/ls" - if grains["os"] == "Debian" and grains["osmajorrelease"] >= 13: + if grains["os"] == "Debian" and grains.get("osmajorrelease", 0) >= 13: binary = "/usr/bin/ls" ret = modules.pkg.owner(binary) @@ -235,9 +235,9 @@ def test_which(modules, grains): test finding the package owning a file """ binary = "/bin/ls" - if grains["os"] == "Ubuntu" and grains["osmajorrelease"] >= 24: + if grains["os"] == "Ubuntu" and grains.get("osmajorrelease", 0) >= 24: binary = "/usr/bin/ls" - elif grains["os"] == "Debian" and grains["osmajorrelease"] >= 13: + elif grains["os"] == "Debian" and grains.get("osmajorrelease", 0) >= 13: binary = "/usr/bin/ls" ret = modules.pkg.which(binary) assert len(ret) != 0 diff --git a/tests/pytests/functional/modules/test_system.py b/tests/pytests/functional/modules/test_system.py index a3d74462d78f..87facd825358 100644 --- a/tests/pytests/functional/modules/test_system.py +++ b/tests/pytests/functional/modules/test_system.py @@ -10,6 +10,7 @@ import pytest import salt.utils.files +import salt.utils.timeutil from salt.exceptions import CommandExecutionError pytestmark = [ @@ -68,7 +69,7 @@ def fmt_str(): @pytest.fixture(scope="function") def setup_teardown_vars(file, service, system): _systemd_timesyncd_available_ = None - _orig_time = datetime.datetime.utcnow() + _orig_time = salt.utils.timeutil.utcnow() if os.path.isfile("/etc/machine-info"): with salt.utils.files.fopen("/etc/machine-info", "r") as mach_info: @@ -218,7 +219,7 @@ def test_get_system_date_time_utc(setup_teardown_vars, system, fmt_str): """ Test we are able to get the correct time with utc """ - t1 = datetime.datetime.utcnow() + t1 = salt.utils.timeutil.utcnow() res = system.get_system_date_time("+0000") t2 = datetime.datetime.strptime(res, fmt_str) msg = f"Difference in times is too large. Now: {t1} Fake: {t2}" @@ -254,10 +255,10 @@ def test_set_system_date_time_utc(setup_teardown_vars, system, hwclock_has_compa Test changing the system clock. We are only able to set it up to a resolution of a second so this test may appear to run in negative time. """ - cmp_time = datetime.datetime.utcnow() - datetime.timedelta(days=7) + cmp_time = salt.utils.timeutil.utcnow() - datetime.timedelta(days=7) result = _set_time(system, cmp_time, offset="+0000") - time_now = datetime.datetime.utcnow() + time_now = salt.utils.timeutil.utcnow() msg = "Difference in times is too large. Now: {} Fake: {}".format( time_now, cmp_time @@ -277,11 +278,11 @@ def test_set_system_date_time_utcoffset_east( Test changing the system clock. We are only able to set it up to a resolution of a second so this test may appear to run in negative time. """ - cmp_time = datetime.datetime.utcnow() - datetime.timedelta(days=7) + cmp_time = salt.utils.timeutil.utcnow() - datetime.timedelta(days=7) # 25200 seconds = 7 hours time_to_set = cmp_time - datetime.timedelta(seconds=25200) result = _set_time(system, time_to_set, offset="-0700") - time_now = datetime.datetime.utcnow() + time_now = salt.utils.timeutil.utcnow() msg = "Difference in times is too large. Now: {} Fake: {}".format( time_now, cmp_time @@ -301,11 +302,11 @@ def test_set_system_date_time_utcoffset_west( Test changing the system clock. We are only able to set it up to a resolution of a second so this test may appear to run in negative time. """ - cmp_time = datetime.datetime.utcnow() - datetime.timedelta(days=7) + cmp_time = salt.utils.timeutil.utcnow() - datetime.timedelta(days=7) # 7200 seconds = 2 hours time_to_set = cmp_time + datetime.timedelta(seconds=7200) result = _set_time(system, time_to_set, offset="+0200") - time_now = datetime.datetime.utcnow() + time_now = salt.utils.timeutil.utcnow() msg = "Difference in times is too large. Now: {} Fake: {}".format( time_now, cmp_time diff --git a/tests/pytests/functional/transport/zeromq/test_request_client.py b/tests/pytests/functional/transport/zeromq/test_request_client.py index e165a09cbec1..368db91c3ee3 100644 --- a/tests/pytests/functional/transport/zeromq/test_request_client.py +++ b/tests/pytests/functional/transport/zeromq/test_request_client.py @@ -151,6 +151,8 @@ def test_request_client_send_recv_loop_closed(minion_opts, port, caplog): serve_socket.bind(minion_opts["master_uri"]) minion_opts["master_uri"] = f"tcp://127.0.0.1:{port}" request_client = salt.transport.zeromq.RequestClient(minion_opts, io_loop) + # Initialize the socket before trying to access it + request_client._init_socket() def poll(*args, **kwargs): """ diff --git a/tests/pytests/integration/states/test_pip_state.py b/tests/pytests/integration/states/test_pip_state.py index ad7f52582760..34e32bdd410f 100644 --- a/tests/pytests/integration/states/test_pip_state.py +++ b/tests/pytests/integration/states/test_pip_state.py @@ -1,5 +1,6 @@ import os import subprocess +import sys import pytest @@ -35,11 +36,29 @@ def _extra_requirements(): "pip_contraint", [ # Latest pip 18 - "<19.0", + pytest.param( + "<19.0", + marks=pytest.mark.skipif( + sys.version_info >= (3, 12), + reason="pip < 19.0 is not compatible with Python >= 3.12", + ), + ), # Latest pip 19 - "<20.0", + pytest.param( + "<20.0", + marks=pytest.mark.skipif( + sys.version_info >= (3, 12), + reason="pip < 20.0 is not compatible with Python >= 3.12", + ), + ), # Latest pip 20 - "<21.0", + pytest.param( + "<21.0", + marks=pytest.mark.skipif( + sys.version_info >= (3, 12), + reason="pip < 21.0 is not compatible with Python >= 3.12", + ), + ), # Latest pip None, ], diff --git a/tests/pytests/unit/states/file/test_tidied.py b/tests/pytests/unit/states/file/test_tidied.py index 0139cd3ac76b..e1d9123cdb4c 100644 --- a/tests/pytests/unit/states/file/test_tidied.py +++ b/tests/pytests/unit/states/file/test_tidied.py @@ -8,6 +8,7 @@ import salt.utils.files import salt.utils.json import salt.utils.platform +import salt.utils.timeutil import salt.utils.win_functions import salt.utils.yaml from tests.support.mock import MagicMock, PropertyMock, patch @@ -30,7 +31,7 @@ def test__tidied(): (os.path.join("test", "test2"), ["test3"], ["file2"]), ("test", ["test1", "test2"], ["file3"]), ] - today_delta = datetime.today() - datetime.utcfromtimestamp(0) + today_delta = datetime.today() - salt.utils.timeutil.utcfromtimestamp(0) remove = MagicMock(name="file.remove") mystat = MagicMock() @@ -140,7 +141,7 @@ def test_tidied_with_exclude(): (os.path.join("test", "test2"), ["test3"], ["file2"]), ("test", ["test1", "test2"], ["file3"]), ] - today_delta = datetime.today() - datetime.utcfromtimestamp(0) + today_delta = datetime.today() - salt.utils.timeutil.utcfromtimestamp(0) mystat = MagicMock() mystat.st_atime = today_delta.total_seconds() @@ -272,7 +273,7 @@ def test_tidied_with_full_path_exclude(): (os.path.join("test", "test2"), ["test3"], ["file2"]), ("test", ["test1", "test2"], ["file3"]), ] - today_delta = datetime.today() - datetime.utcfromtimestamp(0) + today_delta = datetime.today() - salt.utils.timeutil.utcfromtimestamp(0) mystat = MagicMock() mystat.st_atime = today_delta.total_seconds() @@ -411,7 +412,9 @@ def test_tidied_age_size_args_AND_operator_age_not_size(): (os.path.join("test", "test2"), ["test3"], ["file2"]), ("test", ["test1", "test2"], ["file3"]), ] - today_delta = (datetime.today() - timedelta(days=14)) - datetime.utcfromtimestamp(0) + today_delta = ( + datetime.today() - timedelta(days=14) + ) - salt.utils.timeutil.utcfromtimestamp(0) remove = MagicMock(name="file.remove") with patch("os.walk", return_value=walker), patch( "os.path.islink", return_value=False @@ -452,7 +455,9 @@ def test_tidied_age_size_args_AND_operator_age_not_size_age_only(): (os.path.join("test", "test2"), ["test3"], ["file2"]), ("test", ["test1", "test2"], ["file3"]), ] - today_delta = (datetime.today() - timedelta(days=14)) - datetime.utcfromtimestamp(0) + today_delta = ( + datetime.today() - timedelta(days=14) + ) - salt.utils.timeutil.utcfromtimestamp(0) mystat = MagicMock() mystat.st_atime = today_delta.total_seconds() @@ -516,7 +521,9 @@ def test_tidied_age_size_args_AND_operator_size_not_age(): (os.path.join("test", "test2"), ["test3"], ["file2"]), ("test", ["test1", "test2"], ["file3"]), ] - today_delta = (datetime.today() - timedelta(days=14)) - datetime.utcfromtimestamp(0) + today_delta = ( + datetime.today() - timedelta(days=14) + ) - salt.utils.timeutil.utcfromtimestamp(0) remove = MagicMock(name="file.remove") with patch("os.walk", return_value=walker), patch( "os.path.islink", return_value=False @@ -557,7 +564,9 @@ def test_tidied_age_size_args_AND_operator_size_not_age_size_only(): (os.path.join("test", "test2"), ["test3"], ["file2"]), ("test", ["test1", "test2"], ["file3"]), ] - today_delta = (datetime.today() - timedelta(days=14)) - datetime.utcfromtimestamp(0) + today_delta = ( + datetime.today() - timedelta(days=14) + ) - salt.utils.timeutil.utcfromtimestamp(0) mystat = MagicMock() mystat.st_atime = today_delta.total_seconds() @@ -621,7 +630,9 @@ def test_tidied_age_size_args_AND_operator_size_and_age(): (os.path.join("test", "test2"), ["test3"], ["file2"]), ("test", ["test1", "test2"], ["file3"]), ] - today_delta = (datetime.today() - timedelta(days=14)) - datetime.utcfromtimestamp(0) + today_delta = ( + datetime.today() - timedelta(days=14) + ) - salt.utils.timeutil.utcfromtimestamp(0) mystat = MagicMock() mystat.st_atime = today_delta.total_seconds() @@ -713,7 +724,9 @@ def test_tidied_rmlinks(): (os.path.join("test", "test2"), ["test3"], ["link1"]), ("test", ["test1", "test2"], ["file3"]), ] - today_delta = (datetime.today() - timedelta(days=14)) - datetime.utcfromtimestamp(0) + today_delta = ( + datetime.today() - timedelta(days=14) + ) - salt.utils.timeutil.utcfromtimestamp(0) mystat = MagicMock() mystat.st_atime = today_delta.total_seconds() diff --git a/tests/pytests/unit/test_fileserver.py b/tests/pytests/unit/test_fileserver.py index 49be3967dc40..9ed0ee564fa4 100644 --- a/tests/pytests/unit/test_fileserver.py +++ b/tests/pytests/unit/test_fileserver.py @@ -4,6 +4,7 @@ import salt.fileserver import salt.utils.files +import salt.utils.timeutil def test_diff_with_diffent_keys(): @@ -52,7 +53,7 @@ def test_future_file_list_cache_file_ignored(tmp_path): _f.write(b"\x80") # Set modification time to file list cache file to 1 year in the future - now = datetime.datetime.utcnow() + now = salt.utils.timeutil.utcnow() future = now + datetime.timedelta(days=365) mod_time = time.mktime(future.timetuple()) os.utime(os.path.join(back_cachedir, "base.p"), (mod_time, mod_time)) diff --git a/tests/pytests/unit/utils/test_aws.py b/tests/pytests/unit/utils/test_aws.py index a7ab2710a427..d265c542d43f 100644 --- a/tests/pytests/unit/utils/test_aws.py +++ b/tests/pytests/unit/utils/test_aws.py @@ -8,13 +8,14 @@ import io import os import time -from datetime import datetime, timedelta +from datetime import timedelta import pytest import requests from pytest_timeout import DEFAULT_METHOD import salt.utils.aws as aws +import salt.utils.timeutil from tests.support.helpers import patched_environ from tests.support.mock import MagicMock, patch @@ -79,11 +80,11 @@ def handle_get_mock(_, **args): def test_assumed_creds_not_updating_dictionary_while_iterating(): mock_cache = { "expired": { - "Expiration": time.mktime(datetime.utcnow().timetuple()), + "Expiration": time.mktime(salt.utils.timeutil.utcnow().timetuple()), }, "not_expired_1": { "Expiration": time.mktime( - (datetime.utcnow() + timedelta(days=1)).timetuple() + (salt.utils.timeutil.utcnow() + timedelta(days=1)).timetuple() ), "AccessKeyId": "mock_AccessKeyId", "SecretAccessKey": "mock_SecretAccessKey", @@ -91,7 +92,7 @@ def test_assumed_creds_not_updating_dictionary_while_iterating(): }, "not_expired_2": { "Expiration": time.mktime( - (datetime.utcnow() + timedelta(seconds=300)).timetuple() + (salt.utils.timeutil.utcnow() + timedelta(seconds=300)).timetuple() ), }, } @@ -104,11 +105,11 @@ def test_assumed_creds_not_updating_dictionary_while_iterating(): def test_assumed_creds_deletes_expired_key(): mock_cache = { "expired": { - "Expiration": time.mktime(datetime.utcnow().timetuple()), + "Expiration": time.mktime(salt.utils.timeutil.utcnow().timetuple()), }, "not_expired_1": { "Expiration": time.mktime( - (datetime.utcnow() + timedelta(days=1)).timetuple() + (salt.utils.timeutil.utcnow() + timedelta(days=1)).timetuple() ), "AccessKeyId": "mock_AccessKeyId", "SecretAccessKey": "mock_SecretAccessKey", @@ -116,7 +117,7 @@ def test_assumed_creds_deletes_expired_key(): }, "not_expired_2": { "Expiration": time.mktime( - (datetime.utcnow() + timedelta(seconds=300)).timetuple() + (salt.utils.timeutil.utcnow() + timedelta(seconds=300)).timetuple() ), }, } @@ -153,7 +154,7 @@ def test_creds_with_role_arn_should_always_call_assumed_creds(): access_key_id = "mock_AccessKeyId" secret_access_key = "mock_SecretAccessKey" token = "mock_Token" - expiration = (datetime.utcnow() + timedelta(seconds=900)).strftime( + expiration = (salt.utils.timeutil.utcnow() + timedelta(seconds=900)).strftime( "%Y-%m-%dT%H:%M:%SZ" ) diff --git a/tests/pytests/unit/utils/test_thin.py b/tests/pytests/unit/utils/test_thin.py index b63811e7b8b2..c9cf7f0f01f7 100644 --- a/tests/pytests/unit/utils/test_thin.py +++ b/tests/pytests/unit/utils/test_thin.py @@ -513,7 +513,7 @@ def test_get_tops(thin_ctx): "urllib3", "charset_normalizer", ] - if sys.version_info < (3, 13): + if salt.utils.thin.backports is not None: base_tops.append("backports") if salt.utils.thin.has_immutables: base_tops.extend(["immutables"]) @@ -627,7 +627,7 @@ def test_get_tops_extra_mods(thin_ctx): "foo", "bar.py", ] - if sys.version_info < (3, 13): + if salt.utils.thin.backports is not None: base_tops.append("backports") if salt.utils.thin.has_immutables: base_tops.extend(["immutables"]) @@ -749,7 +749,7 @@ def test_get_tops_so_mods(thin_ctx): "foo.so", "bar.so", ] - if sys.version_info < (3, 13): + if salt.utils.thin.backports is not None: base_tops.append("backports") if salt.utils.thin.has_immutables: base_tops.extend(["immutables"]) diff --git a/tests/support/helpers.py b/tests/support/helpers.py index 92b016391bf1..ecfd914e5489 100644 --- a/tests/support/helpers.py +++ b/tests/support/helpers.py @@ -1612,8 +1612,12 @@ class VirtualEnv: @pip_requirement.default def _default_pip_requirement(self): - if os.environ.get("ONEDIR_TESTRUN", "0") == "1": - return "pip>=22.3.1,<23.0" + if os.environ.get("ONEDIR_TESTRUN", "0") == "1" or sys.version_info >= (3, 12): + # pip < 23.2 vendors pkg_resources that uses pkgutil.ImpImporter, + # which was removed in Python 3.12. Require 23.2+ to avoid + # AttributeError: module 'pkgutil' has no attribute 'ImpImporter'. + # Also, pip < 23.0 tries to import distutils which was removed in Python 3.12. + return "pip>=23.2" return "pip>=20.2.4,<21.2" @setuptools_requirement.default diff --git a/tests/support/pytest/transport_ssl.py b/tests/support/pytest/transport_ssl.py index 6189e24482fd..968e3e2fdb80 100644 --- a/tests/support/pytest/transport_ssl.py +++ b/tests/support/pytest/transport_ssl.py @@ -11,6 +11,7 @@ import pytest import salt.utils.files +import salt.utils.timeutil try: from cryptography import x509 @@ -56,8 +57,8 @@ def _generate_ca_certificate(private_key, common_name="Test CA"): .issuer_name(issuer) .public_key(private_key.public_key()) .serial_number(x509.random_serial_number()) - .not_valid_before(datetime.datetime.utcnow()) - .not_valid_after(datetime.datetime.utcnow() + datetime.timedelta(days=365)) + .not_valid_before(salt.utils.timeutil.utcnow()) + .not_valid_after(salt.utils.timeutil.utcnow() + datetime.timedelta(days=365)) .add_extension( x509.BasicConstraints(ca=True, path_length=0), critical=True, @@ -116,8 +117,8 @@ def _generate_certificate( .issuer_name(ca_cert.subject) .public_key(private_key.public_key()) .serial_number(x509.random_serial_number()) - .not_valid_before(datetime.datetime.utcnow()) - .not_valid_after(datetime.datetime.utcnow() + datetime.timedelta(days=365)) + .not_valid_before(salt.utils.timeutil.utcnow()) + .not_valid_after(salt.utils.timeutil.utcnow() + datetime.timedelta(days=365)) .add_extension( x509.BasicConstraints(ca=False, path_length=None), critical=True, diff --git a/tests/support/unit.py b/tests/support/unit.py index 7e2aefb43aa5..c463992af8a9 100644 --- a/tests/support/unit.py +++ b/tests/support/unit.py @@ -209,6 +209,31 @@ def run(self, result=None): del self._prerun_instance_attributes return outcome + def assertDictContainsSubset(self, subset, dictionary, msg=None): + """ + Checks whether all key/value pairs in subset are found in dictionary. + This method was removed in Python 3.12. + """ + missing = [] + mismatched = [] + for key, value in subset.items(): + if key not in dictionary: + missing.append(key) + elif value != dictionary[key]: + mismatched.append( + "{!r}, expected: {!r}, actual: {!r}".format( + key, value, dictionary[key] + ) + ) + if missing or mismatched: + parts = [] + if missing: + parts.append("Missing: {}".format(", ".join(repr(m) for m in missing))) + if mismatched: + parts.append("Mismatched values: {}".format(", ".join(mismatched))) + standard_msg = "; ".join(parts) + self.fail(self._formatMessage(msg, standard_msg)) + def shortDescription(self): desc = _TestCase.shortDescription(self) if HAS_PSUTIL and SHOW_PROC: diff --git a/tests/unit/modules/test_x509.py b/tests/unit/modules/test_x509.py index f1ca5bb45a3d..32be1ba3f6d4 100644 --- a/tests/unit/modules/test_x509.py +++ b/tests/unit/modules/test_x509.py @@ -22,6 +22,7 @@ import salt.utils.files import salt.utils.stringutils +import salt.utils.timeutil from salt.modules import x509 from tests.support.helpers import dedent from tests.support.mixins import LoaderModuleMockMixin @@ -185,7 +186,7 @@ def test_create_certificate_with_not_after(self): fmt = "%Y-%m-%d %H:%M:%S" # We also gonna use the current date in UTC format for verification - not_after = datetime.datetime.utcnow() + not_after = salt.utils.timeutil.utcnow() # And set the UTC timezone to the naive datetime resulting from parsing not_after = not_after.replace(tzinfo=M2Crypto.ASN1.UTC) not_after_str = datetime.datetime.strftime(not_after, fmt) @@ -226,7 +227,7 @@ def test_create_certificate_with_not_before(self): fmt = "%Y-%m-%d %H:%M:%S" # We also gonna use the current date in UTC format for verification - not_before = datetime.datetime.utcnow() + not_before = salt.utils.timeutil.utcnow() # And set the UTC timezone to the naive datetime resulting from parsing not_before = not_before.replace(tzinfo=M2Crypto.ASN1.UTC) not_before_str = datetime.datetime.strftime(not_before, fmt) @@ -319,7 +320,7 @@ def test_create_certificate_with_not_before_and_not_after(self): fmt = "%Y-%m-%d %H:%M:%S" # Here we gonna use the current date as the not_before date # First we again take the UTC for verification - not_before = datetime.datetime.utcnow() + not_before = salt.utils.timeutil.utcnow() # And set the UTC timezone to the naive datetime resulting from parsing not_before = not_before.replace(tzinfo=M2Crypto.ASN1.UTC) not_before_str = datetime.datetime.strftime(not_before, fmt) diff --git a/tests/unit/test_zypp_plugins.py b/tests/unit/test_zypp_plugins.py index 5771c4a2d611..b6bdd2b6de02 100644 --- a/tests/unit/test_zypp_plugins.py +++ b/tests/unit/test_zypp_plugins.py @@ -2,7 +2,8 @@ :codeauthor: Bo Maryniuk """ -import imp # pylint: disable=deprecated-module +import importlib.machinery +import importlib.util import os import pytest @@ -41,7 +42,10 @@ def test_drift_detector(self): Returns: """ - zyppnotify = imp.load_source("zyppnotify", ZYPPNOTIFY_FILE) + loader = importlib.machinery.SourceFileLoader("zyppnotify", ZYPPNOTIFY_FILE) + spec = importlib.util.spec_from_loader("zyppnotify", loader) + zyppnotify = importlib.util.module_from_spec(spec) + spec.loader.exec_module(zyppnotify) drift = zyppnotify.DriftDetector() drift._get_mtime = MagicMock(return_value=123) drift._get_checksum = MagicMock(return_value="deadbeef") diff --git a/tests/unit/utils/test_boto3mod.py b/tests/unit/utils/test_boto3mod.py index 0a9509ab5987..4aae1a88a341 100644 --- a/tests/unit/utils/test_boto3mod.py +++ b/tests/unit/utils/test_boto3mod.py @@ -31,7 +31,7 @@ @pytest.mark.skipif(HAS_BOTO3 is False, reason="The boto module must be installed.") @pytest.mark.skipif( - Version(boto3.__version__) < Version(REQUIRED_BOTO3_VERSION), + HAS_BOTO3 and Version(boto3.__version__) < Version(REQUIRED_BOTO3_VERSION), reason="The boto3 module must be greater or equal to version {}".format( REQUIRED_BOTO3_VERSION ), diff --git a/tests/unit/utils/test_color.py b/tests/unit/utils/test_color.py index 741db780a23a..0e3f5ac042fb 100644 --- a/tests/unit/utils/test_color.py +++ b/tests/unit/utils/test_color.py @@ -12,7 +12,7 @@ def test_get_colors(self): self.assertEqual("\x1b[0;37m", str(ret["LIGHT_GRAY"])) ret = salt.utils.color.get_colors(use=False) - self.assertDictContainsSubset({"LIGHT_GRAY": ""}, ret) + self.assertEqual(ret.get("LIGHT_GRAY"), "") ret = salt.utils.color.get_colors(use="LIGHT_GRAY") # LIGHT_YELLOW now == LIGHT_GRAY diff --git a/tools/pkg/build.py b/tools/pkg/build.py index 36c6c838329e..6e193aa0961f 100644 --- a/tools/pkg/build.py +++ b/tools/pkg/build.py @@ -633,6 +633,10 @@ def onedir_dependencies( # Cryptography needs openssl dir set to link to the proper openssl libs. if platform == "macos": env["OPENSSL_DIR"] = f"{dest}" + # Apple Clang 16+ (Xcode 16, macOS 14+) treats pointer-to-integer + # conversions as hard errors. Suppress for packages with older C code + # (e.g. multidict 6.0.4) that predate stricter Clang defaults. + env["CFLAGS"] = env.get("CFLAGS", "") + " -Wno-int-conversion" if platform == "linux": # This installs the ppbt package. We'll remove it after installing all