From 9d3b3b73bc408820e1f3c0dbabe0da2eae6f841d Mon Sep 17 00:00:00 2001 From: Pedro Algarvio Date: Wed, 26 Apr 2023 10:32:16 +0100 Subject: [PATCH 001/153] Add backports support Signed-off-by: Pedro Algarvio (cherry picked from commit 99cb7c0e084f2b47ef3a6e9aa9c46b35c3676cc1) --- .backportrc.json | 15 +++++++++++ .github/workflows/backport.yml | 48 ++++++++++++++++++++++++++++++++++ 2 files changed, 63 insertions(+) create mode 100644 .backportrc.json create mode 100644 .github/workflows/backport.yml diff --git a/.backportrc.json b/.backportrc.json new file mode 100644 index 00000000000..b988c16660f --- /dev/null +++ b/.backportrc.json @@ -0,0 +1,15 @@ +{ + "repoOwner": "saltstack", + "repoName": "salt", + "targetBranchChoices": ["master", "3006.x", "3005.x"], + "autoMerge": false, + "autoMergeMethod": "rebase", + "branchLabelMapping": { + "^backport:(.+)$": "$1" + }, + "prTitle": "[BACKPORT] {commitMessages}", + "publishStatusCommentOnSuccess": true, + "sourcePRLabels": [ + "backport:complete" + ] +} diff --git a/.github/workflows/backport.yml b/.github/workflows/backport.yml new file mode 100644 index 00000000000..b70b84df5b3 --- /dev/null +++ b/.github/workflows/backport.yml @@ -0,0 +1,48 @@ +name: Backport PR +run-name: "Backport PR #${{ github.event.number }}" + +on: + pull_request_target: + types: + - "labeled" + - "closed" + +permissions: + contents: write + pull-requests: write + +jobs: + backport: + name: Backport PR + runs-on: + - ubuntu-latest + if: | + github.event.pull_request.merged == true + && ( + contains(github.event.pull_request.labels.*.name, 'backport:master') || + contains(github.event.pull_request.labels.*.name, 'backport:3006.x') || + contains(github.event.pull_request.labels.*.name, 'backport:3005.x') + ) + && ( + (github.event.action == 'labeled' && ( + contains(github.event.pull_request.labels.*.name, 'backport:master') || + contains(github.event.pull_request.labels.*.name, 'backport:3006.x') || + contains(github.event.pull_request.labels.*.name, 'backport:3005.x') + )) + || (github.event.action == 'closed') + ) + steps: + - name: Backport Action + uses: sqren/backport-github-action@v8.9.7 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + auto_backport_label_prefix: "backport:" + add_original_reviewers: true + + - name: Info log + if: ${{ success() }} + run: jq -C '.' ~/.backport/backport.info.log + + - name: Debug log + if: ${{ failure() }} + run: jq -C '.' ~/.backport/backport.debug.log From aad2f675761e66252f63988c0a6ea38604e0b94f Mon Sep 17 00:00:00 2001 From: Pedro Algarvio Date: Sun, 24 Sep 2023 10:23:27 +0100 Subject: [PATCH 002/153] Bump to `sqren/backport-github-action@v9.3.0-a` Signed-off-by: Pedro Algarvio --- .github/workflows/backport.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/backport.yml b/.github/workflows/backport.yml index b70b84df5b3..4e255576c92 100644 --- a/.github/workflows/backport.yml +++ b/.github/workflows/backport.yml @@ -33,7 +33,7 @@ jobs: ) steps: - name: Backport Action - uses: sqren/backport-github-action@v8.9.7 + uses: sqren/backport-github-action@v9.3.0-a with: github_token: ${{ secrets.GITHUB_TOKEN }} auto_backport_label_prefix: "backport:" From 29ae9829eec75d88420eeaa2685cbed48b9134f1 Mon Sep 17 00:00:00 2001 From: Pedro Algarvio Date: Sun, 24 Sep 2023 21:20:44 +0100 Subject: [PATCH 003/153] Downgrade to `sqren/backport-github-action@v8.9.7` at least errors are reported Signed-off-by: Pedro Algarvio --- .backportrc.json | 2 +- .github/workflows/backport.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.backportrc.json b/.backportrc.json index b988c16660f..1fc808b961b 100644 --- a/.backportrc.json +++ b/.backportrc.json @@ -1,7 +1,7 @@ { "repoOwner": "saltstack", "repoName": "salt", - "targetBranchChoices": ["master", "3006.x", "3005.x"], + "targetBranchChoices": ["master", "3006.x", "3005.x", "freeze"], "autoMerge": false, "autoMergeMethod": "rebase", "branchLabelMapping": { diff --git a/.github/workflows/backport.yml b/.github/workflows/backport.yml index 4e255576c92..b70b84df5b3 100644 --- a/.github/workflows/backport.yml +++ b/.github/workflows/backport.yml @@ -33,7 +33,7 @@ jobs: ) steps: - name: Backport Action - uses: sqren/backport-github-action@v9.3.0-a + uses: sqren/backport-github-action@v8.9.7 with: github_token: ${{ secrets.GITHUB_TOKEN }} auto_backport_label_prefix: "backport:" From db0f92038288bd69422dfde1612af194bea7fda4 Mon Sep 17 00:00:00 2001 From: Pedro Algarvio Date: Fri, 22 Sep 2023 15:39:07 +0100 Subject: [PATCH 004/153] Bump to `cryptography==41.0.4` due to https://github.com/advisories/GHSA-v8gr-m533-ghj9 Signed-off-by: Pedro Algarvio --- changelog/65267.security | 1 + requirements/static/ci/py3.10/cloud.txt | 2 +- requirements/static/ci/py3.10/darwin.txt | 2 +- requirements/static/ci/py3.10/docs.txt | 2 +- requirements/static/ci/py3.10/freebsd.txt | 2 +- requirements/static/ci/py3.10/lint.txt | 2 +- requirements/static/ci/py3.10/linux.txt | 2 +- requirements/static/ci/py3.10/windows.txt | 2 +- requirements/static/ci/py3.7/cloud.txt | 2 +- requirements/static/ci/py3.7/docs.txt | 2 +- requirements/static/ci/py3.7/freebsd.txt | 2 +- requirements/static/ci/py3.7/lint.txt | 2 +- requirements/static/ci/py3.7/linux.txt | 2 +- requirements/static/ci/py3.7/windows.txt | 2 +- requirements/static/ci/py3.8/cloud.txt | 2 +- requirements/static/ci/py3.8/docs.txt | 2 +- requirements/static/ci/py3.8/freebsd.txt | 2 +- requirements/static/ci/py3.8/lint.txt | 2 +- requirements/static/ci/py3.8/linux.txt | 2 +- requirements/static/ci/py3.8/windows.txt | 2 +- requirements/static/ci/py3.9/cloud.txt | 2 +- requirements/static/ci/py3.9/darwin.txt | 2 +- requirements/static/ci/py3.9/docs.txt | 2 +- requirements/static/ci/py3.9/freebsd.txt | 2 +- requirements/static/ci/py3.9/lint.txt | 2 +- requirements/static/ci/py3.9/linux.txt | 2 +- requirements/static/ci/py3.9/windows.txt | 2 +- requirements/static/pkg/py3.10/darwin.txt | 2 +- requirements/static/pkg/py3.10/freebsd.txt | 2 +- requirements/static/pkg/py3.10/linux.txt | 2 +- requirements/static/pkg/py3.10/windows.txt | 2 +- requirements/static/pkg/py3.7/freebsd.txt | 2 +- requirements/static/pkg/py3.7/linux.txt | 2 +- requirements/static/pkg/py3.7/windows.txt | 2 +- requirements/static/pkg/py3.8/freebsd.txt | 2 +- requirements/static/pkg/py3.8/linux.txt | 2 +- requirements/static/pkg/py3.8/windows.txt | 2 +- requirements/static/pkg/py3.9/darwin.txt | 2 +- requirements/static/pkg/py3.9/freebsd.txt | 2 +- requirements/static/pkg/py3.9/linux.txt | 2 +- requirements/static/pkg/py3.9/windows.txt | 2 +- 41 files changed, 41 insertions(+), 40 deletions(-) create mode 100644 changelog/65267.security diff --git a/changelog/65267.security b/changelog/65267.security new file mode 100644 index 00000000000..15588570ad6 --- /dev/null +++ b/changelog/65267.security @@ -0,0 +1 @@ +Bump to `cryptography==41.0.4` due to https://github.com/advisories/GHSA-v8gr-m533-ghj9 diff --git a/requirements/static/ci/py3.10/cloud.txt b/requirements/static/ci/py3.10/cloud.txt index 84a17a57933..3e163e77a18 100644 --- a/requirements/static/ci/py3.10/cloud.txt +++ b/requirements/static/ci/py3.10/cloud.txt @@ -383,7 +383,7 @@ contextvars==2.4 # via -r requirements/base.txt croniter==1.0.15 ; sys_platform != "win32" # via -r requirements/static/ci/common.in -cryptography==41.0.3 ; python_version >= "3.7" +cryptography==41.0.4 ; python_version >= "3.7" # via # -r requirements/static/pkg/linux.in # adal diff --git a/requirements/static/ci/py3.10/darwin.txt b/requirements/static/ci/py3.10/darwin.txt index 6725d76cafb..1cfb54e7426 100644 --- a/requirements/static/ci/py3.10/darwin.txt +++ b/requirements/static/ci/py3.10/darwin.txt @@ -386,7 +386,7 @@ contextvars==2.4 # via -r requirements/base.txt croniter==0.3.29 ; sys_platform != "win32" # via -r requirements/static/ci/common.in -cryptography==41.0.3 ; python_version >= "3.7" +cryptography==41.0.4 ; python_version >= "3.7" # via # -r requirements/darwin.txt # adal diff --git a/requirements/static/ci/py3.10/docs.txt b/requirements/static/ci/py3.10/docs.txt index 5fa86b1cc9c..d8aa8cbaeaa 100644 --- a/requirements/static/ci/py3.10/docs.txt +++ b/requirements/static/ci/py3.10/docs.txt @@ -390,7 +390,7 @@ contextvars==2.4 # via -r requirements/base.txt croniter==1.0.15 ; sys_platform != "win32" # via -r requirements/static/ci/common.in -cryptography==41.0.3 ; python_version >= "3.7" +cryptography==41.0.4 ; python_version >= "3.7" # via # -r requirements/static/pkg/linux.in # adal diff --git a/requirements/static/ci/py3.10/freebsd.txt b/requirements/static/ci/py3.10/freebsd.txt index 4de08ee486f..5dc862b00c5 100644 --- a/requirements/static/ci/py3.10/freebsd.txt +++ b/requirements/static/ci/py3.10/freebsd.txt @@ -382,7 +382,7 @@ contextvars==2.4 # via -r requirements/base.txt croniter==0.3.29 ; sys_platform != "win32" # via -r requirements/static/ci/common.in -cryptography==41.0.3 ; python_version >= "3.7" +cryptography==41.0.4 ; python_version >= "3.7" # via # -r requirements/static/pkg/freebsd.in # adal diff --git a/requirements/static/ci/py3.10/lint.txt b/requirements/static/ci/py3.10/lint.txt index 9fb36c3b357..96865dc989e 100644 --- a/requirements/static/ci/py3.10/lint.txt +++ b/requirements/static/ci/py3.10/lint.txt @@ -388,7 +388,7 @@ contextvars==2.4 # via -r requirements/base.txt croniter==1.0.15 ; sys_platform != "win32" # via -r requirements/static/ci/common.in -cryptography==41.0.3 ; python_version >= "3.7" +cryptography==41.0.4 ; python_version >= "3.7" # via # -r requirements/static/pkg/linux.in # adal diff --git a/requirements/static/ci/py3.10/linux.txt b/requirements/static/ci/py3.10/linux.txt index dbbc7f94b97..b9a9f45fcb8 100644 --- a/requirements/static/ci/py3.10/linux.txt +++ b/requirements/static/ci/py3.10/linux.txt @@ -396,7 +396,7 @@ contextvars==2.4 # via -r requirements/base.txt croniter==0.3.29 ; sys_platform != "win32" # via -r requirements/static/ci/common.in -cryptography==41.0.3 ; python_version >= "3.7" +cryptography==41.0.4 ; python_version >= "3.7" # via # -r requirements/static/pkg/linux.in # adal diff --git a/requirements/static/ci/py3.10/windows.txt b/requirements/static/ci/py3.10/windows.txt index afabb8762f0..572e049fc3a 100644 --- a/requirements/static/ci/py3.10/windows.txt +++ b/requirements/static/ci/py3.10/windows.txt @@ -73,7 +73,7 @@ colorama==0.4.1 # via pytest contextvars==2.4 # via -r requirements/base.txt -cryptography==39.0.1 +cryptography==41.0.4 # via # -r requirements/static/pkg/py3.10/windows.txt # moto diff --git a/requirements/static/ci/py3.7/cloud.txt b/requirements/static/ci/py3.7/cloud.txt index 8a6a86bc53f..f903b2d6d29 100644 --- a/requirements/static/ci/py3.7/cloud.txt +++ b/requirements/static/ci/py3.7/cloud.txt @@ -390,7 +390,7 @@ contextvars==2.4 # via -r requirements/base.txt croniter==1.0.15 ; sys_platform != "win32" # via -r requirements/static/ci/common.in -cryptography==41.0.3 ; python_version >= "3.7" +cryptography==41.0.4 ; python_version >= "3.7" # via # -r requirements/static/pkg/linux.in # adal diff --git a/requirements/static/ci/py3.7/docs.txt b/requirements/static/ci/py3.7/docs.txt index b99ff436bbb..c67e346203f 100644 --- a/requirements/static/ci/py3.7/docs.txt +++ b/requirements/static/ci/py3.7/docs.txt @@ -399,7 +399,7 @@ contextvars==2.4 # via -r requirements/base.txt croniter==1.0.15 ; sys_platform != "win32" # via -r requirements/static/ci/common.in -cryptography==41.0.3 ; python_version >= "3.7" +cryptography==41.0.4 ; python_version >= "3.7" # via # -r requirements/static/pkg/linux.in # adal diff --git a/requirements/static/ci/py3.7/freebsd.txt b/requirements/static/ci/py3.7/freebsd.txt index 098811c2533..4976c9fbb6c 100644 --- a/requirements/static/ci/py3.7/freebsd.txt +++ b/requirements/static/ci/py3.7/freebsd.txt @@ -389,7 +389,7 @@ contextvars==2.4 # via -r requirements/base.txt croniter==0.3.29 ; sys_platform != "win32" # via -r requirements/static/ci/common.in -cryptography==41.0.3 ; python_version >= "3.7" +cryptography==41.0.4 ; python_version >= "3.7" # via # -r requirements/static/pkg/freebsd.in # adal diff --git a/requirements/static/ci/py3.7/lint.txt b/requirements/static/ci/py3.7/lint.txt index d995e9c3999..dd5932f1caa 100644 --- a/requirements/static/ci/py3.7/lint.txt +++ b/requirements/static/ci/py3.7/lint.txt @@ -397,7 +397,7 @@ contextvars==2.4 # via -r requirements/base.txt croniter==1.0.15 ; sys_platform != "win32" # via -r requirements/static/ci/common.in -cryptography==41.0.3 ; python_version >= "3.7" +cryptography==41.0.4 ; python_version >= "3.7" # via # -r requirements/static/pkg/linux.in # adal diff --git a/requirements/static/ci/py3.7/linux.txt b/requirements/static/ci/py3.7/linux.txt index 039f18a3c3a..09dad7aa75a 100644 --- a/requirements/static/ci/py3.7/linux.txt +++ b/requirements/static/ci/py3.7/linux.txt @@ -403,7 +403,7 @@ contextvars==2.4 # via -r requirements/base.txt croniter==0.3.29 ; sys_platform != "win32" # via -r requirements/static/ci/common.in -cryptography==41.0.3 ; python_version >= "3.7" +cryptography==41.0.4 ; python_version >= "3.7" # via # -r requirements/static/pkg/linux.in # adal diff --git a/requirements/static/ci/py3.7/windows.txt b/requirements/static/ci/py3.7/windows.txt index 9c9e2415345..d0d6085415f 100644 --- a/requirements/static/ci/py3.7/windows.txt +++ b/requirements/static/ci/py3.7/windows.txt @@ -74,7 +74,7 @@ colorama==0.4.1 # via pytest contextvars==2.4 # via -r requirements/base.txt -cryptography==41.0.3 ; python_version >= "3.7" +cryptography==41.0.4 ; python_version >= "3.7" # via # -r requirements/windows.txt # etcd3-py diff --git a/requirements/static/ci/py3.8/cloud.txt b/requirements/static/ci/py3.8/cloud.txt index ae3a2330f51..d47a2de683a 100644 --- a/requirements/static/ci/py3.8/cloud.txt +++ b/requirements/static/ci/py3.8/cloud.txt @@ -388,7 +388,7 @@ contextvars==2.4 # via -r requirements/base.txt croniter==1.0.15 ; sys_platform != "win32" # via -r requirements/static/ci/common.in -cryptography==41.0.3 ; python_version >= "3.7" +cryptography==41.0.4 ; python_version >= "3.7" # via # -r requirements/static/pkg/linux.in # adal diff --git a/requirements/static/ci/py3.8/docs.txt b/requirements/static/ci/py3.8/docs.txt index 704100ccc31..af50b9ad185 100644 --- a/requirements/static/ci/py3.8/docs.txt +++ b/requirements/static/ci/py3.8/docs.txt @@ -397,7 +397,7 @@ contextvars==2.4 # via -r requirements/base.txt croniter==1.0.15 ; sys_platform != "win32" # via -r requirements/static/ci/common.in -cryptography==41.0.3 ; python_version >= "3.7" +cryptography==41.0.4 ; python_version >= "3.7" # via # -r requirements/static/pkg/linux.in # adal diff --git a/requirements/static/ci/py3.8/freebsd.txt b/requirements/static/ci/py3.8/freebsd.txt index 64b895815d6..408b9308c10 100644 --- a/requirements/static/ci/py3.8/freebsd.txt +++ b/requirements/static/ci/py3.8/freebsd.txt @@ -387,7 +387,7 @@ contextvars==2.4 # via -r requirements/base.txt croniter==0.3.29 ; sys_platform != "win32" # via -r requirements/static/ci/common.in -cryptography==41.0.3 ; python_version >= "3.7" +cryptography==41.0.4 ; python_version >= "3.7" # via # -r requirements/static/pkg/freebsd.in # adal diff --git a/requirements/static/ci/py3.8/lint.txt b/requirements/static/ci/py3.8/lint.txt index ebe72d749e2..63e853bf68f 100644 --- a/requirements/static/ci/py3.8/lint.txt +++ b/requirements/static/ci/py3.8/lint.txt @@ -395,7 +395,7 @@ contextvars==2.4 # via -r requirements/base.txt croniter==1.0.15 ; sys_platform != "win32" # via -r requirements/static/ci/common.in -cryptography==41.0.3 ; python_version >= "3.7" +cryptography==41.0.4 ; python_version >= "3.7" # via # -r requirements/static/pkg/linux.in # adal diff --git a/requirements/static/ci/py3.8/linux.txt b/requirements/static/ci/py3.8/linux.txt index 77b2c36a5d1..8cfc4e8a092 100644 --- a/requirements/static/ci/py3.8/linux.txt +++ b/requirements/static/ci/py3.8/linux.txt @@ -401,7 +401,7 @@ contextvars==2.4 # via -r requirements/base.txt croniter==0.3.29 ; sys_platform != "win32" # via -r requirements/static/ci/common.in -cryptography==41.0.3 ; python_version >= "3.7" +cryptography==41.0.4 ; python_version >= "3.7" # via # -r requirements/static/pkg/linux.in # adal diff --git a/requirements/static/ci/py3.8/windows.txt b/requirements/static/ci/py3.8/windows.txt index ca5e306b800..5b2ba5adace 100644 --- a/requirements/static/ci/py3.8/windows.txt +++ b/requirements/static/ci/py3.8/windows.txt @@ -72,7 +72,7 @@ colorama==0.4.1 # via pytest contextvars==2.4 # via -r requirements/base.txt -cryptography==41.0.3 ; python_version >= "3.7" +cryptography==41.0.4 ; python_version >= "3.7" # via # -r requirements/windows.txt # etcd3-py diff --git a/requirements/static/ci/py3.9/cloud.txt b/requirements/static/ci/py3.9/cloud.txt index 9495c538ecc..10730f00910 100644 --- a/requirements/static/ci/py3.9/cloud.txt +++ b/requirements/static/ci/py3.9/cloud.txt @@ -388,7 +388,7 @@ contextvars==2.4 # via -r requirements/base.txt croniter==1.0.15 ; sys_platform != "win32" # via -r requirements/static/ci/common.in -cryptography==41.0.3 ; python_version >= "3.7" +cryptography==41.0.4 ; python_version >= "3.7" # via # -r requirements/static/pkg/linux.in # adal diff --git a/requirements/static/ci/py3.9/darwin.txt b/requirements/static/ci/py3.9/darwin.txt index d47db18063f..277defef4d5 100644 --- a/requirements/static/ci/py3.9/darwin.txt +++ b/requirements/static/ci/py3.9/darwin.txt @@ -391,7 +391,7 @@ contextvars==2.4 # via -r requirements/base.txt croniter==0.3.29 ; sys_platform != "win32" # via -r requirements/static/ci/common.in -cryptography==41.0.3 ; python_version >= "3.7" +cryptography==41.0.4 ; python_version >= "3.7" # via # -r requirements/darwin.txt # adal diff --git a/requirements/static/ci/py3.9/docs.txt b/requirements/static/ci/py3.9/docs.txt index 12d672d4a38..4ed09bed8eb 100644 --- a/requirements/static/ci/py3.9/docs.txt +++ b/requirements/static/ci/py3.9/docs.txt @@ -395,7 +395,7 @@ contextvars==2.4 # via -r requirements/base.txt croniter==1.0.15 ; sys_platform != "win32" # via -r requirements/static/ci/common.in -cryptography==41.0.3 ; python_version >= "3.7" +cryptography==41.0.4 ; python_version >= "3.7" # via # -r requirements/static/pkg/linux.in # adal diff --git a/requirements/static/ci/py3.9/freebsd.txt b/requirements/static/ci/py3.9/freebsd.txt index 7ebc98e63a3..119b9a7e39b 100644 --- a/requirements/static/ci/py3.9/freebsd.txt +++ b/requirements/static/ci/py3.9/freebsd.txt @@ -387,7 +387,7 @@ contextvars==2.4 # via -r requirements/base.txt croniter==0.3.29 ; sys_platform != "win32" # via -r requirements/static/ci/common.in -cryptography==41.0.3 ; python_version >= "3.7" +cryptography==41.0.4 ; python_version >= "3.7" # via # -r requirements/static/pkg/freebsd.in # adal diff --git a/requirements/static/ci/py3.9/lint.txt b/requirements/static/ci/py3.9/lint.txt index 084f5cb6724..87b7665c97b 100644 --- a/requirements/static/ci/py3.9/lint.txt +++ b/requirements/static/ci/py3.9/lint.txt @@ -393,7 +393,7 @@ contextvars==2.4 # via -r requirements/base.txt croniter==1.0.15 ; sys_platform != "win32" # via -r requirements/static/ci/common.in -cryptography==41.0.3 ; python_version >= "3.7" +cryptography==41.0.4 ; python_version >= "3.7" # via # -r requirements/static/pkg/linux.in # adal diff --git a/requirements/static/ci/py3.9/linux.txt b/requirements/static/ci/py3.9/linux.txt index b8125669def..8c635fd7cf3 100644 --- a/requirements/static/ci/py3.9/linux.txt +++ b/requirements/static/ci/py3.9/linux.txt @@ -403,7 +403,7 @@ contextvars==2.4 # via -r requirements/base.txt croniter==0.3.29 ; sys_platform != "win32" # via -r requirements/static/ci/common.in -cryptography==41.0.3 ; python_version >= "3.7" +cryptography==41.0.4 ; python_version >= "3.7" # via # -r requirements/static/pkg/linux.in # adal diff --git a/requirements/static/ci/py3.9/windows.txt b/requirements/static/ci/py3.9/windows.txt index d98e73e91f6..280315b4c8a 100644 --- a/requirements/static/ci/py3.9/windows.txt +++ b/requirements/static/ci/py3.9/windows.txt @@ -72,7 +72,7 @@ colorama==0.4.1 # via pytest contextvars==2.4 # via -r requirements/base.txt -cryptography==41.0.3 ; python_version >= "3.7" +cryptography==41.0.4 ; python_version >= "3.7" # via # -r requirements/windows.txt # etcd3-py diff --git a/requirements/static/pkg/py3.10/darwin.txt b/requirements/static/pkg/py3.10/darwin.txt index 9d6409d28c8..d3250c794d4 100644 --- a/requirements/static/pkg/py3.10/darwin.txt +++ b/requirements/static/pkg/py3.10/darwin.txt @@ -18,7 +18,7 @@ cherrypy==18.6.1 # via -r requirements/darwin.txt contextvars==2.4 # via -r requirements/base.txt -cryptography==41.0.3 ; python_version >= "3.7" +cryptography==41.0.4 ; python_version >= "3.7" # via # -r requirements/darwin.txt # pyopenssl diff --git a/requirements/static/pkg/py3.10/freebsd.txt b/requirements/static/pkg/py3.10/freebsd.txt index c25bc90a4b5..2ff655041f3 100644 --- a/requirements/static/pkg/py3.10/freebsd.txt +++ b/requirements/static/pkg/py3.10/freebsd.txt @@ -16,7 +16,7 @@ cherrypy==18.6.1 # via -r requirements/static/pkg/freebsd.in contextvars==2.4 # via -r requirements/base.txt -cryptography==41.0.3 ; python_version >= "3.7" +cryptography==41.0.4 ; python_version >= "3.7" # via # -r requirements/static/pkg/freebsd.in # pyopenssl diff --git a/requirements/static/pkg/py3.10/linux.txt b/requirements/static/pkg/py3.10/linux.txt index 9944c2e4d1d..04ca508c92f 100644 --- a/requirements/static/pkg/py3.10/linux.txt +++ b/requirements/static/pkg/py3.10/linux.txt @@ -16,7 +16,7 @@ cherrypy==18.6.1 # via -r requirements/static/pkg/linux.in contextvars==2.4 # via -r requirements/base.txt -cryptography==41.0.3 ; python_version >= "3.7" +cryptography==41.0.4 ; python_version >= "3.7" # via # -r requirements/static/pkg/linux.in # pyopenssl diff --git a/requirements/static/pkg/py3.10/windows.txt b/requirements/static/pkg/py3.10/windows.txt index 9f8b7435fb6..ac39e84b328 100644 --- a/requirements/static/pkg/py3.10/windows.txt +++ b/requirements/static/pkg/py3.10/windows.txt @@ -20,7 +20,7 @@ cherrypy==18.6.1 # via -r requirements/windows.txt contextvars==2.4 # via -r requirements/base.txt -cryptography==39.0.1 +cryptography==41.0.4 # via # -r requirements/windows.txt # pyopenssl diff --git a/requirements/static/pkg/py3.7/freebsd.txt b/requirements/static/pkg/py3.7/freebsd.txt index f8c2f0a56a2..6aa3ccea8f9 100644 --- a/requirements/static/pkg/py3.7/freebsd.txt +++ b/requirements/static/pkg/py3.7/freebsd.txt @@ -16,7 +16,7 @@ cherrypy==18.6.1 # via -r requirements/static/pkg/freebsd.in contextvars==2.4 # via -r requirements/base.txt -cryptography==41.0.3 ; python_version >= "3.7" +cryptography==41.0.4 ; python_version >= "3.7" # via # -r requirements/static/pkg/freebsd.in # pyopenssl diff --git a/requirements/static/pkg/py3.7/linux.txt b/requirements/static/pkg/py3.7/linux.txt index 0585f5aa5c7..0b88348435b 100644 --- a/requirements/static/pkg/py3.7/linux.txt +++ b/requirements/static/pkg/py3.7/linux.txt @@ -16,7 +16,7 @@ cherrypy==18.6.1 # via -r requirements/static/pkg/linux.in contextvars==2.4 # via -r requirements/base.txt -cryptography==41.0.3 ; python_version >= "3.7" +cryptography==41.0.4 ; python_version >= "3.7" # via # -r requirements/static/pkg/linux.in # pyopenssl diff --git a/requirements/static/pkg/py3.7/windows.txt b/requirements/static/pkg/py3.7/windows.txt index 90f0ad64b9f..99733fb8079 100644 --- a/requirements/static/pkg/py3.7/windows.txt +++ b/requirements/static/pkg/py3.7/windows.txt @@ -20,7 +20,7 @@ cherrypy==18.6.1 # via -r requirements/windows.txt contextvars==2.4 # via -r requirements/base.txt -cryptography==41.0.3 ; python_version >= "3.7" +cryptography==41.0.4 ; python_version >= "3.7" # via # -r requirements/windows.txt # pyopenssl diff --git a/requirements/static/pkg/py3.8/freebsd.txt b/requirements/static/pkg/py3.8/freebsd.txt index 8baa680c8dd..fd731dee62d 100644 --- a/requirements/static/pkg/py3.8/freebsd.txt +++ b/requirements/static/pkg/py3.8/freebsd.txt @@ -16,7 +16,7 @@ cherrypy==18.6.1 # via -r requirements/static/pkg/freebsd.in contextvars==2.4 # via -r requirements/base.txt -cryptography==41.0.3 ; python_version >= "3.7" +cryptography==41.0.4 ; python_version >= "3.7" # via # -r requirements/static/pkg/freebsd.in # pyopenssl diff --git a/requirements/static/pkg/py3.8/linux.txt b/requirements/static/pkg/py3.8/linux.txt index 35882187a40..82dde6a5496 100644 --- a/requirements/static/pkg/py3.8/linux.txt +++ b/requirements/static/pkg/py3.8/linux.txt @@ -16,7 +16,7 @@ cherrypy==18.6.1 # via -r requirements/static/pkg/linux.in contextvars==2.4 # via -r requirements/base.txt -cryptography==41.0.3 ; python_version >= "3.7" +cryptography==41.0.4 ; python_version >= "3.7" # via # -r requirements/static/pkg/linux.in # pyopenssl diff --git a/requirements/static/pkg/py3.8/windows.txt b/requirements/static/pkg/py3.8/windows.txt index ecccae81ab4..c1eff89b569 100644 --- a/requirements/static/pkg/py3.8/windows.txt +++ b/requirements/static/pkg/py3.8/windows.txt @@ -20,7 +20,7 @@ cherrypy==18.6.1 # via -r requirements/windows.txt contextvars==2.4 # via -r requirements/base.txt -cryptography==41.0.3 ; python_version >= "3.7" +cryptography==41.0.4 ; python_version >= "3.7" # via # -r requirements/windows.txt # pyopenssl diff --git a/requirements/static/pkg/py3.9/darwin.txt b/requirements/static/pkg/py3.9/darwin.txt index 6ccf6601b30..2acb0ce7257 100644 --- a/requirements/static/pkg/py3.9/darwin.txt +++ b/requirements/static/pkg/py3.9/darwin.txt @@ -18,7 +18,7 @@ cherrypy==18.6.1 # via -r requirements/darwin.txt contextvars==2.4 # via -r requirements/base.txt -cryptography==41.0.3 ; python_version >= "3.7" +cryptography==41.0.4 ; python_version >= "3.7" # via # -r requirements/darwin.txt # pyopenssl diff --git a/requirements/static/pkg/py3.9/freebsd.txt b/requirements/static/pkg/py3.9/freebsd.txt index 748fbd5a1a3..04cd7193591 100644 --- a/requirements/static/pkg/py3.9/freebsd.txt +++ b/requirements/static/pkg/py3.9/freebsd.txt @@ -16,7 +16,7 @@ cherrypy==18.6.1 # via -r requirements/static/pkg/freebsd.in contextvars==2.4 # via -r requirements/base.txt -cryptography==41.0.3 ; python_version >= "3.7" +cryptography==41.0.4 ; python_version >= "3.7" # via # -r requirements/static/pkg/freebsd.in # pyopenssl diff --git a/requirements/static/pkg/py3.9/linux.txt b/requirements/static/pkg/py3.9/linux.txt index f59b9cb4cce..870ee43ba11 100644 --- a/requirements/static/pkg/py3.9/linux.txt +++ b/requirements/static/pkg/py3.9/linux.txt @@ -16,7 +16,7 @@ cherrypy==18.6.1 # via -r requirements/static/pkg/linux.in contextvars==2.4 # via -r requirements/base.txt -cryptography==41.0.3 ; python_version >= "3.7" +cryptography==41.0.4 ; python_version >= "3.7" # via # -r requirements/static/pkg/linux.in # pyopenssl diff --git a/requirements/static/pkg/py3.9/windows.txt b/requirements/static/pkg/py3.9/windows.txt index e4555f86448..c9cc3c067dc 100644 --- a/requirements/static/pkg/py3.9/windows.txt +++ b/requirements/static/pkg/py3.9/windows.txt @@ -20,7 +20,7 @@ cherrypy==18.6.1 # via -r requirements/windows.txt contextvars==2.4 # via -r requirements/base.txt -cryptography==41.0.3 ; python_version >= "3.7" +cryptography==41.0.4 ; python_version >= "3.7" # via # -r requirements/windows.txt # pyopenssl From 4351431a6a7bdb4e645b70bbd2456afcf226635e Mon Sep 17 00:00:00 2001 From: MKLeb Date: Tue, 26 Sep 2023 12:35:04 -0400 Subject: [PATCH 005/153] Check for `-` in the version number --- pkg/tests/support/helpers.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/pkg/tests/support/helpers.py b/pkg/tests/support/helpers.py index 11bfdb6185b..6e4086521ed 100644 --- a/pkg/tests/support/helpers.py +++ b/pkg/tests/support/helpers.py @@ -272,9 +272,10 @@ class SaltPkgInstall: ] pkg_version = 1 for number in pkg_numbers: - number = int(number.split("-")[1]) - if number > pkg_version: - pkg_version = number + if "-" in number: + number = int(number.split("-")[1]) + if number > pkg_version: + pkg_version = number major, minor = prev_version.split(".") if version_only: return version From 90135124c0323d2254d83f16687403f317e5920a Mon Sep 17 00:00:00 2001 From: MKLeb Date: Tue, 26 Sep 2023 16:40:44 -0400 Subject: [PATCH 006/153] Fix urls for macos/windows non-classic pre-relenv packages --- pkg/tests/support/helpers.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pkg/tests/support/helpers.py b/pkg/tests/support/helpers.py index 6e4086521ed..a8888bded2b 100644 --- a/pkg/tests/support/helpers.py +++ b/pkg/tests/support/helpers.py @@ -755,8 +755,8 @@ class SaltPkgInstall: if not self.classic: if not relenv: - win_pkg = f"salt-{self.prev_version}-windows-amd64.{self.file_ext}" - win_pkg_url = f"https://repo.saltproject.io/salt/py3/windows/{self.prev_version}/{win_pkg}" + win_pkg = f"salt-{self.prev_version}-{pkg_version}-windows-amd64.{self.file_ext}" + win_pkg_url = f"https://repo.saltproject.io/salt/py3/windows/{major_ver}/{win_pkg}" else: if self.file_ext == "msi": win_pkg = ( @@ -803,8 +803,8 @@ class SaltPkgInstall: mac_pkg_url = f"https://repo.saltproject.io/osx/{mac_pkg}" else: if not relenv: - mac_pkg = f"salt-{self.prev_version}-macos-x86_64.pkg" - mac_pkg_url = f"https://repo.saltproject.io/salt/py3/macos/{self.prev_version}/{mac_pkg}" + mac_pkg = f"salt-{self.prev_version}-{pkg_version}-macos-x86_64.pkg" + mac_pkg_url = f"https://repo.saltproject.io/salt/py3/macos/{major_ver}/{mac_pkg}" else: mac_pkg = f"salt-{self.prev_version}-py3-x86_64.pkg" mac_pkg_url = f"https://repo.saltproject.io/salt/py3/macos/{major_ver}/{mac_pkg}" From c33977f96fc36f066aba929926cb44bc8ce8b9f8 Mon Sep 17 00:00:00 2001 From: Pedro Algarvio Date: Sun, 24 Sep 2023 18:32:09 +0100 Subject: [PATCH 007/153] Bump to `docker==6.1.2` Signed-off-by: Pedro Algarvio --- requirements/static/ci/py3.10/cloud.txt | 4 +- requirements/static/ci/py3.10/darwin.txt | 2 +- requirements/static/ci/py3.10/freebsd.txt | 2 +- requirements/static/ci/py3.10/lint.txt | 4 +- requirements/static/ci/py3.10/linux.txt | 2 +- requirements/static/ci/py3.10/pkgtests.txt | 2 +- requirements/static/ci/py3.10/windows.txt | 2 +- requirements/static/ci/py3.7/cloud.txt | 4 +- requirements/static/ci/py3.7/freebsd.txt | 2 +- requirements/static/ci/py3.7/lint.txt | 4 +- requirements/static/ci/py3.7/linux.txt | 2 +- requirements/static/ci/py3.7/windows.txt | 2 +- requirements/static/ci/py3.8/cloud.txt | 4 +- requirements/static/ci/py3.8/freebsd.txt | 2 +- requirements/static/ci/py3.8/lint.txt | 4 +- requirements/static/ci/py3.8/linux.txt | 2 +- requirements/static/ci/py3.8/windows.txt | 2 +- requirements/static/ci/py3.9/cloud.txt | 4 +- requirements/static/ci/py3.9/darwin.txt | 2 +- requirements/static/ci/py3.9/freebsd.txt | 2 +- requirements/static/ci/py3.9/lint.txt | 4 +- requirements/static/ci/py3.9/linux.txt | 2 +- requirements/static/ci/py3.9/windows.txt | 2 +- .../unit/modules/dockermod/test_module.py | 57 ++++++------------- 24 files changed, 55 insertions(+), 64 deletions(-) diff --git a/requirements/static/ci/py3.10/cloud.txt b/requirements/static/ci/py3.10/cloud.txt index d824ccaef96..dd892c8653c 100644 --- a/requirements/static/ci/py3.10/cloud.txt +++ b/requirements/static/ci/py3.10/cloud.txt @@ -410,7 +410,7 @@ dnspython==2.1.0 # via # -r requirements/static/ci/common.in # python-etcd -docker==5.0.2 +docker==6.1.2 # via # -r requirements/static/ci/common.in # pytest-salt-factories @@ -627,6 +627,7 @@ oscrypto==1.2.1 packaging==21.3 # via # -r requirements/base.txt + # docker # pytest paramiko==2.10.1 ; sys_platform != "win32" and sys_platform != "darwin" # via @@ -860,6 +861,7 @@ typing-extensions==4.2.0 urllib3==1.26.6 # via # botocore + # docker # kubernetes # python-etcd # requests diff --git a/requirements/static/ci/py3.10/darwin.txt b/requirements/static/ci/py3.10/darwin.txt index 84d153a310b..7bad065c90b 100644 --- a/requirements/static/ci/py3.10/darwin.txt +++ b/requirements/static/ci/py3.10/darwin.txt @@ -408,7 +408,7 @@ dnspython==1.16.0 # via # -r requirements/static/ci/common.in # python-etcd -docker==5.0.3 +docker==6.1.2 # via # -r requirements/static/ci/common.in # pytest-salt-factories diff --git a/requirements/static/ci/py3.10/freebsd.txt b/requirements/static/ci/py3.10/freebsd.txt index e4ac6666cad..e351fa1811b 100644 --- a/requirements/static/ci/py3.10/freebsd.txt +++ b/requirements/static/ci/py3.10/freebsd.txt @@ -407,7 +407,7 @@ dnspython==1.16.0 # via # -r requirements/static/ci/common.in # python-etcd -docker==5.0.3 +docker==6.1.2 # via # -r requirements/static/ci/common.in # pytest-salt-factories diff --git a/requirements/static/ci/py3.10/lint.txt b/requirements/static/ci/py3.10/lint.txt index dae28399872..ab13ed283e0 100644 --- a/requirements/static/ci/py3.10/lint.txt +++ b/requirements/static/ci/py3.10/lint.txt @@ -411,7 +411,7 @@ dnspython==2.1.0 # via # -r requirements/static/ci/common.in # python-etcd -docker==5.0.0 +docker==6.1.2 # via -r requirements/static/ci/common.in etcd3-py==0.1.6 ; python_version >= "3.6" # via -r requirements/static/ci/common.in @@ -626,6 +626,7 @@ packaging==21.3 # via # -r requirements/base.txt # ansible-core + # docker paramiko==2.10.1 ; sys_platform != "win32" and sys_platform != "darwin" # via # -r requirements/static/ci/common.in @@ -832,6 +833,7 @@ tzlocal==3.0 urllib3==1.26.6 # via # botocore + # docker # kubernetes # python-etcd # requests diff --git a/requirements/static/ci/py3.10/linux.txt b/requirements/static/ci/py3.10/linux.txt index 35207680b2f..347648a43b2 100644 --- a/requirements/static/ci/py3.10/linux.txt +++ b/requirements/static/ci/py3.10/linux.txt @@ -421,7 +421,7 @@ dnspython==1.16.0 # via # -r requirements/static/ci/common.in # python-etcd -docker==5.0.3 +docker==6.1.2 # via # -r requirements/static/ci/common.in # pytest-salt-factories diff --git a/requirements/static/ci/py3.10/pkgtests.txt b/requirements/static/ci/py3.10/pkgtests.txt index 127e64a8857..74afe3de9eb 100644 --- a/requirements/static/ci/py3.10/pkgtests.txt +++ b/requirements/static/ci/py3.10/pkgtests.txt @@ -29,7 +29,7 @@ distro==1.8.0 # via # -r requirements/base.txt # pytest-skip-markers -docker==5.0.3 +docker==6.1.2 # via -r requirements/static/ci/pkgtests.in exceptiongroup==1.1.0 # via pytest diff --git a/requirements/static/ci/py3.10/windows.txt b/requirements/static/ci/py3.10/windows.txt index 218a65c8ec7..e138e141069 100644 --- a/requirements/static/ci/py3.10/windows.txt +++ b/requirements/static/ci/py3.10/windows.txt @@ -93,7 +93,7 @@ dnspython==1.16.0 # python-etcd docker-pycreds==0.4.0 # via docker -docker==2.7.0 +docker==6.1.2 # via -r requirements/static/ci/common.in etcd3-py==0.1.6 ; python_version >= "3.6" # via -r requirements/static/ci/common.in diff --git a/requirements/static/ci/py3.7/cloud.txt b/requirements/static/ci/py3.7/cloud.txt index 17d3dba3318..4664922b37b 100644 --- a/requirements/static/ci/py3.7/cloud.txt +++ b/requirements/static/ci/py3.7/cloud.txt @@ -418,7 +418,7 @@ dnspython==2.1.0 # -r requirements/static/ci/common.in # ciscoconfparse # python-etcd -docker==5.0.2 +docker==6.1.2 # via # -r requirements/static/ci/common.in # pytest-salt-factories @@ -666,6 +666,7 @@ oscrypto==1.2.1 packaging==21.3 # via # -r requirements/base.txt + # docker # pytest paramiko==2.10.1 ; sys_platform != "win32" and sys_platform != "darwin" # via @@ -922,6 +923,7 @@ typing-extensions==3.10.0.0 urllib3==1.26.6 # via # botocore + # docker # kubernetes # python-etcd # requests diff --git a/requirements/static/ci/py3.7/freebsd.txt b/requirements/static/ci/py3.7/freebsd.txt index 9842a5c61e8..6949163b85d 100644 --- a/requirements/static/ci/py3.7/freebsd.txt +++ b/requirements/static/ci/py3.7/freebsd.txt @@ -415,7 +415,7 @@ dnspython==1.16.0 # -r requirements/static/ci/common.in # ciscoconfparse # python-etcd -docker==5.0.3 +docker==6.1.2 # via # -r requirements/static/ci/common.in # pytest-salt-factories diff --git a/requirements/static/ci/py3.7/lint.txt b/requirements/static/ci/py3.7/lint.txt index 9d08fbbd9fd..43d491e7d51 100644 --- a/requirements/static/ci/py3.7/lint.txt +++ b/requirements/static/ci/py3.7/lint.txt @@ -421,7 +421,7 @@ dnspython==2.1.0 # -r requirements/static/ci/common.in # ciscoconfparse # python-etcd -docker==5.0.0 +docker==6.1.2 # via -r requirements/static/ci/common.in etcd3-py==0.1.6 ; python_version >= "3.6" # via -r requirements/static/ci/common.in @@ -666,6 +666,7 @@ packaging==21.3 # via # -r requirements/base.txt # ansible-core + # docker paramiko==2.10.1 ; sys_platform != "win32" and sys_platform != "darwin" # via # -r requirements/static/ci/common.in @@ -899,6 +900,7 @@ tzlocal==3.0 urllib3==1.26.6 # via # botocore + # docker # kubernetes # python-etcd # requests diff --git a/requirements/static/ci/py3.7/linux.txt b/requirements/static/ci/py3.7/linux.txt index 1712ddc501b..dea7be9559b 100644 --- a/requirements/static/ci/py3.7/linux.txt +++ b/requirements/static/ci/py3.7/linux.txt @@ -429,7 +429,7 @@ dnspython==1.16.0 # -r requirements/static/ci/common.in # ciscoconfparse # python-etcd -docker==5.0.3 +docker==6.1.2 # via # -r requirements/static/ci/common.in # pytest-salt-factories diff --git a/requirements/static/ci/py3.7/windows.txt b/requirements/static/ci/py3.7/windows.txt index 427ffbccb61..397ea5433de 100644 --- a/requirements/static/ci/py3.7/windows.txt +++ b/requirements/static/ci/py3.7/windows.txt @@ -99,7 +99,7 @@ dnspython==1.16.0 # python-etcd docker-pycreds==0.4.0 # via docker -docker==2.7.0 +docker==6.1.2 # via -r requirements/static/ci/common.in etcd3-py==0.1.6 ; python_version >= "3.6" # via -r requirements/static/ci/common.in diff --git a/requirements/static/ci/py3.8/cloud.txt b/requirements/static/ci/py3.8/cloud.txt index 719a9e8017f..1b85bb98ce3 100644 --- a/requirements/static/ci/py3.8/cloud.txt +++ b/requirements/static/ci/py3.8/cloud.txt @@ -416,7 +416,7 @@ dnspython==2.1.0 # -r requirements/static/ci/common.in # ciscoconfparse # python-etcd -docker==5.0.2 +docker==6.1.2 # via # -r requirements/static/ci/common.in # pytest-salt-factories @@ -655,6 +655,7 @@ oscrypto==1.2.1 packaging==21.3 # via # -r requirements/base.txt + # docker # pytest paramiko==2.10.1 ; sys_platform != "win32" and sys_platform != "darwin" # via @@ -905,6 +906,7 @@ typing-extensions==3.10.0.2 urllib3==1.26.6 # via # botocore + # docker # kubernetes # python-etcd # requests diff --git a/requirements/static/ci/py3.8/freebsd.txt b/requirements/static/ci/py3.8/freebsd.txt index 72fed05bd52..16f3134a082 100644 --- a/requirements/static/ci/py3.8/freebsd.txt +++ b/requirements/static/ci/py3.8/freebsd.txt @@ -413,7 +413,7 @@ dnspython==1.16.0 # -r requirements/static/ci/common.in # ciscoconfparse # python-etcd -docker==5.0.3 +docker==6.1.2 # via # -r requirements/static/ci/common.in # pytest-salt-factories diff --git a/requirements/static/ci/py3.8/lint.txt b/requirements/static/ci/py3.8/lint.txt index a4c9f88df2c..a2b8c7daa77 100644 --- a/requirements/static/ci/py3.8/lint.txt +++ b/requirements/static/ci/py3.8/lint.txt @@ -419,7 +419,7 @@ dnspython==2.1.0 # -r requirements/static/ci/common.in # ciscoconfparse # python-etcd -docker==5.0.0 +docker==6.1.2 # via -r requirements/static/ci/common.in etcd3-py==0.1.6 ; python_version >= "3.6" # via -r requirements/static/ci/common.in @@ -657,6 +657,7 @@ packaging==21.3 # via # -r requirements/base.txt # ansible-core + # docker paramiko==2.10.1 ; sys_platform != "win32" and sys_platform != "darwin" # via # -r requirements/static/ci/common.in @@ -880,6 +881,7 @@ tzlocal==3.0 urllib3==1.26.6 # via # botocore + # docker # kubernetes # python-etcd # requests diff --git a/requirements/static/ci/py3.8/linux.txt b/requirements/static/ci/py3.8/linux.txt index 813e472060b..61cf86d67fd 100644 --- a/requirements/static/ci/py3.8/linux.txt +++ b/requirements/static/ci/py3.8/linux.txt @@ -427,7 +427,7 @@ dnspython==1.16.0 # -r requirements/static/ci/common.in # ciscoconfparse # python-etcd -docker==5.0.3 +docker==6.1.2 # via # -r requirements/static/ci/common.in # pytest-salt-factories diff --git a/requirements/static/ci/py3.8/windows.txt b/requirements/static/ci/py3.8/windows.txt index a569f4cc57e..06c24389481 100644 --- a/requirements/static/ci/py3.8/windows.txt +++ b/requirements/static/ci/py3.8/windows.txt @@ -95,7 +95,7 @@ dnspython==1.16.0 # python-etcd docker-pycreds==0.4.0 # via docker -docker==2.7.0 +docker==6.1.2 # via -r requirements/static/ci/common.in etcd3-py==0.1.6 ; python_version >= "3.6" # via -r requirements/static/ci/common.in diff --git a/requirements/static/ci/py3.9/cloud.txt b/requirements/static/ci/py3.9/cloud.txt index 96475f41697..e3acbd776bc 100644 --- a/requirements/static/ci/py3.9/cloud.txt +++ b/requirements/static/ci/py3.9/cloud.txt @@ -416,7 +416,7 @@ dnspython==2.1.0 # -r requirements/static/ci/common.in # ciscoconfparse # python-etcd -docker==5.0.2 +docker==6.1.2 # via # -r requirements/static/ci/common.in # pytest-salt-factories @@ -655,6 +655,7 @@ oscrypto==1.2.1 packaging==21.3 # via # -r requirements/base.txt + # docker # pytest paramiko==2.10.1 ; sys_platform != "win32" and sys_platform != "darwin" # via @@ -908,6 +909,7 @@ typing-extensions==3.10.0.2 urllib3==1.26.6 # via # botocore + # docker # kubernetes # python-etcd # requests diff --git a/requirements/static/ci/py3.9/darwin.txt b/requirements/static/ci/py3.9/darwin.txt index b7919e3ad5d..67095c48b73 100644 --- a/requirements/static/ci/py3.9/darwin.txt +++ b/requirements/static/ci/py3.9/darwin.txt @@ -414,7 +414,7 @@ dnspython==1.16.0 # -r requirements/static/ci/common.in # ciscoconfparse # python-etcd -docker==5.0.3 +docker==6.1.2 # via # -r requirements/static/ci/common.in # pytest-salt-factories diff --git a/requirements/static/ci/py3.9/freebsd.txt b/requirements/static/ci/py3.9/freebsd.txt index fa800ba551a..f6086936f9f 100644 --- a/requirements/static/ci/py3.9/freebsd.txt +++ b/requirements/static/ci/py3.9/freebsd.txt @@ -413,7 +413,7 @@ dnspython==1.16.0 # -r requirements/static/ci/common.in # ciscoconfparse # python-etcd -docker==5.0.3 +docker==6.1.2 # via # -r requirements/static/ci/common.in # pytest-salt-factories diff --git a/requirements/static/ci/py3.9/lint.txt b/requirements/static/ci/py3.9/lint.txt index 28cce1cc652..dd1e894850d 100644 --- a/requirements/static/ci/py3.9/lint.txt +++ b/requirements/static/ci/py3.9/lint.txt @@ -417,7 +417,7 @@ dnspython==2.1.0 # -r requirements/static/ci/common.in # ciscoconfparse # python-etcd -docker==5.0.0 +docker==6.1.2 # via -r requirements/static/ci/common.in etcd3-py==0.1.6 ; python_version >= "3.6" # via -r requirements/static/ci/common.in @@ -655,6 +655,7 @@ packaging==21.3 # via # -r requirements/base.txt # ansible-core + # docker paramiko==2.10.1 ; sys_platform != "win32" and sys_platform != "darwin" # via # -r requirements/static/ci/common.in @@ -881,6 +882,7 @@ tzlocal==3.0 urllib3==1.26.6 # via # botocore + # docker # kubernetes # python-etcd # requests diff --git a/requirements/static/ci/py3.9/linux.txt b/requirements/static/ci/py3.9/linux.txt index 2b12495b674..2d02de112f4 100644 --- a/requirements/static/ci/py3.9/linux.txt +++ b/requirements/static/ci/py3.9/linux.txt @@ -429,7 +429,7 @@ dnspython==1.16.0 # -r requirements/static/ci/common.in # ciscoconfparse # python-etcd -docker==5.0.3 +docker==6.1.2 # via # -r requirements/static/ci/common.in # pytest-salt-factories diff --git a/requirements/static/ci/py3.9/windows.txt b/requirements/static/ci/py3.9/windows.txt index ca747c4bd01..d5ad0bfe4c5 100644 --- a/requirements/static/ci/py3.9/windows.txt +++ b/requirements/static/ci/py3.9/windows.txt @@ -95,7 +95,7 @@ dnspython==1.16.0 # python-etcd docker-pycreds==0.4.0 # via docker -docker==2.7.0 +docker==6.1.2 # via -r requirements/static/ci/common.in etcd3-py==0.1.6 ; python_version >= "3.6" # via -r requirements/static/ci/common.in diff --git a/tests/pytests/unit/modules/dockermod/test_module.py b/tests/pytests/unit/modules/dockermod/test_module.py index 8fb78064976..abfd101540d 100644 --- a/tests/pytests/unit/modules/dockermod/test_module.py +++ b/tests/pytests/unit/modules/dockermod/test_module.py @@ -9,14 +9,19 @@ import pytest import salt.loader import salt.modules.dockermod as docker_mod import salt.utils.platform +import salt.utils.versions from salt.exceptions import CommandExecutionError, SaltInvocationError from tests.support.mock import MagicMock, Mock, call, patch log = logging.getLogger(__name__) -pytest.importorskip( +docker = pytest.importorskip( "docker", reason="The python 'docker' package must be installed to run these tests" ) +docker_older_than_1_5_0_skip_marker = pytest.mark.skipif( + salt.utils.versions.Version(docker.__version__) < "1.5.0", + reason="docker module must be installed to run this test or is too old. <=1.5.0", +) @pytest.fixture @@ -354,10 +359,7 @@ def test_update_mine(): mine_mock.assert_called_once() -@pytest.mark.skipif( - docker_mod.docker.version_info < (1, 5, 0), - reason="docker module must be installed to run this test or is too old. >=1.5.0", -) +@docker_older_than_1_5_0_skip_marker def test_list_networks(): """ test list networks. @@ -378,10 +380,7 @@ def test_list_networks(): client.networks.assert_called_once_with(names=["foo"], ids=["01234"]) -@pytest.mark.skipif( - docker_mod.docker.version_info < (1, 5, 0), - reason="docker module must be installed to run this test or is too old. >=1.5.0", -) +@docker_older_than_1_5_0_skip_marker def test_create_network(): """ test create network. @@ -422,10 +421,7 @@ def test_create_network(): ) -@pytest.mark.skipif( - docker_mod.docker.version_info < (1, 5, 0), - reason="docker module must be installed to run this test or is too old. >=1.5.0", -) +@docker_older_than_1_5_0_skip_marker def test_remove_network(): """ test remove network. @@ -444,10 +440,7 @@ def test_remove_network(): client.remove_network.assert_called_once_with("foo") -@pytest.mark.skipif( - docker_mod.docker.version_info < (1, 5, 0), - reason="docker module must be installed to run this test or is too old. >=1.5.0", -) +@docker_older_than_1_5_0_skip_marker def test_inspect_network(): """ test inspect network. @@ -466,10 +459,7 @@ def test_inspect_network(): client.inspect_network.assert_called_once_with("foo") -@pytest.mark.skipif( - docker_mod.docker.version_info < (1, 5, 0), - reason="docker module must be installed to run this test or is too old. >=1.5.0", -) +@docker_older_than_1_5_0_skip_marker def test_connect_container_to_network(): """ test connect_container_to_network @@ -491,10 +481,7 @@ def test_connect_container_to_network(): client.connect_container_to_network.assert_called_once_with("container", "foo") -@pytest.mark.skipif( - docker_mod.docker.version_info < (1, 5, 0), - reason="docker module must be installed to run this test or is too old. >=1.5.0", -) +@docker_older_than_1_5_0_skip_marker def test_disconnect_container_from_network(): """ test disconnect_container_from_network @@ -513,10 +500,7 @@ def test_disconnect_container_from_network(): client.disconnect_container_from_network.assert_called_once_with("container", "foo") -@pytest.mark.skipif( - docker_mod.docker.version_info < (1, 5, 0), - reason="docker module must be installed to run this test or is too old. >=1.5.0", -) +@docker_older_than_1_5_0_skip_marker def test_list_volumes(): """ test list volumes. @@ -539,10 +523,7 @@ def test_list_volumes(): ) -@pytest.mark.skipif( - docker_mod.docker.version_info < (1, 5, 0), - reason="docker module must be installed to run this test or is too old. >=1.5.0", -) +@docker_older_than_1_5_0_skip_marker def test_create_volume(): """ test create volume. @@ -569,10 +550,7 @@ def test_create_volume(): ) -@pytest.mark.skipif( - docker_mod.docker.version_info < (1, 5, 0), - reason="docker module must be installed to run this test or is too old. >=1.5.0", -) +@docker_older_than_1_5_0_skip_marker def test_remove_volume(): """ test remove volume. @@ -591,10 +569,7 @@ def test_remove_volume(): client.remove_volume.assert_called_once_with("foo") -@pytest.mark.skipif( - docker_mod.docker.version_info < (1, 5, 0), - reason="docker module must be installed to run this test or is too old. >=1.5.0", -) +@docker_older_than_1_5_0_skip_marker def test_inspect_volume(): """ test inspect volume. From 88365fb69e725eb6e050208ecafbdf494d56680f Mon Sep 17 00:00:00 2001 From: Pedro Algarvio Date: Sun, 24 Sep 2023 18:35:35 +0100 Subject: [PATCH 008/153] Set `cgroupns` to `host` to fix the libvirt migration tests. This needs a newer version of the python docker package. The breakage was due to updating the docker container used. - https://github.com/saltstack/salt-ci-containers/pull/42 Signed-off-by: Pedro Algarvio --- requirements/static/ci/py3.10/cloud.txt | 2 +- requirements/static/ci/py3.10/darwin.txt | 2 +- requirements/static/ci/py3.10/freebsd.txt | 2 +- requirements/static/ci/py3.10/lint.txt | 2 +- requirements/static/ci/py3.10/linux.txt | 2 +- requirements/static/ci/py3.10/pkgtests.txt | 2 +- requirements/static/ci/py3.10/windows.txt | 2 +- requirements/static/ci/py3.7/cloud.txt | 2 +- requirements/static/ci/py3.7/freebsd.txt | 2 +- requirements/static/ci/py3.7/lint.txt | 2 +- requirements/static/ci/py3.7/linux.txt | 2 +- requirements/static/ci/py3.7/windows.txt | 2 +- requirements/static/ci/py3.8/cloud.txt | 2 +- requirements/static/ci/py3.8/freebsd.txt | 2 +- requirements/static/ci/py3.8/lint.txt | 2 +- requirements/static/ci/py3.8/linux.txt | 2 +- requirements/static/ci/py3.8/windows.txt | 2 +- requirements/static/ci/py3.9/cloud.txt | 2 +- requirements/static/ci/py3.9/darwin.txt | 2 +- requirements/static/ci/py3.9/freebsd.txt | 2 +- requirements/static/ci/py3.9/lint.txt | 2 +- requirements/static/ci/py3.9/linux.txt | 2 +- requirements/static/ci/py3.9/windows.txt | 2 +- tests/filename_map.yml | 3 +++ tests/pytests/integration/modules/test_virt.py | 6 ++++-- 25 files changed, 30 insertions(+), 25 deletions(-) diff --git a/requirements/static/ci/py3.10/cloud.txt b/requirements/static/ci/py3.10/cloud.txt index dd892c8653c..c4ef226b88d 100644 --- a/requirements/static/ci/py3.10/cloud.txt +++ b/requirements/static/ci/py3.10/cloud.txt @@ -410,7 +410,7 @@ dnspython==2.1.0 # via # -r requirements/static/ci/common.in # python-etcd -docker==6.1.2 +docker==6.1.3 # via # -r requirements/static/ci/common.in # pytest-salt-factories diff --git a/requirements/static/ci/py3.10/darwin.txt b/requirements/static/ci/py3.10/darwin.txt index 7bad065c90b..3a9a49938c5 100644 --- a/requirements/static/ci/py3.10/darwin.txt +++ b/requirements/static/ci/py3.10/darwin.txt @@ -408,7 +408,7 @@ dnspython==1.16.0 # via # -r requirements/static/ci/common.in # python-etcd -docker==6.1.2 +docker==6.1.3 # via # -r requirements/static/ci/common.in # pytest-salt-factories diff --git a/requirements/static/ci/py3.10/freebsd.txt b/requirements/static/ci/py3.10/freebsd.txt index e351fa1811b..75f6121878c 100644 --- a/requirements/static/ci/py3.10/freebsd.txt +++ b/requirements/static/ci/py3.10/freebsd.txt @@ -407,7 +407,7 @@ dnspython==1.16.0 # via # -r requirements/static/ci/common.in # python-etcd -docker==6.1.2 +docker==6.1.3 # via # -r requirements/static/ci/common.in # pytest-salt-factories diff --git a/requirements/static/ci/py3.10/lint.txt b/requirements/static/ci/py3.10/lint.txt index ab13ed283e0..22f03617293 100644 --- a/requirements/static/ci/py3.10/lint.txt +++ b/requirements/static/ci/py3.10/lint.txt @@ -411,7 +411,7 @@ dnspython==2.1.0 # via # -r requirements/static/ci/common.in # python-etcd -docker==6.1.2 +docker==6.1.3 # via -r requirements/static/ci/common.in etcd3-py==0.1.6 ; python_version >= "3.6" # via -r requirements/static/ci/common.in diff --git a/requirements/static/ci/py3.10/linux.txt b/requirements/static/ci/py3.10/linux.txt index 347648a43b2..ecec2c66f24 100644 --- a/requirements/static/ci/py3.10/linux.txt +++ b/requirements/static/ci/py3.10/linux.txt @@ -421,7 +421,7 @@ dnspython==1.16.0 # via # -r requirements/static/ci/common.in # python-etcd -docker==6.1.2 +docker==6.1.3 # via # -r requirements/static/ci/common.in # pytest-salt-factories diff --git a/requirements/static/ci/py3.10/pkgtests.txt b/requirements/static/ci/py3.10/pkgtests.txt index 74afe3de9eb..1f1d708aa92 100644 --- a/requirements/static/ci/py3.10/pkgtests.txt +++ b/requirements/static/ci/py3.10/pkgtests.txt @@ -29,7 +29,7 @@ distro==1.8.0 # via # -r requirements/base.txt # pytest-skip-markers -docker==6.1.2 +docker==6.1.3 # via -r requirements/static/ci/pkgtests.in exceptiongroup==1.1.0 # via pytest diff --git a/requirements/static/ci/py3.10/windows.txt b/requirements/static/ci/py3.10/windows.txt index e138e141069..91614b93c2a 100644 --- a/requirements/static/ci/py3.10/windows.txt +++ b/requirements/static/ci/py3.10/windows.txt @@ -93,7 +93,7 @@ dnspython==1.16.0 # python-etcd docker-pycreds==0.4.0 # via docker -docker==6.1.2 +docker==6.1.3 # via -r requirements/static/ci/common.in etcd3-py==0.1.6 ; python_version >= "3.6" # via -r requirements/static/ci/common.in diff --git a/requirements/static/ci/py3.7/cloud.txt b/requirements/static/ci/py3.7/cloud.txt index 4664922b37b..558726fa8fd 100644 --- a/requirements/static/ci/py3.7/cloud.txt +++ b/requirements/static/ci/py3.7/cloud.txt @@ -418,7 +418,7 @@ dnspython==2.1.0 # -r requirements/static/ci/common.in # ciscoconfparse # python-etcd -docker==6.1.2 +docker==6.1.3 # via # -r requirements/static/ci/common.in # pytest-salt-factories diff --git a/requirements/static/ci/py3.7/freebsd.txt b/requirements/static/ci/py3.7/freebsd.txt index 6949163b85d..4453f54105d 100644 --- a/requirements/static/ci/py3.7/freebsd.txt +++ b/requirements/static/ci/py3.7/freebsd.txt @@ -415,7 +415,7 @@ dnspython==1.16.0 # -r requirements/static/ci/common.in # ciscoconfparse # python-etcd -docker==6.1.2 +docker==6.1.3 # via # -r requirements/static/ci/common.in # pytest-salt-factories diff --git a/requirements/static/ci/py3.7/lint.txt b/requirements/static/ci/py3.7/lint.txt index 43d491e7d51..1d58a70696a 100644 --- a/requirements/static/ci/py3.7/lint.txt +++ b/requirements/static/ci/py3.7/lint.txt @@ -421,7 +421,7 @@ dnspython==2.1.0 # -r requirements/static/ci/common.in # ciscoconfparse # python-etcd -docker==6.1.2 +docker==6.1.3 # via -r requirements/static/ci/common.in etcd3-py==0.1.6 ; python_version >= "3.6" # via -r requirements/static/ci/common.in diff --git a/requirements/static/ci/py3.7/linux.txt b/requirements/static/ci/py3.7/linux.txt index dea7be9559b..7a2786873f4 100644 --- a/requirements/static/ci/py3.7/linux.txt +++ b/requirements/static/ci/py3.7/linux.txt @@ -429,7 +429,7 @@ dnspython==1.16.0 # -r requirements/static/ci/common.in # ciscoconfparse # python-etcd -docker==6.1.2 +docker==6.1.3 # via # -r requirements/static/ci/common.in # pytest-salt-factories diff --git a/requirements/static/ci/py3.7/windows.txt b/requirements/static/ci/py3.7/windows.txt index 397ea5433de..2d640ff2ecb 100644 --- a/requirements/static/ci/py3.7/windows.txt +++ b/requirements/static/ci/py3.7/windows.txt @@ -99,7 +99,7 @@ dnspython==1.16.0 # python-etcd docker-pycreds==0.4.0 # via docker -docker==6.1.2 +docker==6.1.3 # via -r requirements/static/ci/common.in etcd3-py==0.1.6 ; python_version >= "3.6" # via -r requirements/static/ci/common.in diff --git a/requirements/static/ci/py3.8/cloud.txt b/requirements/static/ci/py3.8/cloud.txt index 1b85bb98ce3..f787652bf5c 100644 --- a/requirements/static/ci/py3.8/cloud.txt +++ b/requirements/static/ci/py3.8/cloud.txt @@ -416,7 +416,7 @@ dnspython==2.1.0 # -r requirements/static/ci/common.in # ciscoconfparse # python-etcd -docker==6.1.2 +docker==6.1.3 # via # -r requirements/static/ci/common.in # pytest-salt-factories diff --git a/requirements/static/ci/py3.8/freebsd.txt b/requirements/static/ci/py3.8/freebsd.txt index 16f3134a082..576e68fb762 100644 --- a/requirements/static/ci/py3.8/freebsd.txt +++ b/requirements/static/ci/py3.8/freebsd.txt @@ -413,7 +413,7 @@ dnspython==1.16.0 # -r requirements/static/ci/common.in # ciscoconfparse # python-etcd -docker==6.1.2 +docker==6.1.3 # via # -r requirements/static/ci/common.in # pytest-salt-factories diff --git a/requirements/static/ci/py3.8/lint.txt b/requirements/static/ci/py3.8/lint.txt index a2b8c7daa77..2df5c5dc9b9 100644 --- a/requirements/static/ci/py3.8/lint.txt +++ b/requirements/static/ci/py3.8/lint.txt @@ -419,7 +419,7 @@ dnspython==2.1.0 # -r requirements/static/ci/common.in # ciscoconfparse # python-etcd -docker==6.1.2 +docker==6.1.3 # via -r requirements/static/ci/common.in etcd3-py==0.1.6 ; python_version >= "3.6" # via -r requirements/static/ci/common.in diff --git a/requirements/static/ci/py3.8/linux.txt b/requirements/static/ci/py3.8/linux.txt index 61cf86d67fd..2e9eabc7d99 100644 --- a/requirements/static/ci/py3.8/linux.txt +++ b/requirements/static/ci/py3.8/linux.txt @@ -427,7 +427,7 @@ dnspython==1.16.0 # -r requirements/static/ci/common.in # ciscoconfparse # python-etcd -docker==6.1.2 +docker==6.1.3 # via # -r requirements/static/ci/common.in # pytest-salt-factories diff --git a/requirements/static/ci/py3.8/windows.txt b/requirements/static/ci/py3.8/windows.txt index 06c24389481..c3a03a7a4f7 100644 --- a/requirements/static/ci/py3.8/windows.txt +++ b/requirements/static/ci/py3.8/windows.txt @@ -95,7 +95,7 @@ dnspython==1.16.0 # python-etcd docker-pycreds==0.4.0 # via docker -docker==6.1.2 +docker==6.1.3 # via -r requirements/static/ci/common.in etcd3-py==0.1.6 ; python_version >= "3.6" # via -r requirements/static/ci/common.in diff --git a/requirements/static/ci/py3.9/cloud.txt b/requirements/static/ci/py3.9/cloud.txt index e3acbd776bc..46176c6fec1 100644 --- a/requirements/static/ci/py3.9/cloud.txt +++ b/requirements/static/ci/py3.9/cloud.txt @@ -416,7 +416,7 @@ dnspython==2.1.0 # -r requirements/static/ci/common.in # ciscoconfparse # python-etcd -docker==6.1.2 +docker==6.1.3 # via # -r requirements/static/ci/common.in # pytest-salt-factories diff --git a/requirements/static/ci/py3.9/darwin.txt b/requirements/static/ci/py3.9/darwin.txt index 67095c48b73..1cb99e0014a 100644 --- a/requirements/static/ci/py3.9/darwin.txt +++ b/requirements/static/ci/py3.9/darwin.txt @@ -414,7 +414,7 @@ dnspython==1.16.0 # -r requirements/static/ci/common.in # ciscoconfparse # python-etcd -docker==6.1.2 +docker==6.1.3 # via # -r requirements/static/ci/common.in # pytest-salt-factories diff --git a/requirements/static/ci/py3.9/freebsd.txt b/requirements/static/ci/py3.9/freebsd.txt index f6086936f9f..1bd3033806e 100644 --- a/requirements/static/ci/py3.9/freebsd.txt +++ b/requirements/static/ci/py3.9/freebsd.txt @@ -413,7 +413,7 @@ dnspython==1.16.0 # -r requirements/static/ci/common.in # ciscoconfparse # python-etcd -docker==6.1.2 +docker==6.1.3 # via # -r requirements/static/ci/common.in # pytest-salt-factories diff --git a/requirements/static/ci/py3.9/lint.txt b/requirements/static/ci/py3.9/lint.txt index dd1e894850d..995bf0459fd 100644 --- a/requirements/static/ci/py3.9/lint.txt +++ b/requirements/static/ci/py3.9/lint.txt @@ -417,7 +417,7 @@ dnspython==2.1.0 # -r requirements/static/ci/common.in # ciscoconfparse # python-etcd -docker==6.1.2 +docker==6.1.3 # via -r requirements/static/ci/common.in etcd3-py==0.1.6 ; python_version >= "3.6" # via -r requirements/static/ci/common.in diff --git a/requirements/static/ci/py3.9/linux.txt b/requirements/static/ci/py3.9/linux.txt index 2d02de112f4..019a06cc8e6 100644 --- a/requirements/static/ci/py3.9/linux.txt +++ b/requirements/static/ci/py3.9/linux.txt @@ -429,7 +429,7 @@ dnspython==1.16.0 # -r requirements/static/ci/common.in # ciscoconfparse # python-etcd -docker==6.1.2 +docker==6.1.3 # via # -r requirements/static/ci/common.in # pytest-salt-factories diff --git a/requirements/static/ci/py3.9/windows.txt b/requirements/static/ci/py3.9/windows.txt index d5ad0bfe4c5..5f33e8c3821 100644 --- a/requirements/static/ci/py3.9/windows.txt +++ b/requirements/static/ci/py3.9/windows.txt @@ -95,7 +95,7 @@ dnspython==1.16.0 # python-etcd docker-pycreds==0.4.0 # via docker -docker==6.1.2 +docker==6.1.3 # via -r requirements/static/ci/common.in etcd3-py==0.1.6 ; python_version >= "3.6" # via -r requirements/static/ci/common.in diff --git a/tests/filename_map.yml b/tests/filename_map.yml index 6e5da60df43..ded66d32410 100644 --- a/tests/filename_map.yml +++ b/tests/filename_map.yml @@ -323,6 +323,9 @@ salt/(minion\.py|channel/.+|transport/.+): tests/support/mock.py: - unit.test_mock +tests/support/virt.py: + - pytests.integration.modules.test_virt + tests/support/pytest/mysql.py: - pytests.functional.states.test_mysql - pytests.functional.modules.test_mysql diff --git a/tests/pytests/integration/modules/test_virt.py b/tests/pytests/integration/modules/test_virt.py index 57ec239c4e9..571335be719 100644 --- a/tests/pytests/integration/modules/test_virt.py +++ b/tests/pytests/integration/modules/test_virt.py @@ -66,7 +66,8 @@ def virt_minion_0( "extra_hosts": { virt_minion_0_id: "127.0.0.1", virt_minion_1_id: "127.0.0.1", - } + }, + "cgroupns": "host", }, pull_before_start=True, skip_on_pull_failure=True, @@ -103,7 +104,8 @@ def virt_minion_1( "extra_hosts": { virt_minion_0_id: "127.0.0.1", virt_minion_1_id: "127.0.0.1", - } + }, + "cgroupns": "host", }, pull_before_start=True, skip_on_pull_failure=True, From e3cbe1fac59521e9500113498d4445f4ec000483 Mon Sep 17 00:00:00 2001 From: Pedro Algarvio Date: Mon, 25 Sep 2023 11:13:00 +0100 Subject: [PATCH 009/153] Fix pre-commit regarding static requirements compilation Signed-off-by: Pedro Algarvio --- requirements/static/ci/py3.10/darwin.txt | 2 ++ requirements/static/ci/py3.10/freebsd.txt | 2 ++ requirements/static/ci/py3.10/linux.txt | 2 ++ requirements/static/ci/py3.10/pkgtests.txt | 5 ++++- requirements/static/ci/py3.10/windows.txt | 7 +++---- requirements/static/ci/py3.7/freebsd.txt | 2 ++ requirements/static/ci/py3.7/linux.txt | 2 ++ requirements/static/ci/py3.7/windows.txt | 7 +++---- requirements/static/ci/py3.8/freebsd.txt | 2 ++ requirements/static/ci/py3.8/linux.txt | 2 ++ requirements/static/ci/py3.8/windows.txt | 7 +++---- requirements/static/ci/py3.9/darwin.txt | 2 ++ requirements/static/ci/py3.9/freebsd.txt | 2 ++ requirements/static/ci/py3.9/linux.txt | 2 ++ requirements/static/ci/py3.9/windows.txt | 7 +++---- 15 files changed, 36 insertions(+), 17 deletions(-) diff --git a/requirements/static/ci/py3.10/darwin.txt b/requirements/static/ci/py3.10/darwin.txt index 3a9a49938c5..8e307ed41b5 100644 --- a/requirements/static/ci/py3.10/darwin.txt +++ b/requirements/static/ci/py3.10/darwin.txt @@ -626,6 +626,7 @@ oscrypto==1.2.0 packaging==21.3 # via # -r requirements/base.txt + # docker # pytest paramiko==2.10.1 # via @@ -842,6 +843,7 @@ typing-extensions==4.2.0 urllib3==1.26.6 # via # botocore + # docker # kubernetes # python-etcd # requests diff --git a/requirements/static/ci/py3.10/freebsd.txt b/requirements/static/ci/py3.10/freebsd.txt index 75f6121878c..0e2fca9170d 100644 --- a/requirements/static/ci/py3.10/freebsd.txt +++ b/requirements/static/ci/py3.10/freebsd.txt @@ -624,6 +624,7 @@ oscrypto==1.2.0 packaging==21.3 # via # -r requirements/base.txt + # docker # pytest paramiko==2.10.1 ; sys_platform != "win32" and sys_platform != "darwin" # via @@ -843,6 +844,7 @@ typing-extensions==4.2.0 urllib3==1.26.6 # via # botocore + # docker # kubernetes # python-etcd # requests diff --git a/requirements/static/ci/py3.10/linux.txt b/requirements/static/ci/py3.10/linux.txt index ecec2c66f24..68522447eda 100644 --- a/requirements/static/ci/py3.10/linux.txt +++ b/requirements/static/ci/py3.10/linux.txt @@ -637,6 +637,7 @@ packaging==22.0 # via # -r requirements/base.txt # ansible-core + # docker # pytest paramiko==2.10.1 ; sys_platform != "win32" and sys_platform != "darwin" # via @@ -890,6 +891,7 @@ tzlocal==2.1 urllib3==1.26.6 # via # botocore + # docker # kubernetes # python-etcd # requests diff --git a/requirements/static/ci/py3.10/pkgtests.txt b/requirements/static/ci/py3.10/pkgtests.txt index 1f1d708aa92..170a81d2350 100644 --- a/requirements/static/ci/py3.10/pkgtests.txt +++ b/requirements/static/ci/py3.10/pkgtests.txt @@ -79,6 +79,7 @@ msgpack==1.0.4 packaging==23.0 # via # -r requirements/base.txt + # docker # pytest platformdirs==2.6.2 # via virtualenv @@ -145,7 +146,9 @@ typing-extensions==4.4.0 # pytest-shell-utilities # pytest-system-statistics urllib3==1.26.14 - # via requests + # via + # docker + # requests virtualenv==20.17.1 # via pytest-salt-factories websocket-client==1.5.1 diff --git a/requirements/static/ci/py3.10/windows.txt b/requirements/static/ci/py3.10/windows.txt index 91614b93c2a..dae8490c40a 100644 --- a/requirements/static/ci/py3.10/windows.txt +++ b/requirements/static/ci/py3.10/windows.txt @@ -91,8 +91,6 @@ dnspython==1.16.0 # via # -r requirements/static/ci/common.in # python-etcd -docker-pycreds==0.4.0 - # via docker docker==6.1.3 # via -r requirements/static/ci/common.in etcd3-py==0.1.6 ; python_version >= "3.6" @@ -197,6 +195,7 @@ ntlm-auth==1.5.0 packaging==21.3 # via # -r requirements/base.txt + # docker # pytest passlib[bcrypt]==1.7.4 # via -r requirements/static/ci/common.in @@ -309,6 +308,7 @@ pyvmomi==6.7.1.2018.12 pywin32==305 # via # -r requirements/windows.txt + # docker # pytest-skip-markers # wmi pywinrm==0.4.1 @@ -356,8 +356,6 @@ six==1.15.0 # via # cassandra-driver # cheroot - # docker - # docker-pycreds # etcd3-py # genshi # geomet @@ -392,6 +390,7 @@ urllib3==1.26.6 # via # -r requirements/windows.txt # botocore + # docker # kubernetes # python-etcd # requests diff --git a/requirements/static/ci/py3.7/freebsd.txt b/requirements/static/ci/py3.7/freebsd.txt index 4453f54105d..2ef2126e98e 100644 --- a/requirements/static/ci/py3.7/freebsd.txt +++ b/requirements/static/ci/py3.7/freebsd.txt @@ -657,6 +657,7 @@ oscrypto==1.2.0 packaging==21.3 # via # -r requirements/base.txt + # docker # pytest paramiko==2.10.1 ; sys_platform != "win32" and sys_platform != "darwin" # via @@ -899,6 +900,7 @@ typing-extensions==3.10.0.0 urllib3==1.26.6 # via # botocore + # docker # kubernetes # python-etcd # requests diff --git a/requirements/static/ci/py3.7/linux.txt b/requirements/static/ci/py3.7/linux.txt index 7a2786873f4..c3efe9ed85c 100644 --- a/requirements/static/ci/py3.7/linux.txt +++ b/requirements/static/ci/py3.7/linux.txt @@ -670,6 +670,7 @@ packaging==21.3 # via # -r requirements/base.txt # ansible-core + # docker # pytest paramiko==2.10.1 ; sys_platform != "win32" and sys_platform != "darwin" # via @@ -948,6 +949,7 @@ tzlocal==2.1 urllib3==1.26.6 # via # botocore + # docker # kubernetes # python-etcd # requests diff --git a/requirements/static/ci/py3.7/windows.txt b/requirements/static/ci/py3.7/windows.txt index 2d640ff2ecb..781443c7bb7 100644 --- a/requirements/static/ci/py3.7/windows.txt +++ b/requirements/static/ci/py3.7/windows.txt @@ -97,8 +97,6 @@ dnspython==1.16.0 # via # -r requirements/static/ci/common.in # python-etcd -docker-pycreds==0.4.0 - # via docker docker==6.1.3 # via -r requirements/static/ci/common.in etcd3-py==0.1.6 ; python_version >= "3.6" @@ -211,6 +209,7 @@ ntlm-auth==1.5.0 packaging==21.3 # via # -r requirements/base.txt + # docker # pytest passlib[bcrypt]==1.7.4 # via -r requirements/static/ci/common.in @@ -323,6 +322,7 @@ pywin32==305 # via # -r requirements/windows.txt # cherrypy + # docker # pytest-skip-markers # wmi pywinrm==0.4.1 @@ -370,8 +370,6 @@ six==1.15.0 # via # cassandra-driver # cheroot - # docker - # docker-pycreds # etcd3-py # genshi # geomet @@ -412,6 +410,7 @@ urllib3==1.26.6 # via # -r requirements/windows.txt # botocore + # docker # kubernetes # python-etcd # requests diff --git a/requirements/static/ci/py3.8/freebsd.txt b/requirements/static/ci/py3.8/freebsd.txt index 576e68fb762..562047b31c4 100644 --- a/requirements/static/ci/py3.8/freebsd.txt +++ b/requirements/static/ci/py3.8/freebsd.txt @@ -647,6 +647,7 @@ oscrypto==1.2.0 packaging==21.3 # via # -r requirements/base.txt + # docker # pytest paramiko==2.10.1 ; sys_platform != "win32" and sys_platform != "darwin" # via @@ -884,6 +885,7 @@ typing-extensions==4.2.0 urllib3==1.26.6 # via # botocore + # docker # kubernetes # python-etcd # requests diff --git a/requirements/static/ci/py3.8/linux.txt b/requirements/static/ci/py3.8/linux.txt index 2e9eabc7d99..9018d632f8b 100644 --- a/requirements/static/ci/py3.8/linux.txt +++ b/requirements/static/ci/py3.8/linux.txt @@ -660,6 +660,7 @@ packaging==22.0 # via # -r requirements/base.txt # ansible-core + # docker # pytest paramiko==2.10.1 ; sys_platform != "win32" and sys_platform != "darwin" # via @@ -931,6 +932,7 @@ tzlocal==2.1 urllib3==1.26.6 # via # botocore + # docker # kubernetes # python-etcd # requests diff --git a/requirements/static/ci/py3.8/windows.txt b/requirements/static/ci/py3.8/windows.txt index c3a03a7a4f7..77434b13eb7 100644 --- a/requirements/static/ci/py3.8/windows.txt +++ b/requirements/static/ci/py3.8/windows.txt @@ -93,8 +93,6 @@ dnspython==1.16.0 # via # -r requirements/static/ci/common.in # python-etcd -docker-pycreds==0.4.0 - # via docker docker==6.1.3 # via -r requirements/static/ci/common.in etcd3-py==0.1.6 ; python_version >= "3.6" @@ -199,6 +197,7 @@ ntlm-auth==1.5.0 packaging==21.3 # via # -r requirements/base.txt + # docker # pytest passlib[bcrypt]==1.7.4 # via -r requirements/static/ci/common.in @@ -311,6 +310,7 @@ pywin32==305 # via # -r requirements/windows.txt # cherrypy + # docker # pytest-skip-markers # wmi pywinrm==0.4.1 @@ -358,8 +358,6 @@ six==1.15.0 # via # cassandra-driver # cheroot - # docker - # docker-pycreds # etcd3-py # genshi # geomet @@ -395,6 +393,7 @@ urllib3==1.26.6 # via # -r requirements/windows.txt # botocore + # docker # kubernetes # python-etcd # requests diff --git a/requirements/static/ci/py3.9/darwin.txt b/requirements/static/ci/py3.9/darwin.txt index 1cb99e0014a..03a1bb7f2bf 100644 --- a/requirements/static/ci/py3.9/darwin.txt +++ b/requirements/static/ci/py3.9/darwin.txt @@ -649,6 +649,7 @@ oscrypto==1.2.0 packaging==21.3 # via # -r requirements/base.txt + # docker # pytest paramiko==2.10.1 # via @@ -886,6 +887,7 @@ typing-extensions==4.2.0 urllib3==1.26.6 # via # botocore + # docker # kubernetes # python-etcd # requests diff --git a/requirements/static/ci/py3.9/freebsd.txt b/requirements/static/ci/py3.9/freebsd.txt index 1bd3033806e..6a28aa2c768 100644 --- a/requirements/static/ci/py3.9/freebsd.txt +++ b/requirements/static/ci/py3.9/freebsd.txt @@ -647,6 +647,7 @@ oscrypto==1.2.0 packaging==21.3 # via # -r requirements/base.txt + # docker # pytest paramiko==2.10.1 ; sys_platform != "win32" and sys_platform != "darwin" # via @@ -887,6 +888,7 @@ typing-extensions==4.2.0 urllib3==1.26.6 # via # botocore + # docker # kubernetes # python-etcd # requests diff --git a/requirements/static/ci/py3.9/linux.txt b/requirements/static/ci/py3.9/linux.txt index 019a06cc8e6..9cf46345f8f 100644 --- a/requirements/static/ci/py3.9/linux.txt +++ b/requirements/static/ci/py3.9/linux.txt @@ -662,6 +662,7 @@ packaging==22.0 # via # -r requirements/base.txt # ansible-core + # docker # pytest paramiko==2.10.1 ; sys_platform != "win32" and sys_platform != "darwin" # via @@ -936,6 +937,7 @@ tzlocal==2.1 urllib3==1.26.6 # via # botocore + # docker # kubernetes # python-etcd # requests diff --git a/requirements/static/ci/py3.9/windows.txt b/requirements/static/ci/py3.9/windows.txt index 5f33e8c3821..8ad28c6a663 100644 --- a/requirements/static/ci/py3.9/windows.txt +++ b/requirements/static/ci/py3.9/windows.txt @@ -93,8 +93,6 @@ dnspython==1.16.0 # via # -r requirements/static/ci/common.in # python-etcd -docker-pycreds==0.4.0 - # via docker docker==6.1.3 # via -r requirements/static/ci/common.in etcd3-py==0.1.6 ; python_version >= "3.6" @@ -199,6 +197,7 @@ ntlm-auth==1.5.0 packaging==21.3 # via # -r requirements/base.txt + # docker # pytest passlib[bcrypt]==1.7.4 # via -r requirements/static/ci/common.in @@ -312,6 +311,7 @@ pywin32==305 # via # -r requirements/windows.txt # cherrypy + # docker # pytest-skip-markers # wmi pywinrm==0.4.1 @@ -359,8 +359,6 @@ six==1.15.0 # via # cassandra-driver # cheroot - # docker - # docker-pycreds # etcd3-py # genshi # geomet @@ -396,6 +394,7 @@ urllib3==1.26.6 # via # -r requirements/windows.txt # botocore + # docker # kubernetes # python-etcd # requests From 286d55eb5a6e6bf9428405bdf5632b419bdf8444 Mon Sep 17 00:00:00 2001 From: Megan Wilhite Date: Thu, 28 Sep 2023 07:58:09 -0600 Subject: [PATCH 010/153] Add pytest integration pre_flight integration tests for CVE-2023-34049 --- tests/integration/ssh/test_pre_flight.py | 132 -------- .../integration/ssh/test_pre_flight.py | 309 ++++++++++++++++++ 2 files changed, 309 insertions(+), 132 deletions(-) delete mode 100644 tests/integration/ssh/test_pre_flight.py create mode 100644 tests/pytests/integration/ssh/test_pre_flight.py diff --git a/tests/integration/ssh/test_pre_flight.py b/tests/integration/ssh/test_pre_flight.py deleted file mode 100644 index 1598b3d51b5..00000000000 --- a/tests/integration/ssh/test_pre_flight.py +++ /dev/null @@ -1,132 +0,0 @@ -""" -Test for ssh_pre_flight roster option -""" - -import os - -import pytest - -import salt.utils.files -from tests.support.case import SSHCase -from tests.support.runtests import RUNTIME_VARS - - -class SSHPreFlightTest(SSHCase): - """ - Test ssh_pre_flight roster option - """ - - def setUp(self): - super().setUp() - self.roster = os.path.join(RUNTIME_VARS.TMP, "pre_flight_roster") - self.data = { - "ssh_pre_flight": os.path.join(RUNTIME_VARS.TMP, "ssh_pre_flight.sh") - } - self.test_script = os.path.join( - RUNTIME_VARS.TMP, "test-pre-flight-script-worked.txt" - ) - - def _create_roster(self, pre_flight_script_args=None): - data = dict(self.data) - if pre_flight_script_args: - data["ssh_pre_flight_args"] = pre_flight_script_args - - self.custom_roster(self.roster, data) - - with salt.utils.files.fopen(data["ssh_pre_flight"], "w") as fp_: - fp_.write("touch {}".format(self.test_script)) - - @pytest.mark.slow_test - def test_ssh_pre_flight(self): - """ - test ssh when ssh_pre_flight is set - ensure the script runs successfully - """ - self._create_roster() - assert self.run_function("test.ping", roster_file=self.roster) - - assert os.path.exists(self.test_script) - - @pytest.mark.slow_test - def test_ssh_run_pre_flight(self): - """ - test ssh when --pre-flight is passed to salt-ssh - to ensure the script runs successfully - """ - self._create_roster() - # make sure we previously ran a command so the thin dir exists - self.run_function("test.ping", wipe=False) - assert not os.path.exists(self.test_script) - - assert self.run_function( - "test.ping", ssh_opts="--pre-flight", roster_file=self.roster, wipe=False - ) - assert os.path.exists(self.test_script) - - @pytest.mark.slow_test - def test_ssh_run_pre_flight_args(self): - """ - test ssh when --pre-flight is passed to salt-ssh - to ensure the script runs successfully passing some args - """ - self._create_roster(pre_flight_script_args="foobar test") - # make sure we previously ran a command so the thin dir exists - self.run_function("test.ping", wipe=False) - assert not os.path.exists(self.test_script) - - assert self.run_function( - "test.ping", ssh_opts="--pre-flight", roster_file=self.roster, wipe=False - ) - assert os.path.exists(self.test_script) - - @pytest.mark.slow_test - def test_ssh_run_pre_flight_args_prevent_injection(self): - """ - test ssh when --pre-flight is passed to salt-ssh - and evil arguments are used in order to produce shell injection - """ - injected_file = os.path.join(RUNTIME_VARS.TMP, "injection") - self._create_roster( - pre_flight_script_args="foobar; echo injected > {}".format(injected_file) - ) - # make sure we previously ran a command so the thin dir exists - self.run_function("test.ping", wipe=False) - assert not os.path.exists(self.test_script) - assert not os.path.isfile(injected_file) - - assert self.run_function( - "test.ping", ssh_opts="--pre-flight", roster_file=self.roster, wipe=False - ) - - assert not os.path.isfile( - injected_file - ), "File injection suceeded. This shouldn't happend" - - @pytest.mark.slow_test - def test_ssh_run_pre_flight_failure(self): - """ - test ssh_pre_flight when there is a failure - in the script. - """ - self._create_roster() - with salt.utils.files.fopen(self.data["ssh_pre_flight"], "w") as fp_: - fp_.write("exit 2") - - ret = self.run_function( - "test.ping", ssh_opts="--pre-flight", roster_file=self.roster, wipe=False - ) - assert ret["retcode"] == 2 - - def tearDown(self): - """ - make sure to clean up any old ssh directories - """ - files = [ - self.roster, - self.data["ssh_pre_flight"], - self.test_script, - os.path.join(RUNTIME_VARS.TMP, "injection"), - ] - for fp_ in files: - if os.path.exists(fp_): - os.remove(fp_) diff --git a/tests/pytests/integration/ssh/test_pre_flight.py b/tests/pytests/integration/ssh/test_pre_flight.py new file mode 100644 index 00000000000..78b2b751f2b --- /dev/null +++ b/tests/pytests/integration/ssh/test_pre_flight.py @@ -0,0 +1,309 @@ +""" +Test for ssh_pre_flight roster option +""" + +import grp +import os +import pathlib +import pwd +import shutil +import subprocess + +import pytest +import yaml +from saltfactories.utils import random_string + +import salt.utils.files + + +def _custom_roster(roster_file, roster_data): + with salt.utils.files.fopen(roster_file, "r") as fp: + data = salt.utils.yaml.safe_load(fp) + for key, item in roster_data.items(): + data["localhost"][key] = item + with salt.utils.files.fopen(roster_file, "w") as fp: + yaml.safe_dump(data, fp) + + +@pytest.fixture +def _create_roster(salt_ssh_roster_file, tmp_path): + ret = {} + ret["roster"] = salt_ssh_roster_file + ret["data"] = {"ssh_pre_flight": str(tmp_path / "ssh_pre_flight.sh")} + ret["test_script"] = str(tmp_path / "test-pre-flight-script-worked.txt") + ret["thin_dir"] = tmp_path / "thin_dir" + + with salt.utils.files.fopen(salt_ssh_roster_file, "r") as fp: + data = salt.utils.yaml.safe_load(fp) + pre_flight_script = ret["data"]["ssh_pre_flight"] + data["localhost"]["ssh_pre_flight"] = pre_flight_script + data["localhost"]["thin_dir"] = str(ret["thin_dir"]) + with salt.utils.files.fopen(salt_ssh_roster_file, "w") as fp: + yaml.safe_dump(data, fp) + + with salt.utils.files.fopen(pre_flight_script, "w") as fp: + fp.write("touch {}".format(ret["test_script"])) + + yield ret + if ret["thin_dir"].exists(): + shutil.rmtree(ret["thin_dir"]) + + +@pytest.mark.slow_test +def test_ssh_pre_flight(salt_ssh_cli, caplog, _create_roster): + """ + test ssh when ssh_pre_flight is set + ensure the script runs successfully + """ + ret = salt_ssh_cli.run("test.ping") + assert ret.returncode == 0 + + assert pathlib.Path(_create_roster["test_script"]).exists() + + +@pytest.mark.slow_test +def test_ssh_run_pre_flight(salt_ssh_cli, _create_roster): + """ + test ssh when --pre-flight is passed to salt-ssh + to ensure the script runs successfully + """ + # make sure we previously ran a command so the thin dir exists + ret = salt_ssh_cli.run("test.ping") + assert pathlib.Path(_create_roster["test_script"]).exists() + + # Now remeove the script to ensure pre_flight doesn't run + # without --pre-flight + pathlib.Path(_create_roster["test_script"]).unlink() + + assert salt_ssh_cli.run("test.ping").returncode == 0 + assert not pathlib.Path(_create_roster["test_script"]).exists() + + # Now ensure + ret = salt_ssh_cli.run( + "test.ping", + "--pre-flight", + ) + assert ret.returncode == 0 + assert pathlib.Path(_create_roster["test_script"]).exists() + + +@pytest.mark.slow_test +def test_ssh_run_pre_flight_args(salt_ssh_cli, _create_roster): + """ + test ssh when --pre-flight is passed to salt-ssh + to ensure the script runs successfully passing some args + """ + _custom_roster(salt_ssh_cli.roster_file, {"ssh_pre_flight_args": "foobar test"}) + # Create pre_flight script that accepts args + test_script = _create_roster["test_script"] + test_script_1 = pathlib.Path(test_script + "-foobar") + test_script_2 = pathlib.Path(test_script + "-test") + with salt.utils.files.fopen(_create_roster["data"]["ssh_pre_flight"], "w") as fp: + fp.write( + f""" + touch {str(test_script)}-$1 + touch {str(test_script)}-$2 + """ + ) + ret = salt_ssh_cli.run("test.ping") + assert ret.returncode == 0 + assert test_script_1.exists() + assert test_script_2.exists() + pathlib.Path(test_script_1).unlink() + pathlib.Path(test_script_2).unlink() + + ret = salt_ssh_cli.run("test.ping") + assert ret.returncode == 0 + assert not test_script_1.exists() + assert not test_script_2.exists() + + ret = salt_ssh_cli.run( + "test.ping", + "--pre-flight", + ) + assert ret.returncode == 0 + assert test_script_1.exists() + assert test_script_2.exists() + + +@pytest.mark.slow_test +def test_ssh_run_pre_flight_args_prevent_injection( + salt_ssh_cli, _create_roster, tmp_path +): + """ + test ssh when --pre-flight is passed to salt-ssh + and evil arguments are used in order to produce shell injection + """ + injected_file = tmp_path / "injection" + _custom_roster( + salt_ssh_cli.roster_file, + {"ssh_pre_flight_args": f"foobar; echo injected > {str(injected_file)}"}, + ) + # Create pre_flight script that accepts args + test_script = _create_roster["test_script"] + test_script_1 = pathlib.Path(test_script + "-echo") + test_script_2 = pathlib.Path(test_script + "-foobar;") + with salt.utils.files.fopen(_create_roster["data"]["ssh_pre_flight"], "w") as fp: + fp.write( + f""" + touch {str(test_script)}-$1 + touch {str(test_script)}-$2 + """ + ) + + # make sure we previously ran a command so the thin dir exists + ret = salt_ssh_cli.run("test.ping") + assert ret.returncode == 0 + assert test_script_1.exists() + assert test_script_2.exists() + test_script_1.unlink() + test_script_2.unlink() + assert not injected_file.is_file() + + ret = salt_ssh_cli.run( + "test.ping", + "--pre-flight", + ) + assert ret.returncode == 0 + + assert test_script_1.exists() + assert test_script_2.exists() + assert not pathlib.Path( + injected_file + ).is_file(), "File injection suceeded. This shouldn't happend" + + +@pytest.mark.flaky(max_runs=4) +@pytest.mark.slow_test +def test_ssh_run_pre_flight_failure(salt_ssh_cli, _create_roster): + """ + test ssh_pre_flight when there is a failure + in the script. + """ + with salt.utils.files.fopen(_create_roster["data"]["ssh_pre_flight"], "w") as fp_: + fp_.write("exit 2") + + ret = salt_ssh_cli.run( + "test.ping", + "--pre-flight", + ) + assert ret.data["retcode"] == 2 + + +@pytest.fixture +def account(): + username = random_string("test-account-", uppercase=False) + with pytest.helpers.create_account(username=username) as account: + yield account + + +@pytest.mark.slow_test +def test_ssh_pre_flight_script(salt_ssh_cli, caplog, _create_roster, tmp_path, account): + """ + Test to ensure user cannot create and run a script + with the expected pre_flight script path on target. + """ + try: + script = pathlib.Path.home() / "hacked" + tmp_preflight = pathlib.Path("/tmp", "ssh_pre_flight.sh") + tmp_preflight.write_text(f"touch {script}") + os.chown(tmp_preflight, account.info.uid, account.info.gid) + ret = salt_ssh_cli.run("test.ping") + assert not script.is_file() + assert ret.returncode == 0 + assert ret.stdout == '{\n"localhost": true\n}\n' + finally: + for _file in [script, tmp_preflight]: + if _file.is_file(): + _file.unlink() + + +def demote(user_uid, user_gid): + def result(): + # os.setgid does not remove group membership, so we remove them here so they are REALLY non-root + os.setgroups([]) + os.setgid(user_gid) + os.setuid(user_uid) + + return result + + +@pytest.mark.slow_test +def test_ssh_pre_flight_perms(salt_ssh_cli, caplog, _create_roster, account): + """ + Test to ensure standard user cannot run pre flight script + on target when user sets wrong permissions (777) on + ssh_pre_flight script. + """ + try: + script = pathlib.Path("/tmp", "itworked") + preflight = pathlib.Path("/ssh_pre_flight.sh") + preflight.write_text(f"touch {str(script)}") + tmp_preflight = pathlib.Path("/tmp", preflight.name) + + _custom_roster(salt_ssh_cli.roster_file, {"ssh_pre_flight": str(preflight)}) + preflight.chmod(0o0777) + run_script = pathlib.Path("/run_script") + run_script.write_text( + f""" + x=1 + while [ $x -le 200000 ]; do + SCRIPT=`bash {str(tmp_preflight)} 2> /dev/null; echo $?` + if [ ${{SCRIPT}} == 0 ]; then + break + fi + x=$(( $x + 1 )) + done + """ + ) + run_script.chmod(0o0777) + # pylint: disable=W1509 + ret = subprocess.Popen( + ["sh", f"{run_script}"], + preexec_fn=demote(account.info.uid, account.info.gid), + stdout=None, + stderr=None, + stdin=None, + universal_newlines=True, + ) + # pylint: enable=W1509 + ret = salt_ssh_cli.run("test.ping") + assert ret.returncode == 0 + + # Lets make sure a different user other than root + # Didn't run the script + assert os.stat(script).st_uid != account.info.uid + assert script.is_file() + finally: + for _file in [script, preflight, tmp_preflight, run_script]: + if _file.is_file(): + _file.unlink() + + +@pytest.mark.slow_test +def test_ssh_run_pre_flight_target_file_perms(salt_ssh_cli, _create_roster, tmp_path): + """ + test ssh_pre_flight to ensure the target pre flight script + has the correct perms + """ + perms_file = tmp_path / "perms" + with salt.utils.files.fopen(_create_roster["data"]["ssh_pre_flight"], "w") as fp_: + fp_.write( + f""" + SCRIPT_NAME=$0 + stat -L -c "%a %G %U" $SCRIPT_NAME > {perms_file} + """ + ) + + ret = salt_ssh_cli.run( + "test.ping", + "--pre-flight", + ) + assert ret.returncode == 0 + with salt.utils.files.fopen(perms_file) as fp: + data = fp.read() + assert data.split()[0] == "600" + uid = os.getuid() + gid = os.getgid() + assert data.split()[1] == grp.getgrgid(gid).gr_name + assert data.split()[2] == pwd.getpwuid(uid).pw_name From 7a14112f2a16ce70e3c3e1862c92e37af5f2c7a4 Mon Sep 17 00:00:00 2001 From: Megan Wilhite Date: Thu, 28 Sep 2023 07:59:29 -0600 Subject: [PATCH 011/153] Fix CVE-2023-34049 --- changelog/cve-2023-34049.security.md | 2 + salt/client/ssh/__init__.py | 56 +++- tests/pytests/unit/client/ssh/test_single.py | 301 ++++++++++++++++--- tests/pytests/unit/client/ssh/test_ssh.py | 110 +++++++ 4 files changed, 417 insertions(+), 52 deletions(-) create mode 100644 changelog/cve-2023-34049.security.md diff --git a/changelog/cve-2023-34049.security.md b/changelog/cve-2023-34049.security.md new file mode 100644 index 00000000000..6b0ca190a27 --- /dev/null +++ b/changelog/cve-2023-34049.security.md @@ -0,0 +1,2 @@ +Fix CVE-2023-34049 by ensuring we do not use a predictable name for the script and correctly check returncode of scp command. +This only impacts salt-ssh users using the pre-flight option. diff --git a/salt/client/ssh/__init__.py b/salt/client/ssh/__init__.py index 0d9ac9509b6..e9c290e13ff 100644 --- a/salt/client/ssh/__init__.py +++ b/salt/client/ssh/__init__.py @@ -11,9 +11,11 @@ import hashlib import logging import multiprocessing import os +import pathlib import queue import re import shlex +import shutil import subprocess import sys import tarfile @@ -467,7 +469,14 @@ class SSH(MultiprocessingStateMixin): if target.get("passwd", False) or self.opts["ssh_passwd"]: self._key_deploy_run(host, target, False) return ret - if ret[host].get("stderr", "").count("Permission denied"): + stderr = ret[host].get("stderr", "") + # -failed to upload file- is detecting scp errors + # Errors to ignore when Permission denied is in the stderr. For example + # scp can get a permission denied on the target host, but they where + # able to accurate authenticate against the box + ignore_err = ["failed to upload file"] + check_err = [x for x in ignore_err if stderr.count(x)] + if "Permission denied" in stderr and not check_err: target = self.targets[host] # permission denied, attempt to auto deploy ssh key print( @@ -1007,11 +1016,32 @@ class Single: """ Run our pre_flight script before running any ssh commands """ - script = os.path.join(tempfile.gettempdir(), self.ssh_pre_file) + with tempfile.NamedTemporaryFile() as temp: + # ensure we use copyfile to not copy the file attributes + # we want to ensure we use the perms set by the secure + # NamedTemporaryFile + try: + shutil.copyfile(self.ssh_pre_flight, temp.name) + except OSError as err: + return ( + "", + f"Could not copy pre flight script {self.ssh_pre_flight} to temporary path", + 1, + ) + target_script = f".{pathlib.Path(temp.name).name}" + log.trace(f"Copying the pre flight script {self.ssh_pre_file} to target") + stdout, stderr, retcode = self.shell.send(temp.name, target_script) + if retcode != 0: + # We could not copy the script to the target + log.error( + f"Could not copy the pre flight script {self.ssh_pre_file} to target" + ) + return stdout, stderr, retcode - self.shell.send(self.ssh_pre_flight, script) - - return self.execute_script(script, script_args=self.ssh_pre_flight_args) + log.trace(f"Executing the pre flight script {self.ssh_pre_file} on target") + return self.execute_script( + target_script, script_args=self.ssh_pre_flight_args + ) def check_thin_dir(self): """ @@ -1388,18 +1418,20 @@ ARGS = {arguments}\n'''.format( return self.shell.exec_cmd(cmd_str) # Write the shim to a temporary file in the default temp directory - with tempfile.NamedTemporaryFile( - mode="w+b", prefix="shim_", delete=False - ) as shim_tmp_file: + with tempfile.NamedTemporaryFile(mode="w+b", delete=False) as shim_tmp_file: shim_tmp_file.write(salt.utils.stringutils.to_bytes(cmd_str)) # Copy shim to target system, under $HOME/. - target_shim_file = ".{}.{}".format( - binascii.hexlify(os.urandom(6)).decode("ascii"), extension - ) + target_shim_file = f".{pathlib.Path(shim_tmp_file.name).name}" + if self.winrm: target_shim_file = saltwinshell.get_target_shim_file(self, target_shim_file) - self.shell.send(shim_tmp_file.name, target_shim_file, makedirs=True) + stdout, stderr, retcode = self.shell.send( + shim_tmp_file.name, target_shim_file, makedirs=True + ) + if retcode != 0: + log.error(f"Could not copy the shim script to target") + return stdout, stderr, retcode # Remove our shim file try: diff --git a/tests/pytests/unit/client/ssh/test_single.py b/tests/pytests/unit/client/ssh/test_single.py index f97519d5cc2..91c5e7db914 100644 --- a/tests/pytests/unit/client/ssh/test_single.py +++ b/tests/pytests/unit/client/ssh/test_single.py @@ -1,6 +1,5 @@ -import os +import logging import re -import tempfile from textwrap import dedent import pytest @@ -16,6 +15,8 @@ import salt.utils.yaml from salt.client import ssh from tests.support.mock import MagicMock, call, patch +log = logging.getLogger(__name__) + @pytest.fixture def opts(tmp_path): @@ -59,7 +60,7 @@ def test_single_opts(opts, target): fsclient=None, thin=salt.utils.thin.thin_path(opts["cachedir"]), mine=False, - **target + **target, ) assert single.shell._ssh_opts() == "" @@ -87,7 +88,7 @@ def test_run_with_pre_flight(opts, target, tmp_path): fsclient=None, thin=salt.utils.thin.thin_path(opts["cachedir"]), mine=False, - **target + **target, ) cmd_ret = ("Success", "", 0) @@ -122,7 +123,7 @@ def test_run_with_pre_flight_with_args(opts, target, tmp_path): fsclient=None, thin=salt.utils.thin.thin_path(opts["cachedir"]), mine=False, - **target + **target, ) cmd_ret = ("Success", "foobar", 0) @@ -156,7 +157,7 @@ def test_run_with_pre_flight_stderr(opts, target, tmp_path): fsclient=None, thin=salt.utils.thin.thin_path(opts["cachedir"]), mine=False, - **target + **target, ) cmd_ret = ("", "Error running script", 1) @@ -190,7 +191,7 @@ def test_run_with_pre_flight_script_doesnot_exist(opts, target, tmp_path): fsclient=None, thin=salt.utils.thin.thin_path(opts["cachedir"]), mine=False, - **target + **target, ) cmd_ret = ("Success", "", 0) @@ -224,7 +225,7 @@ def test_run_with_pre_flight_thin_dir_exists(opts, target, tmp_path): fsclient=None, thin=salt.utils.thin.thin_path(opts["cachedir"]), mine=False, - **target + **target, ) cmd_ret = ("", "", 0) @@ -242,6 +243,39 @@ def test_run_with_pre_flight_thin_dir_exists(opts, target, tmp_path): assert ret == cmd_ret +def test_run_ssh_pre_flight(opts, target, tmp_path): + """ + test Single.run_ssh_pre_flight function + """ + target["ssh_pre_flight"] = str(tmp_path / "script.sh") + single = ssh.Single( + opts, + opts["argv"], + "localhost", + mods={}, + fsclient=None, + thin=salt.utils.thin.thin_path(opts["cachedir"]), + mine=False, + **target, + ) + + cmd_ret = ("Success", "", 0) + mock_flight = MagicMock(return_value=cmd_ret) + mock_cmd = MagicMock(return_value=cmd_ret) + patch_flight = patch("salt.client.ssh.Single.run_ssh_pre_flight", mock_flight) + patch_cmd = patch("salt.client.ssh.Single.cmd_block", mock_cmd) + patch_exec_cmd = patch( + "salt.client.ssh.shell.Shell.exec_cmd", return_value=("", "", 1) + ) + patch_os = patch("os.path.exists", side_effect=[True]) + + with patch_os, patch_flight, patch_cmd, patch_exec_cmd: + ret = single.run() + mock_cmd.assert_called() + mock_flight.assert_called() + assert ret == cmd_ret + + def test_execute_script(opts, target, tmp_path): """ test Single.execute_script() @@ -255,7 +289,7 @@ def test_execute_script(opts, target, tmp_path): thin=salt.utils.thin.thin_path(opts["cachedir"]), mine=False, winrm=False, - **target + **target, ) exp_ret = ("Success", "", 0) @@ -273,7 +307,7 @@ def test_execute_script(opts, target, tmp_path): ] == mock_cmd.call_args_list -def test_shim_cmd(opts, target): +def test_shim_cmd(opts, target, tmp_path): """ test Single.shim_cmd() """ @@ -287,7 +321,7 @@ def test_shim_cmd(opts, target): mine=False, winrm=False, tty=True, - **target + **target, ) exp_ret = ("Success", "", 0) @@ -295,21 +329,24 @@ def test_shim_cmd(opts, target): patch_cmd = patch("salt.client.ssh.shell.Shell.exec_cmd", mock_cmd) patch_send = patch("salt.client.ssh.shell.Shell.send", return_value=("", "", 0)) patch_rand = patch("os.urandom", return_value=b"5\xd9l\xca\xc2\xff") + tmp_file = tmp_path / "tmp_file" + mock_tmp = MagicMock() + patch_tmp = patch("tempfile.NamedTemporaryFile", mock_tmp) + mock_tmp.return_value.__enter__.return_value.name = tmp_file - with patch_cmd, patch_rand, patch_send: + with patch_cmd, patch_tmp, patch_send: ret = single.shim_cmd(cmd_str="echo test") assert ret == exp_ret assert [ - call("/bin/sh '.35d96ccac2ff.py'"), - call("rm '.35d96ccac2ff.py'"), + call(f"/bin/sh '.{tmp_file.name}'"), + call(f"rm '.{tmp_file.name}'"), ] == mock_cmd.call_args_list -def test_run_ssh_pre_flight(opts, target, tmp_path): +def test_shim_cmd_copy_fails(opts, target, caplog): """ - test Single.run_ssh_pre_flight + test Single.shim_cmd() when copying the file fails """ - target["ssh_pre_flight"] = str(tmp_path / "script.sh") single = ssh.Single( opts, opts["argv"], @@ -320,24 +357,205 @@ def test_run_ssh_pre_flight(opts, target, tmp_path): mine=False, winrm=False, tty=True, - **target + **target, ) - exp_ret = ("Success", "", 0) - mock_cmd = MagicMock(return_value=exp_ret) + ret_cmd = ("Success", "", 0) + mock_cmd = MagicMock(return_value=ret_cmd) patch_cmd = patch("salt.client.ssh.shell.Shell.exec_cmd", mock_cmd) - patch_send = patch("salt.client.ssh.shell.Shell.send", return_value=exp_ret) - exp_tmp = os.path.join( - tempfile.gettempdir(), os.path.basename(target["ssh_pre_flight"]) - ) + ret_send = ("", "General error in file copy", 1) + patch_send = patch("salt.client.ssh.shell.Shell.send", return_value=ret_send) + patch_rand = patch("os.urandom", return_value=b"5\xd9l\xca\xc2\xff") - with patch_cmd, patch_send: + with patch_cmd, patch_rand, patch_send: + ret = single.shim_cmd(cmd_str="echo test") + assert ret == ret_send + assert "Could not copy the shim script to target" in caplog.text + mock_cmd.assert_not_called() + + +def test_run_ssh_pre_flight_no_connect(opts, target, tmp_path, caplog): + """ + test Single.run_ssh_pre_flight when you + cannot connect to the target + """ + pre_flight = tmp_path / "script.sh" + pre_flight.write_text("") + target["ssh_pre_flight"] = str(pre_flight) + single = ssh.Single( + opts, + opts["argv"], + "localhost", + mods={}, + fsclient=None, + thin=salt.utils.thin.thin_path(opts["cachedir"]), + mine=False, + winrm=False, + tty=True, + **target, + ) + mock_exec_cmd = MagicMock(return_value=("", "", 1)) + patch_exec_cmd = patch("salt.client.ssh.shell.Shell.exec_cmd", mock_exec_cmd) + tmp_file = tmp_path / "tmp_file" + mock_tmp = MagicMock() + patch_tmp = patch("tempfile.NamedTemporaryFile", mock_tmp) + mock_tmp.return_value.__enter__.return_value.name = tmp_file + ret_send = ( + "", + "ssh: connect to host 192.168.1.186 port 22: No route to host\nscp: Connection closed\n", + 255, + ) + send_mock = MagicMock(return_value=ret_send) + patch_send = patch("salt.client.ssh.shell.Shell.send", send_mock) + + with caplog.at_level(logging.TRACE): + with patch_send, patch_exec_cmd, patch_tmp: + ret = single.run_ssh_pre_flight() + assert f"Copying the pre flight script {pre_flight.name}" in caplog.text + assert ( + f"Could not copy the pre flight script {pre_flight.name} to target" + in caplog.text + ) + assert ret == ret_send + assert send_mock.call_args_list[0][0][0] == tmp_file + target_script = send_mock.call_args_list[0][0][1] + assert re.search(r".[a-z0-9]+", target_script) + mock_exec_cmd.assert_not_called() + + +def test_run_ssh_pre_flight_permission_denied(opts, target, tmp_path): + """ + test Single.run_ssh_pre_flight when you + cannot copy script to the target due to + a permission denied error + """ + pre_flight = tmp_path / "script.sh" + pre_flight.write_text("") + target["ssh_pre_flight"] = str(pre_flight) + single = ssh.Single( + opts, + opts["argv"], + "localhost", + mods={}, + fsclient=None, + thin=salt.utils.thin.thin_path(opts["cachedir"]), + mine=False, + winrm=False, + tty=True, + **target, + ) + mock_exec_cmd = MagicMock(return_value=("", "", 1)) + patch_exec_cmd = patch("salt.client.ssh.shell.Shell.exec_cmd", mock_exec_cmd) + tmp_file = tmp_path / "tmp_file" + mock_tmp = MagicMock() + patch_tmp = patch("tempfile.NamedTemporaryFile", mock_tmp) + mock_tmp.return_value.__enter__.return_value.name = tmp_file + ret_send = ( + "", + 'scp: dest open "/tmp/preflight.sh": Permission denied\nscp: failed to upload file /etc/salt/preflight.sh to /tmp/preflight.sh\n', + 255, + ) + send_mock = MagicMock(return_value=ret_send) + patch_send = patch("salt.client.ssh.shell.Shell.send", send_mock) + + with patch_send, patch_exec_cmd, patch_tmp: ret = single.run_ssh_pre_flight() - assert ret == exp_ret - assert [ - call("/bin/sh '{}'".format(exp_tmp)), - call("rm '{}'".format(exp_tmp)), - ] == mock_cmd.call_args_list + assert ret == ret_send + assert send_mock.call_args_list[0][0][0] == tmp_file + target_script = send_mock.call_args_list[0][0][1] + assert re.search(r".[a-z0-9]+", target_script) + mock_exec_cmd.assert_not_called() + + +def test_run_ssh_pre_flight_connect(opts, target, tmp_path, caplog): + """ + test Single.run_ssh_pre_flight when you + can connect to the target + """ + pre_flight = tmp_path / "script.sh" + pre_flight.write_text("") + target["ssh_pre_flight"] = str(pre_flight) + single = ssh.Single( + opts, + opts["argv"], + "localhost", + mods={}, + fsclient=None, + thin=salt.utils.thin.thin_path(opts["cachedir"]), + mine=False, + winrm=False, + tty=True, + **target, + ) + ret_exec_cmd = ("", "", 1) + mock_exec_cmd = MagicMock(return_value=ret_exec_cmd) + patch_exec_cmd = patch("salt.client.ssh.shell.Shell.exec_cmd", mock_exec_cmd) + tmp_file = tmp_path / "tmp_file" + mock_tmp = MagicMock() + patch_tmp = patch("tempfile.NamedTemporaryFile", mock_tmp) + mock_tmp.return_value.__enter__.return_value.name = tmp_file + ret_send = ( + "", + "\rroot@192.168.1.187's password: \n\rpreflight.sh 0% 0 0.0KB/s --:-- ETA\rpreflight.sh 100% 20 2.7KB/s 00:00 \n", + 0, + ) + send_mock = MagicMock(return_value=ret_send) + patch_send = patch("salt.client.ssh.shell.Shell.send", send_mock) + + with caplog.at_level(logging.TRACE): + with patch_send, patch_exec_cmd, patch_tmp: + ret = single.run_ssh_pre_flight() + + assert f"Executing the pre flight script {pre_flight.name} on target" in caplog.text + assert ret == ret_exec_cmd + assert send_mock.call_args_list[0][0][0] == tmp_file + target_script = send_mock.call_args_list[0][0][1] + assert re.search(r".[a-z0-9]+", target_script) + mock_exec_cmd.assert_called() + + +def test_run_ssh_pre_flight_shutil_fails(opts, target, tmp_path): + """ + test Single.run_ssh_pre_flight when cannot + copyfile with shutil + """ + pre_flight = tmp_path / "script.sh" + pre_flight.write_text("") + target["ssh_pre_flight"] = str(pre_flight) + single = ssh.Single( + opts, + opts["argv"], + "localhost", + mods={}, + fsclient=None, + thin=salt.utils.thin.thin_path(opts["cachedir"]), + mine=False, + winrm=False, + tty=True, + **target, + ) + ret_exec_cmd = ("", "", 1) + mock_exec_cmd = MagicMock(return_value=ret_exec_cmd) + patch_exec_cmd = patch("salt.client.ssh.shell.Shell.exec_cmd", mock_exec_cmd) + tmp_file = tmp_path / "tmp_file" + mock_tmp = MagicMock() + patch_tmp = patch("tempfile.NamedTemporaryFile", mock_tmp) + mock_tmp.return_value.__enter__.return_value.name = tmp_file + send_mock = MagicMock() + mock_shutil = MagicMock(side_effect=IOError("Permission Denied")) + patch_shutil = patch("shutil.copyfile", mock_shutil) + patch_send = patch("salt.client.ssh.shell.Shell.send", send_mock) + + with patch_send, patch_exec_cmd, patch_tmp, patch_shutil: + ret = single.run_ssh_pre_flight() + + assert ret == ( + "", + f"Could not copy pre flight script {pre_flight} to temporary path", + 1, + ) + mock_exec_cmd.assert_not_called() + send_mock.assert_not_called() @pytest.mark.skip_on_windows(reason="SSH_PY_SHIM not set on windows") @@ -355,7 +573,7 @@ def test_cmd_run_set_path(opts, target): fsclient=None, thin=salt.utils.thin.thin_path(opts["cachedir"]), mine=False, - **target + **target, ) ret = single._cmd_str() @@ -376,7 +594,7 @@ def test_cmd_run_not_set_path(opts, target): fsclient=None, thin=salt.utils.thin.thin_path(opts["cachedir"]), mine=False, - **target + **target, ) ret = single._cmd_str() @@ -395,7 +613,7 @@ def test_cmd_block_python_version_error(opts, target): thin=salt.utils.thin.thin_path(opts["cachedir"]), mine=False, winrm=False, - **target + **target, ) mock_shim = MagicMock( return_value=(("", "ERROR: Unable to locate appropriate python command\n", 10)) @@ -434,7 +652,9 @@ def test_run_with_pre_flight_args(opts, target, test_opts, tmp_path): and script successfully runs """ opts["ssh_run_pre_flight"] = True - target["ssh_pre_flight"] = str(tmp_path / "script.sh") + pre_flight_script = tmp_path / "script.sh" + pre_flight_script.write_text("") + target["ssh_pre_flight"] = str(pre_flight_script) if test_opts[0] is not None: target["ssh_pre_flight_args"] = test_opts[0] @@ -448,7 +668,7 @@ def test_run_with_pre_flight_args(opts, target, test_opts, tmp_path): fsclient=None, thin=salt.utils.thin.thin_path(opts["cachedir"]), mine=False, - **target + **target, ) cmd_ret = ("Success", "", 0) @@ -456,14 +676,15 @@ def test_run_with_pre_flight_args(opts, target, test_opts, tmp_path): mock_exec_cmd = MagicMock(return_value=("", "", 0)) patch_cmd = patch("salt.client.ssh.Single.cmd_block", mock_cmd) patch_exec_cmd = patch("salt.client.ssh.shell.Shell.exec_cmd", mock_exec_cmd) - patch_shell_send = patch("salt.client.ssh.shell.Shell.send", return_value=None) + patch_shell_send = patch( + "salt.client.ssh.shell.Shell.send", return_value=("", "", 0) + ) patch_os = patch("os.path.exists", side_effect=[True]) with patch_os, patch_cmd, patch_exec_cmd, patch_shell_send: - ret = single.run() - assert mock_exec_cmd.mock_calls[0].args[ - 0 - ] == "/bin/sh '/tmp/script.sh'{}".format(expected_args) + single.run() + script_args = mock_exec_cmd.mock_calls[0].args[0] + assert re.search(r"\/bin\/sh '.[a-z0-9]+", script_args) @pytest.mark.slow_test diff --git a/tests/pytests/unit/client/ssh/test_ssh.py b/tests/pytests/unit/client/ssh/test_ssh.py index 2be96ab195e..32944891928 100644 --- a/tests/pytests/unit/client/ssh/test_ssh.py +++ b/tests/pytests/unit/client/ssh/test_ssh.py @@ -339,3 +339,113 @@ def test_extra_filerefs(tmp_path, opts): with patch("salt.roster.get_roster_file", MagicMock(return_value=roster)): ssh_obj = client._prep_ssh(**ssh_opts) assert ssh_obj.opts.get("extra_filerefs", None) == "salt://foobar" + + +def test_key_deploy_permission_denied_scp(tmp_path, opts): + """ + test "key_deploy" function when + permission denied authentication error + when attempting to use scp to copy file + to target + """ + host = "localhost" + passwd = "password" + usr = "ssh-usr" + opts["ssh_user"] = usr + opts["tgt"] = host + + ssh_ret = { + host: { + "stdout": "\rroot@192.168.1.187's password: \n\rroot@192.168.1.187's password: \n\rroot@192.168.1.187's password: \n", + "stderr": "Permission denied, please try again.\nPermission denied, please try again.\nroot@192.168.1.187: Permission denied (publickey,gssapi-keyex,gssapi-with-micimport pudb; pu.dbassword).\nscp: Connection closed\n", + "retcode": 255, + } + } + key_run_ret = { + "localhost": { + "jid": "20230922155652279959", + "return": "test", + "retcode": 0, + "id": "test", + "fun": "cmd.run", + "fun_args": ["echo test"], + } + } + patch_roster_file = patch("salt.roster.get_roster_file", MagicMock(return_value="")) + with patch_roster_file: + client = ssh.SSH(opts) + patch_input = patch("builtins.input", side_effect=["y"]) + patch_getpass = patch("getpass.getpass", return_value=["password"]) + mock_key_run = MagicMock(return_value=key_run_ret) + patch_key_run = patch("salt.client.ssh.SSH._key_deploy_run", mock_key_run) + with patch_input, patch_getpass, patch_key_run: + ret = client.key_deploy(host, ssh_ret) + assert mock_key_run.call_args_list[0][0] == ( + host, + {"passwd": [passwd], "host": host, "user": usr}, + True, + ) + assert ret == key_run_ret + assert mock_key_run.call_count == 1 + + +def test_key_deploy_permission_denied_file_scp(tmp_path, opts): + """ + test "key_deploy" function when permission denied + due to not having access to copy the file to the target + We do not want to deploy the key, because this is not + an authentication to the target error. + """ + host = "localhost" + passwd = "password" + usr = "ssh-usr" + opts["ssh_user"] = usr + opts["tgt"] = host + + mock_key_run = MagicMock(return_value=False) + patch_key_run = patch("salt.client.ssh.SSH._key_deploy_run", mock_key_run) + + ssh_ret = { + "localhost": { + "stdout": "", + "stderr": 'scp: dest open "/tmp/preflight.sh": Permission denied\nscp: failed to upload file /etc/salt/preflight.sh to /tmp/preflight.sh\n', + "retcode": 1, + } + } + patch_roster_file = patch("salt.roster.get_roster_file", MagicMock(return_value="")) + with patch_roster_file: + client = ssh.SSH(opts) + ret = client.key_deploy(host, ssh_ret) + assert ret == ssh_ret + assert mock_key_run.call_count == 0 + + +def test_key_deploy_no_permission_denied(tmp_path, opts): + """ + test "key_deploy" function when no permission denied + is returned + """ + host = "localhost" + passwd = "password" + usr = "ssh-usr" + opts["ssh_user"] = usr + opts["tgt"] = host + + mock_key_run = MagicMock(return_value=False) + patch_key_run = patch("salt.client.ssh.SSH._key_deploy_run", mock_key_run) + ssh_ret = { + "localhost": { + "jid": "20230922161937998385", + "return": "test", + "retcode": 0, + "id": "test", + "fun": "cmd.run", + "fun_args": ["echo test"], + } + } + patch_roster_file = patch("salt.roster.get_roster_file", MagicMock(return_value="")) + with patch_roster_file: + client = ssh.SSH(opts) + ret = client.key_deploy(host, ssh_ret) + assert ret == ssh_ret + assert mock_key_run.call_count == 0 From a543a6b4346181af5bcaf3a9954811146e1da4fe Mon Sep 17 00:00:00 2001 From: Megan Wilhite Date: Thu, 28 Sep 2023 11:19:03 -0600 Subject: [PATCH 012/153] Do not run ssh integration tests on windows --- tests/pytests/integration/ssh/test_pre_flight.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/tests/pytests/integration/ssh/test_pre_flight.py b/tests/pytests/integration/ssh/test_pre_flight.py index 78b2b751f2b..09c65d29430 100644 --- a/tests/pytests/integration/ssh/test_pre_flight.py +++ b/tests/pytests/integration/ssh/test_pre_flight.py @@ -2,10 +2,14 @@ Test for ssh_pre_flight roster option """ -import grp +try: + import grp + import pwd +except ImportError: + # windows stacktraces on import of these modules + pass import os import pathlib -import pwd import shutil import subprocess @@ -15,6 +19,8 @@ from saltfactories.utils import random_string import salt.utils.files +pytestmark = pytest.mark.skip_on_windows(reason="Salt-ssh not available on Windows") + def _custom_roster(roster_file, roster_data): with salt.utils.files.fopen(roster_file, "r") as fp: From 5a323034b4a071c59f30e6275b63e3415ca07a47 Mon Sep 17 00:00:00 2001 From: Pedro Algarvio Date: Fri, 22 Sep 2023 15:42:40 +0100 Subject: [PATCH 013/153] Bump to `cryptography==41.0.4` due to https://github.com/advisories/GHSA-v8gr-m533-ghj9 Signed-off-by: Pedro Algarvio --- changelog/65268.security.md | 1 + requirements/static/ci/py3.10/cloud.txt | 2 +- requirements/static/ci/py3.10/darwin.txt | 2 +- requirements/static/ci/py3.10/freebsd.txt | 2 +- requirements/static/ci/py3.10/lint.txt | 2 +- requirements/static/ci/py3.10/linux.txt | 2 +- requirements/static/ci/py3.10/windows.txt | 2 +- requirements/static/ci/py3.7/cloud.txt | 2 +- requirements/static/ci/py3.7/freebsd.txt | 2 +- requirements/static/ci/py3.7/lint.txt | 2 +- requirements/static/ci/py3.7/linux.txt | 2 +- requirements/static/ci/py3.7/windows.txt | 2 +- requirements/static/ci/py3.8/cloud.txt | 2 +- requirements/static/ci/py3.8/freebsd.txt | 2 +- requirements/static/ci/py3.8/lint.txt | 2 +- requirements/static/ci/py3.8/linux.txt | 2 +- requirements/static/ci/py3.8/windows.txt | 2 +- requirements/static/ci/py3.9/cloud.txt | 2 +- requirements/static/ci/py3.9/darwin.txt | 2 +- requirements/static/ci/py3.9/freebsd.txt | 2 +- requirements/static/ci/py3.9/lint.txt | 2 +- requirements/static/ci/py3.9/linux.txt | 2 +- requirements/static/ci/py3.9/windows.txt | 2 +- requirements/static/pkg/py3.10/darwin.txt | 2 +- requirements/static/pkg/py3.10/freebsd.txt | 2 +- requirements/static/pkg/py3.10/linux.txt | 2 +- requirements/static/pkg/py3.10/windows.txt | 2 +- requirements/static/pkg/py3.7/freebsd.txt | 2 +- requirements/static/pkg/py3.7/linux.txt | 2 +- requirements/static/pkg/py3.7/windows.txt | 2 +- requirements/static/pkg/py3.8/freebsd.txt | 2 +- requirements/static/pkg/py3.8/linux.txt | 2 +- requirements/static/pkg/py3.8/windows.txt | 2 +- requirements/static/pkg/py3.9/darwin.txt | 2 +- requirements/static/pkg/py3.9/freebsd.txt | 2 +- requirements/static/pkg/py3.9/linux.txt | 2 +- requirements/static/pkg/py3.9/windows.txt | 2 +- 37 files changed, 37 insertions(+), 36 deletions(-) create mode 100644 changelog/65268.security.md diff --git a/changelog/65268.security.md b/changelog/65268.security.md new file mode 100644 index 00000000000..15588570ad6 --- /dev/null +++ b/changelog/65268.security.md @@ -0,0 +1 @@ +Bump to `cryptography==41.0.4` due to https://github.com/advisories/GHSA-v8gr-m533-ghj9 diff --git a/requirements/static/ci/py3.10/cloud.txt b/requirements/static/ci/py3.10/cloud.txt index c4ef226b88d..fb54800b023 100644 --- a/requirements/static/ci/py3.10/cloud.txt +++ b/requirements/static/ci/py3.10/cloud.txt @@ -385,7 +385,7 @@ contextvars==2.4 # via -r requirements/base.txt croniter==1.0.15 ; sys_platform != "win32" # via -r requirements/static/ci/common.in -cryptography==41.0.3 +cryptography==41.0.4 # via # -r requirements/static/pkg/linux.in # adal diff --git a/requirements/static/ci/py3.10/darwin.txt b/requirements/static/ci/py3.10/darwin.txt index 8e307ed41b5..1c7c26e85ee 100644 --- a/requirements/static/ci/py3.10/darwin.txt +++ b/requirements/static/ci/py3.10/darwin.txt @@ -386,7 +386,7 @@ contextvars==2.4 # via -r requirements/base.txt croniter==0.3.29 ; sys_platform != "win32" # via -r requirements/static/ci/common.in -cryptography==41.0.3 +cryptography==41.0.4 # via # -r requirements/darwin.txt # adal diff --git a/requirements/static/ci/py3.10/freebsd.txt b/requirements/static/ci/py3.10/freebsd.txt index 0e2fca9170d..1ae7aa78003 100644 --- a/requirements/static/ci/py3.10/freebsd.txt +++ b/requirements/static/ci/py3.10/freebsd.txt @@ -384,7 +384,7 @@ contextvars==2.4 # via -r requirements/base.txt croniter==0.3.29 ; sys_platform != "win32" # via -r requirements/static/ci/common.in -cryptography==41.0.3 +cryptography==41.0.4 # via # -r requirements/static/pkg/freebsd.in # adal diff --git a/requirements/static/ci/py3.10/lint.txt b/requirements/static/ci/py3.10/lint.txt index 22f03617293..831eaa137fc 100644 --- a/requirements/static/ci/py3.10/lint.txt +++ b/requirements/static/ci/py3.10/lint.txt @@ -390,7 +390,7 @@ contextvars==2.4 # via -r requirements/base.txt croniter==1.0.15 ; sys_platform != "win32" # via -r requirements/static/ci/common.in -cryptography==41.0.3 +cryptography==41.0.4 # via # -r requirements/static/pkg/linux.in # adal diff --git a/requirements/static/ci/py3.10/linux.txt b/requirements/static/ci/py3.10/linux.txt index 68522447eda..80c6f0754c1 100644 --- a/requirements/static/ci/py3.10/linux.txt +++ b/requirements/static/ci/py3.10/linux.txt @@ -398,7 +398,7 @@ contextvars==2.4 # via -r requirements/base.txt croniter==0.3.29 ; sys_platform != "win32" # via -r requirements/static/ci/common.in -cryptography==41.0.3 +cryptography==41.0.4 # via # -r requirements/static/pkg/linux.in # adal diff --git a/requirements/static/ci/py3.10/windows.txt b/requirements/static/ci/py3.10/windows.txt index dae8490c40a..4700c5c974a 100644 --- a/requirements/static/ci/py3.10/windows.txt +++ b/requirements/static/ci/py3.10/windows.txt @@ -72,7 +72,7 @@ colorama==0.4.1 # via pytest contextvars==2.4 # via -r requirements/base.txt -cryptography==41.0.3 +cryptography==41.0.4 # via # -r requirements/windows.txt # etcd3-py diff --git a/requirements/static/ci/py3.7/cloud.txt b/requirements/static/ci/py3.7/cloud.txt index 558726fa8fd..a3b845127fa 100644 --- a/requirements/static/ci/py3.7/cloud.txt +++ b/requirements/static/ci/py3.7/cloud.txt @@ -392,7 +392,7 @@ contextvars==2.4 # via -r requirements/base.txt croniter==1.0.15 ; sys_platform != "win32" # via -r requirements/static/ci/common.in -cryptography==41.0.3 +cryptography==41.0.4 # via # -r requirements/static/pkg/linux.in # adal diff --git a/requirements/static/ci/py3.7/freebsd.txt b/requirements/static/ci/py3.7/freebsd.txt index 2ef2126e98e..4bae82d0ebe 100644 --- a/requirements/static/ci/py3.7/freebsd.txt +++ b/requirements/static/ci/py3.7/freebsd.txt @@ -391,7 +391,7 @@ contextvars==2.4 # via -r requirements/base.txt croniter==0.3.29 ; sys_platform != "win32" # via -r requirements/static/ci/common.in -cryptography==41.0.3 +cryptography==41.0.4 # via # -r requirements/static/pkg/freebsd.in # adal diff --git a/requirements/static/ci/py3.7/lint.txt b/requirements/static/ci/py3.7/lint.txt index 1d58a70696a..cedc9793c2a 100644 --- a/requirements/static/ci/py3.7/lint.txt +++ b/requirements/static/ci/py3.7/lint.txt @@ -399,7 +399,7 @@ contextvars==2.4 # via -r requirements/base.txt croniter==1.0.15 ; sys_platform != "win32" # via -r requirements/static/ci/common.in -cryptography==41.0.3 +cryptography==41.0.4 # via # -r requirements/static/pkg/linux.in # adal diff --git a/requirements/static/ci/py3.7/linux.txt b/requirements/static/ci/py3.7/linux.txt index c3efe9ed85c..f74073bc33f 100644 --- a/requirements/static/ci/py3.7/linux.txt +++ b/requirements/static/ci/py3.7/linux.txt @@ -405,7 +405,7 @@ contextvars==2.4 # via -r requirements/base.txt croniter==0.3.29 ; sys_platform != "win32" # via -r requirements/static/ci/common.in -cryptography==41.0.3 +cryptography==41.0.4 # via # -r requirements/static/pkg/linux.in # adal diff --git a/requirements/static/ci/py3.7/windows.txt b/requirements/static/ci/py3.7/windows.txt index 781443c7bb7..583c366631a 100644 --- a/requirements/static/ci/py3.7/windows.txt +++ b/requirements/static/ci/py3.7/windows.txt @@ -78,7 +78,7 @@ colorama==0.4.1 # via pytest contextvars==2.4 # via -r requirements/base.txt -cryptography==41.0.3 +cryptography==41.0.4 # via # -r requirements/windows.txt # etcd3-py diff --git a/requirements/static/ci/py3.8/cloud.txt b/requirements/static/ci/py3.8/cloud.txt index f787652bf5c..39423db6f6f 100644 --- a/requirements/static/ci/py3.8/cloud.txt +++ b/requirements/static/ci/py3.8/cloud.txt @@ -390,7 +390,7 @@ contextvars==2.4 # via -r requirements/base.txt croniter==1.0.15 ; sys_platform != "win32" # via -r requirements/static/ci/common.in -cryptography==41.0.3 +cryptography==41.0.4 # via # -r requirements/static/pkg/linux.in # adal diff --git a/requirements/static/ci/py3.8/freebsd.txt b/requirements/static/ci/py3.8/freebsd.txt index 562047b31c4..45df7de7036 100644 --- a/requirements/static/ci/py3.8/freebsd.txt +++ b/requirements/static/ci/py3.8/freebsd.txt @@ -389,7 +389,7 @@ contextvars==2.4 # via -r requirements/base.txt croniter==0.3.29 ; sys_platform != "win32" # via -r requirements/static/ci/common.in -cryptography==41.0.3 +cryptography==41.0.4 # via # -r requirements/static/pkg/freebsd.in # adal diff --git a/requirements/static/ci/py3.8/lint.txt b/requirements/static/ci/py3.8/lint.txt index 2df5c5dc9b9..5d4d151196e 100644 --- a/requirements/static/ci/py3.8/lint.txt +++ b/requirements/static/ci/py3.8/lint.txt @@ -397,7 +397,7 @@ contextvars==2.4 # via -r requirements/base.txt croniter==1.0.15 ; sys_platform != "win32" # via -r requirements/static/ci/common.in -cryptography==41.0.3 +cryptography==41.0.4 # via # -r requirements/static/pkg/linux.in # adal diff --git a/requirements/static/ci/py3.8/linux.txt b/requirements/static/ci/py3.8/linux.txt index 9018d632f8b..24af3d4093b 100644 --- a/requirements/static/ci/py3.8/linux.txt +++ b/requirements/static/ci/py3.8/linux.txt @@ -403,7 +403,7 @@ contextvars==2.4 # via -r requirements/base.txt croniter==0.3.29 ; sys_platform != "win32" # via -r requirements/static/ci/common.in -cryptography==41.0.3 +cryptography==41.0.4 # via # -r requirements/static/pkg/linux.in # adal diff --git a/requirements/static/ci/py3.8/windows.txt b/requirements/static/ci/py3.8/windows.txt index 77434b13eb7..0cea1d0b0c3 100644 --- a/requirements/static/ci/py3.8/windows.txt +++ b/requirements/static/ci/py3.8/windows.txt @@ -74,7 +74,7 @@ colorama==0.4.1 # via pytest contextvars==2.4 # via -r requirements/base.txt -cryptography==41.0.3 +cryptography==41.0.4 # via # -r requirements/windows.txt # etcd3-py diff --git a/requirements/static/ci/py3.9/cloud.txt b/requirements/static/ci/py3.9/cloud.txt index 46176c6fec1..535bc8da84d 100644 --- a/requirements/static/ci/py3.9/cloud.txt +++ b/requirements/static/ci/py3.9/cloud.txt @@ -390,7 +390,7 @@ contextvars==2.4 # via -r requirements/base.txt croniter==1.0.15 ; sys_platform != "win32" # via -r requirements/static/ci/common.in -cryptography==41.0.3 +cryptography==41.0.4 # via # -r requirements/static/pkg/linux.in # adal diff --git a/requirements/static/ci/py3.9/darwin.txt b/requirements/static/ci/py3.9/darwin.txt index 03a1bb7f2bf..3215cec66b3 100644 --- a/requirements/static/ci/py3.9/darwin.txt +++ b/requirements/static/ci/py3.9/darwin.txt @@ -391,7 +391,7 @@ contextvars==2.4 # via -r requirements/base.txt croniter==0.3.29 ; sys_platform != "win32" # via -r requirements/static/ci/common.in -cryptography==41.0.3 +cryptography==41.0.4 # via # -r requirements/darwin.txt # adal diff --git a/requirements/static/ci/py3.9/freebsd.txt b/requirements/static/ci/py3.9/freebsd.txt index 6a28aa2c768..8b3d1a2181f 100644 --- a/requirements/static/ci/py3.9/freebsd.txt +++ b/requirements/static/ci/py3.9/freebsd.txt @@ -389,7 +389,7 @@ contextvars==2.4 # via -r requirements/base.txt croniter==0.3.29 ; sys_platform != "win32" # via -r requirements/static/ci/common.in -cryptography==41.0.3 +cryptography==41.0.4 # via # -r requirements/static/pkg/freebsd.in # adal diff --git a/requirements/static/ci/py3.9/lint.txt b/requirements/static/ci/py3.9/lint.txt index 995bf0459fd..d8921f45e36 100644 --- a/requirements/static/ci/py3.9/lint.txt +++ b/requirements/static/ci/py3.9/lint.txt @@ -395,7 +395,7 @@ contextvars==2.4 # via -r requirements/base.txt croniter==1.0.15 ; sys_platform != "win32" # via -r requirements/static/ci/common.in -cryptography==41.0.3 +cryptography==41.0.4 # via # -r requirements/static/pkg/linux.in # adal diff --git a/requirements/static/ci/py3.9/linux.txt b/requirements/static/ci/py3.9/linux.txt index 9cf46345f8f..fa10facc612 100644 --- a/requirements/static/ci/py3.9/linux.txt +++ b/requirements/static/ci/py3.9/linux.txt @@ -405,7 +405,7 @@ contextvars==2.4 # via -r requirements/base.txt croniter==0.3.29 ; sys_platform != "win32" # via -r requirements/static/ci/common.in -cryptography==41.0.3 +cryptography==41.0.4 # via # -r requirements/static/pkg/linux.in # adal diff --git a/requirements/static/ci/py3.9/windows.txt b/requirements/static/ci/py3.9/windows.txt index 8ad28c6a663..04af86b03f2 100644 --- a/requirements/static/ci/py3.9/windows.txt +++ b/requirements/static/ci/py3.9/windows.txt @@ -74,7 +74,7 @@ colorama==0.4.1 # via pytest contextvars==2.4 # via -r requirements/base.txt -cryptography==41.0.3 +cryptography==41.0.4 # via # -r requirements/windows.txt # etcd3-py diff --git a/requirements/static/pkg/py3.10/darwin.txt b/requirements/static/pkg/py3.10/darwin.txt index 29ffba3c654..b9aaea3f42e 100644 --- a/requirements/static/pkg/py3.10/darwin.txt +++ b/requirements/static/pkg/py3.10/darwin.txt @@ -18,7 +18,7 @@ cherrypy==18.6.1 # via -r requirements/darwin.txt contextvars==2.4 # via -r requirements/base.txt -cryptography==41.0.3 +cryptography==41.0.4 # via # -r requirements/darwin.txt # pyopenssl diff --git a/requirements/static/pkg/py3.10/freebsd.txt b/requirements/static/pkg/py3.10/freebsd.txt index 5823a037e23..c874a498b9f 100644 --- a/requirements/static/pkg/py3.10/freebsd.txt +++ b/requirements/static/pkg/py3.10/freebsd.txt @@ -16,7 +16,7 @@ cherrypy==18.6.1 # via -r requirements/static/pkg/freebsd.in contextvars==2.4 # via -r requirements/base.txt -cryptography==41.0.3 +cryptography==41.0.4 # via # -r requirements/static/pkg/freebsd.in # pyopenssl diff --git a/requirements/static/pkg/py3.10/linux.txt b/requirements/static/pkg/py3.10/linux.txt index c39dcc61e0e..576625229ed 100644 --- a/requirements/static/pkg/py3.10/linux.txt +++ b/requirements/static/pkg/py3.10/linux.txt @@ -16,7 +16,7 @@ cherrypy==18.6.1 # via -r requirements/static/pkg/linux.in contextvars==2.4 # via -r requirements/base.txt -cryptography==41.0.3 +cryptography==41.0.4 # via # -r requirements/static/pkg/linux.in # pyopenssl diff --git a/requirements/static/pkg/py3.10/windows.txt b/requirements/static/pkg/py3.10/windows.txt index cb8689efc64..76e17f94456 100644 --- a/requirements/static/pkg/py3.10/windows.txt +++ b/requirements/static/pkg/py3.10/windows.txt @@ -23,7 +23,7 @@ clr-loader==0.2.4 # via pythonnet contextvars==2.4 # via -r requirements/base.txt -cryptography==41.0.3 +cryptography==41.0.4 # via # -r requirements/windows.txt # pyopenssl diff --git a/requirements/static/pkg/py3.7/freebsd.txt b/requirements/static/pkg/py3.7/freebsd.txt index 63050b277cc..392d78aab83 100644 --- a/requirements/static/pkg/py3.7/freebsd.txt +++ b/requirements/static/pkg/py3.7/freebsd.txt @@ -16,7 +16,7 @@ cherrypy==18.6.1 # via -r requirements/static/pkg/freebsd.in contextvars==2.4 # via -r requirements/base.txt -cryptography==41.0.3 +cryptography==41.0.4 # via # -r requirements/static/pkg/freebsd.in # pyopenssl diff --git a/requirements/static/pkg/py3.7/linux.txt b/requirements/static/pkg/py3.7/linux.txt index 218de2ed965..476f570aea0 100644 --- a/requirements/static/pkg/py3.7/linux.txt +++ b/requirements/static/pkg/py3.7/linux.txt @@ -16,7 +16,7 @@ cherrypy==18.6.1 # via -r requirements/static/pkg/linux.in contextvars==2.4 # via -r requirements/base.txt -cryptography==41.0.3 +cryptography==41.0.4 # via # -r requirements/static/pkg/linux.in # pyopenssl diff --git a/requirements/static/pkg/py3.7/windows.txt b/requirements/static/pkg/py3.7/windows.txt index ebe7e57c8aa..ab4e9493f44 100644 --- a/requirements/static/pkg/py3.7/windows.txt +++ b/requirements/static/pkg/py3.7/windows.txt @@ -23,7 +23,7 @@ clr-loader==0.2.4 # via pythonnet contextvars==2.4 # via -r requirements/base.txt -cryptography==41.0.3 +cryptography==41.0.4 # via # -r requirements/windows.txt # pyopenssl diff --git a/requirements/static/pkg/py3.8/freebsd.txt b/requirements/static/pkg/py3.8/freebsd.txt index 45aba1e9a87..725e7580c70 100644 --- a/requirements/static/pkg/py3.8/freebsd.txt +++ b/requirements/static/pkg/py3.8/freebsd.txt @@ -16,7 +16,7 @@ cherrypy==18.6.1 # via -r requirements/static/pkg/freebsd.in contextvars==2.4 # via -r requirements/base.txt -cryptography==41.0.3 +cryptography==41.0.4 # via # -r requirements/static/pkg/freebsd.in # pyopenssl diff --git a/requirements/static/pkg/py3.8/linux.txt b/requirements/static/pkg/py3.8/linux.txt index 2c89423d7d5..e2bcef47b55 100644 --- a/requirements/static/pkg/py3.8/linux.txt +++ b/requirements/static/pkg/py3.8/linux.txt @@ -16,7 +16,7 @@ cherrypy==18.6.1 # via -r requirements/static/pkg/linux.in contextvars==2.4 # via -r requirements/base.txt -cryptography==41.0.3 +cryptography==41.0.4 # via # -r requirements/static/pkg/linux.in # pyopenssl diff --git a/requirements/static/pkg/py3.8/windows.txt b/requirements/static/pkg/py3.8/windows.txt index 22bfc68ae51..a23b283ba9f 100644 --- a/requirements/static/pkg/py3.8/windows.txt +++ b/requirements/static/pkg/py3.8/windows.txt @@ -23,7 +23,7 @@ clr-loader==0.2.4 # via pythonnet contextvars==2.4 # via -r requirements/base.txt -cryptography==41.0.3 +cryptography==41.0.4 # via # -r requirements/windows.txt # pyopenssl diff --git a/requirements/static/pkg/py3.9/darwin.txt b/requirements/static/pkg/py3.9/darwin.txt index e81cc47fdc3..4239f389687 100644 --- a/requirements/static/pkg/py3.9/darwin.txt +++ b/requirements/static/pkg/py3.9/darwin.txt @@ -18,7 +18,7 @@ cherrypy==18.6.1 # via -r requirements/darwin.txt contextvars==2.4 # via -r requirements/base.txt -cryptography==41.0.3 +cryptography==41.0.4 # via # -r requirements/darwin.txt # pyopenssl diff --git a/requirements/static/pkg/py3.9/freebsd.txt b/requirements/static/pkg/py3.9/freebsd.txt index 6c52150bc8f..6f53c93dc14 100644 --- a/requirements/static/pkg/py3.9/freebsd.txt +++ b/requirements/static/pkg/py3.9/freebsd.txt @@ -16,7 +16,7 @@ cherrypy==18.6.1 # via -r requirements/static/pkg/freebsd.in contextvars==2.4 # via -r requirements/base.txt -cryptography==41.0.3 +cryptography==41.0.4 # via # -r requirements/static/pkg/freebsd.in # pyopenssl diff --git a/requirements/static/pkg/py3.9/linux.txt b/requirements/static/pkg/py3.9/linux.txt index ec77b1bd49e..314e4b7c6cd 100644 --- a/requirements/static/pkg/py3.9/linux.txt +++ b/requirements/static/pkg/py3.9/linux.txt @@ -16,7 +16,7 @@ cherrypy==18.6.1 # via -r requirements/static/pkg/linux.in contextvars==2.4 # via -r requirements/base.txt -cryptography==41.0.3 +cryptography==41.0.4 # via # -r requirements/static/pkg/linux.in # pyopenssl diff --git a/requirements/static/pkg/py3.9/windows.txt b/requirements/static/pkg/py3.9/windows.txt index 60a28ce2e2a..6953886102a 100644 --- a/requirements/static/pkg/py3.9/windows.txt +++ b/requirements/static/pkg/py3.9/windows.txt @@ -23,7 +23,7 @@ clr-loader==0.2.4 # via pythonnet contextvars==2.4 # via -r requirements/base.txt -cryptography==41.0.3 +cryptography==41.0.4 # via # -r requirements/windows.txt # pyopenssl From 9cf8048421ef253fb0fab5246089ad401567b2cc Mon Sep 17 00:00:00 2001 From: Pedro Algarvio Date: Mon, 11 Sep 2023 09:40:35 +0100 Subject: [PATCH 014/153] The 3006.x branch is Python >= 3.7 already. Remove unnecessary `python_version` markers. Signed-off-by: Pedro Algarvio --- requirements/darwin.txt | 3 +-- requirements/pytest.txt | 3 +-- requirements/static/ci/common.in | 12 +++++------- requirements/static/ci/darwin.in | 2 +- requirements/static/ci/freebsd.in | 2 +- requirements/static/ci/linux.in | 6 ++---- requirements/static/ci/pkgtests-windows.in | 3 +-- requirements/static/ci/py3.10/cloud.txt | 10 +++++----- requirements/static/ci/py3.10/darwin.txt | 12 ++++++------ requirements/static/ci/py3.10/freebsd.txt | 12 ++++++------ requirements/static/ci/py3.10/lint.txt | 12 ++++++------ requirements/static/ci/py3.10/linux.txt | 14 +++++++------- .../static/ci/py3.10/pkgtests-windows.txt | 2 +- requirements/static/ci/py3.10/windows.txt | 12 ++++++------ requirements/static/ci/py3.7/cloud.txt | 12 ++++++------ requirements/static/ci/py3.7/freebsd.txt | 14 +++++++------- requirements/static/ci/py3.7/lint.txt | 14 +++++++------- requirements/static/ci/py3.7/linux.txt | 16 ++++++++-------- requirements/static/ci/py3.7/windows.txt | 12 ++++++------ requirements/static/ci/py3.8/cloud.txt | 12 ++++++------ requirements/static/ci/py3.8/freebsd.txt | 14 +++++++------- requirements/static/ci/py3.8/lint.txt | 14 +++++++------- requirements/static/ci/py3.8/linux.txt | 16 ++++++++-------- requirements/static/ci/py3.8/windows.txt | 12 ++++++------ requirements/static/ci/py3.9/cloud.txt | 12 ++++++------ requirements/static/ci/py3.9/darwin.txt | 14 +++++++------- requirements/static/ci/py3.9/freebsd.txt | 14 +++++++------- requirements/static/ci/py3.9/lint.txt | 14 +++++++------- requirements/static/ci/py3.9/linux.txt | 16 ++++++++-------- requirements/static/ci/py3.9/windows.txt | 12 ++++++------ requirements/static/ci/windows.in | 2 +- requirements/static/pkg/freebsd.in | 1 - requirements/static/pkg/linux.in | 1 - requirements/static/pkg/py3.10/darwin.txt | 2 +- requirements/static/pkg/py3.10/windows.txt | 2 +- requirements/static/pkg/py3.7/windows.txt | 2 +- requirements/static/pkg/py3.8/windows.txt | 2 +- requirements/static/pkg/py3.9/darwin.txt | 2 +- requirements/static/pkg/py3.9/windows.txt | 2 +- requirements/windows.txt | 3 +-- 40 files changed, 166 insertions(+), 176 deletions(-) diff --git a/requirements/darwin.txt b/requirements/darwin.txt index 2b0106ba9d1..59aa84bc06e 100644 --- a/requirements/darwin.txt +++ b/requirements/darwin.txt @@ -3,10 +3,9 @@ -r zeromq.txt apache-libcloud>=2.4.0 -backports.ssl_match_hostname>=3.7.0.1; python_version < '3.7' cherrypy>=17.4.1 cryptography>=41.0.3 -gitpython>=3.1.30; python_version >= '3.7' +gitpython>=3.1.30 idna>=2.8 linode-python>=1.1.1 pyasn1>=0.4.8 diff --git a/requirements/pytest.txt b/requirements/pytest.txt index 5b67583a3d7..5940ca1f2c7 100644 --- a/requirements/pytest.txt +++ b/requirements/pytest.txt @@ -1,7 +1,6 @@ mock >= 3.0.0 # PyTest -pytest >= 7.0.1; python_version <= "3.6" -pytest >= 7.2.0; python_version > "3.6" +pytest >= 7.2.0 pytest-salt-factories >= 1.0.0rc21; sys_platform == 'win32' pytest-salt-factories[docker] >= 1.0.0rc21; sys_platform != 'win32' pytest-tempdir >= 2019.10.12 diff --git a/requirements/static/ci/common.in b/requirements/static/ci/common.in index 4e55fb95f10..ac54d8ee9e7 100644 --- a/requirements/static/ci/common.in +++ b/requirements/static/ci/common.in @@ -3,8 +3,7 @@ # to a particular platform, please add it to the corresponding `.in` file in this directory. azure==4.0.0; sys_platform != 'win32' apache-libcloud>=1.5.0; sys_platform != 'win32' -boto3>=1.16.0,<1.17.0; python_version < '3.6' -boto3>=1.17.67; python_version >= '3.6' +boto3>=1.17.67 boto>=2.46.0 cassandra-driver>=2.0 certifi>=2022.12.07 @@ -14,8 +13,8 @@ clustershell croniter>=0.3.0,!=0.3.22"; sys_platform != 'win32' dnspython docker -etcd3-py==0.1.6 ; python_version >= '3.6' -gitpython>=3.1.30; python_version >= '3.7' +etcd3-py==0.1.6 +gitpython>=3.1.30 jmespath jsonschema junos-eznc; sys_platform != 'win32' and python_version <= '3.10' @@ -24,10 +23,9 @@ kazoo; sys_platform != 'win32' and sys_platform != 'darwin' keyring==5.7.1 kubernetes<4.0 libnacl>=1.7.1; sys_platform != 'win32' and sys_platform != 'darwin' -moto>=1.3.14 ; python_version <= '3.5' -moto>=2.0.0 ; python_version >= '3.6' +moto>=2.0.0 # Napalm pulls in pyeapi which does not work on Py3.10 -napalm; sys_platform != 'win32' and python_version > '3.6' and python_version < '3.10' +napalm; sys_platform != 'win32' and python_version < '3.10' paramiko>=2.10.1; sys_platform != 'win32' and sys_platform != 'darwin' passlib[bcrypt]>=1.7.4 pynacl>=1.5.0 diff --git a/requirements/static/ci/darwin.in b/requirements/static/ci/darwin.in index d7b8f010e0f..9ab7e15587a 100644 --- a/requirements/static/ci/darwin.in +++ b/requirements/static/ci/darwin.in @@ -3,7 +3,7 @@ # pylxd(or likely ws4py) will cause the test suite to hang at the finish line under runtests.py # pylxd>=2.2.5 yamlordereddictloader -pygit2>=1.2.0; python_version >= '3.7' +pygit2>=1.2.0 yamllint mercurial hglib diff --git a/requirements/static/ci/freebsd.in b/requirements/static/ci/freebsd.in index 20f88c8724a..00f34fddee4 100644 --- a/requirements/static/ci/freebsd.in +++ b/requirements/static/ci/freebsd.in @@ -1,5 +1,5 @@ # FreeBSD static CI requirements -pygit2==1.8.0; python_version >= '3.7' +pygit2==1.8.0 yamllint mercurial hglib diff --git a/requirements/static/ci/linux.in b/requirements/static/ci/linux.in index c05c78de1e5..a76d02ccc5c 100644 --- a/requirements/static/ci/linux.in +++ b/requirements/static/ci/linux.in @@ -3,13 +3,11 @@ pyiface pygit2<1.1.0; python_version <= '3.8' pygit2>=1.4.0; python_version > '3.8' pygit2==1.9.1; python_version >= '3.10' -pymysql==0.9.3; python_version <= '3.5' -pymysql>=1.0.2; python_version > '3.5' +pymysql>=1.0.2 ansible>=4.4.0; python_version < '3.9' ansible>=7.0.0; python_version >= '3.9' twilio -python-telegram-bot==12.8; python_version <= '3.5' -python-telegram-bot>=13.7; python_version > '3.5' +python-telegram-bot>=13.7 yamllint mercurial hglib diff --git a/requirements/static/ci/pkgtests-windows.in b/requirements/static/ci/pkgtests-windows.in index f34edda6f04..53cdcf3e5fc 100644 --- a/requirements/static/ci/pkgtests-windows.in +++ b/requirements/static/ci/pkgtests-windows.in @@ -1,5 +1,4 @@ cherrypy pytest-salt-factories==1.0.0rc17 -pythonnet==3.0.1; python_version >= '3.7' -pythonnet==2.5.2; python_version < '3.7' +pythonnet==3.0.1 wmi==1.5.1; sys_platform == 'win32' diff --git a/requirements/static/ci/py3.10/cloud.txt b/requirements/static/ci/py3.10/cloud.txt index fb54800b023..9f233fa5bc8 100644 --- a/requirements/static/ci/py3.10/cloud.txt +++ b/requirements/static/ci/py3.10/cloud.txt @@ -335,7 +335,7 @@ bcrypt==3.2.0 # via # paramiko # passlib -boto3==1.21.46 ; python_version >= "3.6" +boto3==1.21.46 # via # -r requirements/static/ci/common.in # moto @@ -414,7 +414,7 @@ docker==6.1.3 # via # -r requirements/static/ci/common.in # pytest-salt-factories -etcd3-py==0.1.6 ; python_version >= "3.6" +etcd3-py==0.1.6 # via -r requirements/static/ci/common.in exceptiongroup==1.0.4 # via pytest @@ -432,7 +432,7 @@ geomet==0.2.1.post1 # via cassandra-driver gitdb==4.0.7 # via gitpython -gitpython==3.1.32 ; python_version >= "3.7" +gitpython==3.1.32 # via -r requirements/static/ci/common.in google-auth==2.1.0 # via kubernetes @@ -510,7 +510,7 @@ more-itertools==8.8.0 # cherrypy # jaraco.classes # jaraco.functools -moto==3.0.1 ; python_version >= "3.6" +moto==3.0.1 # via -r requirements/static/ci/common.in msgpack==1.0.2 # via @@ -718,7 +718,7 @@ pytest-tempdir==2019.10.12 # pytest-salt-factories pytest-timeout==2.0.2 # via -r requirements/pytest.txt -pytest==7.2.0 ; python_version > "3.6" +pytest==7.2.0 # via # -r requirements/pytest.txt # pytest-custom-exit-code diff --git a/requirements/static/ci/py3.10/darwin.txt b/requirements/static/ci/py3.10/darwin.txt index 1c7c26e85ee..2ab6f4f882d 100644 --- a/requirements/static/ci/py3.10/darwin.txt +++ b/requirements/static/ci/py3.10/darwin.txt @@ -335,7 +335,7 @@ bcrypt==3.1.6 # via # paramiko # passlib -boto3==1.21.46 ; python_version >= "3.6" +boto3==1.21.46 # via # -r requirements/static/ci/common.in # moto @@ -412,7 +412,7 @@ docker==6.1.3 # via # -r requirements/static/ci/common.in # pytest-salt-factories -etcd3-py==0.1.6 ; python_version >= "3.6" +etcd3-py==0.1.6 # via -r requirements/static/ci/common.in exceptiongroup==1.0.4 # via pytest @@ -430,7 +430,7 @@ geomet==0.1.2 # via cassandra-driver gitdb==4.0.5 # via gitpython -gitpython==3.1.32 ; python_version >= "3.7" +gitpython==3.1.32 # via # -r requirements/darwin.txt # -r requirements/static/ci/common.in @@ -513,7 +513,7 @@ more-itertools==8.2.0 # cherrypy # jaraco.classes # jaraco.functools -moto==3.0.1 ; python_version >= "3.6" +moto==3.0.1 # via -r requirements/static/ci/common.in msgpack==1.0.2 # via @@ -665,7 +665,7 @@ pycparser==2.21 ; python_version >= "3.9" # cffi pycryptodomex==3.9.8 # via -r requirements/crypto.txt -pygit2==1.9.1 ; python_version >= "3.7" +pygit2==1.9.1 # via -r requirements/static/ci/darwin.in pyjwt==2.4.0 # via adal @@ -713,7 +713,7 @@ pytest-tempdir==2019.10.12 # pytest-salt-factories pytest-timeout==1.4.2 # via -r requirements/pytest.txt -pytest==7.2.0 ; python_version > "3.6" +pytest==7.2.0 # via # -r requirements/pytest.txt # pytest-custom-exit-code diff --git a/requirements/static/ci/py3.10/freebsd.txt b/requirements/static/ci/py3.10/freebsd.txt index 1ae7aa78003..671d456d14d 100644 --- a/requirements/static/ci/py3.10/freebsd.txt +++ b/requirements/static/ci/py3.10/freebsd.txt @@ -333,7 +333,7 @@ bcrypt==3.1.6 # via # paramiko # passlib -boto3==1.21.46 ; python_version >= "3.6" +boto3==1.21.46 # via # -r requirements/static/ci/common.in # moto @@ -411,7 +411,7 @@ docker==6.1.3 # via # -r requirements/static/ci/common.in # pytest-salt-factories -etcd3-py==0.1.6 ; python_version >= "3.6" +etcd3-py==0.1.6 # via -r requirements/static/ci/common.in exceptiongroup==1.0.4 # via pytest @@ -429,7 +429,7 @@ geomet==0.2.1.post1 # via cassandra-driver gitdb==4.0.5 # via gitpython -gitpython==3.1.32 ; python_version >= "3.7" +gitpython==3.1.32 # via -r requirements/static/ci/common.in google-auth==1.6.3 # via kubernetes @@ -511,7 +511,7 @@ more-itertools==5.0.0 # cherrypy # jaraco.classes # jaraco.functools -moto==3.0.1 ; python_version >= "3.6" +moto==3.0.1 # via -r requirements/static/ci/common.in msgpack==1.0.2 # via @@ -663,7 +663,7 @@ pycparser==2.21 ; python_version >= "3.9" # cffi pycryptodomex==3.9.8 # via -r requirements/crypto.txt -pygit2==1.8.0 ; python_version >= "3.7" +pygit2==1.8.0 # via -r requirements/static/ci/freebsd.in pyinotify==0.9.6 ; sys_platform != "win32" and sys_platform != "darwin" and platform_system != "openbsd" # via -r requirements/static/ci/common.in @@ -713,7 +713,7 @@ pytest-tempdir==2019.10.12 # pytest-salt-factories pytest-timeout==1.4.2 # via -r requirements/pytest.txt -pytest==7.2.0 ; python_version > "3.6" +pytest==7.2.0 # via # -r requirements/pytest.txt # pytest-custom-exit-code diff --git a/requirements/static/ci/py3.10/lint.txt b/requirements/static/ci/py3.10/lint.txt index 831eaa137fc..ba82e751e1c 100644 --- a/requirements/static/ci/py3.10/lint.txt +++ b/requirements/static/ci/py3.10/lint.txt @@ -336,7 +336,7 @@ bcrypt==3.2.0 # via # paramiko # passlib -boto3==1.21.46 ; python_version >= "3.6" +boto3==1.21.46 # via # -r requirements/static/ci/common.in # moto @@ -413,7 +413,7 @@ dnspython==2.1.0 # python-etcd docker==6.1.3 # via -r requirements/static/ci/common.in -etcd3-py==0.1.6 ; python_version >= "3.6" +etcd3-py==0.1.6 # via -r requirements/static/ci/common.in filelock==3.0.12 # via virtualenv @@ -427,7 +427,7 @@ geomet==0.2.1.post1 # via cassandra-driver gitdb==4.0.7 # via gitpython -gitpython==3.1.32 ; python_version >= "3.7" +gitpython==3.1.32 # via -r requirements/static/ci/common.in google-auth==2.0.1 # via kubernetes @@ -514,7 +514,7 @@ more-itertools==8.8.0 # cherrypy # jaraco.classes # jaraco.functools -moto==3.0.1 ; python_version >= "3.6" +moto==3.0.1 # via -r requirements/static/ci/common.in msgpack==1.0.2 # via -r requirements/base.txt @@ -672,7 +672,7 @@ pylint==2.4.4 # via # -r requirements/static/ci/lint.in # saltpylint -pymysql==1.0.2 ; python_version > "3.5" +pymysql==1.0.2 # via -r requirements/static/ci/linux.in pynacl==1.5.0 # via @@ -707,7 +707,7 @@ python-etcd==0.4.5 # via -r requirements/static/ci/common.in python-gnupg==0.4.8 # via -r requirements/static/pkg/linux.in -python-telegram-bot==13.7 ; python_version > "3.5" +python-telegram-bot==13.7 # via -r requirements/static/ci/linux.in pytz==2022.1 # via diff --git a/requirements/static/ci/py3.10/linux.txt b/requirements/static/ci/py3.10/linux.txt index 80c6f0754c1..e7fe004ada3 100644 --- a/requirements/static/ci/py3.10/linux.txt +++ b/requirements/static/ci/py3.10/linux.txt @@ -344,7 +344,7 @@ bcrypt==3.1.6 # via # paramiko # passlib -boto3==1.21.46 ; python_version >= "3.6" +boto3==1.21.46 # via # -r requirements/static/ci/common.in # moto @@ -425,7 +425,7 @@ docker==6.1.3 # via # -r requirements/static/ci/common.in # pytest-salt-factories -etcd3-py==0.1.6 ; python_version >= "3.6" +etcd3-py==0.1.6 # via -r requirements/static/ci/common.in exceptiongroup==1.0.4 # via pytest @@ -443,7 +443,7 @@ geomet==0.1.2 # via cassandra-driver gitdb==4.0.5 # via gitpython -gitpython==3.1.32 ; python_version >= "3.7" +gitpython==3.1.32 # via -r requirements/static/ci/common.in google-auth==1.6.3 # via kubernetes @@ -526,7 +526,7 @@ more-itertools==5.0.0 # cherrypy # jaraco.classes # jaraco.functools -moto==3.0.1 ; python_version >= "3.6" +moto==3.0.1 # via -r requirements/static/ci/common.in msgpack==1.0.2 # via @@ -686,7 +686,7 @@ pyjwt==2.4.0 # via # adal # twilio -pymysql==1.0.2 ; python_version > "3.5" +pymysql==1.0.2 # via -r requirements/static/ci/linux.in pynacl==1.5.0 # via @@ -730,7 +730,7 @@ pytest-tempdir==2019.10.12 # pytest-salt-factories pytest-timeout==1.4.2 # via -r requirements/pytest.txt -pytest==7.2.0 ; python_version > "3.6" +pytest==7.2.0 # via # -r requirements/pytest.txt # pytest-custom-exit-code @@ -759,7 +759,7 @@ python-etcd==0.4.5 # via -r requirements/static/ci/common.in python-gnupg==0.4.8 # via -r requirements/static/pkg/linux.in -python-telegram-bot==13.7 ; python_version > "3.5" +python-telegram-bot==13.7 # via -r requirements/static/ci/linux.in pytz==2022.1 # via diff --git a/requirements/static/ci/py3.10/pkgtests-windows.txt b/requirements/static/ci/py3.10/pkgtests-windows.txt index de7ee93e182..88e31addbb2 100644 --- a/requirements/static/ci/py3.10/pkgtests-windows.txt +++ b/requirements/static/ci/py3.10/pkgtests-windows.txt @@ -128,7 +128,7 @@ pytest==7.2.1 # pytest-skip-markers # pytest-system-statistics # pytest-tempdir -pythonnet==3.0.1 ; python_version >= "3.7" +pythonnet==3.0.1 # via -r requirements/static/ci/pkgtests-windows.in pytz==2022.7.1 # via tempora diff --git a/requirements/static/ci/py3.10/windows.txt b/requirements/static/ci/py3.10/windows.txt index 4700c5c974a..07d600c7f21 100644 --- a/requirements/static/ci/py3.10/windows.txt +++ b/requirements/static/ci/py3.10/windows.txt @@ -21,7 +21,7 @@ attrs==20.3.0 # pytest-system-statistics bcrypt==4.0.1 # via passlib -boto3==1.21.46 ; python_version >= "3.6" +boto3==1.21.46 # via # -r requirements/static/ci/common.in # moto @@ -93,7 +93,7 @@ dnspython==1.16.0 # python-etcd docker==6.1.3 # via -r requirements/static/ci/common.in -etcd3-py==0.1.6 ; python_version >= "3.6" +etcd3-py==0.1.6 # via -r requirements/static/ci/common.in exceptiongroup==1.0.4 # via pytest @@ -111,7 +111,7 @@ geomet==0.1.2 # via cassandra-driver gitdb==4.0.7 # via gitpython -gitpython==3.1.32 ; python_version >= "3.7" +gitpython==3.1.32 # via # -r requirements/static/ci/common.in # -r requirements/windows.txt @@ -180,7 +180,7 @@ more-itertools==8.2.0 # cherrypy # jaraco.classes # jaraco.functools -moto==3.0.1 ; python_version >= "3.6" +moto==3.0.1 # via -r requirements/static/ci/common.in msgpack==1.0.2 # via @@ -231,7 +231,7 @@ pycparser==2.21 ; python_version >= "3.9" # cffi pycryptodomex==3.10.1 # via -r requirements/crypto.txt -pygit2==1.9.1 ; python_version >= "3.7" +pygit2==1.9.1 # via -r requirements/static/ci/windows.in pymssql==2.2.7 # via -r requirements/windows.txt @@ -275,7 +275,7 @@ pytest-tempdir==2019.10.12 # pytest-salt-factories pytest-timeout==2.1.0 # via -r requirements/pytest.txt -pytest==7.2.0 ; python_version > "3.6" +pytest==7.2.0 # via # -r requirements/pytest.txt # pytest-custom-exit-code diff --git a/requirements/static/ci/py3.7/cloud.txt b/requirements/static/ci/py3.7/cloud.txt index a3b845127fa..0f14a5ab23b 100644 --- a/requirements/static/ci/py3.7/cloud.txt +++ b/requirements/static/ci/py3.7/cloud.txt @@ -337,7 +337,7 @@ bcrypt==3.2.0 # via # paramiko # passlib -boto3==1.21.46 ; python_version >= "3.6" +boto3==1.21.46 # via # -r requirements/static/ci/common.in # moto @@ -422,7 +422,7 @@ docker==6.1.3 # via # -r requirements/static/ci/common.in # pytest-salt-factories -etcd3-py==0.1.6 ; python_version >= "3.6" +etcd3-py==0.1.6 # via -r requirements/static/ci/common.in exceptiongroup==1.0.4 # via pytest @@ -444,7 +444,7 @@ geomet==0.2.1.post1 # via cassandra-driver gitdb==4.0.7 # via gitpython -gitpython==3.1.32 ; python_version >= "3.7" +gitpython==3.1.32 # via -r requirements/static/ci/common.in google-auth==2.1.0 # via kubernetes @@ -537,7 +537,7 @@ more-itertools==8.8.0 # cherrypy # jaraco.classes # jaraco.functools -moto==3.0.1 ; python_version >= "3.6" +moto==3.0.1 # via -r requirements/static/ci/common.in msgpack==1.0.2 # via @@ -639,7 +639,7 @@ multidict==6.0.2 # via # aiohttp # yarl -napalm==3.3.1 ; sys_platform != "win32" and python_version > "3.6" and python_version < "3.10" +napalm==3.3.1 ; sys_platform != "win32" and python_version < "3.10" # via -r requirements/static/ci/common.in ncclient==0.6.12 # via @@ -762,7 +762,7 @@ pytest-tempdir==2019.10.12 # pytest-salt-factories pytest-timeout==2.0.2 # via -r requirements/pytest.txt -pytest==7.2.0 ; python_version > "3.6" +pytest==7.2.0 # via # -r requirements/pytest.txt # pytest-custom-exit-code diff --git a/requirements/static/ci/py3.7/freebsd.txt b/requirements/static/ci/py3.7/freebsd.txt index 4bae82d0ebe..3111162b317 100644 --- a/requirements/static/ci/py3.7/freebsd.txt +++ b/requirements/static/ci/py3.7/freebsd.txt @@ -335,7 +335,7 @@ bcrypt==3.1.6 # via # paramiko # passlib -boto3==1.21.46 ; python_version >= "3.6" +boto3==1.21.46 # via # -r requirements/static/ci/common.in # moto @@ -419,7 +419,7 @@ docker==6.1.3 # via # -r requirements/static/ci/common.in # pytest-salt-factories -etcd3-py==0.1.6 ; python_version >= "3.6" +etcd3-py==0.1.6 # via -r requirements/static/ci/common.in exceptiongroup==1.0.4 # via pytest @@ -441,7 +441,7 @@ geomet==0.2.1.post1 # via cassandra-driver gitdb==4.0.5 # via gitpython -gitpython==3.1.32 ; python_version >= "3.7" +gitpython==3.1.32 # via -r requirements/static/ci/common.in google-auth==1.6.3 # via kubernetes @@ -535,7 +535,7 @@ more-itertools==5.0.0 # cherrypy # jaraco.classes # jaraco.functools -moto==3.0.1 ; python_version >= "3.6" +moto==3.0.1 # via -r requirements/static/ci/common.in msgpack==1.0.2 # via @@ -637,7 +637,7 @@ multidict==6.0.2 # via # aiohttp # yarl -napalm==3.1.0 ; sys_platform != "win32" and python_version > "3.6" and python_version < "3.10" +napalm==3.1.0 ; sys_platform != "win32" and python_version < "3.10" # via -r requirements/static/ci/common.in ncclient==0.6.4 # via junos-eznc @@ -699,7 +699,7 @@ pycryptodomex==3.9.8 # via -r requirements/crypto.txt pyeapi==0.8.3 # via napalm -pygit2==1.8.0 ; python_version >= "3.7" +pygit2==1.8.0 # via -r requirements/static/ci/freebsd.in pyinotify==0.9.6 ; sys_platform != "win32" and sys_platform != "darwin" and platform_system != "openbsd" # via -r requirements/static/ci/common.in @@ -751,7 +751,7 @@ pytest-tempdir==2019.10.12 # pytest-salt-factories pytest-timeout==1.4.2 # via -r requirements/pytest.txt -pytest==7.2.0 ; python_version > "3.6" +pytest==7.2.0 # via # -r requirements/pytest.txt # pytest-custom-exit-code diff --git a/requirements/static/ci/py3.7/lint.txt b/requirements/static/ci/py3.7/lint.txt index cedc9793c2a..a6771ea92c9 100644 --- a/requirements/static/ci/py3.7/lint.txt +++ b/requirements/static/ci/py3.7/lint.txt @@ -340,7 +340,7 @@ bcrypt==3.2.0 # via # paramiko # passlib -boto3==1.21.46 ; python_version >= "3.6" +boto3==1.21.46 # via # -r requirements/static/ci/common.in # moto @@ -423,7 +423,7 @@ dnspython==2.1.0 # python-etcd docker==6.1.3 # via -r requirements/static/ci/common.in -etcd3-py==0.1.6 ; python_version >= "3.6" +etcd3-py==0.1.6 # via -r requirements/static/ci/common.in filelock==3.0.12 # via virtualenv @@ -441,7 +441,7 @@ geomet==0.2.1.post1 # via cassandra-driver gitdb==4.0.7 # via gitpython -gitpython==3.1.32 ; python_version >= "3.7" +gitpython==3.1.32 # via -r requirements/static/ci/common.in google-auth==2.0.1 # via kubernetes @@ -541,7 +541,7 @@ more-itertools==8.8.0 # cherrypy # jaraco.classes # jaraco.functools -moto==3.0.1 ; python_version >= "3.6" +moto==3.0.1 # via -r requirements/static/ci/common.in msgpack==1.0.2 # via -r requirements/base.txt @@ -641,7 +641,7 @@ multidict==6.0.2 # via # aiohttp # yarl -napalm==3.3.1 ; sys_platform != "win32" and python_version > "3.6" and python_version < "3.10" +napalm==3.3.1 ; sys_platform != "win32" and python_version < "3.10" # via -r requirements/static/ci/common.in ncclient==0.6.12 # via @@ -715,7 +715,7 @@ pylint==2.4.4 # via # -r requirements/static/ci/lint.in # saltpylint -pymysql==1.0.2 ; python_version > "3.5" +pymysql==1.0.2 # via -r requirements/static/ci/linux.in pynacl==1.5.0 # via @@ -752,7 +752,7 @@ python-etcd==0.4.5 # via -r requirements/static/ci/common.in python-gnupg==0.4.8 # via -r requirements/static/pkg/linux.in -python-telegram-bot==13.7 ; python_version > "3.5" +python-telegram-bot==13.7 # via -r requirements/static/ci/linux.in pytz==2022.1 # via diff --git a/requirements/static/ci/py3.7/linux.txt b/requirements/static/ci/py3.7/linux.txt index f74073bc33f..1d41351fca0 100644 --- a/requirements/static/ci/py3.7/linux.txt +++ b/requirements/static/ci/py3.7/linux.txt @@ -346,7 +346,7 @@ bcrypt==3.1.6 # via # paramiko # passlib -boto3==1.21.46 ; python_version >= "3.6" +boto3==1.21.46 # via # -r requirements/static/ci/common.in # moto @@ -433,7 +433,7 @@ docker==6.1.3 # via # -r requirements/static/ci/common.in # pytest-salt-factories -etcd3-py==0.1.6 ; python_version >= "3.6" +etcd3-py==0.1.6 # via -r requirements/static/ci/common.in exceptiongroup==1.0.4 # via pytest @@ -455,7 +455,7 @@ geomet==0.1.2 # via cassandra-driver gitdb==4.0.5 # via gitpython -gitpython==3.1.32 ; python_version >= "3.7" +gitpython==3.1.32 # via -r requirements/static/ci/common.in google-auth==1.6.3 # via kubernetes @@ -550,7 +550,7 @@ more-itertools==5.0.0 # cherrypy # jaraco.classes # jaraco.functools -moto==3.0.1 ; python_version >= "3.6" +moto==3.0.1 # via -r requirements/static/ci/common.in msgpack==1.0.2 # via @@ -649,7 +649,7 @@ multidict==6.0.2 # via # aiohttp # yarl -napalm==3.1.0 ; sys_platform != "win32" and python_version > "3.6" and python_version < "3.10" +napalm==3.1.0 ; sys_platform != "win32" and python_version < "3.10" # via -r requirements/static/ci/common.in ncclient==0.6.4 # via junos-eznc @@ -722,7 +722,7 @@ pyjwt==2.4.0 # via # adal # twilio -pymysql==1.0.2 ; python_version > "3.5" +pymysql==1.0.2 # via -r requirements/static/ci/linux.in pynacl==1.5.0 # via @@ -770,7 +770,7 @@ pytest-tempdir==2019.10.12 # pytest-salt-factories pytest-timeout==1.4.2 # via -r requirements/pytest.txt -pytest==7.2.0 ; python_version > "3.6" +pytest==7.2.0 # via # -r requirements/pytest.txt # pytest-custom-exit-code @@ -799,7 +799,7 @@ python-etcd==0.4.5 # via -r requirements/static/ci/common.in python-gnupg==0.4.8 # via -r requirements/static/pkg/linux.in -python-telegram-bot==13.7 ; python_version > "3.5" +python-telegram-bot==13.7 # via -r requirements/static/ci/linux.in pytz==2022.1 # via diff --git a/requirements/static/ci/py3.7/windows.txt b/requirements/static/ci/py3.7/windows.txt index 583c366631a..c66cd5853d9 100644 --- a/requirements/static/ci/py3.7/windows.txt +++ b/requirements/static/ci/py3.7/windows.txt @@ -25,7 +25,7 @@ backports.entry-points-selectable==1.1.0 # via virtualenv bcrypt==4.0.1 # via passlib -boto3==1.21.46 ; python_version >= "3.6" +boto3==1.21.46 # via # -r requirements/static/ci/common.in # moto @@ -99,7 +99,7 @@ dnspython==1.16.0 # python-etcd docker==6.1.3 # via -r requirements/static/ci/common.in -etcd3-py==0.1.6 ; python_version >= "3.6" +etcd3-py==0.1.6 # via -r requirements/static/ci/common.in exceptiongroup==1.0.4 # via pytest @@ -117,7 +117,7 @@ geomet==0.1.2 # via cassandra-driver gitdb==4.0.7 # via gitpython -gitpython==3.1.32 ; python_version >= "3.7" +gitpython==3.1.32 # via # -r requirements/static/ci/common.in # -r requirements/windows.txt @@ -194,7 +194,7 @@ more-itertools==8.2.0 # cherrypy # jaraco.classes # jaraco.functools -moto==3.0.1 ; python_version >= "3.6" +moto==3.0.1 # via -r requirements/static/ci/common.in msgpack==1.0.2 # via @@ -244,7 +244,7 @@ pycparser==2.21 # cffi pycryptodomex==3.10.1 # via -r requirements/crypto.txt -pygit2==1.9.1 ; python_version >= "3.7" +pygit2==1.9.1 # via -r requirements/static/ci/windows.in pymssql==2.2.1 # via -r requirements/windows.txt @@ -288,7 +288,7 @@ pytest-tempdir==2019.10.12 # pytest-salt-factories pytest-timeout==1.4.2 # via -r requirements/pytest.txt -pytest==7.2.0 ; python_version > "3.6" +pytest==7.2.0 # via # -r requirements/pytest.txt # pytest-custom-exit-code diff --git a/requirements/static/ci/py3.8/cloud.txt b/requirements/static/ci/py3.8/cloud.txt index 39423db6f6f..34e3b8061cc 100644 --- a/requirements/static/ci/py3.8/cloud.txt +++ b/requirements/static/ci/py3.8/cloud.txt @@ -335,7 +335,7 @@ bcrypt==3.2.0 # via # paramiko # passlib -boto3==1.21.46 ; python_version >= "3.6" +boto3==1.21.46 # via # -r requirements/static/ci/common.in # moto @@ -420,7 +420,7 @@ docker==6.1.3 # via # -r requirements/static/ci/common.in # pytest-salt-factories -etcd3-py==0.1.6 ; python_version >= "3.6" +etcd3-py==0.1.6 # via -r requirements/static/ci/common.in exceptiongroup==1.0.4 # via pytest @@ -442,7 +442,7 @@ geomet==0.2.1.post1 # via cassandra-driver gitdb==4.0.7 # via gitpython -gitpython==3.1.32 ; python_version >= "3.7" +gitpython==3.1.32 # via -r requirements/static/ci/common.in google-auth==2.1.0 # via kubernetes @@ -526,7 +526,7 @@ more-itertools==8.8.0 # cherrypy # jaraco.classes # jaraco.functools -moto==3.0.1 ; python_version >= "3.6" +moto==3.0.1 # via -r requirements/static/ci/common.in msgpack==1.0.2 # via @@ -628,7 +628,7 @@ multidict==6.0.2 # via # aiohttp # yarl -napalm==3.3.1 ; sys_platform != "win32" and python_version > "3.6" and python_version < "3.10" +napalm==3.3.1 ; sys_platform != "win32" and python_version < "3.10" # via -r requirements/static/ci/common.in ncclient==0.6.12 # via @@ -751,7 +751,7 @@ pytest-tempdir==2019.10.12 # pytest-salt-factories pytest-timeout==2.0.2 # via -r requirements/pytest.txt -pytest==7.2.0 ; python_version > "3.6" +pytest==7.2.0 # via # -r requirements/pytest.txt # pytest-custom-exit-code diff --git a/requirements/static/ci/py3.8/freebsd.txt b/requirements/static/ci/py3.8/freebsd.txt index 45df7de7036..8913b1fa92f 100644 --- a/requirements/static/ci/py3.8/freebsd.txt +++ b/requirements/static/ci/py3.8/freebsd.txt @@ -333,7 +333,7 @@ bcrypt==3.1.6 # via # paramiko # passlib -boto3==1.21.46 ; python_version >= "3.6" +boto3==1.21.46 # via # -r requirements/static/ci/common.in # moto @@ -417,7 +417,7 @@ docker==6.1.3 # via # -r requirements/static/ci/common.in # pytest-salt-factories -etcd3-py==0.1.6 ; python_version >= "3.6" +etcd3-py==0.1.6 # via -r requirements/static/ci/common.in exceptiongroup==1.0.4 # via pytest @@ -439,7 +439,7 @@ geomet==0.2.1.post1 # via cassandra-driver gitdb==4.0.5 # via gitpython -gitpython==3.1.32 ; python_version >= "3.7" +gitpython==3.1.32 # via -r requirements/static/ci/common.in google-auth==1.6.3 # via kubernetes @@ -525,7 +525,7 @@ more-itertools==5.0.0 # cherrypy # jaraco.classes # jaraco.functools -moto==3.0.1 ; python_version >= "3.6" +moto==3.0.1 # via -r requirements/static/ci/common.in msgpack==1.0.2 # via @@ -627,7 +627,7 @@ multidict==6.0.2 # via # aiohttp # yarl -napalm==3.1.0 ; sys_platform != "win32" and python_version > "3.6" and python_version < "3.10" +napalm==3.1.0 ; sys_platform != "win32" and python_version < "3.10" # via -r requirements/static/ci/common.in ncclient==0.6.4 # via junos-eznc @@ -689,7 +689,7 @@ pycryptodomex==3.9.8 # via -r requirements/crypto.txt pyeapi==0.8.3 # via napalm -pygit2==1.8.0 ; python_version >= "3.7" +pygit2==1.8.0 # via -r requirements/static/ci/freebsd.in pyinotify==0.9.6 ; sys_platform != "win32" and sys_platform != "darwin" and platform_system != "openbsd" # via -r requirements/static/ci/common.in @@ -741,7 +741,7 @@ pytest-tempdir==2019.10.12 # pytest-salt-factories pytest-timeout==1.4.2 # via -r requirements/pytest.txt -pytest==7.2.0 ; python_version > "3.6" +pytest==7.2.0 # via # -r requirements/pytest.txt # pytest-custom-exit-code diff --git a/requirements/static/ci/py3.8/lint.txt b/requirements/static/ci/py3.8/lint.txt index 5d4d151196e..efb6aa4a6db 100644 --- a/requirements/static/ci/py3.8/lint.txt +++ b/requirements/static/ci/py3.8/lint.txt @@ -338,7 +338,7 @@ bcrypt==3.2.0 # via # paramiko # passlib -boto3==1.21.46 ; python_version >= "3.6" +boto3==1.21.46 # via # -r requirements/static/ci/common.in # moto @@ -421,7 +421,7 @@ dnspython==2.1.0 # python-etcd docker==6.1.3 # via -r requirements/static/ci/common.in -etcd3-py==0.1.6 ; python_version >= "3.6" +etcd3-py==0.1.6 # via -r requirements/static/ci/common.in filelock==3.0.12 # via virtualenv @@ -439,7 +439,7 @@ geomet==0.2.1.post1 # via cassandra-driver gitdb==4.0.7 # via gitpython -gitpython==3.1.32 ; python_version >= "3.7" +gitpython==3.1.32 # via -r requirements/static/ci/common.in google-auth==2.0.1 # via kubernetes @@ -532,7 +532,7 @@ more-itertools==8.8.0 # cherrypy # jaraco.classes # jaraco.functools -moto==3.0.1 ; python_version >= "3.6" +moto==3.0.1 # via -r requirements/static/ci/common.in msgpack==1.0.2 # via -r requirements/base.txt @@ -632,7 +632,7 @@ multidict==6.0.2 # via # aiohttp # yarl -napalm==3.3.1 ; sys_platform != "win32" and python_version > "3.6" and python_version < "3.10" +napalm==3.3.1 ; sys_platform != "win32" and python_version < "3.10" # via -r requirements/static/ci/common.in ncclient==0.6.12 # via @@ -706,7 +706,7 @@ pylint==2.4.4 # via # -r requirements/static/ci/lint.in # saltpylint -pymysql==1.0.2 ; python_version > "3.5" +pymysql==1.0.2 # via -r requirements/static/ci/linux.in pynacl==1.5.0 # via @@ -743,7 +743,7 @@ python-etcd==0.4.5 # via -r requirements/static/ci/common.in python-gnupg==0.4.8 # via -r requirements/static/pkg/linux.in -python-telegram-bot==13.7 ; python_version > "3.5" +python-telegram-bot==13.7 # via -r requirements/static/ci/linux.in pytz==2022.1 # via diff --git a/requirements/static/ci/py3.8/linux.txt b/requirements/static/ci/py3.8/linux.txt index 24af3d4093b..3c816f8c0b0 100644 --- a/requirements/static/ci/py3.8/linux.txt +++ b/requirements/static/ci/py3.8/linux.txt @@ -344,7 +344,7 @@ bcrypt==3.1.6 # via # paramiko # passlib -boto3==1.21.46 ; python_version >= "3.6" +boto3==1.21.46 # via # -r requirements/static/ci/common.in # moto @@ -431,7 +431,7 @@ docker==6.1.3 # via # -r requirements/static/ci/common.in # pytest-salt-factories -etcd3-py==0.1.6 ; python_version >= "3.6" +etcd3-py==0.1.6 # via -r requirements/static/ci/common.in exceptiongroup==1.0.4 # via pytest @@ -453,7 +453,7 @@ geomet==0.1.2 # via cassandra-driver gitdb==4.0.5 # via gitpython -gitpython==3.1.32 ; python_version >= "3.7" +gitpython==3.1.32 # via -r requirements/static/ci/common.in google-auth==1.6.3 # via kubernetes @@ -540,7 +540,7 @@ more-itertools==5.0.0 # cherrypy # jaraco.classes # jaraco.functools -moto==3.0.1 ; python_version >= "3.6" +moto==3.0.1 # via -r requirements/static/ci/common.in msgpack==1.0.2 # via @@ -639,7 +639,7 @@ multidict==6.0.2 # via # aiohttp # yarl -napalm==3.1.0 ; sys_platform != "win32" and python_version > "3.6" and python_version < "3.10" +napalm==3.1.0 ; sys_platform != "win32" and python_version < "3.10" # via -r requirements/static/ci/common.in ncclient==0.6.4 # via junos-eznc @@ -712,7 +712,7 @@ pyjwt==2.4.0 # via # adal # twilio -pymysql==1.0.2 ; python_version > "3.5" +pymysql==1.0.2 # via -r requirements/static/ci/linux.in pynacl==1.5.0 # via @@ -758,7 +758,7 @@ pytest-tempdir==2019.10.12 # pytest-salt-factories pytest-timeout==1.4.2 # via -r requirements/pytest.txt -pytest==7.2.0 ; python_version > "3.6" +pytest==7.2.0 # via # -r requirements/pytest.txt # pytest-custom-exit-code @@ -787,7 +787,7 @@ python-etcd==0.4.5 # via -r requirements/static/ci/common.in python-gnupg==0.4.8 # via -r requirements/static/pkg/linux.in -python-telegram-bot==13.7 ; python_version > "3.5" +python-telegram-bot==13.7 # via -r requirements/static/ci/linux.in pytz==2022.1 # via diff --git a/requirements/static/ci/py3.8/windows.txt b/requirements/static/ci/py3.8/windows.txt index 0cea1d0b0c3..7d0f0a9c036 100644 --- a/requirements/static/ci/py3.8/windows.txt +++ b/requirements/static/ci/py3.8/windows.txt @@ -23,7 +23,7 @@ backports.entry-points-selectable==1.1.0 # via virtualenv bcrypt==4.0.1 # via passlib -boto3==1.21.46 ; python_version >= "3.6" +boto3==1.21.46 # via # -r requirements/static/ci/common.in # moto @@ -95,7 +95,7 @@ dnspython==1.16.0 # python-etcd docker==6.1.3 # via -r requirements/static/ci/common.in -etcd3-py==0.1.6 ; python_version >= "3.6" +etcd3-py==0.1.6 # via -r requirements/static/ci/common.in exceptiongroup==1.0.4 # via pytest @@ -113,7 +113,7 @@ geomet==0.1.2 # via cassandra-driver gitdb==4.0.7 # via gitpython -gitpython==3.1.32 ; python_version >= "3.7" +gitpython==3.1.32 # via # -r requirements/static/ci/common.in # -r requirements/windows.txt @@ -182,7 +182,7 @@ more-itertools==8.2.0 # cherrypy # jaraco.classes # jaraco.functools -moto==3.0.1 ; python_version >= "3.6" +moto==3.0.1 # via -r requirements/static/ci/common.in msgpack==1.0.2 # via @@ -232,7 +232,7 @@ pycparser==2.21 # cffi pycryptodomex==3.10.1 # via -r requirements/crypto.txt -pygit2==1.9.1 ; python_version >= "3.7" +pygit2==1.9.1 # via -r requirements/static/ci/windows.in pymssql==2.2.1 # via -r requirements/windows.txt @@ -276,7 +276,7 @@ pytest-tempdir==2019.10.12 # pytest-salt-factories pytest-timeout==1.4.2 # via -r requirements/pytest.txt -pytest==7.2.0 ; python_version > "3.6" +pytest==7.2.0 # via # -r requirements/pytest.txt # pytest-custom-exit-code diff --git a/requirements/static/ci/py3.9/cloud.txt b/requirements/static/ci/py3.9/cloud.txt index 535bc8da84d..8e635726333 100644 --- a/requirements/static/ci/py3.9/cloud.txt +++ b/requirements/static/ci/py3.9/cloud.txt @@ -335,7 +335,7 @@ bcrypt==3.2.0 # via # paramiko # passlib -boto3==1.21.46 ; python_version >= "3.6" +boto3==1.21.46 # via # -r requirements/static/ci/common.in # moto @@ -420,7 +420,7 @@ docker==6.1.3 # via # -r requirements/static/ci/common.in # pytest-salt-factories -etcd3-py==0.1.6 ; python_version >= "3.6" +etcd3-py==0.1.6 # via -r requirements/static/ci/common.in exceptiongroup==1.0.4 # via pytest @@ -442,7 +442,7 @@ geomet==0.2.1.post1 # via cassandra-driver gitdb==4.0.7 # via gitpython -gitpython==3.1.32 ; python_version >= "3.7" +gitpython==3.1.32 # via -r requirements/static/ci/common.in google-auth==2.1.0 # via kubernetes @@ -526,7 +526,7 @@ more-itertools==8.8.0 # cherrypy # jaraco.classes # jaraco.functools -moto==3.0.1 ; python_version >= "3.6" +moto==3.0.1 # via -r requirements/static/ci/common.in msgpack==1.0.2 # via @@ -628,7 +628,7 @@ multidict==6.0.2 # via # aiohttp # yarl -napalm==3.3.1 ; sys_platform != "win32" and python_version > "3.6" and python_version < "3.10" +napalm==3.3.1 ; sys_platform != "win32" and python_version < "3.10" # via -r requirements/static/ci/common.in ncclient==0.6.12 # via @@ -754,7 +754,7 @@ pytest-tempdir==2019.10.12 # pytest-salt-factories pytest-timeout==2.0.2 # via -r requirements/pytest.txt -pytest==7.2.0 ; python_version > "3.6" +pytest==7.2.0 # via # -r requirements/pytest.txt # pytest-custom-exit-code diff --git a/requirements/static/ci/py3.9/darwin.txt b/requirements/static/ci/py3.9/darwin.txt index 3215cec66b3..e65cd22d72d 100644 --- a/requirements/static/ci/py3.9/darwin.txt +++ b/requirements/static/ci/py3.9/darwin.txt @@ -335,7 +335,7 @@ bcrypt==3.1.6 # via # paramiko # passlib -boto3==1.21.46 ; python_version >= "3.6" +boto3==1.21.46 # via # -r requirements/static/ci/common.in # moto @@ -418,7 +418,7 @@ docker==6.1.3 # via # -r requirements/static/ci/common.in # pytest-salt-factories -etcd3-py==0.1.6 ; python_version >= "3.6" +etcd3-py==0.1.6 # via -r requirements/static/ci/common.in exceptiongroup==1.0.4 # via pytest @@ -440,7 +440,7 @@ geomet==0.1.2 # via cassandra-driver gitdb==4.0.5 # via gitpython -gitpython==3.1.32 ; python_version >= "3.7" +gitpython==3.1.32 # via # -r requirements/darwin.txt # -r requirements/static/ci/common.in @@ -527,7 +527,7 @@ more-itertools==8.2.0 # cherrypy # jaraco.classes # jaraco.functools -moto==3.0.1 ; python_version >= "3.6" +moto==3.0.1 # via -r requirements/static/ci/common.in msgpack==1.0.2 # via @@ -629,7 +629,7 @@ multidict==6.0.2 # via # aiohttp # yarl -napalm==3.1.0 ; sys_platform != "win32" and python_version > "3.6" and python_version < "3.10" +napalm==3.1.0 ; sys_platform != "win32" and python_version < "3.10" # via -r requirements/static/ci/common.in ncclient==0.6.4 # via junos-eznc @@ -694,7 +694,7 @@ pycryptodomex==3.9.8 # via -r requirements/crypto.txt pyeapi==0.8.3 # via napalm -pygit2==1.9.1 ; python_version >= "3.7" +pygit2==1.9.1 # via -r requirements/static/ci/darwin.in pyjwt==2.4.0 # via adal @@ -744,7 +744,7 @@ pytest-tempdir==2019.10.12 # pytest-salt-factories pytest-timeout==1.4.2 # via -r requirements/pytest.txt -pytest==7.2.0 ; python_version > "3.6" +pytest==7.2.0 # via # -r requirements/pytest.txt # pytest-custom-exit-code diff --git a/requirements/static/ci/py3.9/freebsd.txt b/requirements/static/ci/py3.9/freebsd.txt index 8b3d1a2181f..4bf3108b462 100644 --- a/requirements/static/ci/py3.9/freebsd.txt +++ b/requirements/static/ci/py3.9/freebsd.txt @@ -333,7 +333,7 @@ bcrypt==3.1.6 # via # paramiko # passlib -boto3==1.21.46 ; python_version >= "3.6" +boto3==1.21.46 # via # -r requirements/static/ci/common.in # moto @@ -417,7 +417,7 @@ docker==6.1.3 # via # -r requirements/static/ci/common.in # pytest-salt-factories -etcd3-py==0.1.6 ; python_version >= "3.6" +etcd3-py==0.1.6 # via -r requirements/static/ci/common.in exceptiongroup==1.0.4 # via pytest @@ -439,7 +439,7 @@ geomet==0.2.1.post1 # via cassandra-driver gitdb==4.0.5 # via gitpython -gitpython==3.1.32 ; python_version >= "3.7" +gitpython==3.1.32 # via -r requirements/static/ci/common.in google-auth==1.6.3 # via kubernetes @@ -525,7 +525,7 @@ more-itertools==5.0.0 # cherrypy # jaraco.classes # jaraco.functools -moto==3.0.1 ; python_version >= "3.6" +moto==3.0.1 # via -r requirements/static/ci/common.in msgpack==1.0.2 # via @@ -627,7 +627,7 @@ multidict==6.0.2 # via # aiohttp # yarl -napalm==3.1.0 ; sys_platform != "win32" and python_version > "3.6" and python_version < "3.10" +napalm==3.1.0 ; sys_platform != "win32" and python_version < "3.10" # via -r requirements/static/ci/common.in ncclient==0.6.4 # via junos-eznc @@ -692,7 +692,7 @@ pycryptodomex==3.9.8 # via -r requirements/crypto.txt pyeapi==0.8.3 # via napalm -pygit2==1.8.0 ; python_version >= "3.7" +pygit2==1.8.0 # via -r requirements/static/ci/freebsd.in pyinotify==0.9.6 ; sys_platform != "win32" and sys_platform != "darwin" and platform_system != "openbsd" # via -r requirements/static/ci/common.in @@ -744,7 +744,7 @@ pytest-tempdir==2019.10.12 # pytest-salt-factories pytest-timeout==1.4.2 # via -r requirements/pytest.txt -pytest==7.2.0 ; python_version > "3.6" +pytest==7.2.0 # via # -r requirements/pytest.txt # pytest-custom-exit-code diff --git a/requirements/static/ci/py3.9/lint.txt b/requirements/static/ci/py3.9/lint.txt index d8921f45e36..4c917f41f3e 100644 --- a/requirements/static/ci/py3.9/lint.txt +++ b/requirements/static/ci/py3.9/lint.txt @@ -336,7 +336,7 @@ bcrypt==3.2.0 # via # paramiko # passlib -boto3==1.21.46 ; python_version >= "3.6" +boto3==1.21.46 # via # -r requirements/static/ci/common.in # moto @@ -419,7 +419,7 @@ dnspython==2.1.0 # python-etcd docker==6.1.3 # via -r requirements/static/ci/common.in -etcd3-py==0.1.6 ; python_version >= "3.6" +etcd3-py==0.1.6 # via -r requirements/static/ci/common.in filelock==3.0.12 # via virtualenv @@ -437,7 +437,7 @@ geomet==0.2.1.post1 # via cassandra-driver gitdb==4.0.7 # via gitpython -gitpython==3.1.32 ; python_version >= "3.7" +gitpython==3.1.32 # via -r requirements/static/ci/common.in google-auth==2.0.1 # via kubernetes @@ -530,7 +530,7 @@ more-itertools==8.8.0 # cherrypy # jaraco.classes # jaraco.functools -moto==3.0.1 ; python_version >= "3.6" +moto==3.0.1 # via -r requirements/static/ci/common.in msgpack==1.0.2 # via -r requirements/base.txt @@ -630,7 +630,7 @@ multidict==6.0.2 # via # aiohttp # yarl -napalm==3.3.1 ; sys_platform != "win32" and python_version > "3.6" and python_version < "3.10" +napalm==3.3.1 ; sys_platform != "win32" and python_version < "3.10" # via -r requirements/static/ci/common.in ncclient==0.6.12 # via @@ -707,7 +707,7 @@ pylint==2.4.4 # via # -r requirements/static/ci/lint.in # saltpylint -pymysql==1.0.2 ; python_version > "3.5" +pymysql==1.0.2 # via -r requirements/static/ci/linux.in pynacl==1.5.0 # via @@ -744,7 +744,7 @@ python-etcd==0.4.5 # via -r requirements/static/ci/common.in python-gnupg==0.4.8 # via -r requirements/static/pkg/linux.in -python-telegram-bot==13.7 ; python_version > "3.5" +python-telegram-bot==13.7 # via -r requirements/static/ci/linux.in pytz==2022.1 # via diff --git a/requirements/static/ci/py3.9/linux.txt b/requirements/static/ci/py3.9/linux.txt index fa10facc612..2bf73ffe6e2 100644 --- a/requirements/static/ci/py3.9/linux.txt +++ b/requirements/static/ci/py3.9/linux.txt @@ -344,7 +344,7 @@ bcrypt==3.1.6 # via # paramiko # passlib -boto3==1.21.46 ; python_version >= "3.6" +boto3==1.21.46 # via # -r requirements/static/ci/common.in # moto @@ -433,7 +433,7 @@ docker==6.1.3 # via # -r requirements/static/ci/common.in # pytest-salt-factories -etcd3-py==0.1.6 ; python_version >= "3.6" +etcd3-py==0.1.6 # via -r requirements/static/ci/common.in exceptiongroup==1.0.4 # via pytest @@ -455,7 +455,7 @@ geomet==0.1.2 # via cassandra-driver gitdb==4.0.5 # via gitpython -gitpython==3.1.32 ; python_version >= "3.7" +gitpython==3.1.32 # via -r requirements/static/ci/common.in google-auth==1.6.3 # via kubernetes @@ -542,7 +542,7 @@ more-itertools==5.0.0 # cherrypy # jaraco.classes # jaraco.functools -moto==3.0.1 ; python_version >= "3.6" +moto==3.0.1 # via -r requirements/static/ci/common.in msgpack==1.0.2 # via @@ -641,7 +641,7 @@ multidict==6.0.2 # via # aiohttp # yarl -napalm==3.1.0 ; sys_platform != "win32" and python_version > "3.6" and python_version < "3.10" +napalm==3.1.0 ; sys_platform != "win32" and python_version < "3.10" # via -r requirements/static/ci/common.in ncclient==0.6.4 # via junos-eznc @@ -717,7 +717,7 @@ pyjwt==2.4.0 # via # adal # twilio -pymysql==1.0.2 ; python_version > "3.5" +pymysql==1.0.2 # via -r requirements/static/ci/linux.in pynacl==1.5.0 # via @@ -763,7 +763,7 @@ pytest-tempdir==2019.10.12 # pytest-salt-factories pytest-timeout==1.4.2 # via -r requirements/pytest.txt -pytest==7.2.0 ; python_version > "3.6" +pytest==7.2.0 # via # -r requirements/pytest.txt # pytest-custom-exit-code @@ -792,7 +792,7 @@ python-etcd==0.4.5 # via -r requirements/static/ci/common.in python-gnupg==0.4.8 # via -r requirements/static/pkg/linux.in -python-telegram-bot==13.7 ; python_version > "3.5" +python-telegram-bot==13.7 # via -r requirements/static/ci/linux.in pytz==2022.1 # via diff --git a/requirements/static/ci/py3.9/windows.txt b/requirements/static/ci/py3.9/windows.txt index 04af86b03f2..0e849fc3338 100644 --- a/requirements/static/ci/py3.9/windows.txt +++ b/requirements/static/ci/py3.9/windows.txt @@ -23,7 +23,7 @@ backports.entry-points-selectable==1.1.0 # via virtualenv bcrypt==4.0.1 # via passlib -boto3==1.21.46 ; python_version >= "3.6" +boto3==1.21.46 # via # -r requirements/static/ci/common.in # moto @@ -95,7 +95,7 @@ dnspython==1.16.0 # python-etcd docker==6.1.3 # via -r requirements/static/ci/common.in -etcd3-py==0.1.6 ; python_version >= "3.6" +etcd3-py==0.1.6 # via -r requirements/static/ci/common.in exceptiongroup==1.0.4 # via pytest @@ -113,7 +113,7 @@ geomet==0.1.2 # via cassandra-driver gitdb==4.0.7 # via gitpython -gitpython==3.1.32 ; python_version >= "3.7" +gitpython==3.1.32 # via # -r requirements/static/ci/common.in # -r requirements/windows.txt @@ -182,7 +182,7 @@ more-itertools==8.2.0 # cherrypy # jaraco.classes # jaraco.functools -moto==3.0.1 ; python_version >= "3.6" +moto==3.0.1 # via -r requirements/static/ci/common.in msgpack==1.0.2 # via @@ -233,7 +233,7 @@ pycparser==2.21 ; python_version >= "3.9" # cffi pycryptodomex==3.10.1 # via -r requirements/crypto.txt -pygit2==1.9.1 ; python_version >= "3.7" +pygit2==1.9.1 # via -r requirements/static/ci/windows.in pymssql==2.2.1 # via -r requirements/windows.txt @@ -277,7 +277,7 @@ pytest-tempdir==2019.10.12 # pytest-salt-factories pytest-timeout==1.4.2 # via -r requirements/pytest.txt -pytest==7.2.0 ; python_version > "3.6" +pytest==7.2.0 # via # -r requirements/pytest.txt # pytest-custom-exit-code diff --git a/requirements/static/ci/windows.in b/requirements/static/ci/windows.in index b2b7857de46..38fc3fd2e08 100644 --- a/requirements/static/ci/windows.in +++ b/requirements/static/ci/windows.in @@ -1,7 +1,7 @@ # This is a compilation of requirements installed on salt-jenkins git.salt state run dmidecode patch -pygit2>=1.2.0; python_version >= '3.7' +pygit2>=1.2.0 sed pywinrm>=0.4.1 yamllint diff --git a/requirements/static/pkg/freebsd.in b/requirements/static/pkg/freebsd.in index 1e176a3bed5..3780d5b0fd8 100644 --- a/requirements/static/pkg/freebsd.in +++ b/requirements/static/pkg/freebsd.in @@ -2,7 +2,6 @@ # Any non hard dependencies of Salt for FreeBSD can go here cherrypy cryptography>=41.0.3 -backports.ssl_match_hostname>=3.7.0.1; python_version < '3.7' pycparser>=2.21; python_version >= '3.9' pyopenssl>=23.2.0 python-dateutil>=2.8.0 diff --git a/requirements/static/pkg/linux.in b/requirements/static/pkg/linux.in index a47fa824571..937c6d3b204 100644 --- a/requirements/static/pkg/linux.in +++ b/requirements/static/pkg/linux.in @@ -1,7 +1,6 @@ # This file only exists to trigger the right static compiled requirements destination. # Any non hard dependencies of Salt for linux can go here cherrypy -backports.ssl_match_hostname>=3.7.0.1; python_version < '3.7' pycparser>=2.21; python_version >= '3.9' pyopenssl>=23.2.0 python-dateutil>=2.8.0 diff --git a/requirements/static/pkg/py3.10/darwin.txt b/requirements/static/pkg/py3.10/darwin.txt index b9aaea3f42e..b509fe18a49 100644 --- a/requirements/static/pkg/py3.10/darwin.txt +++ b/requirements/static/pkg/py3.10/darwin.txt @@ -26,7 +26,7 @@ distro==1.5.0 # via -r requirements/base.txt gitdb==4.0.5 # via gitpython -gitpython==3.1.32 ; python_version >= "3.7" +gitpython==3.1.32 # via -r requirements/darwin.txt idna==2.8 # via diff --git a/requirements/static/pkg/py3.10/windows.txt b/requirements/static/pkg/py3.10/windows.txt index 76e17f94456..6d9dbcd8aec 100644 --- a/requirements/static/pkg/py3.10/windows.txt +++ b/requirements/static/pkg/py3.10/windows.txt @@ -31,7 +31,7 @@ distro==1.5.0 # via -r requirements/base.txt gitdb==4.0.7 # via gitpython -gitpython==3.1.32 ; python_version >= "3.7" +gitpython==3.1.32 # via -r requirements/windows.txt idna==2.8 # via requests diff --git a/requirements/static/pkg/py3.7/windows.txt b/requirements/static/pkg/py3.7/windows.txt index ab4e9493f44..48d3cf3ffd8 100644 --- a/requirements/static/pkg/py3.7/windows.txt +++ b/requirements/static/pkg/py3.7/windows.txt @@ -31,7 +31,7 @@ distro==1.5.0 # via -r requirements/base.txt gitdb==4.0.7 # via gitpython -gitpython==3.1.32 ; python_version >= "3.7" +gitpython==3.1.32 # via -r requirements/windows.txt idna==2.8 # via requests diff --git a/requirements/static/pkg/py3.8/windows.txt b/requirements/static/pkg/py3.8/windows.txt index a23b283ba9f..6ef55de08d6 100644 --- a/requirements/static/pkg/py3.8/windows.txt +++ b/requirements/static/pkg/py3.8/windows.txt @@ -31,7 +31,7 @@ distro==1.5.0 # via -r requirements/base.txt gitdb==4.0.7 # via gitpython -gitpython==3.1.32 ; python_version >= "3.7" +gitpython==3.1.32 # via -r requirements/windows.txt idna==2.8 # via requests diff --git a/requirements/static/pkg/py3.9/darwin.txt b/requirements/static/pkg/py3.9/darwin.txt index 4239f389687..d14cef34763 100644 --- a/requirements/static/pkg/py3.9/darwin.txt +++ b/requirements/static/pkg/py3.9/darwin.txt @@ -26,7 +26,7 @@ distro==1.5.0 # via -r requirements/base.txt gitdb==4.0.5 # via gitpython -gitpython==3.1.32 ; python_version >= "3.7" +gitpython==3.1.32 # via -r requirements/darwin.txt idna==2.8 # via diff --git a/requirements/static/pkg/py3.9/windows.txt b/requirements/static/pkg/py3.9/windows.txt index 6953886102a..7f6e1cc32ee 100644 --- a/requirements/static/pkg/py3.9/windows.txt +++ b/requirements/static/pkg/py3.9/windows.txt @@ -31,7 +31,7 @@ distro==1.5.0 # via -r requirements/base.txt gitdb==4.0.7 # via gitpython -gitpython==3.1.32 ; python_version >= "3.7" +gitpython==3.1.32 # via -r requirements/windows.txt idna==2.8 # via requests diff --git a/requirements/windows.txt b/requirements/windows.txt index 998bdd2dadc..7911eef6732 100644 --- a/requirements/windows.txt +++ b/requirements/windows.txt @@ -6,12 +6,11 @@ pywin32>=305 wmi>=1.5.1 pythonnet>=3.0.1 -backports.ssl-match-hostname>=3.7.0.1; python_version < '3.7' certifi>=2022.12.07 cffi>=1.14.5 cherrypy>=18.6.1 cryptography>=41.0.3 -gitpython>=3.1.30; python_version >= '3.7' +gitpython>=3.1.30 ioloop>=0.1a0 lxml>=4.6.3 pyasn1>=0.4.8 From 9b22e5a3343ae7782499e698c75c0170386498c2 Mon Sep 17 00:00:00 2001 From: Pedro Algarvio Date: Mon, 11 Sep 2023 09:44:11 +0100 Subject: [PATCH 015/153] Bump to `gitpython==3.1.35` Due to https://github.com/advisories/GHSA-cwvm-v4w8-q58c Due to https://github.com/advisories/GHSA-wfm5-v35h-vwf4 Signed-off-by: Pedro Algarvio --- requirements/static/ci/py3.10/cloud.txt | 2 +- requirements/static/ci/py3.10/darwin.txt | 2 +- requirements/static/ci/py3.10/freebsd.txt | 2 +- requirements/static/ci/py3.10/lint.txt | 2 +- requirements/static/ci/py3.10/linux.txt | 2 +- requirements/static/ci/py3.10/windows.txt | 2 +- requirements/static/ci/py3.7/cloud.txt | 2 +- requirements/static/ci/py3.7/freebsd.txt | 2 +- requirements/static/ci/py3.7/lint.txt | 2 +- requirements/static/ci/py3.7/linux.txt | 2 +- requirements/static/ci/py3.7/windows.txt | 2 +- requirements/static/ci/py3.8/cloud.txt | 2 +- requirements/static/ci/py3.8/freebsd.txt | 2 +- requirements/static/ci/py3.8/lint.txt | 2 +- requirements/static/ci/py3.8/linux.txt | 2 +- requirements/static/ci/py3.8/windows.txt | 2 +- requirements/static/ci/py3.9/cloud.txt | 2 +- requirements/static/ci/py3.9/darwin.txt | 2 +- requirements/static/ci/py3.9/freebsd.txt | 2 +- requirements/static/ci/py3.9/lint.txt | 2 +- requirements/static/ci/py3.9/linux.txt | 2 +- requirements/static/ci/py3.9/windows.txt | 2 +- requirements/static/pkg/py3.10/darwin.txt | 2 +- requirements/static/pkg/py3.10/windows.txt | 2 +- requirements/static/pkg/py3.7/windows.txt | 2 +- requirements/static/pkg/py3.8/windows.txt | 2 +- requirements/static/pkg/py3.9/darwin.txt | 2 +- requirements/static/pkg/py3.9/windows.txt | 2 +- 28 files changed, 28 insertions(+), 28 deletions(-) diff --git a/requirements/static/ci/py3.10/cloud.txt b/requirements/static/ci/py3.10/cloud.txt index 9f233fa5bc8..3760311cf5c 100644 --- a/requirements/static/ci/py3.10/cloud.txt +++ b/requirements/static/ci/py3.10/cloud.txt @@ -432,7 +432,7 @@ geomet==0.2.1.post1 # via cassandra-driver gitdb==4.0.7 # via gitpython -gitpython==3.1.32 +gitpython==3.1.35 # via -r requirements/static/ci/common.in google-auth==2.1.0 # via kubernetes diff --git a/requirements/static/ci/py3.10/darwin.txt b/requirements/static/ci/py3.10/darwin.txt index 2ab6f4f882d..3c82e233bf8 100644 --- a/requirements/static/ci/py3.10/darwin.txt +++ b/requirements/static/ci/py3.10/darwin.txt @@ -430,7 +430,7 @@ geomet==0.1.2 # via cassandra-driver gitdb==4.0.5 # via gitpython -gitpython==3.1.32 +gitpython==3.1.35 # via # -r requirements/darwin.txt # -r requirements/static/ci/common.in diff --git a/requirements/static/ci/py3.10/freebsd.txt b/requirements/static/ci/py3.10/freebsd.txt index 671d456d14d..f2ce437f32f 100644 --- a/requirements/static/ci/py3.10/freebsd.txt +++ b/requirements/static/ci/py3.10/freebsd.txt @@ -429,7 +429,7 @@ geomet==0.2.1.post1 # via cassandra-driver gitdb==4.0.5 # via gitpython -gitpython==3.1.32 +gitpython==3.1.35 # via -r requirements/static/ci/common.in google-auth==1.6.3 # via kubernetes diff --git a/requirements/static/ci/py3.10/lint.txt b/requirements/static/ci/py3.10/lint.txt index ba82e751e1c..42e3bb70d53 100644 --- a/requirements/static/ci/py3.10/lint.txt +++ b/requirements/static/ci/py3.10/lint.txt @@ -427,7 +427,7 @@ geomet==0.2.1.post1 # via cassandra-driver gitdb==4.0.7 # via gitpython -gitpython==3.1.32 +gitpython==3.1.35 # via -r requirements/static/ci/common.in google-auth==2.0.1 # via kubernetes diff --git a/requirements/static/ci/py3.10/linux.txt b/requirements/static/ci/py3.10/linux.txt index e7fe004ada3..d313d2a4d4e 100644 --- a/requirements/static/ci/py3.10/linux.txt +++ b/requirements/static/ci/py3.10/linux.txt @@ -443,7 +443,7 @@ geomet==0.1.2 # via cassandra-driver gitdb==4.0.5 # via gitpython -gitpython==3.1.32 +gitpython==3.1.35 # via -r requirements/static/ci/common.in google-auth==1.6.3 # via kubernetes diff --git a/requirements/static/ci/py3.10/windows.txt b/requirements/static/ci/py3.10/windows.txt index 07d600c7f21..a24a499a494 100644 --- a/requirements/static/ci/py3.10/windows.txt +++ b/requirements/static/ci/py3.10/windows.txt @@ -111,7 +111,7 @@ geomet==0.1.2 # via cassandra-driver gitdb==4.0.7 # via gitpython -gitpython==3.1.32 +gitpython==3.1.35 # via # -r requirements/static/ci/common.in # -r requirements/windows.txt diff --git a/requirements/static/ci/py3.7/cloud.txt b/requirements/static/ci/py3.7/cloud.txt index 0f14a5ab23b..3f7b17caf10 100644 --- a/requirements/static/ci/py3.7/cloud.txt +++ b/requirements/static/ci/py3.7/cloud.txt @@ -444,7 +444,7 @@ geomet==0.2.1.post1 # via cassandra-driver gitdb==4.0.7 # via gitpython -gitpython==3.1.32 +gitpython==3.1.35 # via -r requirements/static/ci/common.in google-auth==2.1.0 # via kubernetes diff --git a/requirements/static/ci/py3.7/freebsd.txt b/requirements/static/ci/py3.7/freebsd.txt index 3111162b317..1e7afdb6cd2 100644 --- a/requirements/static/ci/py3.7/freebsd.txt +++ b/requirements/static/ci/py3.7/freebsd.txt @@ -441,7 +441,7 @@ geomet==0.2.1.post1 # via cassandra-driver gitdb==4.0.5 # via gitpython -gitpython==3.1.32 +gitpython==3.1.35 # via -r requirements/static/ci/common.in google-auth==1.6.3 # via kubernetes diff --git a/requirements/static/ci/py3.7/lint.txt b/requirements/static/ci/py3.7/lint.txt index a6771ea92c9..d7dfa7be3e9 100644 --- a/requirements/static/ci/py3.7/lint.txt +++ b/requirements/static/ci/py3.7/lint.txt @@ -441,7 +441,7 @@ geomet==0.2.1.post1 # via cassandra-driver gitdb==4.0.7 # via gitpython -gitpython==3.1.32 +gitpython==3.1.35 # via -r requirements/static/ci/common.in google-auth==2.0.1 # via kubernetes diff --git a/requirements/static/ci/py3.7/linux.txt b/requirements/static/ci/py3.7/linux.txt index 1d41351fca0..f3199f753cd 100644 --- a/requirements/static/ci/py3.7/linux.txt +++ b/requirements/static/ci/py3.7/linux.txt @@ -455,7 +455,7 @@ geomet==0.1.2 # via cassandra-driver gitdb==4.0.5 # via gitpython -gitpython==3.1.32 +gitpython==3.1.35 # via -r requirements/static/ci/common.in google-auth==1.6.3 # via kubernetes diff --git a/requirements/static/ci/py3.7/windows.txt b/requirements/static/ci/py3.7/windows.txt index c66cd5853d9..7fc81594776 100644 --- a/requirements/static/ci/py3.7/windows.txt +++ b/requirements/static/ci/py3.7/windows.txt @@ -117,7 +117,7 @@ geomet==0.1.2 # via cassandra-driver gitdb==4.0.7 # via gitpython -gitpython==3.1.32 +gitpython==3.1.35 # via # -r requirements/static/ci/common.in # -r requirements/windows.txt diff --git a/requirements/static/ci/py3.8/cloud.txt b/requirements/static/ci/py3.8/cloud.txt index 34e3b8061cc..26e8ac212c7 100644 --- a/requirements/static/ci/py3.8/cloud.txt +++ b/requirements/static/ci/py3.8/cloud.txt @@ -442,7 +442,7 @@ geomet==0.2.1.post1 # via cassandra-driver gitdb==4.0.7 # via gitpython -gitpython==3.1.32 +gitpython==3.1.35 # via -r requirements/static/ci/common.in google-auth==2.1.0 # via kubernetes diff --git a/requirements/static/ci/py3.8/freebsd.txt b/requirements/static/ci/py3.8/freebsd.txt index 8913b1fa92f..e0ac76d3098 100644 --- a/requirements/static/ci/py3.8/freebsd.txt +++ b/requirements/static/ci/py3.8/freebsd.txt @@ -439,7 +439,7 @@ geomet==0.2.1.post1 # via cassandra-driver gitdb==4.0.5 # via gitpython -gitpython==3.1.32 +gitpython==3.1.35 # via -r requirements/static/ci/common.in google-auth==1.6.3 # via kubernetes diff --git a/requirements/static/ci/py3.8/lint.txt b/requirements/static/ci/py3.8/lint.txt index efb6aa4a6db..9e85b9f0848 100644 --- a/requirements/static/ci/py3.8/lint.txt +++ b/requirements/static/ci/py3.8/lint.txt @@ -439,7 +439,7 @@ geomet==0.2.1.post1 # via cassandra-driver gitdb==4.0.7 # via gitpython -gitpython==3.1.32 +gitpython==3.1.35 # via -r requirements/static/ci/common.in google-auth==2.0.1 # via kubernetes diff --git a/requirements/static/ci/py3.8/linux.txt b/requirements/static/ci/py3.8/linux.txt index 3c816f8c0b0..6a2e2c8af41 100644 --- a/requirements/static/ci/py3.8/linux.txt +++ b/requirements/static/ci/py3.8/linux.txt @@ -453,7 +453,7 @@ geomet==0.1.2 # via cassandra-driver gitdb==4.0.5 # via gitpython -gitpython==3.1.32 +gitpython==3.1.35 # via -r requirements/static/ci/common.in google-auth==1.6.3 # via kubernetes diff --git a/requirements/static/ci/py3.8/windows.txt b/requirements/static/ci/py3.8/windows.txt index 7d0f0a9c036..6a23c545a54 100644 --- a/requirements/static/ci/py3.8/windows.txt +++ b/requirements/static/ci/py3.8/windows.txt @@ -113,7 +113,7 @@ geomet==0.1.2 # via cassandra-driver gitdb==4.0.7 # via gitpython -gitpython==3.1.32 +gitpython==3.1.35 # via # -r requirements/static/ci/common.in # -r requirements/windows.txt diff --git a/requirements/static/ci/py3.9/cloud.txt b/requirements/static/ci/py3.9/cloud.txt index 8e635726333..34d8818c179 100644 --- a/requirements/static/ci/py3.9/cloud.txt +++ b/requirements/static/ci/py3.9/cloud.txt @@ -442,7 +442,7 @@ geomet==0.2.1.post1 # via cassandra-driver gitdb==4.0.7 # via gitpython -gitpython==3.1.32 +gitpython==3.1.35 # via -r requirements/static/ci/common.in google-auth==2.1.0 # via kubernetes diff --git a/requirements/static/ci/py3.9/darwin.txt b/requirements/static/ci/py3.9/darwin.txt index e65cd22d72d..a9904314b47 100644 --- a/requirements/static/ci/py3.9/darwin.txt +++ b/requirements/static/ci/py3.9/darwin.txt @@ -440,7 +440,7 @@ geomet==0.1.2 # via cassandra-driver gitdb==4.0.5 # via gitpython -gitpython==3.1.32 +gitpython==3.1.35 # via # -r requirements/darwin.txt # -r requirements/static/ci/common.in diff --git a/requirements/static/ci/py3.9/freebsd.txt b/requirements/static/ci/py3.9/freebsd.txt index 4bf3108b462..c6c242c3d1f 100644 --- a/requirements/static/ci/py3.9/freebsd.txt +++ b/requirements/static/ci/py3.9/freebsd.txt @@ -439,7 +439,7 @@ geomet==0.2.1.post1 # via cassandra-driver gitdb==4.0.5 # via gitpython -gitpython==3.1.32 +gitpython==3.1.35 # via -r requirements/static/ci/common.in google-auth==1.6.3 # via kubernetes diff --git a/requirements/static/ci/py3.9/lint.txt b/requirements/static/ci/py3.9/lint.txt index 4c917f41f3e..690aceb8677 100644 --- a/requirements/static/ci/py3.9/lint.txt +++ b/requirements/static/ci/py3.9/lint.txt @@ -437,7 +437,7 @@ geomet==0.2.1.post1 # via cassandra-driver gitdb==4.0.7 # via gitpython -gitpython==3.1.32 +gitpython==3.1.35 # via -r requirements/static/ci/common.in google-auth==2.0.1 # via kubernetes diff --git a/requirements/static/ci/py3.9/linux.txt b/requirements/static/ci/py3.9/linux.txt index 2bf73ffe6e2..eeb78f5534d 100644 --- a/requirements/static/ci/py3.9/linux.txt +++ b/requirements/static/ci/py3.9/linux.txt @@ -455,7 +455,7 @@ geomet==0.1.2 # via cassandra-driver gitdb==4.0.5 # via gitpython -gitpython==3.1.32 +gitpython==3.1.35 # via -r requirements/static/ci/common.in google-auth==1.6.3 # via kubernetes diff --git a/requirements/static/ci/py3.9/windows.txt b/requirements/static/ci/py3.9/windows.txt index 0e849fc3338..8699cd05124 100644 --- a/requirements/static/ci/py3.9/windows.txt +++ b/requirements/static/ci/py3.9/windows.txt @@ -113,7 +113,7 @@ geomet==0.1.2 # via cassandra-driver gitdb==4.0.7 # via gitpython -gitpython==3.1.32 +gitpython==3.1.35 # via # -r requirements/static/ci/common.in # -r requirements/windows.txt diff --git a/requirements/static/pkg/py3.10/darwin.txt b/requirements/static/pkg/py3.10/darwin.txt index b509fe18a49..4bee194057e 100644 --- a/requirements/static/pkg/py3.10/darwin.txt +++ b/requirements/static/pkg/py3.10/darwin.txt @@ -26,7 +26,7 @@ distro==1.5.0 # via -r requirements/base.txt gitdb==4.0.5 # via gitpython -gitpython==3.1.32 +gitpython==3.1.35 # via -r requirements/darwin.txt idna==2.8 # via diff --git a/requirements/static/pkg/py3.10/windows.txt b/requirements/static/pkg/py3.10/windows.txt index 6d9dbcd8aec..59b57dab0a8 100644 --- a/requirements/static/pkg/py3.10/windows.txt +++ b/requirements/static/pkg/py3.10/windows.txt @@ -31,7 +31,7 @@ distro==1.5.0 # via -r requirements/base.txt gitdb==4.0.7 # via gitpython -gitpython==3.1.32 +gitpython==3.1.35 # via -r requirements/windows.txt idna==2.8 # via requests diff --git a/requirements/static/pkg/py3.7/windows.txt b/requirements/static/pkg/py3.7/windows.txt index 48d3cf3ffd8..1a570a4602a 100644 --- a/requirements/static/pkg/py3.7/windows.txt +++ b/requirements/static/pkg/py3.7/windows.txt @@ -31,7 +31,7 @@ distro==1.5.0 # via -r requirements/base.txt gitdb==4.0.7 # via gitpython -gitpython==3.1.32 +gitpython==3.1.35 # via -r requirements/windows.txt idna==2.8 # via requests diff --git a/requirements/static/pkg/py3.8/windows.txt b/requirements/static/pkg/py3.8/windows.txt index 6ef55de08d6..7a5669c534e 100644 --- a/requirements/static/pkg/py3.8/windows.txt +++ b/requirements/static/pkg/py3.8/windows.txt @@ -31,7 +31,7 @@ distro==1.5.0 # via -r requirements/base.txt gitdb==4.0.7 # via gitpython -gitpython==3.1.32 +gitpython==3.1.35 # via -r requirements/windows.txt idna==2.8 # via requests diff --git a/requirements/static/pkg/py3.9/darwin.txt b/requirements/static/pkg/py3.9/darwin.txt index d14cef34763..f8b866e2b62 100644 --- a/requirements/static/pkg/py3.9/darwin.txt +++ b/requirements/static/pkg/py3.9/darwin.txt @@ -26,7 +26,7 @@ distro==1.5.0 # via -r requirements/base.txt gitdb==4.0.5 # via gitpython -gitpython==3.1.32 +gitpython==3.1.35 # via -r requirements/darwin.txt idna==2.8 # via diff --git a/requirements/static/pkg/py3.9/windows.txt b/requirements/static/pkg/py3.9/windows.txt index 7f6e1cc32ee..c243742d9ea 100644 --- a/requirements/static/pkg/py3.9/windows.txt +++ b/requirements/static/pkg/py3.9/windows.txt @@ -31,7 +31,7 @@ distro==1.5.0 # via -r requirements/base.txt gitdb==4.0.7 # via gitpython -gitpython==3.1.32 +gitpython==3.1.35 # via -r requirements/windows.txt idna==2.8 # via requests From 030393c352b5c271d613249fdfba7b82afe40adb Mon Sep 17 00:00:00 2001 From: Megan Wilhite Date: Thu, 28 Sep 2023 11:45:25 -0600 Subject: [PATCH 016/153] Add changelog --- changelog/65163.security.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 changelog/65163.security.md diff --git a/changelog/65163.security.md b/changelog/65163.security.md new file mode 100644 index 00000000000..8d6f57c7d0c --- /dev/null +++ b/changelog/65163.security.md @@ -0,0 +1 @@ +Update to `gitpython>=3.1.35` due to https://github.com/advisories/GHSA-wfm5-v35h-vwf4 and https://github.com/advisories/GHSA-cwvm-v4w8-q58c From 5f50947763d1193095a6a782e295f058b193fe1a Mon Sep 17 00:00:00 2001 From: Pedro Algarvio Date: Thu, 28 Sep 2023 19:08:58 +0100 Subject: [PATCH 017/153] Set `gitpython>=3.1.35` Signed-off-by: Pedro Algarvio --- requirements/darwin.txt | 2 +- requirements/static/ci/common.in | 2 +- requirements/windows.txt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/requirements/darwin.txt b/requirements/darwin.txt index 59aa84bc06e..7e9fccb25dc 100644 --- a/requirements/darwin.txt +++ b/requirements/darwin.txt @@ -5,7 +5,7 @@ apache-libcloud>=2.4.0 cherrypy>=17.4.1 cryptography>=41.0.3 -gitpython>=3.1.30 +gitpython>=3.1.35 idna>=2.8 linode-python>=1.1.1 pyasn1>=0.4.8 diff --git a/requirements/static/ci/common.in b/requirements/static/ci/common.in index ac54d8ee9e7..ca4663b3805 100644 --- a/requirements/static/ci/common.in +++ b/requirements/static/ci/common.in @@ -14,7 +14,7 @@ croniter>=0.3.0,!=0.3.22"; sys_platform != 'win32' dnspython docker etcd3-py==0.1.6 -gitpython>=3.1.30 +gitpython>=3.1.35 jmespath jsonschema junos-eznc; sys_platform != 'win32' and python_version <= '3.10' diff --git a/requirements/windows.txt b/requirements/windows.txt index 7911eef6732..b2553ae2fca 100644 --- a/requirements/windows.txt +++ b/requirements/windows.txt @@ -10,7 +10,7 @@ certifi>=2022.12.07 cffi>=1.14.5 cherrypy>=18.6.1 cryptography>=41.0.3 -gitpython>=3.1.30 +gitpython>=3.1.35 ioloop>=0.1a0 lxml>=4.6.3 pyasn1>=0.4.8 From b7735ab8f6868610db7b25e29ecf35d5263d9c9b Mon Sep 17 00:00:00 2001 From: Megan Wilhite Date: Thu, 28 Sep 2023 07:58:09 -0600 Subject: [PATCH 018/153] Add pytest integration pre_flight integration tests for CVE-2023-34049 --- tests/integration/ssh/test_pre_flight.py | 132 -------- .../integration/ssh/test_pre_flight.py | 308 ++++++++++++++++++ 2 files changed, 308 insertions(+), 132 deletions(-) delete mode 100644 tests/integration/ssh/test_pre_flight.py create mode 100644 tests/pytests/integration/ssh/test_pre_flight.py diff --git a/tests/integration/ssh/test_pre_flight.py b/tests/integration/ssh/test_pre_flight.py deleted file mode 100644 index 9ce8bf70243..00000000000 --- a/tests/integration/ssh/test_pre_flight.py +++ /dev/null @@ -1,132 +0,0 @@ -""" -Test for ssh_pre_flight roster option -""" - -import os - -import pytest -import salt.utils.files -from tests.support.case import SSHCase -from tests.support.runtests import RUNTIME_VARS - - -class SSHPreFlightTest(SSHCase): - """ - Test ssh_pre_flight roster option - """ - - def setUp(self): - super().setUp() - self.roster = os.path.join(RUNTIME_VARS.TMP, "pre_flight_roster") - self.data = { - "ssh_pre_flight": os.path.join(RUNTIME_VARS.TMP, "ssh_pre_flight.sh") - } - self.test_script = os.path.join( - RUNTIME_VARS.TMP, "test-pre-flight-script-worked.txt" - ) - - def _create_roster(self, pre_flight_script_args=None): - data = dict(self.data) - if pre_flight_script_args: - data["ssh_pre_flight_args"] = pre_flight_script_args - - self.custom_roster(self.roster, data) - - with salt.utils.files.fopen(data["ssh_pre_flight"], "w") as fp_: - fp_.write("touch {}".format(self.test_script)) - - @pytest.mark.slow_test - def test_ssh_pre_flight(self): - """ - test ssh when ssh_pre_flight is set - ensure the script runs successfully - """ - self._create_roster() - assert self.run_function("test.ping", roster_file=self.roster) - - assert os.path.exists(self.test_script) - - @pytest.mark.slow_test - def test_ssh_run_pre_flight(self): - """ - test ssh when --pre-flight is passed to salt-ssh - to ensure the script runs successfully - """ - self._create_roster() - # make sure we previously ran a command so the thin dir exists - self.run_function("test.ping", wipe=False) - assert not os.path.exists(self.test_script) - - assert self.run_function( - "test.ping", ssh_opts="--pre-flight", roster_file=self.roster, wipe=False - ) - assert os.path.exists(self.test_script) - - @pytest.mark.slow_test - def test_ssh_run_pre_flight_args(self): - """ - test ssh when --pre-flight is passed to salt-ssh - to ensure the script runs successfully passing some args - """ - self._create_roster(pre_flight_script_args="foobar test") - # make sure we previously ran a command so the thin dir exists - self.run_function("test.ping", wipe=False) - assert not os.path.exists(self.test_script) - - assert self.run_function( - "test.ping", ssh_opts="--pre-flight", roster_file=self.roster, wipe=False - ) - assert os.path.exists(self.test_script) - - @pytest.mark.slow_test - def test_ssh_run_pre_flight_args_prevent_injection(self): - """ - test ssh when --pre-flight is passed to salt-ssh - and evil arguments are used in order to produce shell injection - """ - injected_file = os.path.join(RUNTIME_VARS.TMP, "injection") - self._create_roster( - pre_flight_script_args="foobar; echo injected > {}".format(injected_file) - ) - # make sure we previously ran a command so the thin dir exists - self.run_function("test.ping", wipe=False) - assert not os.path.exists(self.test_script) - assert not os.path.isfile(injected_file) - - assert self.run_function( - "test.ping", ssh_opts="--pre-flight", roster_file=self.roster, wipe=False - ) - - assert not os.path.isfile( - injected_file - ), "File injection suceeded. This shouldn't happend" - - @pytest.mark.flaky(max_runs=4) - @pytest.mark.slow_test - def test_ssh_run_pre_flight_failure(self): - """ - test ssh_pre_flight when there is a failure - in the script. - """ - self._create_roster() - with salt.utils.files.fopen(self.data["ssh_pre_flight"], "w") as fp_: - fp_.write("exit 2") - - ret = self.run_function( - "test.ping", ssh_opts="--pre-flight", roster_file=self.roster, wipe=False - ) - assert ret["retcode"] == 2 - - def tearDown(self): - """ - make sure to clean up any old ssh directories - """ - files = [ - self.roster, - self.data["ssh_pre_flight"], - self.test_script, - os.path.join(RUNTIME_VARS.TMP, "injection"), - ] - for fp_ in files: - if os.path.exists(fp_): - os.remove(fp_) diff --git a/tests/pytests/integration/ssh/test_pre_flight.py b/tests/pytests/integration/ssh/test_pre_flight.py new file mode 100644 index 00000000000..0f97424b5c8 --- /dev/null +++ b/tests/pytests/integration/ssh/test_pre_flight.py @@ -0,0 +1,308 @@ +""" +Test for ssh_pre_flight roster option +""" + +import grp +import os +import pathlib +import pwd +import shutil +import subprocess + +import pytest +import salt.utils.files +import yaml +from saltfactories.utils import random_string + + +def _custom_roster(roster_file, roster_data): + with salt.utils.files.fopen(roster_file, "r") as fp: + data = salt.utils.yaml.safe_load(fp) + for key, item in roster_data.items(): + data["localhost"][key] = item + with salt.utils.files.fopen(roster_file, "w") as fp: + yaml.safe_dump(data, fp) + + +@pytest.fixture +def _create_roster(salt_ssh_roster_file, tmp_path): + ret = {} + ret["roster"] = salt_ssh_roster_file + ret["data"] = {"ssh_pre_flight": str(tmp_path / "ssh_pre_flight.sh")} + ret["test_script"] = str(tmp_path / "test-pre-flight-script-worked.txt") + ret["thin_dir"] = tmp_path / "thin_dir" + + with salt.utils.files.fopen(salt_ssh_roster_file, "r") as fp: + data = salt.utils.yaml.safe_load(fp) + pre_flight_script = ret["data"]["ssh_pre_flight"] + data["localhost"]["ssh_pre_flight"] = pre_flight_script + data["localhost"]["thin_dir"] = str(ret["thin_dir"]) + with salt.utils.files.fopen(salt_ssh_roster_file, "w") as fp: + yaml.safe_dump(data, fp) + + with salt.utils.files.fopen(pre_flight_script, "w") as fp: + fp.write("touch {}".format(ret["test_script"])) + + yield ret + if ret["thin_dir"].exists(): + shutil.rmtree(ret["thin_dir"]) + + +@pytest.mark.slow_test +def test_ssh_pre_flight(salt_ssh_cli, caplog, _create_roster): + """ + test ssh when ssh_pre_flight is set + ensure the script runs successfully + """ + ret = salt_ssh_cli.run("test.ping") + assert ret.returncode == 0 + + assert pathlib.Path(_create_roster["test_script"]).exists() + + +@pytest.mark.slow_test +def test_ssh_run_pre_flight(salt_ssh_cli, _create_roster): + """ + test ssh when --pre-flight is passed to salt-ssh + to ensure the script runs successfully + """ + # make sure we previously ran a command so the thin dir exists + ret = salt_ssh_cli.run("test.ping") + assert pathlib.Path(_create_roster["test_script"]).exists() + + # Now remeove the script to ensure pre_flight doesn't run + # without --pre-flight + pathlib.Path(_create_roster["test_script"]).unlink() + + assert salt_ssh_cli.run("test.ping").returncode == 0 + assert not pathlib.Path(_create_roster["test_script"]).exists() + + # Now ensure + ret = salt_ssh_cli.run( + "test.ping", + "--pre-flight", + ) + assert ret.returncode == 0 + assert pathlib.Path(_create_roster["test_script"]).exists() + + +@pytest.mark.slow_test +def test_ssh_run_pre_flight_args(salt_ssh_cli, _create_roster): + """ + test ssh when --pre-flight is passed to salt-ssh + to ensure the script runs successfully passing some args + """ + _custom_roster(salt_ssh_cli.roster_file, {"ssh_pre_flight_args": "foobar test"}) + # Create pre_flight script that accepts args + test_script = _create_roster["test_script"] + test_script_1 = pathlib.Path(test_script + "-foobar") + test_script_2 = pathlib.Path(test_script + "-test") + with salt.utils.files.fopen(_create_roster["data"]["ssh_pre_flight"], "w") as fp: + fp.write( + f""" + touch {str(test_script)}-$1 + touch {str(test_script)}-$2 + """ + ) + ret = salt_ssh_cli.run("test.ping") + assert ret.returncode == 0 + assert test_script_1.exists() + assert test_script_2.exists() + pathlib.Path(test_script_1).unlink() + pathlib.Path(test_script_2).unlink() + + ret = salt_ssh_cli.run("test.ping") + assert ret.returncode == 0 + assert not test_script_1.exists() + assert not test_script_2.exists() + + ret = salt_ssh_cli.run( + "test.ping", + "--pre-flight", + ) + assert ret.returncode == 0 + assert test_script_1.exists() + assert test_script_2.exists() + + +@pytest.mark.slow_test +def test_ssh_run_pre_flight_args_prevent_injection( + salt_ssh_cli, _create_roster, tmp_path +): + """ + test ssh when --pre-flight is passed to salt-ssh + and evil arguments are used in order to produce shell injection + """ + injected_file = tmp_path / "injection" + _custom_roster( + salt_ssh_cli.roster_file, + {"ssh_pre_flight_args": f"foobar; echo injected > {str(injected_file)}"}, + ) + # Create pre_flight script that accepts args + test_script = _create_roster["test_script"] + test_script_1 = pathlib.Path(test_script + "-echo") + test_script_2 = pathlib.Path(test_script + "-foobar;") + with salt.utils.files.fopen(_create_roster["data"]["ssh_pre_flight"], "w") as fp: + fp.write( + f""" + touch {str(test_script)}-$1 + touch {str(test_script)}-$2 + """ + ) + + # make sure we previously ran a command so the thin dir exists + ret = salt_ssh_cli.run("test.ping") + assert ret.returncode == 0 + assert test_script_1.exists() + assert test_script_2.exists() + test_script_1.unlink() + test_script_2.unlink() + assert not injected_file.is_file() + + ret = salt_ssh_cli.run( + "test.ping", + "--pre-flight", + ) + assert ret.returncode == 0 + + assert test_script_1.exists() + assert test_script_2.exists() + assert not pathlib.Path( + injected_file + ).is_file(), "File injection suceeded. This shouldn't happend" + + +@pytest.mark.flaky(max_runs=4) +@pytest.mark.slow_test +def test_ssh_run_pre_flight_failure(salt_ssh_cli, _create_roster): + """ + test ssh_pre_flight when there is a failure + in the script. + """ + with salt.utils.files.fopen(_create_roster["data"]["ssh_pre_flight"], "w") as fp_: + fp_.write("exit 2") + + ret = salt_ssh_cli.run( + "test.ping", + "--pre-flight", + ) + assert ret.data["retcode"] == 2 + + +@pytest.fixture +def account(): + username = random_string("test-account-", uppercase=False) + with pytest.helpers.create_account(username=username) as account: + yield account + + +@pytest.mark.slow_test +def test_ssh_pre_flight_script(salt_ssh_cli, caplog, _create_roster, tmp_path, account): + """ + Test to ensure user cannot create and run a script + with the expected pre_flight script path on target. + """ + try: + script = pathlib.Path.home() / "hacked" + tmp_preflight = pathlib.Path("/tmp", "ssh_pre_flight.sh") + tmp_preflight.write_text(f"touch {script}") + os.chown(tmp_preflight, account.info.uid, account.info.gid) + ret = salt_ssh_cli.run("test.ping") + assert not script.is_file() + assert ret.returncode == 0 + assert ret.stdout == '{\n"localhost": true\n}\n' + finally: + for _file in [script, tmp_preflight]: + if _file.is_file(): + _file.unlink() + + +def demote(user_uid, user_gid): + def result(): + # os.setgid does not remove group membership, so we remove them here so they are REALLY non-root + os.setgroups([]) + os.setgid(user_gid) + os.setuid(user_uid) + + return result + + +@pytest.mark.slow_test +def test_ssh_pre_flight_perms(salt_ssh_cli, caplog, _create_roster, account): + """ + Test to ensure standard user cannot run pre flight script + on target when user sets wrong permissions (777) on + ssh_pre_flight script. + """ + try: + script = pathlib.Path("/tmp", "itworked") + preflight = pathlib.Path("/ssh_pre_flight.sh") + preflight.write_text(f"touch {str(script)}") + tmp_preflight = pathlib.Path("/tmp", preflight.name) + + _custom_roster(salt_ssh_cli.roster_file, {"ssh_pre_flight": str(preflight)}) + preflight.chmod(0o0777) + run_script = pathlib.Path("/run_script") + run_script.write_text( + f""" + x=1 + while [ $x -le 200000 ]; do + SCRIPT=`bash {str(tmp_preflight)} 2> /dev/null; echo $?` + if [ ${{SCRIPT}} == 0 ]; then + break + fi + x=$(( $x + 1 )) + done + """ + ) + run_script.chmod(0o0777) + # pylint: disable=W1509 + ret = subprocess.Popen( + ["sh", f"{run_script}"], + preexec_fn=demote(account.info.uid, account.info.gid), + stdout=None, + stderr=None, + stdin=None, + universal_newlines=True, + ) + # pylint: enable=W1509 + ret = salt_ssh_cli.run("test.ping") + assert ret.returncode == 0 + + # Lets make sure a different user other than root + # Didn't run the script + assert os.stat(script).st_uid != account.info.uid + assert script.is_file() + finally: + for _file in [script, preflight, tmp_preflight, run_script]: + if _file.is_file(): + _file.unlink() + + +@pytest.mark.slow_test +def test_ssh_run_pre_flight_target_file_perms(salt_ssh_cli, _create_roster, tmp_path): + """ + test ssh_pre_flight to ensure the target pre flight script + has the correct perms + """ + perms_file = tmp_path / "perms" + with salt.utils.files.fopen(_create_roster["data"]["ssh_pre_flight"], "w") as fp_: + fp_.write( + f""" + SCRIPT_NAME=$0 + stat -L -c "%a %G %U" $SCRIPT_NAME > {perms_file} + """ + ) + + ret = salt_ssh_cli.run( + "test.ping", + "--pre-flight", + ) + assert ret.returncode == 0 + with salt.utils.files.fopen(perms_file) as fp: + data = fp.read() + assert data.split()[0] == "600" + uid = os.getuid() + gid = os.getgid() + assert data.split()[1] == grp.getgrgid(gid).gr_name + assert data.split()[2] == pwd.getpwuid(uid).pw_name From 8ed7bad4f8b9439ad2fbb86a22d120fb2fa592ce Mon Sep 17 00:00:00 2001 From: Megan Wilhite Date: Thu, 28 Sep 2023 07:59:29 -0600 Subject: [PATCH 019/153] Fix CVE-2023-34049 --- changelog/cve-2023-34049.security | 2 + salt/client/ssh/__init__.py | 68 +- tests/pytests/unit/client/ssh/test_single.py | 820 +++++++++++++++++++ tests/pytests/unit/client/ssh/test_ssh.py | 277 +++++++ 4 files changed, 1149 insertions(+), 18 deletions(-) create mode 100644 changelog/cve-2023-34049.security create mode 100644 tests/pytests/unit/client/ssh/test_single.py diff --git a/changelog/cve-2023-34049.security b/changelog/cve-2023-34049.security new file mode 100644 index 00000000000..6b0ca190a27 --- /dev/null +++ b/changelog/cve-2023-34049.security @@ -0,0 +1,2 @@ +Fix CVE-2023-34049 by ensuring we do not use a predictable name for the script and correctly check returncode of scp command. +This only impacts salt-ssh users using the pre-flight option. diff --git a/salt/client/ssh/__init__.py b/salt/client/ssh/__init__.py index 5e557c51da1..1c25942d90a 100644 --- a/salt/client/ssh/__init__.py +++ b/salt/client/ssh/__init__.py @@ -11,9 +11,11 @@ import hashlib import logging import multiprocessing import os +import pathlib import queue import re import shlex +import shutil import subprocess import sys import tarfile @@ -467,7 +469,14 @@ class SSH(MultiprocessingStateMixin): if target.get("passwd", False) or self.opts["ssh_passwd"]: self._key_deploy_run(host, target, False) return ret - if ret[host].get("stderr", "").count("Permission denied"): + stderr = ret[host].get("stderr", "") + # -failed to upload file- is detecting scp errors + # Errors to ignore when Permission denied is in the stderr. For example + # scp can get a permission denied on the target host, but they where + # able to accurate authenticate against the box + ignore_err = ["failed to upload file"] + check_err = [x for x in ignore_err if stderr.count(x)] + if "Permission denied" in stderr and not check_err: target = self.targets[host] # permission denied, attempt to auto deploy ssh key print( @@ -500,7 +509,7 @@ class SSH(MultiprocessingStateMixin): mods=self.mods, fsclient=self.fsclient, thin=self.thin, - **target + **target, ) if salt.utils.path.which("ssh-copy-id"): # we have ssh-copy-id, use it! @@ -516,7 +525,7 @@ class SSH(MultiprocessingStateMixin): mods=self.mods, fsclient=self.fsclient, thin=self.thin, - **target + **target, ) stdout, stderr, retcode = single.cmd_block() try: @@ -543,7 +552,7 @@ class SSH(MultiprocessingStateMixin): fsclient=self.fsclient, thin=self.thin, mine=mine, - **target + **target, ) ret = {"id": single.id} stdout, stderr, retcode = single.run() @@ -883,7 +892,7 @@ class Single: remote_port_forwards=None, winrm=False, ssh_options=None, - **kwargs + **kwargs, ): # Get mine setting and mine_functions if defined in kwargs (from roster) self.mine = mine @@ -1007,11 +1016,32 @@ class Single: """ Run our pre_flight script before running any ssh commands """ - script = os.path.join(tempfile.gettempdir(), self.ssh_pre_file) + with tempfile.NamedTemporaryFile() as temp: + # ensure we use copyfile to not copy the file attributes + # we want to ensure we use the perms set by the secure + # NamedTemporaryFile + try: + shutil.copyfile(self.ssh_pre_flight, temp.name) + except OSError as err: + return ( + "", + f"Could not copy pre flight script {self.ssh_pre_flight} to temporary path", + 1, + ) + target_script = f".{pathlib.Path(temp.name).name}" + log.trace(f"Copying the pre flight script {self.ssh_pre_file} to target") + stdout, stderr, retcode = self.shell.send(temp.name, target_script) + if retcode != 0: + # We could not copy the script to the target + log.error( + f"Could not copy the pre flight script {self.ssh_pre_file} to target" + ) + return stdout, stderr, retcode - self.shell.send(self.ssh_pre_flight, script) - - return self.execute_script(script, script_args=self.ssh_pre_flight_args) + log.trace(f"Executing the pre flight script {self.ssh_pre_file} on target") + return self.execute_script( + target_script, script_args=self.ssh_pre_flight_args + ) def check_thin_dir(self): """ @@ -1131,7 +1161,7 @@ class Single: self.id, fsclient=self.fsclient, minion_opts=self.minion_opts, - **self.target + **self.target, ) opts_pkg = pre_wrapper["test.opts_pkg"]() # pylint: disable=E1102 @@ -1210,7 +1240,7 @@ class Single: self.id, fsclient=self.fsclient, minion_opts=self.minion_opts, - **self.target + **self.target, ) wrapper.fsclient.opts["cachedir"] = opts["cachedir"] self.wfuncs = salt.loader.ssh_wrapper(opts, wrapper, self.context) @@ -1381,18 +1411,20 @@ ARGS = {arguments}\n'''.format( return self.shell.exec_cmd(cmd_str) # Write the shim to a temporary file in the default temp directory - with tempfile.NamedTemporaryFile( - mode="w+b", prefix="shim_", delete=False - ) as shim_tmp_file: + with tempfile.NamedTemporaryFile(mode="w+b", delete=False) as shim_tmp_file: shim_tmp_file.write(salt.utils.stringutils.to_bytes(cmd_str)) # Copy shim to target system, under $HOME/. - target_shim_file = ".{}.{}".format( - binascii.hexlify(os.urandom(6)).decode("ascii"), extension - ) + target_shim_file = f".{pathlib.Path(shim_tmp_file.name).name}" + if self.winrm: target_shim_file = saltwinshell.get_target_shim_file(self, target_shim_file) - self.shell.send(shim_tmp_file.name, target_shim_file, makedirs=True) + stdout, stderr, retcode = self.shell.send( + shim_tmp_file.name, target_shim_file, makedirs=True + ) + if retcode != 0: + log.error(f"Could not copy the shim script to target") + return stdout, stderr, retcode # Remove our shim file try: diff --git a/tests/pytests/unit/client/ssh/test_single.py b/tests/pytests/unit/client/ssh/test_single.py new file mode 100644 index 00000000000..912c8cccec0 --- /dev/null +++ b/tests/pytests/unit/client/ssh/test_single.py @@ -0,0 +1,820 @@ +import logging +import re +from textwrap import dedent + +import pytest +import salt.client.ssh.client +import salt.config +import salt.roster +import salt.utils.files +import salt.utils.path +import salt.utils.platform +import salt.utils.thin +import salt.utils.yaml +from salt.client import ssh +from tests.support.mock import MagicMock, call, patch + +log = logging.getLogger(__name__) + + +@pytest.fixture +def opts(tmp_path): + return { + "argv": [ + "ssh.set_auth_key", + "root", + "hobn+amNAXSBTiOXEqlBjGB...rsa root@master", + ], + "__role": "master", + "cachedir": str(tmp_path), + "extension_modules": str(tmp_path / "extmods"), + } + + +@pytest.fixture +def target(): + return { + "passwd": "abc123", + "ssh_options": None, + "sudo": False, + "identities_only": False, + "host": "login1", + "user": "root", + "timeout": 65, + "remote_port_forwards": None, + "sudo_user": "", + "port": "22", + "priv": "/etc/salt/pki/master/ssh/salt-ssh.rsa", + } + + +def test_single_opts(opts, target): + """Sanity check for ssh.Single options""" + + single = ssh.Single( + opts, + opts["argv"], + "localhost", + mods={}, + fsclient=None, + thin=salt.utils.thin.thin_path(opts["cachedir"]), + mine=False, + **target, + ) + + assert single.shell._ssh_opts() == "" + expected_cmd = ( + "ssh login1 " + "-o KbdInteractiveAuthentication=no -o " + "PasswordAuthentication=yes -o ConnectTimeout=65 -o Port=22 " + "-o IdentityFile=/etc/salt/pki/master/ssh/salt-ssh.rsa " + "-o User=root date +%s" + ) + assert single.shell._cmd_str("date +%s") == expected_cmd + + +def test_run_with_pre_flight(opts, target, tmp_path): + """ + test Single.run() when ssh_pre_flight is set + and script successfully runs + """ + target["ssh_pre_flight"] = str(tmp_path / "script.sh") + single = ssh.Single( + opts, + opts["argv"], + "localhost", + mods={}, + fsclient=None, + thin=salt.utils.thin.thin_path(opts["cachedir"]), + mine=False, + **target, + ) + + cmd_ret = ("Success", "", 0) + mock_flight = MagicMock(return_value=cmd_ret) + mock_cmd = MagicMock(return_value=cmd_ret) + patch_flight = patch("salt.client.ssh.Single.run_ssh_pre_flight", mock_flight) + patch_cmd = patch("salt.client.ssh.Single.cmd_block", mock_cmd) + patch_exec_cmd = patch( + "salt.client.ssh.shell.Shell.exec_cmd", return_value=("", "", 1) + ) + patch_os = patch("os.path.exists", side_effect=[True]) + + with patch_os, patch_flight, patch_cmd, patch_exec_cmd: + ret = single.run() + mock_cmd.assert_called() + mock_flight.assert_called() + assert ret == cmd_ret + + +def test_run_with_pre_flight_with_args(opts, target, tmp_path): + """ + test Single.run() when ssh_pre_flight is set + and script successfully runs + """ + target["ssh_pre_flight"] = str(tmp_path / "script.sh") + target["ssh_pre_flight_args"] = "foobar" + single = ssh.Single( + opts, + opts["argv"], + "localhost", + mods={}, + fsclient=None, + thin=salt.utils.thin.thin_path(opts["cachedir"]), + mine=False, + **target, + ) + + cmd_ret = ("Success", "foobar", 0) + mock_flight = MagicMock(return_value=cmd_ret) + mock_cmd = MagicMock(return_value=cmd_ret) + patch_flight = patch("salt.client.ssh.Single.run_ssh_pre_flight", mock_flight) + patch_cmd = patch("salt.client.ssh.Single.cmd_block", mock_cmd) + patch_exec_cmd = patch( + "salt.client.ssh.shell.Shell.exec_cmd", return_value=("", "", 1) + ) + patch_os = patch("os.path.exists", side_effect=[True]) + + with patch_os, patch_flight, patch_cmd, patch_exec_cmd: + ret = single.run() + mock_cmd.assert_called() + mock_flight.assert_called() + assert ret == cmd_ret + + +def test_run_with_pre_flight_stderr(opts, target, tmp_path): + """ + test Single.run() when ssh_pre_flight is set + and script errors when run + """ + target["ssh_pre_flight"] = str(tmp_path / "script.sh") + single = ssh.Single( + opts, + opts["argv"], + "localhost", + mods={}, + fsclient=None, + thin=salt.utils.thin.thin_path(opts["cachedir"]), + mine=False, + **target, + ) + + cmd_ret = ("", "Error running script", 1) + mock_flight = MagicMock(return_value=cmd_ret) + mock_cmd = MagicMock(return_value=cmd_ret) + patch_flight = patch("salt.client.ssh.Single.run_ssh_pre_flight", mock_flight) + patch_cmd = patch("salt.client.ssh.Single.cmd_block", mock_cmd) + patch_exec_cmd = patch( + "salt.client.ssh.shell.Shell.exec_cmd", return_value=("", "", 1) + ) + patch_os = patch("os.path.exists", side_effect=[True]) + + with patch_os, patch_flight, patch_cmd, patch_exec_cmd: + ret = single.run() + mock_cmd.assert_not_called() + mock_flight.assert_called() + assert ret == cmd_ret + + +def test_run_with_pre_flight_script_doesnot_exist(opts, target, tmp_path): + """ + test Single.run() when ssh_pre_flight is set + and the script does not exist + """ + target["ssh_pre_flight"] = str(tmp_path / "script.sh") + single = ssh.Single( + opts, + opts["argv"], + "localhost", + mods={}, + fsclient=None, + thin=salt.utils.thin.thin_path(opts["cachedir"]), + mine=False, + **target, + ) + + cmd_ret = ("Success", "", 0) + mock_flight = MagicMock(return_value=cmd_ret) + mock_cmd = MagicMock(return_value=cmd_ret) + patch_flight = patch("salt.client.ssh.Single.run_ssh_pre_flight", mock_flight) + patch_cmd = patch("salt.client.ssh.Single.cmd_block", mock_cmd) + patch_exec_cmd = patch( + "salt.client.ssh.shell.Shell.exec_cmd", return_value=("", "", 1) + ) + patch_os = patch("os.path.exists", side_effect=[False]) + + with patch_os, patch_flight, patch_cmd, patch_exec_cmd: + ret = single.run() + mock_cmd.assert_called() + mock_flight.assert_not_called() + assert ret == cmd_ret + + +def test_run_with_pre_flight_thin_dir_exists(opts, target, tmp_path): + """ + test Single.run() when ssh_pre_flight is set + and thin_dir already exists + """ + target["ssh_pre_flight"] = str(tmp_path / "script.sh") + single = ssh.Single( + opts, + opts["argv"], + "localhost", + mods={}, + fsclient=None, + thin=salt.utils.thin.thin_path(opts["cachedir"]), + mine=False, + **target, + ) + + cmd_ret = ("", "", 0) + mock_flight = MagicMock(return_value=cmd_ret) + mock_cmd = MagicMock(return_value=cmd_ret) + patch_flight = patch("salt.client.ssh.Single.run_ssh_pre_flight", mock_flight) + patch_cmd = patch("salt.client.ssh.shell.Shell.exec_cmd", mock_cmd) + patch_cmd_block = patch("salt.client.ssh.Single.cmd_block", mock_cmd) + patch_os = patch("os.path.exists", return_value=True) + + with patch_os, patch_flight, patch_cmd, patch_cmd_block: + ret = single.run() + mock_cmd.assert_called() + mock_flight.assert_not_called() + assert ret == cmd_ret + + +def test_run_ssh_pre_flight(opts, target, tmp_path): + """ + test Single.run_ssh_pre_flight function + """ + target["ssh_pre_flight"] = str(tmp_path / "script.sh") + single = ssh.Single( + opts, + opts["argv"], + "localhost", + mods={}, + fsclient=None, + thin=salt.utils.thin.thin_path(opts["cachedir"]), + mine=False, + **target, + ) + + cmd_ret = ("Success", "", 0) + mock_flight = MagicMock(return_value=cmd_ret) + mock_cmd = MagicMock(return_value=cmd_ret) + patch_flight = patch("salt.client.ssh.Single.run_ssh_pre_flight", mock_flight) + patch_cmd = patch("salt.client.ssh.Single.cmd_block", mock_cmd) + patch_exec_cmd = patch( + "salt.client.ssh.shell.Shell.exec_cmd", return_value=("", "", 1) + ) + patch_os = patch("os.path.exists", side_effect=[True]) + + with patch_os, patch_flight, patch_cmd, patch_exec_cmd: + ret = single.run() + mock_cmd.assert_called() + mock_flight.assert_called() + assert ret == cmd_ret + + +def test_execute_script(opts, target, tmp_path): + """ + test Single.execute_script() + """ + single = ssh.Single( + opts, + opts["argv"], + "localhost", + mods={}, + fsclient=None, + thin=salt.utils.thin.thin_path(opts["cachedir"]), + mine=False, + winrm=False, + **target, + ) + + exp_ret = ("Success", "", 0) + mock_cmd = MagicMock(return_value=exp_ret) + patch_cmd = patch("salt.client.ssh.shell.Shell.exec_cmd", mock_cmd) + script = str(tmp_path / "script.sh") + + with patch_cmd: + ret = single.execute_script(script=script) + assert ret == exp_ret + assert mock_cmd.call_count == 2 + assert [ + call("/bin/sh '{}'".format(script)), + call("rm '{}'".format(script)), + ] == mock_cmd.call_args_list + + +def test_shim_cmd(opts, target, tmp_path): + """ + test Single.shim_cmd() + """ + single = ssh.Single( + opts, + opts["argv"], + "localhost", + mods={}, + fsclient=None, + thin=salt.utils.thin.thin_path(opts["cachedir"]), + mine=False, + winrm=False, + tty=True, + **target, + ) + + exp_ret = ("Success", "", 0) + mock_cmd = MagicMock(return_value=exp_ret) + patch_cmd = patch("salt.client.ssh.shell.Shell.exec_cmd", mock_cmd) + patch_send = patch("salt.client.ssh.shell.Shell.send", return_value=("", "", 0)) + patch_rand = patch("os.urandom", return_value=b"5\xd9l\xca\xc2\xff") + tmp_file = tmp_path / "tmp_file" + mock_tmp = MagicMock() + patch_tmp = patch("tempfile.NamedTemporaryFile", mock_tmp) + mock_tmp.return_value.__enter__.return_value.name = tmp_file + + with patch_cmd, patch_tmp, patch_send: + ret = single.shim_cmd(cmd_str="echo test") + assert ret == exp_ret + assert [ + call(f"/bin/sh '.{tmp_file.name}'"), + call(f"rm '.{tmp_file.name}'"), + ] == mock_cmd.call_args_list + + +def test_shim_cmd_copy_fails(opts, target, caplog): + """ + test Single.shim_cmd() when copying the file fails + """ + single = ssh.Single( + opts, + opts["argv"], + "localhost", + mods={}, + fsclient=None, + thin=salt.utils.thin.thin_path(opts["cachedir"]), + mine=False, + winrm=False, + tty=True, + **target, + ) + + ret_cmd = ("Success", "", 0) + mock_cmd = MagicMock(return_value=ret_cmd) + patch_cmd = patch("salt.client.ssh.shell.Shell.exec_cmd", mock_cmd) + ret_send = ("", "General error in file copy", 1) + patch_send = patch("salt.client.ssh.shell.Shell.send", return_value=ret_send) + patch_rand = patch("os.urandom", return_value=b"5\xd9l\xca\xc2\xff") + + with patch_cmd, patch_rand, patch_send: + ret = single.shim_cmd(cmd_str="echo test") + assert ret == ret_send + assert "Could not copy the shim script to target" in caplog.text + mock_cmd.assert_not_called() + + +def test_run_ssh_pre_flight_no_connect(opts, target, tmp_path, caplog): + """ + test Single.run_ssh_pre_flight when you + cannot connect to the target + """ + pre_flight = tmp_path / "script.sh" + pre_flight.write_text("") + target["ssh_pre_flight"] = str(pre_flight) + single = ssh.Single( + opts, + opts["argv"], + "localhost", + mods={}, + fsclient=None, + thin=salt.utils.thin.thin_path(opts["cachedir"]), + mine=False, + winrm=False, + tty=True, + **target, + ) + mock_exec_cmd = MagicMock(return_value=("", "", 1)) + patch_exec_cmd = patch("salt.client.ssh.shell.Shell.exec_cmd", mock_exec_cmd) + tmp_file = tmp_path / "tmp_file" + mock_tmp = MagicMock() + patch_tmp = patch("tempfile.NamedTemporaryFile", mock_tmp) + mock_tmp.return_value.__enter__.return_value.name = tmp_file + ret_send = ( + "", + "ssh: connect to host 192.168.1.186 port 22: No route to host\nscp: Connection closed\n", + 255, + ) + send_mock = MagicMock(return_value=ret_send) + patch_send = patch("salt.client.ssh.shell.Shell.send", send_mock) + + with caplog.at_level(logging.TRACE): + with patch_send, patch_exec_cmd, patch_tmp: + ret = single.run_ssh_pre_flight() + assert f"Copying the pre flight script {pre_flight.name}" in caplog.text + assert ( + f"Could not copy the pre flight script {pre_flight.name} to target" + in caplog.text + ) + assert ret == ret_send + assert send_mock.call_args_list[0][0][0] == tmp_file + target_script = send_mock.call_args_list[0][0][1] + assert re.search(r".[a-z0-9]+", target_script) + mock_exec_cmd.assert_not_called() + + +def test_run_ssh_pre_flight_permission_denied(opts, target, tmp_path): + """ + test Single.run_ssh_pre_flight when you + cannot copy script to the target due to + a permission denied error + """ + pre_flight = tmp_path / "script.sh" + pre_flight.write_text("") + target["ssh_pre_flight"] = str(pre_flight) + single = ssh.Single( + opts, + opts["argv"], + "localhost", + mods={}, + fsclient=None, + thin=salt.utils.thin.thin_path(opts["cachedir"]), + mine=False, + winrm=False, + tty=True, + **target, + ) + mock_exec_cmd = MagicMock(return_value=("", "", 1)) + patch_exec_cmd = patch("salt.client.ssh.shell.Shell.exec_cmd", mock_exec_cmd) + tmp_file = tmp_path / "tmp_file" + mock_tmp = MagicMock() + patch_tmp = patch("tempfile.NamedTemporaryFile", mock_tmp) + mock_tmp.return_value.__enter__.return_value.name = tmp_file + ret_send = ( + "", + 'scp: dest open "/tmp/preflight.sh": Permission denied\nscp: failed to upload file /etc/salt/preflight.sh to /tmp/preflight.sh\n', + 255, + ) + send_mock = MagicMock(return_value=ret_send) + patch_send = patch("salt.client.ssh.shell.Shell.send", send_mock) + + with patch_send, patch_exec_cmd, patch_tmp: + ret = single.run_ssh_pre_flight() + assert ret == ret_send + assert send_mock.call_args_list[0][0][0] == tmp_file + target_script = send_mock.call_args_list[0][0][1] + assert re.search(r".[a-z0-9]+", target_script) + mock_exec_cmd.assert_not_called() + + +def test_run_ssh_pre_flight_connect(opts, target, tmp_path, caplog): + """ + test Single.run_ssh_pre_flight when you + can connect to the target + """ + pre_flight = tmp_path / "script.sh" + pre_flight.write_text("") + target["ssh_pre_flight"] = str(pre_flight) + single = ssh.Single( + opts, + opts["argv"], + "localhost", + mods={}, + fsclient=None, + thin=salt.utils.thin.thin_path(opts["cachedir"]), + mine=False, + winrm=False, + tty=True, + **target, + ) + ret_exec_cmd = ("", "", 1) + mock_exec_cmd = MagicMock(return_value=ret_exec_cmd) + patch_exec_cmd = patch("salt.client.ssh.shell.Shell.exec_cmd", mock_exec_cmd) + tmp_file = tmp_path / "tmp_file" + mock_tmp = MagicMock() + patch_tmp = patch("tempfile.NamedTemporaryFile", mock_tmp) + mock_tmp.return_value.__enter__.return_value.name = tmp_file + ret_send = ( + "", + "\rroot@192.168.1.187's password: \n\rpreflight.sh 0% 0 0.0KB/s --:-- ETA\rpreflight.sh 100% 20 2.7KB/s 00:00 \n", + 0, + ) + send_mock = MagicMock(return_value=ret_send) + patch_send = patch("salt.client.ssh.shell.Shell.send", send_mock) + + with caplog.at_level(logging.TRACE): + with patch_send, patch_exec_cmd, patch_tmp: + ret = single.run_ssh_pre_flight() + + assert f"Executing the pre flight script {pre_flight.name} on target" in caplog.text + assert ret == ret_exec_cmd + assert send_mock.call_args_list[0][0][0] == tmp_file + target_script = send_mock.call_args_list[0][0][1] + assert re.search(r".[a-z0-9]+", target_script) + mock_exec_cmd.assert_called() + + +def test_run_ssh_pre_flight_shutil_fails(opts, target, tmp_path): + """ + test Single.run_ssh_pre_flight when cannot + copyfile with shutil + """ + pre_flight = tmp_path / "script.sh" + pre_flight.write_text("") + target["ssh_pre_flight"] = str(pre_flight) + single = ssh.Single( + opts, + opts["argv"], + "localhost", + mods={}, + fsclient=None, + thin=salt.utils.thin.thin_path(opts["cachedir"]), + mine=False, + winrm=False, + tty=True, + **target, + ) + ret_exec_cmd = ("", "", 1) + mock_exec_cmd = MagicMock(return_value=ret_exec_cmd) + patch_exec_cmd = patch("salt.client.ssh.shell.Shell.exec_cmd", mock_exec_cmd) + tmp_file = tmp_path / "tmp_file" + mock_tmp = MagicMock() + patch_tmp = patch("tempfile.NamedTemporaryFile", mock_tmp) + mock_tmp.return_value.__enter__.return_value.name = tmp_file + send_mock = MagicMock() + mock_shutil = MagicMock(side_effect=IOError("Permission Denied")) + patch_shutil = patch("shutil.copyfile", mock_shutil) + patch_send = patch("salt.client.ssh.shell.Shell.send", send_mock) + + with patch_send, patch_exec_cmd, patch_tmp, patch_shutil: + ret = single.run_ssh_pre_flight() + + assert ret == ( + "", + f"Could not copy pre flight script {pre_flight} to temporary path", + 1, + ) + mock_exec_cmd.assert_not_called() + send_mock.assert_not_called() + + +@pytest.mark.skip_on_windows(reason="SSH_PY_SHIM not set on windows") +@pytest.mark.slow_test +def test_cmd_run_set_path(opts, target): + """ + test when set_path is set + """ + target["set_path"] = "$PATH:/tmp/path/" + single = ssh.Single( + opts, + opts["argv"], + "localhost", + mods={}, + fsclient=None, + thin=salt.utils.thin.thin_path(opts["cachedir"]), + mine=False, + **target, + ) + + ret = single._cmd_str() + assert re.search("\\" + target["set_path"], ret) + + +@pytest.mark.skip_on_windows(reason="SSH_PY_SHIM not set on windows") +@pytest.mark.slow_test +def test_cmd_run_not_set_path(opts, target): + """ + test when set_path is not set + """ + single = ssh.Single( + opts, + opts["argv"], + "localhost", + mods={}, + fsclient=None, + thin=salt.utils.thin.thin_path(opts["cachedir"]), + mine=False, + **target, + ) + + ret = single._cmd_str() + assert re.search('SET_PATH=""', ret) + + +@pytest.mark.skip_on_windows(reason="SSH_PY_SHIM not set on windows") +@pytest.mark.slow_test +def test_cmd_block_python_version_error(opts, target): + single = ssh.Single( + opts, + opts["argv"], + "localhost", + mods={}, + fsclient=None, + thin=salt.utils.thin.thin_path(opts["cachedir"]), + mine=False, + winrm=False, + **target, + ) + mock_shim = MagicMock( + return_value=(("", "ERROR: Unable to locate appropriate python command\n", 10)) + ) + patch_shim = patch("salt.client.ssh.Single.shim_cmd", mock_shim) + with patch_shim: + ret = single.cmd_block() + assert "ERROR: Python version error. Recommendation(s) follow:" in ret[0] + + +def _check_skip(grains): + if grains["os"] == "MacOS": + return True + return False + + +@pytest.mark.skip_initial_gh_actions_failure(skip=_check_skip) +@pytest.mark.skip_on_windows(reason="pre_flight_args is not implemented for Windows") +@pytest.mark.parametrize( + "test_opts", + [ + (None, ""), + ("one", " one"), + ("one two", " one two"), + ("| touch /tmp/test", " '|' touch /tmp/test"), + ("; touch /tmp/test", " ';' touch /tmp/test"), + (["one"], " one"), + (["one", "two"], " one two"), + (["one", "two", "| touch /tmp/test"], " one two '| touch /tmp/test'"), + (["one", "two", "; touch /tmp/test"], " one two '; touch /tmp/test'"), + ], +) +def test_run_with_pre_flight_args(opts, target, test_opts, tmp_path): + """ + test Single.run() when ssh_pre_flight is set + and script successfully runs + """ + opts["ssh_run_pre_flight"] = True + pre_flight_script = tmp_path / "script.sh" + pre_flight_script.write_text("") + target["ssh_pre_flight"] = str(pre_flight_script) + + if test_opts[0] is not None: + target["ssh_pre_flight_args"] = test_opts[0] + expected_args = test_opts[1] + + single = ssh.Single( + opts, + opts["argv"], + "localhost", + mods={}, + fsclient=None, + thin=salt.utils.thin.thin_path(opts["cachedir"]), + mine=False, + **target, + ) + + cmd_ret = ("Success", "", 0) + mock_cmd = MagicMock(return_value=cmd_ret) + mock_exec_cmd = MagicMock(return_value=("", "", 0)) + patch_cmd = patch("salt.client.ssh.Single.cmd_block", mock_cmd) + patch_exec_cmd = patch("salt.client.ssh.shell.Shell.exec_cmd", mock_exec_cmd) + patch_shell_send = patch( + "salt.client.ssh.shell.Shell.send", return_value=("", "", 0) + ) + patch_os = patch("os.path.exists", side_effect=[True]) + + with patch_os, patch_cmd, patch_exec_cmd, patch_shell_send: + single.run() + script_args = mock_exec_cmd.mock_calls[0].args[0] + assert re.search(r"\/bin\/sh '.[a-z0-9]+", script_args) + + +@pytest.mark.slow_test +@pytest.mark.skip_on_windows(reason="Windows does not support salt-ssh") +@pytest.mark.skip_if_binaries_missing("ssh", check_all=True) +def test_ssh_single__cmd_str(opts): + argv = [] + id_ = "minion" + host = "minion" + + single = ssh.Single(opts, argv, id_, host, sudo=False) + cmd = single._cmd_str() + expected = dedent( + """ + SUDO="" + if [ -n "" ] + then SUDO=" " + fi + SUDO_USER="" + if [ "$SUDO" ] && [ "$SUDO_USER" ] + then SUDO="$SUDO -u $SUDO_USER" + fi + """ + ) + + assert expected in cmd + + +@pytest.mark.slow_test +@pytest.mark.skip_on_windows(reason="Windows does not support salt-ssh") +@pytest.mark.skip_if_binaries_missing("ssh", check_all=True) +def test_ssh_single__cmd_str_sudo(opts): + argv = [] + id_ = "minion" + host = "minion" + + single = ssh.Single(opts, argv, id_, host, sudo=True) + cmd = single._cmd_str() + expected = dedent( + """ + SUDO="" + if [ -n "sudo" ] + then SUDO="sudo " + fi + SUDO_USER="" + if [ "$SUDO" ] && [ "$SUDO_USER" ] + then SUDO="$SUDO -u $SUDO_USER" + fi + """ + ) + + assert expected in cmd + + +@pytest.mark.slow_test +@pytest.mark.skip_on_windows(reason="Windows does not support salt-ssh") +@pytest.mark.skip_if_binaries_missing("ssh", check_all=True) +def test_ssh_single__cmd_str_sudo_user(opts): + argv = [] + id_ = "minion" + host = "minion" + user = "wayne" + + single = ssh.Single(opts, argv, id_, host, sudo=True, sudo_user=user) + cmd = single._cmd_str() + expected = dedent( + """ + SUDO="" + if [ -n "sudo" ] + then SUDO="sudo " + fi + SUDO_USER="wayne" + if [ "$SUDO" ] && [ "$SUDO_USER" ] + then SUDO="$SUDO -u $SUDO_USER" + fi + """ + ) + + assert expected in cmd + + +@pytest.mark.slow_test +@pytest.mark.skip_on_windows(reason="Windows does not support salt-ssh") +@pytest.mark.skip_if_binaries_missing("ssh", check_all=True) +def test_ssh_single__cmd_str_sudo_passwd(opts): + argv = [] + id_ = "minion" + host = "minion" + passwd = "salty" + + single = ssh.Single(opts, argv, id_, host, sudo=True, passwd=passwd) + cmd = single._cmd_str() + expected = dedent( + """ + SUDO="" + if [ -n "sudo -p '[salt:sudo:d11bd4221135c33324a6bdc09674146fbfdf519989847491e34a689369bbce23]passwd:'" ] + then SUDO="sudo -p '[salt:sudo:d11bd4221135c33324a6bdc09674146fbfdf519989847491e34a689369bbce23]passwd:' " + fi + SUDO_USER="" + if [ "$SUDO" ] && [ "$SUDO_USER" ] + then SUDO="$SUDO -u $SUDO_USER" + fi + """ + ) + + assert expected in cmd + + +@pytest.mark.slow_test +@pytest.mark.skip_on_windows(reason="Windows does not support salt-ssh") +@pytest.mark.skip_if_binaries_missing("ssh", check_all=True) +def test_ssh_single__cmd_str_sudo_passwd_user(opts): + argv = [] + id_ = "minion" + host = "minion" + user = "wayne" + passwd = "salty" + + single = ssh.Single(opts, argv, id_, host, sudo=True, passwd=passwd, sudo_user=user) + cmd = single._cmd_str() + expected = dedent( + """ + SUDO="" + if [ -n "sudo -p '[salt:sudo:d11bd4221135c33324a6bdc09674146fbfdf519989847491e34a689369bbce23]passwd:'" ] + then SUDO="sudo -p '[salt:sudo:d11bd4221135c33324a6bdc09674146fbfdf519989847491e34a689369bbce23]passwd:' " + fi + SUDO_USER="wayne" + if [ "$SUDO" ] && [ "$SUDO_USER" ] + then SUDO="$SUDO -u $SUDO_USER" + fi + """ + ) + + assert expected in cmd diff --git a/tests/pytests/unit/client/ssh/test_ssh.py b/tests/pytests/unit/client/ssh/test_ssh.py index b9388f10ea2..07f70c42437 100644 --- a/tests/pytests/unit/client/ssh/test_ssh.py +++ b/tests/pytests/unit/client/ssh/test_ssh.py @@ -194,3 +194,280 @@ def test_run_with_pre_flight_args(ssh_target, test_opts): assert mock_exec_cmd.mock_calls[0].args[ 0 ] == "/bin/sh '/tmp/script.sh'{}".format(expected_args) + + +def test_expand_target_dns(opts, roster): + """ + test expand_target when target is root@ + """ + host = "localhost" + user = "test-user@" + opts["tgt"] = user + host + + with patch("salt.utils.network.is_reachable_host", MagicMock(return_value=False)): + client = ssh.SSH(opts) + assert opts["tgt"] == user + host + with patch( + "salt.roster.get_roster_file", MagicMock(return_value="/etc/salt/roster") + ), patch( + "salt.client.ssh.compile_template", + MagicMock(return_value=salt.utils.yaml.safe_load(roster)), + ): + client._expand_target() + assert opts["tgt"] == host + + +def test_expand_target_no_user(opts, roster): + """ + test expand_target when no user defined + """ + host = "127.0.0.1" + opts["tgt"] = host + + with patch("salt.utils.network.is_reachable_host", MagicMock(return_value=False)): + client = ssh.SSH(opts) + assert opts["tgt"] == host + + with patch( + "salt.roster.get_roster_file", MagicMock(return_value="/etc/salt/roster") + ), patch( + "salt.client.ssh.compile_template", + MagicMock(return_value=salt.utils.yaml.safe_load(roster)), + ): + client._expand_target() + assert opts["tgt"] == host + + +def test_update_targets_ip_address(opts): + """ + test update_targets when host is ip address + """ + host = "127.0.0.1" + user = "test-user@" + opts["tgt"] = user + host + + with patch("salt.utils.network.is_reachable_host", MagicMock(return_value=False)): + client = ssh.SSH(opts) + assert opts["tgt"] == user + host + client._update_targets() + assert opts["tgt"] == host + assert client.targets[host]["user"] == user.split("@")[0] + + +def test_update_targets_dns(opts): + """ + test update_targets when host is dns + """ + host = "localhost" + user = "test-user@" + opts["tgt"] = user + host + + with patch("salt.utils.network.is_reachable_host", MagicMock(return_value=False)): + client = ssh.SSH(opts) + assert opts["tgt"] == user + host + client._update_targets() + assert opts["tgt"] == host + assert client.targets[host]["user"] == user.split("@")[0] + + +def test_update_targets_no_user(opts): + """ + test update_targets when no user defined + """ + host = "127.0.0.1" + opts["tgt"] = host + + with patch("salt.utils.network.is_reachable_host", MagicMock(return_value=False)): + client = ssh.SSH(opts) + assert opts["tgt"] == host + client._update_targets() + assert opts["tgt"] == host + + +def test_update_expand_target_dns(opts, roster): + """ + test update_targets and expand_target when host is dns + """ + host = "localhost" + user = "test-user@" + opts["tgt"] = user + host + + with patch("salt.utils.network.is_reachable_host", MagicMock(return_value=False)): + client = ssh.SSH(opts) + assert opts["tgt"] == user + host + with patch( + "salt.roster.get_roster_file", MagicMock(return_value="/etc/salt/roster") + ), patch( + "salt.client.ssh.compile_template", + MagicMock(return_value=salt.utils.yaml.safe_load(roster)), + ): + client._expand_target() + client._update_targets() + assert opts["tgt"] == host + assert client.targets[host]["user"] == user.split("@")[0] + + +def test_parse_tgt(opts): + """ + test parse_tgt when user and host set on + the ssh cli tgt + """ + host = "localhost" + user = "test-user@" + opts["tgt"] = user + host + + with patch("salt.utils.network.is_reachable_host", MagicMock(return_value=False)): + assert not opts.get("ssh_cli_tgt") + client = ssh.SSH(opts) + assert client.parse_tgt["hostname"] == host + assert client.parse_tgt["user"] == user.split("@")[0] + assert opts.get("ssh_cli_tgt") == user + host + + +def test_parse_tgt_no_user(opts): + """ + test parse_tgt when only the host set on + the ssh cli tgt + """ + host = "localhost" + opts["ssh_user"] = "ssh-usr" + opts["tgt"] = host + + with patch("salt.utils.network.is_reachable_host", MagicMock(return_value=False)): + assert not opts.get("ssh_cli_tgt") + client = ssh.SSH(opts) + assert client.parse_tgt["hostname"] == host + assert client.parse_tgt["user"] == opts["ssh_user"] + assert opts.get("ssh_cli_tgt") == host + + +def test_extra_filerefs(tmp_path, opts): + """ + test "extra_filerefs" are not excluded from kwargs + when preparing the SSH opts + """ + ssh_opts = { + "eauth": "auto", + "username": "test", + "password": "test", + "client": "ssh", + "tgt": "localhost", + "fun": "test.ping", + "ssh_port": 22, + "extra_filerefs": "salt://foobar", + } + roster = str(tmp_path / "roster") + client = salt.client.ssh.client.SSHClient(mopts=opts, disable_custom_roster=True) + with patch("salt.roster.get_roster_file", MagicMock(return_value=roster)): + ssh_obj = client._prep_ssh(**ssh_opts) + assert ssh_obj.opts.get("extra_filerefs", None) == "salt://foobar" + + +def test_key_deploy_permission_denied_scp(tmp_path, opts): + """ + test "key_deploy" function when + permission denied authentication error + when attempting to use scp to copy file + to target + """ + host = "localhost" + passwd = "password" + usr = "ssh-usr" + opts["ssh_user"] = usr + opts["tgt"] = host + + ssh_ret = { + host: { + "stdout": "\rroot@192.168.1.187's password: \n\rroot@192.168.1.187's password: \n\rroot@192.168.1.187's password: \n", + "stderr": "Permission denied, please try again.\nPermission denied, please try again.\nroot@192.168.1.187: Permission denied (publickey,gssapi-keyex,gssapi-with-micimport pudb; pu.dbassword).\nscp: Connection closed\n", + "retcode": 255, + } + } + key_run_ret = { + "localhost": { + "jid": "20230922155652279959", + "return": "test", + "retcode": 0, + "id": "test", + "fun": "cmd.run", + "fun_args": ["echo test"], + } + } + patch_roster_file = patch("salt.roster.get_roster_file", MagicMock(return_value="")) + with patch_roster_file: + client = ssh.SSH(opts) + patch_input = patch("builtins.input", side_effect=["y"]) + patch_getpass = patch("getpass.getpass", return_value=["password"]) + mock_key_run = MagicMock(return_value=key_run_ret) + patch_key_run = patch("salt.client.ssh.SSH._key_deploy_run", mock_key_run) + with patch_input, patch_getpass, patch_key_run: + ret = client.key_deploy(host, ssh_ret) + assert mock_key_run.call_args_list[0][0] == ( + host, + {"passwd": [passwd], "host": host, "user": usr}, + True, + ) + assert ret == key_run_ret + assert mock_key_run.call_count == 1 + + +def test_key_deploy_permission_denied_file_scp(tmp_path, opts): + """ + test "key_deploy" function when permission denied + due to not having access to copy the file to the target + We do not want to deploy the key, because this is not + an authentication to the target error. + """ + host = "localhost" + passwd = "password" + usr = "ssh-usr" + opts["ssh_user"] = usr + opts["tgt"] = host + + mock_key_run = MagicMock(return_value=False) + patch_key_run = patch("salt.client.ssh.SSH._key_deploy_run", mock_key_run) + + ssh_ret = { + "localhost": { + "stdout": "", + "stderr": 'scp: dest open "/tmp/preflight.sh": Permission denied\nscp: failed to upload file /etc/salt/preflight.sh to /tmp/preflight.sh\n', + "retcode": 1, + } + } + patch_roster_file = patch("salt.roster.get_roster_file", MagicMock(return_value="")) + with patch_roster_file: + client = ssh.SSH(opts) + ret = client.key_deploy(host, ssh_ret) + assert ret == ssh_ret + assert mock_key_run.call_count == 0 + + +def test_key_deploy_no_permission_denied(tmp_path, opts): + """ + test "key_deploy" function when no permission denied + is returned + """ + host = "localhost" + passwd = "password" + usr = "ssh-usr" + opts["ssh_user"] = usr + opts["tgt"] = host + + mock_key_run = MagicMock(return_value=False) + patch_key_run = patch("salt.client.ssh.SSH._key_deploy_run", mock_key_run) + ssh_ret = { + "localhost": { + "jid": "20230922161937998385", + "return": "test", + "retcode": 0, + "id": "test", + "fun": "cmd.run", + "fun_args": ["echo test"], + } + } + patch_roster_file = patch("salt.roster.get_roster_file", MagicMock(return_value="")) + with patch_roster_file: + client = ssh.SSH(opts) + ret = client.key_deploy(host, ssh_ret) + assert ret == ssh_ret + assert mock_key_run.call_count == 0 From a05bd144db17bf50bb4e9ac1e97bb10733aae235 Mon Sep 17 00:00:00 2001 From: Megan Wilhite Date: Thu, 28 Sep 2023 11:19:03 -0600 Subject: [PATCH 020/153] Do not run ssh integration tests on windows --- tests/pytests/integration/ssh/test_pre_flight.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/tests/pytests/integration/ssh/test_pre_flight.py b/tests/pytests/integration/ssh/test_pre_flight.py index 0f97424b5c8..4cbe0790019 100644 --- a/tests/pytests/integration/ssh/test_pre_flight.py +++ b/tests/pytests/integration/ssh/test_pre_flight.py @@ -2,10 +2,14 @@ Test for ssh_pre_flight roster option """ -import grp +try: + import grp + import pwd +except ImportError: + # windows stacktraces on import of these modules + pass import os import pathlib -import pwd import shutil import subprocess @@ -14,6 +18,8 @@ import salt.utils.files import yaml from saltfactories.utils import random_string +pytestmark = pytest.mark.skip_on_windows(reason="Salt-ssh not available on Windows") + def _custom_roster(roster_file, roster_data): with salt.utils.files.fopen(roster_file, "r") as fp: From e85ff36292cd0628eafc0090b574650fd706d753 Mon Sep 17 00:00:00 2001 From: Megan Wilhite Date: Fri, 29 Sep 2023 11:24:55 -0600 Subject: [PATCH 021/153] Fix ssh tests on 3005 --- tests/pytests/unit/client/ssh/test_ssh.py | 87 ++++++++--------------- tests/unit/client/test_ssh.py | 66 ----------------- 2 files changed, 28 insertions(+), 125 deletions(-) diff --git a/tests/pytests/unit/client/ssh/test_ssh.py b/tests/pytests/unit/client/ssh/test_ssh.py index 07f70c42437..6e487651ae2 100644 --- a/tests/pytests/unit/client/ssh/test_ssh.py +++ b/tests/pytests/unit/client/ssh/test_ssh.py @@ -1,11 +1,8 @@ -import os - import pytest import salt.client.ssh.client import salt.utils.msgpack from salt.client import ssh from tests.support.mock import MagicMock, patch -from tests.support.runtests import RUNTIME_VARS pytestmark = [ pytest.mark.skip_if_binaries_missing("ssh", "ssh-keygen", check_all=True), @@ -42,6 +39,34 @@ def ssh_target(tmp_path): return opts, target +@pytest.fixture +def opts(tmp_path, temp_salt_master): + updated_values = { + "argv": [ + "ssh.set_auth_key", + "root", + "hobn+amNAXSBTiOXEqlBjGB...rsa root@master", + ], + "__role": "master", + "cachedir": str(tmp_path), + "extension_modules": str(tmp_path / "extmods"), + "selected_target_option": "glob", + } + + opts = temp_salt_master.config.copy() + opts.update(updated_values) + return opts + + +@pytest.fixture +def roster(): + return """ + localhost: + host: 127.0.0.1 + port: 2827 + """ + + @pytest.mark.skip_on_windows(reason="SSH_PY_SHIM not set on windows") def test_cmd_block_python_version_error(ssh_target): opts = ssh_target[0] @@ -140,62 +165,6 @@ def test_ssh_kwargs(test_opts): assert ssh_obj.opts.get(opt_key, None) == opt_value -@pytest.mark.skip_on_windows(reason="pre_flight_args is not implemented for Windows") -@pytest.mark.parametrize( - "test_opts", - [ - (None, ""), - ("one", " one"), - ("one two", " one two"), - ("| touch /tmp/test", " '|' touch /tmp/test"), - ("; touch /tmp/test", " ';' touch /tmp/test"), - (["one"], " one"), - (["one", "two"], " one two"), - (["one", "two", "| touch /tmp/test"], " one two '| touch /tmp/test'"), - (["one", "two", "; touch /tmp/test"], " one two '; touch /tmp/test'"), - ], -) -def test_run_with_pre_flight_args(ssh_target, test_opts): - """ - test Single.run() when ssh_pre_flight is set - and script successfully runs - """ - opts = ssh_target[0] - target = ssh_target[1] - - opts["ssh_run_pre_flight"] = True - target["ssh_pre_flight"] = os.path.join(RUNTIME_VARS.TMP, "script.sh") - - if test_opts[0] is not None: - target["ssh_pre_flight_args"] = test_opts[0] - expected_args = test_opts[1] - - single = ssh.Single( - opts, - opts["argv"], - "localhost", - mods={}, - fsclient=None, - thin=salt.utils.thin.thin_path(opts["cachedir"]), - mine=False, - **target - ) - - cmd_ret = ("Success", "", 0) - mock_cmd = MagicMock(return_value=cmd_ret) - mock_exec_cmd = MagicMock(return_value=("", "", 0)) - patch_cmd = patch("salt.client.ssh.Single.cmd_block", mock_cmd) - patch_exec_cmd = patch("salt.client.ssh.shell.Shell.exec_cmd", mock_exec_cmd) - patch_shell_send = patch("salt.client.ssh.shell.Shell.send", return_value=None) - patch_os = patch("os.path.exists", side_effect=[True]) - - with patch_os, patch_cmd, patch_exec_cmd, patch_shell_send: - ret = single.run() - assert mock_exec_cmd.mock_calls[0].args[ - 0 - ] == "/bin/sh '/tmp/script.sh'{}".format(expected_args) - - def test_expand_target_dns(opts, roster): """ test expand_target when target is root@ diff --git a/tests/unit/client/test_ssh.py b/tests/unit/client/test_ssh.py index 00313ed55f1..64ba9e22e14 100644 --- a/tests/unit/client/test_ssh.py +++ b/tests/unit/client/test_ssh.py @@ -399,72 +399,6 @@ class SSHSingleTests(TestCase): call("rm '{}'".format(script)), ] == mock_cmd.call_args_list - def test_shim_cmd(self): - """ - test Single.shim_cmd() - """ - single = ssh.Single( - self.opts, - self.opts["argv"], - "localhost", - mods={}, - fsclient=None, - thin=salt.utils.thin.thin_path(self.opts["cachedir"]), - mine=False, - winrm=False, - tty=True, - **self.target - ) - - exp_ret = ("Success", "", 0) - mock_cmd = MagicMock(return_value=exp_ret) - patch_cmd = patch("salt.client.ssh.shell.Shell.exec_cmd", mock_cmd) - patch_send = patch("salt.client.ssh.shell.Shell.send", return_value=("", "", 0)) - patch_rand = patch("os.urandom", return_value=b"5\xd9l\xca\xc2\xff") - - with patch_cmd, patch_rand, patch_send: - ret = single.shim_cmd(cmd_str="echo test") - assert ret == exp_ret - assert [ - call("/bin/sh '.35d96ccac2ff.py'"), - call("rm '.35d96ccac2ff.py'"), - ] == mock_cmd.call_args_list - - def test_run_ssh_pre_flight(self): - """ - test Single.run_ssh_pre_flight - """ - target = self.target.copy() - target["ssh_pre_flight"] = os.path.join(RUNTIME_VARS.TMP, "script.sh") - single = ssh.Single( - self.opts, - self.opts["argv"], - "localhost", - mods={}, - fsclient=None, - thin=salt.utils.thin.thin_path(self.opts["cachedir"]), - mine=False, - winrm=False, - tty=True, - **target - ) - - exp_ret = ("Success", "", 0) - mock_cmd = MagicMock(return_value=exp_ret) - patch_cmd = patch("salt.client.ssh.shell.Shell.exec_cmd", mock_cmd) - patch_send = patch("salt.client.ssh.shell.Shell.send", return_value=exp_ret) - exp_tmp = os.path.join( - tempfile.gettempdir(), os.path.basename(target["ssh_pre_flight"]) - ) - - with patch_cmd, patch_send: - ret = single.run_ssh_pre_flight() - assert ret == exp_ret - assert [ - call("/bin/sh '{}'".format(exp_tmp)), - call("rm '{}'".format(exp_tmp)), - ] == mock_cmd.call_args_list - @skipIf(salt.utils.platform.is_windows(), "SSH_PY_SHIM not set on windows") def test_cmd_run_set_path(self): """ From 22afb445651652128265d81b893d2e5898ecb1bb Mon Sep 17 00:00:00 2001 From: Megan Wilhite Date: Mon, 2 Oct 2023 12:51:49 -0600 Subject: [PATCH 022/153] Fix pre_flight tests on darwin --- .../integration/ssh/test_pre_flight.py | 28 ++++++++++++++++--- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/tests/pytests/integration/ssh/test_pre_flight.py b/tests/pytests/integration/ssh/test_pre_flight.py index 4cbe0790019..ed2dfeee61c 100644 --- a/tests/pytests/integration/ssh/test_pre_flight.py +++ b/tests/pytests/integration/ssh/test_pre_flight.py @@ -12,9 +12,11 @@ import os import pathlib import shutil import subprocess +import tempfile import pytest import salt.utils.files +import salt.utils.platform import yaml from saltfactories.utils import random_string @@ -240,15 +242,22 @@ def test_ssh_pre_flight_perms(salt_ssh_cli, caplog, _create_roster, account): on target when user sets wrong permissions (777) on ssh_pre_flight script. """ + is_darwin = salt.utils.platform.is_darwin() try: script = pathlib.Path("/tmp", "itworked") preflight = pathlib.Path("/ssh_pre_flight.sh") + if is_darwin: + preflight = pathlib.Path("/etc/ssh_pre_flight.sh") preflight.write_text(f"touch {str(script)}") tmp_preflight = pathlib.Path("/tmp", preflight.name) + if is_darwin: + tmp_preflight = pathlib.Path(tempfile.gettempdir(), preflight.name) _custom_roster(salt_ssh_cli.roster_file, {"ssh_pre_flight": str(preflight)}) preflight.chmod(0o0777) run_script = pathlib.Path("/run_script") + if is_darwin: + run_script = pathlib.Path("/etc/run_script") run_script.write_text( f""" x=1 @@ -291,12 +300,16 @@ def test_ssh_run_pre_flight_target_file_perms(salt_ssh_cli, _create_roster, tmp_ test ssh_pre_flight to ensure the target pre flight script has the correct perms """ + is_darwin = salt.utils.platform.is_darwin() + stat_cmd = 'stat -L -c "%a %G %U"' + if is_darwin: + stat_cmd = 'stat -L -f"%p %g %u"' perms_file = tmp_path / "perms" with salt.utils.files.fopen(_create_roster["data"]["ssh_pre_flight"], "w") as fp_: fp_.write( f""" SCRIPT_NAME=$0 - stat -L -c "%a %G %U" $SCRIPT_NAME > {perms_file} + {stat_cmd} $SCRIPT_NAME > {perms_file} """ ) @@ -307,8 +320,15 @@ def test_ssh_run_pre_flight_target_file_perms(salt_ssh_cli, _create_roster, tmp_ assert ret.returncode == 0 with salt.utils.files.fopen(perms_file) as fp: data = fp.read() - assert data.split()[0] == "600" + if is_darwin: + assert data.split()[0] == "100600" + else: + assert data.split()[0] == "600" uid = os.getuid() gid = os.getgid() - assert data.split()[1] == grp.getgrgid(gid).gr_name - assert data.split()[2] == pwd.getpwuid(uid).pw_name + if is_darwin: + assert int(data.split()[1]) == gid + assert int(data.split()[2]) == uid + else: + assert data.split()[1] == grp.getgrgid(gid).gr_name + assert data.split()[2] == pwd.getpwuid(uid).pw_name From 71589535e87e3e326577560fdcb7bd878c47442c Mon Sep 17 00:00:00 2001 From: Megan Wilhite Date: Tue, 3 Oct 2023 13:49:41 -0600 Subject: [PATCH 023/153] Remove filename from logs --- salt/client/ssh/__init__.py | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/salt/client/ssh/__init__.py b/salt/client/ssh/__init__.py index 1c25942d90a..ff484597b25 100644 --- a/salt/client/ssh/__init__.py +++ b/salt/client/ssh/__init__.py @@ -1025,20 +1025,18 @@ class Single: except OSError as err: return ( "", - f"Could not copy pre flight script {self.ssh_pre_flight} to temporary path", + "Could not copy pre flight script to temporary path", 1, ) target_script = f".{pathlib.Path(temp.name).name}" - log.trace(f"Copying the pre flight script {self.ssh_pre_file} to target") + log.trace("Copying the pre flight script to target") stdout, stderr, retcode = self.shell.send(temp.name, target_script) if retcode != 0: # We could not copy the script to the target - log.error( - f"Could not copy the pre flight script {self.ssh_pre_file} to target" - ) + log.error("Could not copy the pre flight script to target") return stdout, stderr, retcode - log.trace(f"Executing the pre flight script {self.ssh_pre_file} on target") + log.trace("Executing the pre flight script on target") return self.execute_script( target_script, script_args=self.ssh_pre_flight_args ) @@ -1423,7 +1421,7 @@ ARGS = {arguments}\n'''.format( shim_tmp_file.name, target_shim_file, makedirs=True ) if retcode != 0: - log.error(f"Could not copy the shim script to target") + log.error("Could not copy the shim script to target") return stdout, stderr, retcode # Remove our shim file From 805a8deb74e35dde23b906ecacccba852a707a73 Mon Sep 17 00:00:00 2001 From: Megan Wilhite Date: Tue, 3 Oct 2023 13:50:50 -0600 Subject: [PATCH 024/153] Fix logs in ssh tests --- tests/pytests/unit/client/ssh/test_single.py | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/tests/pytests/unit/client/ssh/test_single.py b/tests/pytests/unit/client/ssh/test_single.py index 912c8cccec0..68457147e6f 100644 --- a/tests/pytests/unit/client/ssh/test_single.py +++ b/tests/pytests/unit/client/ssh/test_single.py @@ -410,11 +410,8 @@ def test_run_ssh_pre_flight_no_connect(opts, target, tmp_path, caplog): with caplog.at_level(logging.TRACE): with patch_send, patch_exec_cmd, patch_tmp: ret = single.run_ssh_pre_flight() - assert f"Copying the pre flight script {pre_flight.name}" in caplog.text - assert ( - f"Could not copy the pre flight script {pre_flight.name} to target" - in caplog.text - ) + assert "Copying the pre flight script" in caplog.text + assert "Could not copy the pre flight script to target" in caplog.text assert ret == ret_send assert send_mock.call_args_list[0][0][0] == tmp_file target_script = send_mock.call_args_list[0][0][1] @@ -505,7 +502,7 @@ def test_run_ssh_pre_flight_connect(opts, target, tmp_path, caplog): with patch_send, patch_exec_cmd, patch_tmp: ret = single.run_ssh_pre_flight() - assert f"Executing the pre flight script {pre_flight.name} on target" in caplog.text + assert "Executing the pre flight script on target" in caplog.text assert ret == ret_exec_cmd assert send_mock.call_args_list[0][0][0] == tmp_file target_script = send_mock.call_args_list[0][0][1] @@ -550,7 +547,7 @@ def test_run_ssh_pre_flight_shutil_fails(opts, target, tmp_path): assert ret == ( "", - f"Could not copy pre flight script {pre_flight} to temporary path", + "Could not copy pre flight script to temporary path", 1, ) mock_exec_cmd.assert_not_called() From f805bc98af3394ddc0d289d428afa854abdb2ed6 Mon Sep 17 00:00:00 2001 From: Megan Wilhite Date: Thu, 5 Oct 2023 08:03:31 -0600 Subject: [PATCH 025/153] [3005.4] Update amazon linux 2 AMI --- cicd/amis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cicd/amis.yml b/cicd/amis.yml index 47f6691883f..5197c9b51e4 100644 --- a/cicd/amis.yml +++ b/cicd/amis.yml @@ -1,5 +1,5 @@ alma-8-x86_64: ami-0594d7cf435c3d2f7 -amazon-2-x86_64: ami-0695f87baa5b5ce15 +amazon-2-x86_64: ami-09682e96e7785642d arch-lts-x86_64: ami-018a6b479dcb87969 centos-7-x86_64: ami-05764f27cdf8f99e0 centosstream-8-x86_64: ami-02fc0a57f9b1fa4ed From e31b6e21b44c9f33842ec4e1ebed7362a46b5a8d Mon Sep 17 00:00:00 2001 From: Megan Wilhite Date: Thu, 5 Oct 2023 17:53:01 -0600 Subject: [PATCH 026/153] Set version for redis docker tests --- tests/pytests/functional/cache/test_redis.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/pytests/functional/cache/test_redis.py b/tests/pytests/functional/cache/test_redis.py index 9b3d5aa27e9..d56b0c86429 100644 --- a/tests/pytests/functional/cache/test_redis.py +++ b/tests/pytests/functional/cache/test_redis.py @@ -22,7 +22,7 @@ pytest.importorskip("redis") def redis_container(salt_factories): container = salt_factories.get_container( random_string("redis-server-"), - image_name="redis:alpine", + image_name="redis:7.2.0-alpine", container_run_kwargs={"ports": {"6379/tcp": None}}, ) with container.started() as factory: From 1175529e25e3369ab177c82cc25feb83dd59d428 Mon Sep 17 00:00:00 2001 From: Pedro Algarvio Date: Sun, 1 Oct 2023 21:19:20 +0100 Subject: [PATCH 027/153] Write directly to `$GITHUB_OUTPUT` Signed-off-by: Pedro Algarvio --- .github/workflows/test-action-macos.yml | 4 +--- .github/workflows/test-action.yml | 4 +--- tools/ci.py | 19 ++++++++++++++----- 3 files changed, 16 insertions(+), 11 deletions(-) diff --git a/.github/workflows/test-action-macos.yml b/.github/workflows/test-action-macos.yml index 18f413ca874..217dbdacc06 100644 --- a/.github/workflows/test-action-macos.yml +++ b/.github/workflows/test-action-macos.yml @@ -81,9 +81,7 @@ jobs: - name: Generate Test Matrix id: generate-matrix run: | - TEST_MATRIX=$(tools ci matrix ${{ inputs.distro-slug }}) - echo "$TEST_MATRIX" - echo "matrix=$TEST_MATRIX" >> "$GITHUB_OUTPUT" + tools ci matrix ${{ inputs.distro-slug }} - name: Generate Transport Matrix id: generate-transport-matrix diff --git a/.github/workflows/test-action.yml b/.github/workflows/test-action.yml index 31945d0a8a4..f794ee07908 100644 --- a/.github/workflows/test-action.yml +++ b/.github/workflows/test-action.yml @@ -81,9 +81,7 @@ jobs: - name: Generate Test Matrix id: generate-matrix run: | - TEST_MATRIX=$(tools ci matrix ${{ inputs.distro-slug }}) - echo "$TEST_MATRIX" - echo "matrix=$TEST_MATRIX" >> "$GITHUB_OUTPUT" + tools ci matrix ${{ inputs.distro-slug }} - name: Generate Transport Matrix id: generate-transport-matrix diff --git a/tools/ci.py b/tools/ci.py index 08264bb4e50..c62850ddbec 100644 --- a/tools/ci.py +++ b/tools/ci.py @@ -633,7 +633,14 @@ def matrix(ctx: Context, distro_slug: str): if "macos" in distro_slug and chunk == "scenarios": continue _matrix.append({"transport": transport, "tests-chunk": chunk}) - print(json.dumps(_matrix)) + + ctx.info("Generated matrix:") + ctx.print(_matrix, soft_wrap=True) + + github_output = os.environ.get("GITHUB_OUTPUT") + if github_output is not None: + with open(github_output, "a", encoding="utf-8") as wfh: + wfh.write(f"matrix={json.dumps(_matrix)}\n") ctx.exit(0) @@ -694,7 +701,7 @@ def pkg_matrix( ctx.warn("The 'GITHUB_OUTPUT' variable is not set.") if TYPE_CHECKING: assert testing_releases - matrix = [] + _matrix = [] sessions = [ "install", ] @@ -741,18 +748,20 @@ def pkg_matrix( if version < tools.utils.Version("3006.0") ] for version in versions: - matrix.append( + _matrix.append( { "test-chunk": session, "version": version, } ) + if distro_slug.startswith("windows"): + _matrix[-1]["pkg-type"] = pkg_type.upper() ctx.info("Generated matrix:") - ctx.print(matrix, soft_wrap=True) + ctx.print(_matrix, soft_wrap=True) if github_output is not None: with open(github_output, "a", encoding="utf-8") as wfh: - wfh.write(f"matrix={json.dumps(matrix)}\n") + wfh.write(f"matrix={json.dumps(_matrix)}\n") ctx.exit(0) From 57d138ab32c44cbf07211aba011c7c9248d400bc Mon Sep 17 00:00:00 2001 From: Pedro Algarvio Date: Tue, 3 Oct 2023 13:55:03 +0100 Subject: [PATCH 028/153] Upgrade to `mock==5.1.0` Signed-off-by: Pedro Algarvio --- requirements/static/ci/py3.10/cloud.txt | 2 +- requirements/static/ci/py3.10/darwin.txt | 3 +-- requirements/static/ci/py3.10/freebsd.txt | 3 +-- requirements/static/ci/py3.10/linux.txt | 3 +-- requirements/static/ci/py3.10/windows.txt | 3 +-- requirements/static/ci/py3.7/cloud.txt | 2 +- requirements/static/ci/py3.7/freebsd.txt | 3 +-- requirements/static/ci/py3.7/linux.txt | 3 +-- requirements/static/ci/py3.7/windows.txt | 3 +-- requirements/static/ci/py3.8/cloud.txt | 2 +- requirements/static/ci/py3.8/freebsd.txt | 3 +-- requirements/static/ci/py3.8/linux.txt | 3 +-- requirements/static/ci/py3.8/windows.txt | 3 +-- requirements/static/ci/py3.9/cloud.txt | 2 +- requirements/static/ci/py3.9/darwin.txt | 3 +-- requirements/static/ci/py3.9/freebsd.txt | 3 +-- requirements/static/ci/py3.9/linux.txt | 3 +-- requirements/static/ci/py3.9/windows.txt | 3 +-- tests/support/mock.py | 1 + 19 files changed, 19 insertions(+), 32 deletions(-) diff --git a/requirements/static/ci/py3.10/cloud.txt b/requirements/static/ci/py3.10/cloud.txt index 3760311cf5c..aaa9eeab32d 100644 --- a/requirements/static/ci/py3.10/cloud.txt +++ b/requirements/static/ci/py3.10/cloud.txt @@ -502,7 +502,7 @@ markupsafe==2.1.2 # mako # moto # werkzeug -mock==4.0.3 +mock==5.1.0 # via -r requirements/pytest.txt more-itertools==8.8.0 # via diff --git a/requirements/static/ci/py3.10/darwin.txt b/requirements/static/ci/py3.10/darwin.txt index 3c82e233bf8..26f65c08559 100644 --- a/requirements/static/ci/py3.10/darwin.txt +++ b/requirements/static/ci/py3.10/darwin.txt @@ -505,7 +505,7 @@ markupsafe==2.1.2 # werkzeug mercurial==6.0.1 # via -r requirements/static/ci/darwin.in -mock==3.0.5 +mock==5.1.0 # via -r requirements/pytest.txt more-itertools==8.2.0 # via @@ -809,7 +809,6 @@ six==1.16.0 # jsonschema # junos-eznc # kubernetes - # mock # msrestazure # ncclient # paramiko diff --git a/requirements/static/ci/py3.10/freebsd.txt b/requirements/static/ci/py3.10/freebsd.txt index f2ce437f32f..0954e12ecef 100644 --- a/requirements/static/ci/py3.10/freebsd.txt +++ b/requirements/static/ci/py3.10/freebsd.txt @@ -503,7 +503,7 @@ markupsafe==2.1.2 # werkzeug mercurial==6.0.1 # via -r requirements/static/ci/freebsd.in -mock==3.0.5 +mock==5.1.0 # via -r requirements/pytest.txt more-itertools==5.0.0 # via @@ -809,7 +809,6 @@ six==1.16.0 # junos-eznc # kazoo # kubernetes - # mock # more-itertools # msrestazure # ncclient diff --git a/requirements/static/ci/py3.10/linux.txt b/requirements/static/ci/py3.10/linux.txt index d313d2a4d4e..6d6a7d7eb7c 100644 --- a/requirements/static/ci/py3.10/linux.txt +++ b/requirements/static/ci/py3.10/linux.txt @@ -518,7 +518,7 @@ markupsafe==2.1.2 # werkzeug mercurial==6.0.1 # via -r requirements/static/ci/linux.in -mock==3.0.5 +mock==5.1.0 # via -r requirements/pytest.txt more-itertools==5.0.0 # via @@ -846,7 +846,6 @@ six==1.16.0 # junos-eznc # kazoo # kubernetes - # mock # more-itertools # ncclient # paramiko diff --git a/requirements/static/ci/py3.10/windows.txt b/requirements/static/ci/py3.10/windows.txt index a24a499a494..e840fcba26f 100644 --- a/requirements/static/ci/py3.10/windows.txt +++ b/requirements/static/ci/py3.10/windows.txt @@ -172,7 +172,7 @@ markupsafe==2.1.1 # mako # moto # werkzeug -mock==3.0.5 +mock==5.1.0 # via -r requirements/pytest.txt more-itertools==8.2.0 # via @@ -362,7 +362,6 @@ six==1.15.0 # google-auth # jsonschema # kubernetes - # mock # python-dateutil # pyvmomi # pywinrm diff --git a/requirements/static/ci/py3.7/cloud.txt b/requirements/static/ci/py3.7/cloud.txt index 3f7b17caf10..1994333e54b 100644 --- a/requirements/static/ci/py3.7/cloud.txt +++ b/requirements/static/ci/py3.7/cloud.txt @@ -529,7 +529,7 @@ markupsafe==2.1.2 # mako # moto # werkzeug -mock==4.0.3 +mock==5.1.0 # via -r requirements/pytest.txt more-itertools==8.8.0 # via diff --git a/requirements/static/ci/py3.7/freebsd.txt b/requirements/static/ci/py3.7/freebsd.txt index 1e7afdb6cd2..dabd10cc635 100644 --- a/requirements/static/ci/py3.7/freebsd.txt +++ b/requirements/static/ci/py3.7/freebsd.txt @@ -527,7 +527,7 @@ markupsafe==2.1.2 # werkzeug mercurial==6.0.1 # via -r requirements/static/ci/freebsd.in -mock==3.0.5 +mock==5.1.0 # via -r requirements/pytest.txt more-itertools==5.0.0 # via @@ -852,7 +852,6 @@ six==1.16.0 # junos-eznc # kazoo # kubernetes - # mock # more-itertools # msrestazure # ncclient diff --git a/requirements/static/ci/py3.7/linux.txt b/requirements/static/ci/py3.7/linux.txt index f3199f753cd..0ab876ce56e 100644 --- a/requirements/static/ci/py3.7/linux.txt +++ b/requirements/static/ci/py3.7/linux.txt @@ -542,7 +542,7 @@ markupsafe==2.1.2 # werkzeug mercurial==6.0.1 # via -r requirements/static/ci/linux.in -mock==3.0.5 +mock==5.1.0 # via -r requirements/pytest.txt more-itertools==5.0.0 # via @@ -891,7 +891,6 @@ six==1.16.0 # junos-eznc # kazoo # kubernetes - # mock # more-itertools # ncclient # paramiko diff --git a/requirements/static/ci/py3.7/windows.txt b/requirements/static/ci/py3.7/windows.txt index 7fc81594776..fdd9bd2c9c7 100644 --- a/requirements/static/ci/py3.7/windows.txt +++ b/requirements/static/ci/py3.7/windows.txt @@ -186,7 +186,7 @@ markupsafe==2.1.2 # mako # moto # werkzeug -mock==3.0.5 +mock==5.1.0 # via -r requirements/pytest.txt more-itertools==8.2.0 # via @@ -376,7 +376,6 @@ six==1.15.0 # google-auth # jsonschema # kubernetes - # mock # python-dateutil # pyvmomi # pywinrm diff --git a/requirements/static/ci/py3.8/cloud.txt b/requirements/static/ci/py3.8/cloud.txt index 26e8ac212c7..8c140ec2936 100644 --- a/requirements/static/ci/py3.8/cloud.txt +++ b/requirements/static/ci/py3.8/cloud.txt @@ -518,7 +518,7 @@ markupsafe==2.1.2 # mako # moto # werkzeug -mock==4.0.3 +mock==5.1.0 # via -r requirements/pytest.txt more-itertools==8.8.0 # via diff --git a/requirements/static/ci/py3.8/freebsd.txt b/requirements/static/ci/py3.8/freebsd.txt index e0ac76d3098..9e558df206d 100644 --- a/requirements/static/ci/py3.8/freebsd.txt +++ b/requirements/static/ci/py3.8/freebsd.txt @@ -517,7 +517,7 @@ markupsafe==2.1.2 # werkzeug mercurial==6.0.1 # via -r requirements/static/ci/freebsd.in -mock==3.0.5 +mock==5.1.0 # via -r requirements/pytest.txt more-itertools==5.0.0 # via @@ -842,7 +842,6 @@ six==1.16.0 # junos-eznc # kazoo # kubernetes - # mock # more-itertools # msrestazure # ncclient diff --git a/requirements/static/ci/py3.8/linux.txt b/requirements/static/ci/py3.8/linux.txt index 6a2e2c8af41..2784ec6a38f 100644 --- a/requirements/static/ci/py3.8/linux.txt +++ b/requirements/static/ci/py3.8/linux.txt @@ -532,7 +532,7 @@ markupsafe==2.1.2 # werkzeug mercurial==6.0.1 # via -r requirements/static/ci/linux.in -mock==3.0.5 +mock==5.1.0 # via -r requirements/pytest.txt more-itertools==5.0.0 # via @@ -879,7 +879,6 @@ six==1.16.0 # junos-eznc # kazoo # kubernetes - # mock # more-itertools # ncclient # paramiko diff --git a/requirements/static/ci/py3.8/windows.txt b/requirements/static/ci/py3.8/windows.txt index 6a23c545a54..702f5471891 100644 --- a/requirements/static/ci/py3.8/windows.txt +++ b/requirements/static/ci/py3.8/windows.txt @@ -174,7 +174,7 @@ markupsafe==2.1.2 # mako # moto # werkzeug -mock==3.0.5 +mock==5.1.0 # via -r requirements/pytest.txt more-itertools==8.2.0 # via @@ -364,7 +364,6 @@ six==1.15.0 # google-auth # jsonschema # kubernetes - # mock # python-dateutil # pyvmomi # pywinrm diff --git a/requirements/static/ci/py3.9/cloud.txt b/requirements/static/ci/py3.9/cloud.txt index 34d8818c179..7ea58dcb8ab 100644 --- a/requirements/static/ci/py3.9/cloud.txt +++ b/requirements/static/ci/py3.9/cloud.txt @@ -518,7 +518,7 @@ markupsafe==2.1.2 # mako # moto # werkzeug -mock==4.0.3 +mock==5.1.0 # via -r requirements/pytest.txt more-itertools==8.8.0 # via diff --git a/requirements/static/ci/py3.9/darwin.txt b/requirements/static/ci/py3.9/darwin.txt index a9904314b47..724fb21f85a 100644 --- a/requirements/static/ci/py3.9/darwin.txt +++ b/requirements/static/ci/py3.9/darwin.txt @@ -519,7 +519,7 @@ markupsafe==2.1.2 # werkzeug mercurial==6.0.1 # via -r requirements/static/ci/darwin.in -mock==3.0.5 +mock==5.1.0 # via -r requirements/pytest.txt more-itertools==8.2.0 # via @@ -845,7 +845,6 @@ six==1.16.0 # jsonschema # junos-eznc # kubernetes - # mock # msrestazure # ncclient # paramiko diff --git a/requirements/static/ci/py3.9/freebsd.txt b/requirements/static/ci/py3.9/freebsd.txt index c6c242c3d1f..cdaa74f68a1 100644 --- a/requirements/static/ci/py3.9/freebsd.txt +++ b/requirements/static/ci/py3.9/freebsd.txt @@ -517,7 +517,7 @@ markupsafe==2.1.2 # werkzeug mercurial==6.0.1 # via -r requirements/static/ci/freebsd.in -mock==3.0.5 +mock==5.1.0 # via -r requirements/pytest.txt more-itertools==5.0.0 # via @@ -845,7 +845,6 @@ six==1.16.0 # junos-eznc # kazoo # kubernetes - # mock # more-itertools # msrestazure # ncclient diff --git a/requirements/static/ci/py3.9/linux.txt b/requirements/static/ci/py3.9/linux.txt index eeb78f5534d..9c340545d4b 100644 --- a/requirements/static/ci/py3.9/linux.txt +++ b/requirements/static/ci/py3.9/linux.txt @@ -534,7 +534,7 @@ markupsafe==2.1.2 # werkzeug mercurial==6.0.1 # via -r requirements/static/ci/linux.in -mock==3.0.5 +mock==5.1.0 # via -r requirements/pytest.txt more-itertools==5.0.0 # via @@ -884,7 +884,6 @@ six==1.16.0 # junos-eznc # kazoo # kubernetes - # mock # more-itertools # ncclient # paramiko diff --git a/requirements/static/ci/py3.9/windows.txt b/requirements/static/ci/py3.9/windows.txt index 8699cd05124..168916f6062 100644 --- a/requirements/static/ci/py3.9/windows.txt +++ b/requirements/static/ci/py3.9/windows.txt @@ -174,7 +174,7 @@ markupsafe==2.1.2 # mako # moto # werkzeug -mock==3.0.5 +mock==5.1.0 # via -r requirements/pytest.txt more-itertools==8.2.0 # via @@ -365,7 +365,6 @@ six==1.15.0 # google-auth # jsonschema # kubernetes - # mock # python-dateutil # pyvmomi # pywinrm diff --git a/tests/support/mock.py b/tests/support/mock.py index 2256ad8f5da..c050d0bf4e6 100644 --- a/tests/support/mock.py +++ b/tests/support/mock.py @@ -27,6 +27,7 @@ from mock import ( ANY, DEFAULT, FILTER_DIR, + AsyncMock, MagicMock, Mock, NonCallableMagicMock, From 0823ea818ea7b7fbec0f8fdd322ef2ea0706c4b3 Mon Sep 17 00:00:00 2001 From: Pedro Algarvio Date: Tue, 3 Oct 2023 13:57:07 +0100 Subject: [PATCH 029/153] Properly mock async method Signed-off-by: Pedro Algarvio --- .../unit/fileclient/test_fileclient.py | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/tests/pytests/unit/fileclient/test_fileclient.py b/tests/pytests/unit/fileclient/test_fileclient.py index 20eebb2bd51..0b020a4fd73 100644 --- a/tests/pytests/unit/fileclient/test_fileclient.py +++ b/tests/pytests/unit/fileclient/test_fileclient.py @@ -1,8 +1,6 @@ """ Tests for the salt fileclient """ - - import errno import logging import os @@ -11,7 +9,7 @@ import pytest import salt.utils.files from salt import fileclient -from tests.support.mock import MagicMock, Mock, patch +from tests.support.mock import AsyncMock, MagicMock, Mock, patch log = logging.getLogger(__name__) @@ -125,20 +123,17 @@ def test_fileclient_timeout(minion_opts, master_opts): master_ip="localhost", master_port=minion_opts["master_port"] ) - async def mock_auth(): - return True - def mock_dumps(*args): return b"meh" with fileclient.get_file_client(minion_opts) as client: # Authenticate must return true - client.auth.authenticate = mock_auth - # Crypticle must return bytes to pass to transport.RequestClient.send - client.auth._crypticle = Mock() - client.auth._crypticle.dumps = mock_dumps - with pytest.raises(salt.exceptions.SaltClientError): - client.file_list() + with patch.object(client.auth, "authenticate", AsyncMock(return_value=True)): + # Crypticle must return bytes to pass to transport.RequestClient.send + client.auth._crypticle = Mock() + client.auth._crypticle.dumps = mock_dumps + with pytest.raises(salt.exceptions.SaltClientError): + client.file_list() def test_cache_skips_makedirs_on_race_condition(client_opts): From 963f1ce6691870e7e7076e53b75c990ed17b519e Mon Sep 17 00:00:00 2001 From: Pedro Algarvio Date: Tue, 13 Jun 2023 07:37:19 +0100 Subject: [PATCH 030/153] Fix mock calls Signed-off-by: Pedro Algarvio --- tests/pytests/unit/modules/test_aptpkg.py | 12 +++++----- .../pytests/unit/modules/test_linux_sysctl.py | 8 +++---- tests/pytests/unit/modules/test_win_ip.py | 4 ++-- tests/pytests/unit/test_master.py | 2 +- tests/pytests/unit/utils/event/test_event.py | 24 +++++++++---------- tests/unit/modules/test_nilrt_ip.py | 4 ++-- .../unit/netapi/rest_tornado/test_saltnado.py | 22 +++++++---------- 7 files changed, 35 insertions(+), 41 deletions(-) diff --git a/tests/pytests/unit/modules/test_aptpkg.py b/tests/pytests/unit/modules/test_aptpkg.py index 33d976b8427..9a812d817ce 100644 --- a/tests/pytests/unit/modules/test_aptpkg.py +++ b/tests/pytests/unit/modules/test_aptpkg.py @@ -1298,17 +1298,17 @@ def test_call_apt_dpkg_lock(): ] cmd_mock = MagicMock(side_effect=cmd_side_effect) - cmd_call = ( + cmd_call = [ call( ["dpkg", "-l", "python"], - env={}, - ignore_retcode=False, output_loglevel="quiet", python_shell=True, + env={}, + ignore_retcode=False, username="Darth Vader", ), - ) - expected_calls = [cmd_call * 5] + ] + expected_calls = cmd_call * 5 with patch.dict( aptpkg.__salt__, @@ -1328,7 +1328,7 @@ def test_call_apt_dpkg_lock(): # We should attempt to call the cmd 5 times assert cmd_mock.call_count == 5 - cmd_mock.has_calls(expected_calls) + cmd_mock.assert_has_calls(expected_calls) def test_services_need_restart_checkrestart_missing(): diff --git a/tests/pytests/unit/modules/test_linux_sysctl.py b/tests/pytests/unit/modules/test_linux_sysctl.py index 0bdd24039d7..6b0875bc460 100644 --- a/tests/pytests/unit/modules/test_linux_sysctl.py +++ b/tests/pytests/unit/modules/test_linux_sysctl.py @@ -215,7 +215,7 @@ def test_persist_no_conf_failure(): ): with pytest.raises(CommandExecutionError): linux_sysctl.persist("net.ipv4.ip_forward", 42, config=None) - fopen_mock.called_once() + fopen_mock.assert_called_once() def test_persist_no_conf_success(): @@ -353,7 +353,7 @@ def test_persist_value_with_spaces_already_set(tmp_path): """ config = str(tmp_path / "existing_sysctl_with_spaces.conf") value = "|/usr/share/kdump-tools/dump-core %p %s %t %e" - config_file_content = "kernel.core_pattern = {}\n".format(value) + config_file_content = f"kernel.core_pattern = {value}\n" with fopen(config, "w", encoding="utf-8") as config_file: config_file.write(config_file_content) mock_run = MagicMock(return_value=value) @@ -383,7 +383,7 @@ def test_persist_value_with_spaces_already_configured(tmp_path): """ config = str(tmp_path / "existing_sysctl_with_spaces.conf") value = "|/usr/share/kdump-tools/dump-core %p %s %t %e" - config_file_content = "kernel.core_pattern = {}\n".format(value) + config_file_content = f"kernel.core_pattern = {value}\n" with fopen(config, "w", encoding="utf-8") as config_file: config_file.write(config_file_content) mock_run = MagicMock(return_value="") @@ -451,7 +451,7 @@ def test_persist_value_with_spaces_update_config(tmp_path): assert os.path.isfile(config) with fopen(config, encoding="utf-8") as config_file: written = config_file.read() - assert written == "kernel.core_pattern = {}\n".format(value) + assert written == f"kernel.core_pattern = {value}\n" def test_persist_value_with_spaces_new_file(tmp_path): diff --git a/tests/pytests/unit/modules/test_win_ip.py b/tests/pytests/unit/modules/test_win_ip.py index 38eb6b1ac5f..94a3fe7ca93 100644 --- a/tests/pytests/unit/modules/test_win_ip.py +++ b/tests/pytests/unit/modules/test_win_ip.py @@ -151,7 +151,7 @@ def test_enable(): ): assert win_ip.enable("Ethernet") - mock_cmd.called_once_with( + mock_cmd.assert_called_once_with( [ "netsh", "interface", @@ -180,7 +180,7 @@ def test_disable(): ): assert win_ip.disable("Ethernet") - mock_cmd.called_once_with( + mock_cmd.assert_called_once_with( [ "netsh", "interface", diff --git a/tests/pytests/unit/test_master.py b/tests/pytests/unit/test_master.py index cd11d217c79..502767d3e34 100644 --- a/tests/pytests/unit/test_master.py +++ b/tests/pytests/unit/test_master.py @@ -60,7 +60,7 @@ def test_fileserver_duration(): end = time.time() # Interval is equal to timeout so the _do_update method will be called # one time. - update.called_once() + update.assert_called_once() # Timeout is 1 second duration = end - start if duration > 2 and salt.utils.platform.spawning_platform(): diff --git a/tests/pytests/unit/utils/event/test_event.py b/tests/pytests/unit/utils/event/test_event.py index e289e72dad0..f4b6c159996 100644 --- a/tests/pytests/unit/utils/event/test_event.py +++ b/tests/pytests/unit/utils/event/test_event.py @@ -38,7 +38,7 @@ def sock_dir(tmp_path): def _assert_got_event(evt, data, msg=None, expected_failure=False): assert evt is not None, msg for key in data: - assert key in evt, "{}: Key {} missing".format(msg, key) + assert key in evt, f"{msg}: Key {key} missing" assertMsg = "{0}: Key {1} value mismatch, {2} != {3}" assertMsg = assertMsg.format(msg, key, data[key], evt[key]) if not expected_failure: @@ -59,8 +59,8 @@ def test_minion_event(sock_dir): :10 ] with salt.utils.event.MinionEvent(opts, listen=False) as me: - assert me.puburi == str(sock_dir / "minion_event_{}_pub.ipc".format(id_hash)) - assert me.pulluri == str(sock_dir / "minion_event_{}_pull.ipc".format(id_hash)) + assert me.puburi == str(sock_dir / f"minion_event_{id_hash}_pub.ipc") + assert me.pulluri == str(sock_dir / f"minion_event_{id_hash}_pull.ipc") def test_minion_event_tcp_ipc_mode(): @@ -73,8 +73,8 @@ def test_minion_event_tcp_ipc_mode(): def test_minion_event_no_id(sock_dir): with salt.utils.event.MinionEvent(dict(sock_dir=str(sock_dir)), listen=False) as me: id_hash = hashlib.sha256(salt.utils.stringutils.to_bytes("")).hexdigest()[:10] - assert me.puburi == str(sock_dir / "minion_event_{}_pub.ipc".format(id_hash)) - assert me.pulluri == str(sock_dir / "minion_event_{}_pull.ipc".format(id_hash)) + assert me.puburi == str(sock_dir / f"minion_event_{id_hash}_pub.ipc") + assert me.pulluri == str(sock_dir / f"minion_event_{id_hash}_pull.ipc") @pytest.mark.slow_test @@ -256,9 +256,9 @@ def test_event_many(sock_dir): with eventpublisher_process(str(sock_dir)): with salt.utils.event.MasterEvent(str(sock_dir), listen=True) as me: for i in range(500): - me.fire_event({"data": "{}".format(i)}, "testevents") + me.fire_event({"data": f"{i}"}, "testevents") evt = me.get_event(tag="testevents") - _assert_got_event(evt, {"data": "{}".format(i)}, "Event {}".format(i)) + _assert_got_event(evt, {"data": f"{i}"}, f"Event {i}") @pytest.mark.slow_test @@ -268,10 +268,10 @@ def test_event_many_backlog(sock_dir): with salt.utils.event.MasterEvent(str(sock_dir), listen=True) as me: # Must not exceed zmq HWM for i in range(500): - me.fire_event({"data": "{}".format(i)}, "testevents") + me.fire_event({"data": f"{i}"}, "testevents") for i in range(500): evt = me.get_event(tag="testevents") - _assert_got_event(evt, {"data": "{}".format(i)}, "Event {}".format(i)) + _assert_got_event(evt, {"data": f"{i}"}, f"Event {i}") # Test the fire_master function. As it wraps the underlying fire_event, @@ -300,7 +300,7 @@ def test_connect_pull_should_debug_log_on_StreamClosedError(): event = SaltEvent(node=None) with patch.object(event, "pusher") as mock_pusher: with patch.object( - salt.utils.event.log, "debug", auto_spec=True + salt.utils.event.log, "debug", autospec=True ) as mock_log_debug: mock_pusher.connect.side_effect = ( salt.ext.tornado.iostream.StreamClosedError @@ -317,10 +317,10 @@ def test_connect_pull_should_error_log_on_other_errors(error): event = SaltEvent(node=None) with patch.object(event, "pusher") as mock_pusher: with patch.object( - salt.utils.event.log, "debug", auto_spec=True + salt.utils.event.log, "debug", autospec=True ) as mock_log_debug: with patch.object( - salt.utils.event.log, "error", auto_spec=True + salt.utils.event.log, "error", autospec=True ) as mock_log_error: mock_pusher.connect.side_effect = error event.connect_pull() diff --git a/tests/unit/modules/test_nilrt_ip.py b/tests/unit/modules/test_nilrt_ip.py index 1261473edb4..50dc13b20b8 100644 --- a/tests/unit/modules/test_nilrt_ip.py +++ b/tests/unit/modules/test_nilrt_ip.py @@ -28,7 +28,7 @@ class NilrtIPTestCase(TestCase, LoaderModuleMockMixin): "salt.modules.nilrt_ip._change_dhcp_config", return_value=True ) as change_dhcp_config_mock: assert nilrt_ip._change_state("test_interface", "down") - assert change_dhcp_config_mock.called_with("test_interface", False) + change_dhcp_config_mock.assert_called_with("test_interface", False) def test_change_state_up_state(self): """ @@ -42,7 +42,7 @@ class NilrtIPTestCase(TestCase, LoaderModuleMockMixin): "salt.modules.nilrt_ip._change_dhcp_config", return_value=True ) as change_dhcp_config_mock: assert nilrt_ip._change_state("test_interface", "up") - assert change_dhcp_config_mock.called_with("test_interface") + change_dhcp_config_mock.assert_called_with("test_interface") def test_set_static_all_with_dns(self): """ diff --git a/tests/unit/netapi/rest_tornado/test_saltnado.py b/tests/unit/netapi/rest_tornado/test_saltnado.py index 7b63a65d4f3..c4758e700ab 100644 --- a/tests/unit/netapi/rest_tornado/test_saltnado.py +++ b/tests/unit/netapi/rest_tornado/test_saltnado.py @@ -647,7 +647,6 @@ class TestDisbatchLocal(salt.ext.tornado.testing.AsyncTestCase): with patch.object( self.handler.application.event_listener, "get_event", - autospec=True, side_effect=fancy_get_event, ), patch.dict( self.handler.application.opts, @@ -698,7 +697,6 @@ class TestDisbatchLocal(salt.ext.tornado.testing.AsyncTestCase): with patch.object( self.handler.application.event_listener, "get_event", - autospec=True, side_effect=fancy_get_event, ), patch.object( self.handler, @@ -729,8 +727,8 @@ class TestDisbatchLocal(salt.ext.tornado.testing.AsyncTestCase): { "tag": "fnord", "data": { - "return": "return from fnord {}".format(i), - "id": "fnord {}".format(i), + "return": f"return from fnord {i}", + "id": f"fnord {i}", }, } ) @@ -760,7 +758,6 @@ class TestDisbatchLocal(salt.ext.tornado.testing.AsyncTestCase): with patch.object( self.handler.application.event_listener, "get_event", - autospec=True, side_effect=fancy_get_event, ), patch.object( self.handler, @@ -794,8 +791,8 @@ class TestDisbatchLocal(salt.ext.tornado.testing.AsyncTestCase): { "tag": "fnord", "data": { - "return": "return from fnord {}".format(i), - "id": "fnord {}".format(i), + "return": f"return from fnord {i}", + "id": f"fnord {i}", }, } ) @@ -820,7 +817,6 @@ class TestDisbatchLocal(salt.ext.tornado.testing.AsyncTestCase): with patch.object( self.handler.application.event_listener, "get_event", - autospec=True, side_effect=fancy_get_event, ), patch.dict( self.handler.application.opts, @@ -843,12 +839,12 @@ class TestDisbatchLocal(salt.ext.tornado.testing.AsyncTestCase): completed_events = [salt.ext.tornado.gen.Future() for _ in range(10)] events_by_id = {} for i, event in enumerate(completed_events): - id_ = "fnord {}".format(i) + id_ = f"fnord {i}" events_by_id[id_] = event event.set_result( { "tag": "fnord", - "data": {"return": "return from {}".format(id_), "id": id_}, + "data": {"return": f"return from {id_}", "id": id_}, } ) expected_result = { @@ -878,7 +874,6 @@ class TestDisbatchLocal(salt.ext.tornado.testing.AsyncTestCase): with patch.object( self.handler.application.event_listener, "get_event", - autospec=True, side_effect=fancy_get_event, ), patch.dict( self.handler.application.opts, @@ -904,12 +899,12 @@ class TestDisbatchLocal(salt.ext.tornado.testing.AsyncTestCase): events_by_id = {} # Setup some real-enough looking return data for i, event in enumerate(completed_events): - id_ = "fnord {}".format(i) + id_ = f"fnord {i}" events_by_id[id_] = event event.set_result( { "tag": "fnord", - "data": {"return": "return from {}".format(id_), "id": id_}, + "data": {"return": f"return from {id_}", "id": id_}, } ) # Hard coded instead of dynamic to avoid potentially writing a test @@ -971,7 +966,6 @@ class TestDisbatchLocal(salt.ext.tornado.testing.AsyncTestCase): with patch.object( self.handler.application.event_listener, "get_event", - autospec=True, side_effect=fancy_get_event, ), patch.object( self.handler, From c7fbbd42ec6e02d31dd5b46e54cb4d7cb9adb9a5 Mon Sep 17 00:00:00 2001 From: Pedro Algarvio Date: Tue, 12 Sep 2023 13:04:03 +0100 Subject: [PATCH 031/153] The correct method is `assert_called_once_with` not `called_once_with` Signed-off-by: Pedro Algarvio --- tests/pytests/unit/modules/test_msteams.py | 2 +- tests/pytests/unit/states/test_file.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/pytests/unit/modules/test_msteams.py b/tests/pytests/unit/modules/test_msteams.py index 05e6a3d2284..1307cd854bd 100644 --- a/tests/pytests/unit/modules/test_msteams.py +++ b/tests/pytests/unit/modules/test_msteams.py @@ -24,7 +24,7 @@ def test_post_card(): with patch("salt.utils.http.query", http_mock): ret = msteams.post_card("test") assert ret - assert http_mock.called_once_with( + assert http_mock.assert_called_once_with( method="POST", header_dict={"Content-Type": "application/json"}, data='{"text": "test", "title": Null, "themeColor": Null}', diff --git a/tests/pytests/unit/states/test_file.py b/tests/pytests/unit/states/test_file.py index bb040f0fc60..393ede9b397 100644 --- a/tests/pytests/unit/states/test_file.py +++ b/tests/pytests/unit/states/test_file.py @@ -87,6 +87,6 @@ def test_file_recurse_directory_test(): "name": "/tmp/test", "result": False, } - assert salt_dunder["cp.list_master_dirs"].called_once_with( + assert salt_dunder["cp.list_master_dirs"].assert_called_once_with( prefix="does_not_exist/" ) From 5e1b7a21013eb18eef5b8f4835dc13c079b72481 Mon Sep 17 00:00:00 2001 From: Pedro Algarvio Date: Thu, 14 Sep 2023 08:03:14 +0100 Subject: [PATCH 032/153] Fix failing tests Signed-off-by: Pedro Algarvio --- tests/pytests/unit/modules/test_msteams.py | 6 ++++-- tests/pytests/unit/states/test_file.py | 5 +++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/tests/pytests/unit/modules/test_msteams.py b/tests/pytests/unit/modules/test_msteams.py index 1307cd854bd..a374dd90321 100644 --- a/tests/pytests/unit/modules/test_msteams.py +++ b/tests/pytests/unit/modules/test_msteams.py @@ -24,8 +24,10 @@ def test_post_card(): with patch("salt.utils.http.query", http_mock): ret = msteams.post_card("test") assert ret - assert http_mock.assert_called_once_with( + http_mock.assert_called_once_with( + "https://example.com/web_hook", method="POST", header_dict={"Content-Type": "application/json"}, - data='{"text": "test", "title": Null, "themeColor": Null}', + data='{"text": "test", "title": null, "themeColor": null}', + status=True, ) diff --git a/tests/pytests/unit/states/test_file.py b/tests/pytests/unit/states/test_file.py index 393ede9b397..03ee53626ee 100644 --- a/tests/pytests/unit/states/test_file.py +++ b/tests/pytests/unit/states/test_file.py @@ -87,6 +87,7 @@ def test_file_recurse_directory_test(): "name": "/tmp/test", "result": False, } - assert salt_dunder["cp.list_master_dirs"].assert_called_once_with( - prefix="does_not_exist/" + salt_dunder["cp.list_master_dirs"].assert_called_once_with( + saltenv="base", + prefix="does_not_exist/", ) From d295e24f4354d62a6c53b9f6f99696b987eb15a1 Mon Sep 17 00:00:00 2001 From: Pedro Algarvio Date: Thu, 14 Sep 2023 08:05:22 +0100 Subject: [PATCH 033/153] Switch to the correct fixture usage Signed-off-by: Pedro Algarvio --- tests/pytests/unit/states/test_file.py | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/tests/pytests/unit/states/test_file.py b/tests/pytests/unit/states/test_file.py index 03ee53626ee..b7e239045b4 100644 --- a/tests/pytests/unit/states/test_file.py +++ b/tests/pytests/unit/states/test_file.py @@ -7,19 +7,17 @@ import salt.states.file as file from tests.support.mock import MagicMock, call, create_autospec, patch -@pytest.fixture(autouse=True) -def setup_loader(request): - setup_loader_modules = { +@pytest.fixture +def configure_loader_modules(minion_opts): + return { file: { "__opts__": {"test": False}, "__env__": "base", } } - with pytest.helpers.loader_mock(request, setup_loader_modules) as loader_mock: - yield loader_mock -@pytest.fixture() +@pytest.fixture def fake_remove(): fake_remove_mod = create_autospec(filemod.remove) with patch.dict(file.__salt__, {"file.remove": fake_remove_mod}): From 94ca7456c9d122815df03966f4d969193b31e67f Mon Sep 17 00:00:00 2001 From: Pedro Algarvio Date: Wed, 4 Oct 2023 13:46:43 +0100 Subject: [PATCH 034/153] Update to latest golden images Signed-off-by: Pedro Algarvio --- cicd/amis.yml | 2 +- cicd/golden-images.json | 224 +++++++++++++++++++++++++++++----------- 2 files changed, 163 insertions(+), 63 deletions(-) diff --git a/cicd/amis.yml b/cicd/amis.yml index 8fb4513180f..8d0c0a4d922 100644 --- a/cicd/amis.yml +++ b/cicd/amis.yml @@ -1 +1 @@ -centosstream-9-x86_64: ami-0bd92f4dca5d74017 +centosstream-9-x86_64: ami-0f474b360fca72512 diff --git a/cicd/golden-images.json b/cicd/golden-images.json index 21c702ca732..9a3f06f705a 100644 --- a/cicd/golden-images.json +++ b/cicd/golden-images.json @@ -1,8 +1,8 @@ { "almalinux-8-arm64": { - "ami": "ami-05c1d3dbdeeb94bc6", + "ami": "ami-0f08fc00f1689a8ec", "ami_description": "CI Image of AlmaLinux 8 arm64", - "ami_name": "salt-project/ci/almalinux/8/arm64/20230522.0606", + "ami_name": "salt-project/ci/almalinux/8/arm64/20231003.2057", "arch": "arm64", "cloudwatch-agent-available": "true", "instance_type": "m6g.large", @@ -10,9 +10,9 @@ "ssh_username": "ec2-user" }, "almalinux-8": { - "ami": "ami-0ec1cbc531f10105b", + "ami": "ami-08f648e0e6fa619c2", "ami_description": "CI Image of AlmaLinux 8 x86_64", - "ami_name": "salt-project/ci/almalinux/8/x86_64/20230522.0606", + "ami_name": "salt-project/ci/almalinux/8/x86_64/20231003.2058", "arch": "x86_64", "cloudwatch-agent-available": "true", "instance_type": "t3a.large", @@ -20,9 +20,9 @@ "ssh_username": "ec2-user" }, "almalinux-9-arm64": { - "ami": "ami-036c495af9dfcf852", + "ami": "ami-0394b210e1e09b962", "ami_description": "CI Image of AlmaLinux 9 arm64", - "ami_name": "salt-project/ci/almalinux/9/arm64/20230522.0606", + "ami_name": "salt-project/ci/almalinux/9/arm64/20231003.2058", "arch": "arm64", "cloudwatch-agent-available": "true", "instance_type": "m6g.large", @@ -30,9 +30,9 @@ "ssh_username": "ec2-user" }, "almalinux-9": { - "ami": "ami-0dbc7030666419671", + "ami": "ami-0a909a150cfebea5b", "ami_description": "CI Image of AlmaLinux 9 x86_64", - "ami_name": "salt-project/ci/almalinux/9/x86_64/20230522.0606", + "ami_name": "salt-project/ci/almalinux/9/x86_64/20231003.2100", "arch": "x86_64", "cloudwatch-agent-available": "true", "instance_type": "t3a.large", @@ -40,9 +40,9 @@ "ssh_username": "ec2-user" }, "amazonlinux-2-arm64": { - "ami": "ami-022232915c2a5f2d0", + "ami": "ami-038eac6a08feecdb2", "ami_description": "CI Image of AmazonLinux 2 arm64", - "ami_name": "salt-project/ci/amazonlinux/2/arm64/20230522.0621", + "ami_name": "salt-project/ci/amazonlinux/2/arm64/20231003.2104", "arch": "arm64", "cloudwatch-agent-available": "true", "instance_type": "m6g.large", @@ -50,9 +50,29 @@ "ssh_username": "ec2-user" }, "amazonlinux-2": { - "ami": "ami-0695f87baa5b5ce15", + "ami": "ami-09682e96e7785642d", "ami_description": "CI Image of AmazonLinux 2 x86_64", - "ami_name": "salt-project/ci/amazonlinux/2/x86_64/20230522.0620", + "ami_name": "salt-project/ci/amazonlinux/2/x86_64/20231003.2104", + "arch": "x86_64", + "cloudwatch-agent-available": "true", + "instance_type": "t3a.large", + "is_windows": "false", + "ssh_username": "ec2-user" + }, + "amazonlinux-2023.1-arm64": { + "ami": "ami-0e46c84fb43817334", + "ami_description": "CI Image of AmazonLinux 2023.1 arm64", + "ami_name": "salt-project/ci/amazonlinux/2023.1/arm64/20231003.2103", + "arch": "arm64", + "cloudwatch-agent-available": "true", + "instance_type": "m6g.large", + "is_windows": "false", + "ssh_username": "ec2-user" + }, + "amazonlinux-2023.1": { + "ami": "ami-0ac591368ec230345", + "ami_description": "CI Image of AmazonLinux 2023.1 x86_64", + "ami_name": "salt-project/ci/amazonlinux/2023.1/x86_64/20231003.2103", "arch": "x86_64", "cloudwatch-agent-available": "true", "instance_type": "t3a.large", @@ -60,9 +80,9 @@ "ssh_username": "ec2-user" }, "archlinux-lts": { - "ami": "ami-0f6424847f98afc04", + "ami": "ami-017de6f1e636021a0", "ami_description": "CI Image of ArchLinux lts x86_64", - "ami_name": "salt-project/ci/archlinux/lts/x86_64/20230522.0606", + "ami_name": "salt-project/ci/archlinux/lts/x86_64/20231003.2108", "arch": "x86_64", "cloudwatch-agent-available": "false", "instance_type": "t3a.large", @@ -70,9 +90,9 @@ "ssh_username": "arch" }, "centos-7-arm64": { - "ami": "ami-0908831c364e33a37", + "ami": "ami-088cb5f3066efa748", "ami_description": "CI Image of CentOS 7 arm64", - "ami_name": "salt-project/ci/centos/7/arm64/20230522.0606", + "ami_name": "salt-project/ci/centos/7/arm64/20231003.2108", "arch": "arm64", "cloudwatch-agent-available": "true", "instance_type": "m6g.large", @@ -80,9 +100,9 @@ "ssh_username": "centos" }, "centos-7": { - "ami": "ami-0ace33028ada62ddb", + "ami": "ami-05c4056c36cecc136", "ami_description": "CI Image of CentOS 7 x86_64", - "ami_name": "salt-project/ci/centos/7/x86_64/20230522.0606", + "ami_name": "salt-project/ci/centos/7/x86_64/20231003.2107", "arch": "x86_64", "cloudwatch-agent-available": "true", "instance_type": "t3a.large", @@ -90,9 +110,9 @@ "ssh_username": "centos" }, "centosstream-8-arm64": { - "ami": "ami-0b30827dc592b2695", + "ami": "ami-0e2a761782490f7c2", "ami_description": "CI Image of CentOSStream 8 arm64", - "ami_name": "salt-project/ci/centosstream/8/arm64/20230522.0618", + "ami_name": "salt-project/ci/centosstream/8/arm64/20231003.2109", "arch": "arm64", "cloudwatch-agent-available": "true", "instance_type": "m6g.large", @@ -100,9 +120,9 @@ "ssh_username": "centos" }, "centosstream-8": { - "ami": "ami-0929882a7e5cfba5f", + "ami": "ami-06178cd094ea71c34", "ami_description": "CI Image of CentOSStream 8 x86_64", - "ami_name": "salt-project/ci/centosstream/8/x86_64/20230522.0618", + "ami_name": "salt-project/ci/centosstream/8/x86_64/20231003.2108", "arch": "x86_64", "cloudwatch-agent-available": "true", "instance_type": "t3a.large", @@ -110,9 +130,9 @@ "ssh_username": "centos" }, "centosstream-9-arm64": { - "ami": "ami-00700fb8821b8b8c7", + "ami": "ami-0ea1025028e6fe700", "ami_description": "CI Image of CentOSStream 9 arm64", - "ami_name": "salt-project/ci/centosstream/9/arm64/20230522.0619", + "ami_name": "salt-project/ci/centosstream/9/arm64/20231003.2109", "arch": "arm64", "cloudwatch-agent-available": "true", "instance_type": "m6g.large", @@ -120,9 +140,9 @@ "ssh_username": "ec2-user" }, "centosstream-9": { - "ami": "ami-0bd92f4dca5d74017", + "ami": "ami-0f474b360fca72512", "ami_description": "CI Image of CentOSStream 9 x86_64", - "ami_name": "salt-project/ci/centosstream/9/x86_64/20230522.0619", + "ami_name": "salt-project/ci/centosstream/9/x86_64/20231003.2109", "arch": "x86_64", "cloudwatch-agent-available": "true", "instance_type": "t3a.large", @@ -130,9 +150,9 @@ "ssh_username": "ec2-user" }, "debian-10-arm64": { - "ami": "ami-0f681fc9d5de0c3df", + "ami": "ami-0b9cbee875ae2e145", "ami_description": "CI Image of Debian 10 arm64", - "ami_name": "salt-project/ci/debian/10/arm64/20230522.0606", + "ami_name": "salt-project/ci/debian/10/arm64/20231003.2114", "arch": "arm64", "cloudwatch-agent-available": "false", "instance_type": "m6g.large", @@ -140,9 +160,9 @@ "ssh_username": "admin" }, "debian-10": { - "ami": "ami-0dcf5610590139238", + "ami": "ami-03b713e88ac915c18", "ami_description": "CI Image of Debian 10 x86_64", - "ami_name": "salt-project/ci/debian/10/x86_64/20230522.0606", + "ami_name": "salt-project/ci/debian/10/x86_64/20231003.2112", "arch": "x86_64", "cloudwatch-agent-available": "true", "instance_type": "t3a.large", @@ -150,9 +170,9 @@ "ssh_username": "admin" }, "debian-11-arm64": { - "ami": "ami-062b4bf11a864825c", + "ami": "ami-0e48f24d9def8d84c", "ami_description": "CI Image of Debian 11 arm64", - "ami_name": "salt-project/ci/debian/11/arm64/20230522.0606", + "ami_name": "salt-project/ci/debian/11/arm64/20231003.2114", "arch": "arm64", "cloudwatch-agent-available": "false", "instance_type": "m6g.large", @@ -160,9 +180,29 @@ "ssh_username": "admin" }, "debian-11": { - "ami": "ami-0f400e5fa6806bbca", + "ami": "ami-07a2fb75d29d0d6f7", "ami_description": "CI Image of Debian 11 x86_64", - "ami_name": "salt-project/ci/debian/11/x86_64/20230522.0606", + "ami_name": "salt-project/ci/debian/11/x86_64/20231003.2116", + "arch": "x86_64", + "cloudwatch-agent-available": "true", + "instance_type": "t3a.large", + "is_windows": "false", + "ssh_username": "admin" + }, + "debian-12-arm64": { + "ami": "ami-027199ded9ce9f659", + "ami_description": "CI Image of Debian 12 arm64", + "ami_name": "salt-project/ci/debian/12/arm64/20231003.2117", + "arch": "arm64", + "cloudwatch-agent-available": "false", + "instance_type": "m6g.large", + "is_windows": "false", + "ssh_username": "admin" + }, + "debian-12": { + "ami": "ami-02156ad853a403599", + "ami_description": "CI Image of Debian 12 x86_64", + "ami_name": "salt-project/ci/debian/12/x86_64/20231003.2119", "arch": "x86_64", "cloudwatch-agent-available": "true", "instance_type": "t3a.large", @@ -170,9 +210,9 @@ "ssh_username": "admin" }, "fedora-37-arm64": { - "ami": "ami-0d71d6f2b0869842f", + "ami": "ami-0dfb1b2e3b6cd8847", "ami_description": "CI Image of Fedora 37 arm64", - "ami_name": "salt-project/ci/fedora/37/arm64/20230522.0606", + "ami_name": "salt-project/ci/fedora/37/arm64/20231003.2119", "arch": "arm64", "cloudwatch-agent-available": "true", "instance_type": "m6g.large", @@ -180,9 +220,9 @@ "ssh_username": "fedora" }, "fedora-37": { - "ami": "ami-026f494dd4b9d40e8", + "ami": "ami-0d27e014bf07af18b", "ami_description": "CI Image of Fedora 37 x86_64", - "ami_name": "salt-project/ci/fedora/37/x86_64/20230522.0606", + "ami_name": "salt-project/ci/fedora/37/x86_64/20231003.2120", "arch": "x86_64", "cloudwatch-agent-available": "true", "instance_type": "t3a.large", @@ -190,9 +230,9 @@ "ssh_username": "fedora" }, "fedora-38-arm64": { - "ami": "ami-01ba8a7951daf68fb", + "ami": "ami-04f5a34bae3040974", "ami_description": "CI Image of Fedora 38 arm64", - "ami_name": "salt-project/ci/fedora/38/arm64/20230522.0606", + "ami_name": "salt-project/ci/fedora/38/arm64/20231003.2120", "arch": "arm64", "cloudwatch-agent-available": "true", "instance_type": "m6g.large", @@ -200,9 +240,9 @@ "ssh_username": "fedora" }, "fedora-38": { - "ami": "ami-0699dbe70b69e96aa", + "ami": "ami-0e69802061ed79891", "ami_description": "CI Image of Fedora 38 x86_64", - "ami_name": "salt-project/ci/fedora/38/x86_64/20230522.0606", + "ami_name": "salt-project/ci/fedora/38/x86_64/20231003.2123", "arch": "x86_64", "cloudwatch-agent-available": "true", "instance_type": "t3a.large", @@ -210,29 +250,69 @@ "ssh_username": "fedora" }, "opensuse-15": { - "ami": "ami-0c594da84f6e1cd96", + "ami": "ami-0ebb684e16914ad0a", "ami_description": "CI Image of Opensuse 15 x86_64", - "ami_name": "salt-project/ci/opensuse/15/x86_64/20230522.0619", + "ami_name": "salt-project/ci/opensuse/15/x86_64/20231003.2110", "arch": "x86_64", "cloudwatch-agent-available": "true", "instance_type": "t3a.large", "is_windows": "false", "ssh_username": "ec2-user" }, + "photonos-3-arm64": { + "ami": "ami-054765b3beb6dd97c", + "ami_description": "CI Image of PhotonOS 3 arm64", + "ami_name": "salt-project/ci/photonos/3/arm64/20231003.2129", + "arch": "arm64", + "cloudwatch-agent-available": "true", + "instance_type": "m6g.large", + "is_windows": "false", + "ssh_username": "root" + }, "photonos-3": { - "ami": "ami-0db2ebdb9bc3400ef", + "ami": "ami-0224e8a4471113ebb", "ami_description": "CI Image of PhotonOS 3 x86_64", - "ami_name": "salt-project/ci/photonos/3/x86_64/20230522.0617", + "ami_name": "salt-project/ci/photonos/3/x86_64/20231003.2128", "arch": "x86_64", "cloudwatch-agent-available": "true", "instance_type": "t3a.large", "is_windows": "false", "ssh_username": "root" }, + "photonos-4-arm64": { + "ami": "ami-091f6d77aa3921394", + "ami_description": "CI Image of PhotonOS 4 arm64", + "ami_name": "salt-project/ci/photonos/4/arm64/20231003.2124", + "arch": "arm64", + "cloudwatch-agent-available": "true", + "instance_type": "m6g.large", + "is_windows": "false", + "ssh_username": "root" + }, "photonos-4": { - "ami": "ami-08a6b6bbf6779a538", + "ami": "ami-0714704e9471a8e0c", "ami_description": "CI Image of PhotonOS 4 x86_64", - "ami_name": "salt-project/ci/photonos/4/x86_64/20230522.0606", + "ami_name": "salt-project/ci/photonos/4/x86_64/20231003.2130", + "arch": "x86_64", + "cloudwatch-agent-available": "true", + "instance_type": "t3a.large", + "is_windows": "false", + "ssh_username": "root" + }, + "photonos-5-arm64": { + "ami": "ami-05ebc5bddb487c20b", + "ami_description": "CI Image of PhotonOS 5 arm64", + "ami_name": "salt-project/ci/photonos/5/arm64/20231003.2130", + "arch": "arm64", + "cloudwatch-agent-available": "true", + "instance_type": "m6g.large", + "is_windows": "false", + "ssh_username": "root" + }, + "photonos-5": { + "ami": "ami-0b7e17bc1990da3af", + "ami_description": "CI Image of PhotonOS 5 x86_64", + "ami_name": "salt-project/ci/photonos/5/x86_64/20231003.2131", "arch": "x86_64", "cloudwatch-agent-available": "true", "instance_type": "t3a.large", @@ -240,9 +320,9 @@ "ssh_username": "root" }, "ubuntu-20.04-arm64": { - "ami": "ami-0dccc0de7a38cca90", + "ami": "ami-09210544c9163df86", "ami_description": "CI Image of Ubuntu 20.04 arm64", - "ami_name": "salt-project/ci/ubuntu/20.04/arm64/20230522.0606", + "ami_name": "salt-project/ci/ubuntu/20.04/arm64/20231003.2110", "arch": "arm64", "cloudwatch-agent-available": "true", "instance_type": "m6g.large", @@ -250,9 +330,9 @@ "ssh_username": "ubuntu" }, "ubuntu-20.04": { - "ami": "ami-05e51f893a626b579", + "ami": "ami-05894335447f4c052", "ami_description": "CI Image of Ubuntu 20.04 x86_64", - "ami_name": "salt-project/ci/ubuntu/20.04/x86_64/20230522.0606", + "ami_name": "salt-project/ci/ubuntu/20.04/x86_64/20231003.2110", "arch": "x86_64", "cloudwatch-agent-available": "true", "instance_type": "t3a.large", @@ -260,9 +340,9 @@ "ssh_username": "ubuntu" }, "ubuntu-22.04-arm64": { - "ami": "ami-0c958272da6c09ca6", + "ami": "ami-090423dbe605f6d3e", "ami_description": "CI Image of Ubuntu 22.04 arm64", - "ami_name": "salt-project/ci/ubuntu/22.04/arm64/20230522.0606", + "ami_name": "salt-project/ci/ubuntu/22.04/arm64/20231003.2111", "arch": "arm64", "cloudwatch-agent-available": "true", "instance_type": "m6g.large", @@ -270,9 +350,29 @@ "ssh_username": "ubuntu" }, "ubuntu-22.04": { - "ami": "ami-09e45f31ccafcdcec", + "ami": "ami-0a465357b34ea7fdc", "ami_description": "CI Image of Ubuntu 22.04 x86_64", - "ami_name": "salt-project/ci/ubuntu/22.04/x86_64/20230522.0606", + "ami_name": "salt-project/ci/ubuntu/22.04/x86_64/20231003.2111", + "arch": "x86_64", + "cloudwatch-agent-available": "true", + "instance_type": "t3a.large", + "is_windows": "false", + "ssh_username": "ubuntu" + }, + "ubuntu-23.04-arm64": { + "ami": "ami-0ed81524d646f95ee", + "ami_description": "CI Image of Ubuntu 23.04 arm64", + "ami_name": "salt-project/ci/ubuntu/23.04/arm64/20231003.2111", + "arch": "arm64", + "cloudwatch-agent-available": "true", + "instance_type": "m6g.large", + "is_windows": "false", + "ssh_username": "ubuntu" + }, + "ubuntu-23.04": { + "ami": "ami-02c7edd6357be51b6", + "ami_description": "CI Image of Ubuntu 23.04 x86_64", + "ami_name": "salt-project/ci/ubuntu/23.04/x86_64/20231003.2112", "arch": "x86_64", "cloudwatch-agent-available": "true", "instance_type": "t3a.large", @@ -280,9 +380,9 @@ "ssh_username": "ubuntu" }, "windows-2016": { - "ami": "ami-099db55543619f54a", + "ami": "ami-04f113ff291a8953f", "ami_description": "CI Image of Windows 2016 x86_64", - "ami_name": "salt-project/ci/windows/2016/x86_64/20230522.0606", + "ami_name": "salt-project/ci/windows/2016/x86_64/20231003.2104", "arch": "x86_64", "cloudwatch-agent-available": "true", "instance_type": "t3a.xlarge", @@ -290,9 +390,9 @@ "ssh_username": "Administrator" }, "windows-2019": { - "ami": "ami-0860ee5bc9ee93e13", + "ami": "ami-06475f495e0151fc9", "ami_description": "CI Image of Windows 2019 x86_64", - "ami_name": "salt-project/ci/windows/2019/x86_64/20230522.0606", + "ami_name": "salt-project/ci/windows/2019/x86_64/20231003.2106", "arch": "x86_64", "cloudwatch-agent-available": "true", "instance_type": "t3a.xlarge", @@ -300,9 +400,9 @@ "ssh_username": "Administrator" }, "windows-2022": { - "ami": "ami-032e3abce2aa98da7", + "ami": "ami-0558da89560480f32", "ami_description": "CI Image of Windows 2022 x86_64", - "ami_name": "salt-project/ci/windows/2022/x86_64/20230522.0606", + "ami_name": "salt-project/ci/windows/2022/x86_64/20231003.2106", "arch": "x86_64", "cloudwatch-agent-available": "true", "instance_type": "t3a.xlarge", From 7f230f5e803fb0a3d6cf55172e58da2a58280480 Mon Sep 17 00:00:00 2001 From: Pedro Algarvio Date: Wed, 4 Oct 2023 13:20:29 +0100 Subject: [PATCH 035/153] De-whitelist, again, since it's hanging on the newer windows golden images Signed-off-by: Pedro Algarvio --- tests/integration/modules/test_ssh.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/integration/modules/test_ssh.py b/tests/integration/modules/test_ssh.py index 0817877c86b..55586211622 100644 --- a/tests/integration/modules/test_ssh.py +++ b/tests/integration/modules/test_ssh.py @@ -26,7 +26,8 @@ def check_status(): return False -@pytest.mark.windows_whitelisted +# @pytest.mark.windows_whitelisted +# De-whitelist windows since it's hanging on the newer windows golden images @pytest.mark.skip_if_binaries_missing("ssh", "ssh-keygen", check_all=True) class SSHModuleTest(ModuleCase): """ From 9d441d6aa1bb8633e231f228381cc9ed017d7322 Mon Sep 17 00:00:00 2001 From: Pedro Algarvio Date: Wed, 4 Oct 2023 16:23:59 +0100 Subject: [PATCH 036/153] Force package tests to run when golden images change Signed-off-by: Pedro Algarvio --- tools/ci.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tools/ci.py b/tools/ci.py index c62850ddbec..0a920237d69 100644 --- a/tools/ci.py +++ b/tools/ci.py @@ -370,6 +370,7 @@ def define_jobs( required_pkg_test_changes: set[str] = { changed_files_contents["pkg_tests"], changed_files_contents["workflows"], + changed_files_contents["golden_images"], } if jobs["test-pkg"] and required_pkg_test_changes == {"false"}: if "test:pkg" in labels: From a0558d6967d6e28bd366dbb47b299e82e18334b4 Mon Sep 17 00:00:00 2001 From: Pedro Algarvio Date: Wed, 4 Oct 2023 16:42:24 +0100 Subject: [PATCH 037/153] Fix the security groups selection for developer created VMs Signed-off-by: Pedro Algarvio --- tools/vm.py | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/tools/vm.py b/tools/vm.py index f35102ad01b..20d1079938a 100644 --- a/tools/vm.py +++ b/tools/vm.py @@ -950,7 +950,6 @@ class VM: else: # This is a developer running log.info("Starting Developer configured VM") - # Get the develpers security group security_group_filters = [ { "Name": "vpc-id", @@ -960,10 +959,6 @@ class VM: "Name": "tag:spb:project", "Values": ["salt-project"], }, - { - "Name": "tag:spb:developer", - "Values": ["true"], - }, ] response = client.describe_security_groups(Filters=security_group_filters) if not response.get("SecurityGroups"): @@ -974,6 +969,26 @@ class VM: self.ctx.exit(1) # Override the launch template network interfaces config security_group_ids = [sg["GroupId"] for sg in response["SecurityGroups"]] + security_group_filters = [ + { + "Name": "vpc-id", + "Values": [vpc.id], + }, + { + "Name": "tag:Name", + "Values": [f"saltproject-{environment}-client-vpn-remote-access"], + }, + ] + response = client.describe_security_groups(Filters=security_group_filters) + if not response.get("SecurityGroups"): + self.ctx.error( + "Could not find the right VPN access security group. " + f"Filters:\n{pprint.pformat(security_group_filters)}" + ) + self.ctx.exit(1) + security_group_ids.extend( + [sg["GroupId"] for sg in response["SecurityGroups"]] + ) progress = create_progress_bar() create_task = progress.add_task( From 5c154ba14aa14a421f7bf13a9ab2e026e2e8be12 Mon Sep 17 00:00:00 2001 From: Pedro Algarvio Date: Wed, 4 Oct 2023 17:04:03 +0100 Subject: [PATCH 038/153] Log in which environment the developer VM is getting created Signed-off-by: Pedro Algarvio --- tools/vm.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/vm.py b/tools/vm.py index 20d1079938a..0d27cda2707 100644 --- a/tools/vm.py +++ b/tools/vm.py @@ -949,7 +949,7 @@ class VM: log.info("Starting CI configured VM") else: # This is a developer running - log.info("Starting Developer configured VM") + log.info(f"Starting Developer configured VM In Environment '{environment}'") security_group_filters = [ { "Name": "vpc-id", From dd49164eec4eec14e6a62785888755b0be52af30 Mon Sep 17 00:00:00 2001 From: Pedro Algarvio Date: Wed, 4 Oct 2023 15:00:16 +0100 Subject: [PATCH 039/153] Avoid problematic `grub-efi-amd64-signed` package on Ubuntu Signed-off-by: Pedro Algarvio --- pkg/tests/conftest.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/pkg/tests/conftest.py b/pkg/tests/conftest.py index 257f4615fb3..f73cb948ae2 100644 --- a/pkg/tests/conftest.py +++ b/pkg/tests/conftest.py @@ -49,6 +49,18 @@ def _system_up_to_date( grains, shell, ): + if grains["os"] == "Ubuntu" and grains["osarch"] == "amd64": + # The grub-efi-amd64-signed package seems to be a problem + # right now when updating the system + env = os.environ.copy() + env["DEBIAN_FRONTEND"] = "noninteractive" + ret = shell.run( + "apt-mark", + "hold", + "grub-efi-amd64-signed", + env=env, + ) + assert ret.returncode == 0 if grains["os_family"] == "Debian": ret = shell.run("apt", "update") assert ret.returncode == 0 From 52d0153772c2bfc9dd6b66ea2d69fc2502b88422 Mon Sep 17 00:00:00 2001 From: Pedro Algarvio Date: Fri, 6 Oct 2023 08:17:24 +0100 Subject: [PATCH 040/153] Update to the latest golden images Signed-off-by: Pedro Algarvio --- cicd/golden-images.json | 164 ++++++++++++++++++++-------------------- pkg/tests/conftest.py | 12 --- 2 files changed, 82 insertions(+), 94 deletions(-) diff --git a/cicd/golden-images.json b/cicd/golden-images.json index 9a3f06f705a..962af9809e6 100644 --- a/cicd/golden-images.json +++ b/cicd/golden-images.json @@ -1,8 +1,8 @@ { "almalinux-8-arm64": { - "ami": "ami-0f08fc00f1689a8ec", + "ami": "ami-04c86a9990a3836b9", "ami_description": "CI Image of AlmaLinux 8 arm64", - "ami_name": "salt-project/ci/almalinux/8/arm64/20231003.2057", + "ami_name": "salt-project/ci/almalinux/8/arm64/20231005.1556", "arch": "arm64", "cloudwatch-agent-available": "true", "instance_type": "m6g.large", @@ -10,9 +10,9 @@ "ssh_username": "ec2-user" }, "almalinux-8": { - "ami": "ami-08f648e0e6fa619c2", + "ami": "ami-059ed5c00c02c564b", "ami_description": "CI Image of AlmaLinux 8 x86_64", - "ami_name": "salt-project/ci/almalinux/8/x86_64/20231003.2058", + "ami_name": "salt-project/ci/almalinux/8/x86_64/20231005.1557", "arch": "x86_64", "cloudwatch-agent-available": "true", "instance_type": "t3a.large", @@ -20,9 +20,9 @@ "ssh_username": "ec2-user" }, "almalinux-9-arm64": { - "ami": "ami-0394b210e1e09b962", + "ami": "ami-0213f3e31656f7393", "ami_description": "CI Image of AlmaLinux 9 arm64", - "ami_name": "salt-project/ci/almalinux/9/arm64/20231003.2058", + "ami_name": "salt-project/ci/almalinux/9/arm64/20231005.1557", "arch": "arm64", "cloudwatch-agent-available": "true", "instance_type": "m6g.large", @@ -30,9 +30,9 @@ "ssh_username": "ec2-user" }, "almalinux-9": { - "ami": "ami-0a909a150cfebea5b", + "ami": "ami-0c4e36d63e728ee21", "ami_description": "CI Image of AlmaLinux 9 x86_64", - "ami_name": "salt-project/ci/almalinux/9/x86_64/20231003.2100", + "ami_name": "salt-project/ci/almalinux/9/x86_64/20231005.1557", "arch": "x86_64", "cloudwatch-agent-available": "true", "instance_type": "t3a.large", @@ -40,9 +40,9 @@ "ssh_username": "ec2-user" }, "amazonlinux-2-arm64": { - "ami": "ami-038eac6a08feecdb2", + "ami": "ami-010d24ab23bfb0330", "ami_description": "CI Image of AmazonLinux 2 arm64", - "ami_name": "salt-project/ci/amazonlinux/2/arm64/20231003.2104", + "ami_name": "salt-project/ci/amazonlinux/2/arm64/20231005.1614", "arch": "arm64", "cloudwatch-agent-available": "true", "instance_type": "m6g.large", @@ -50,9 +50,9 @@ "ssh_username": "ec2-user" }, "amazonlinux-2": { - "ami": "ami-09682e96e7785642d", + "ami": "ami-0ad016fe17f923c6b", "ami_description": "CI Image of AmazonLinux 2 x86_64", - "ami_name": "salt-project/ci/amazonlinux/2/x86_64/20231003.2104", + "ami_name": "salt-project/ci/amazonlinux/2/x86_64/20231005.1614", "arch": "x86_64", "cloudwatch-agent-available": "true", "instance_type": "t3a.large", @@ -60,9 +60,9 @@ "ssh_username": "ec2-user" }, "amazonlinux-2023.1-arm64": { - "ami": "ami-0e46c84fb43817334", + "ami": "ami-037b7d6177ec8259d", "ami_description": "CI Image of AmazonLinux 2023.1 arm64", - "ami_name": "salt-project/ci/amazonlinux/2023.1/arm64/20231003.2103", + "ami_name": "salt-project/ci/amazonlinux/2023.1/arm64/20231005.1555", "arch": "arm64", "cloudwatch-agent-available": "true", "instance_type": "m6g.large", @@ -70,9 +70,9 @@ "ssh_username": "ec2-user" }, "amazonlinux-2023.1": { - "ami": "ami-0ac591368ec230345", + "ami": "ami-08e04f6dd44c858fa", "ami_description": "CI Image of AmazonLinux 2023.1 x86_64", - "ami_name": "salt-project/ci/amazonlinux/2023.1/x86_64/20231003.2103", + "ami_name": "salt-project/ci/amazonlinux/2023.1/x86_64/20231005.1555", "arch": "x86_64", "cloudwatch-agent-available": "true", "instance_type": "t3a.large", @@ -80,9 +80,9 @@ "ssh_username": "ec2-user" }, "archlinux-lts": { - "ami": "ami-017de6f1e636021a0", + "ami": "ami-0b88ddfb321aff9ba", "ami_description": "CI Image of ArchLinux lts x86_64", - "ami_name": "salt-project/ci/archlinux/lts/x86_64/20231003.2108", + "ami_name": "salt-project/ci/archlinux/lts/x86_64/20231005.1555", "arch": "x86_64", "cloudwatch-agent-available": "false", "instance_type": "t3a.large", @@ -90,9 +90,9 @@ "ssh_username": "arch" }, "centos-7-arm64": { - "ami": "ami-088cb5f3066efa748", + "ami": "ami-01d5ee66081a02154", "ami_description": "CI Image of CentOS 7 arm64", - "ami_name": "salt-project/ci/centos/7/arm64/20231003.2108", + "ami_name": "salt-project/ci/centos/7/arm64/20231005.1617", "arch": "arm64", "cloudwatch-agent-available": "true", "instance_type": "m6g.large", @@ -100,9 +100,9 @@ "ssh_username": "centos" }, "centos-7": { - "ami": "ami-05c4056c36cecc136", + "ami": "ami-020fcff1da1f72f27", "ami_description": "CI Image of CentOS 7 x86_64", - "ami_name": "salt-project/ci/centos/7/x86_64/20231003.2107", + "ami_name": "salt-project/ci/centos/7/x86_64/20231005.1616", "arch": "x86_64", "cloudwatch-agent-available": "true", "instance_type": "t3a.large", @@ -110,9 +110,9 @@ "ssh_username": "centos" }, "centosstream-8-arm64": { - "ami": "ami-0e2a761782490f7c2", + "ami": "ami-0ac6238b6506f7b8f", "ami_description": "CI Image of CentOSStream 8 arm64", - "ami_name": "salt-project/ci/centosstream/8/arm64/20231003.2109", + "ami_name": "salt-project/ci/centosstream/8/arm64/20231005.1614", "arch": "arm64", "cloudwatch-agent-available": "true", "instance_type": "m6g.large", @@ -120,9 +120,9 @@ "ssh_username": "centos" }, "centosstream-8": { - "ami": "ami-06178cd094ea71c34", + "ami": "ami-0bfceb03d43d0ba0e", "ami_description": "CI Image of CentOSStream 8 x86_64", - "ami_name": "salt-project/ci/centosstream/8/x86_64/20231003.2108", + "ami_name": "salt-project/ci/centosstream/8/x86_64/20231005.1615", "arch": "x86_64", "cloudwatch-agent-available": "true", "instance_type": "t3a.large", @@ -130,9 +130,9 @@ "ssh_username": "centos" }, "centosstream-9-arm64": { - "ami": "ami-0ea1025028e6fe700", + "ami": "ami-04db23ba9082a01bf", "ami_description": "CI Image of CentOSStream 9 arm64", - "ami_name": "salt-project/ci/centosstream/9/arm64/20231003.2109", + "ami_name": "salt-project/ci/centosstream/9/arm64/20231005.1615", "arch": "arm64", "cloudwatch-agent-available": "true", "instance_type": "m6g.large", @@ -140,9 +140,9 @@ "ssh_username": "ec2-user" }, "centosstream-9": { - "ami": "ami-0f474b360fca72512", + "ami": "ami-0a47f4f785cb7a81c", "ami_description": "CI Image of CentOSStream 9 x86_64", - "ami_name": "salt-project/ci/centosstream/9/x86_64/20231003.2109", + "ami_name": "salt-project/ci/centosstream/9/x86_64/20231005.1615", "arch": "x86_64", "cloudwatch-agent-available": "true", "instance_type": "t3a.large", @@ -150,9 +150,9 @@ "ssh_username": "ec2-user" }, "debian-10-arm64": { - "ami": "ami-0b9cbee875ae2e145", + "ami": "ami-015d30e48fa213528", "ami_description": "CI Image of Debian 10 arm64", - "ami_name": "salt-project/ci/debian/10/arm64/20231003.2114", + "ami_name": "salt-project/ci/debian/10/arm64/20231005.1601", "arch": "arm64", "cloudwatch-agent-available": "false", "instance_type": "m6g.large", @@ -160,9 +160,9 @@ "ssh_username": "admin" }, "debian-10": { - "ami": "ami-03b713e88ac915c18", + "ami": "ami-0397043698fedfa4c", "ami_description": "CI Image of Debian 10 x86_64", - "ami_name": "salt-project/ci/debian/10/x86_64/20231003.2112", + "ami_name": "salt-project/ci/debian/10/x86_64/20231005.1606", "arch": "x86_64", "cloudwatch-agent-available": "true", "instance_type": "t3a.large", @@ -170,9 +170,9 @@ "ssh_username": "admin" }, "debian-11-arm64": { - "ami": "ami-0e48f24d9def8d84c", + "ami": "ami-008dbab5525972174", "ami_description": "CI Image of Debian 11 arm64", - "ami_name": "salt-project/ci/debian/11/arm64/20231003.2114", + "ami_name": "salt-project/ci/debian/11/arm64/20231005.1607", "arch": "arm64", "cloudwatch-agent-available": "false", "instance_type": "m6g.large", @@ -180,9 +180,9 @@ "ssh_username": "admin" }, "debian-11": { - "ami": "ami-07a2fb75d29d0d6f7", + "ami": "ami-04fc56501daaf3c94", "ami_description": "CI Image of Debian 11 x86_64", - "ami_name": "salt-project/ci/debian/11/x86_64/20231003.2116", + "ami_name": "salt-project/ci/debian/11/x86_64/20231005.1607", "arch": "x86_64", "cloudwatch-agent-available": "true", "instance_type": "t3a.large", @@ -190,9 +190,9 @@ "ssh_username": "admin" }, "debian-12-arm64": { - "ami": "ami-027199ded9ce9f659", + "ami": "ami-0956b73228a7368c3", "ami_description": "CI Image of Debian 12 arm64", - "ami_name": "salt-project/ci/debian/12/arm64/20231003.2117", + "ami_name": "salt-project/ci/debian/12/arm64/20231005.1610", "arch": "arm64", "cloudwatch-agent-available": "false", "instance_type": "m6g.large", @@ -200,9 +200,9 @@ "ssh_username": "admin" }, "debian-12": { - "ami": "ami-02156ad853a403599", + "ami": "ami-0d0aa04bb5c49e54f", "ami_description": "CI Image of Debian 12 x86_64", - "ami_name": "salt-project/ci/debian/12/x86_64/20231003.2119", + "ami_name": "salt-project/ci/debian/12/x86_64/20231005.1613", "arch": "x86_64", "cloudwatch-agent-available": "true", "instance_type": "t3a.large", @@ -210,9 +210,9 @@ "ssh_username": "admin" }, "fedora-37-arm64": { - "ami": "ami-0dfb1b2e3b6cd8847", + "ami": "ami-0201f64fda9f1ca6d", "ami_description": "CI Image of Fedora 37 arm64", - "ami_name": "salt-project/ci/fedora/37/arm64/20231003.2119", + "ami_name": "salt-project/ci/fedora/37/arm64/20231005.1617", "arch": "arm64", "cloudwatch-agent-available": "true", "instance_type": "m6g.large", @@ -220,9 +220,9 @@ "ssh_username": "fedora" }, "fedora-37": { - "ami": "ami-0d27e014bf07af18b", + "ami": "ami-02dfc80c8b14fd5bc", "ami_description": "CI Image of Fedora 37 x86_64", - "ami_name": "salt-project/ci/fedora/37/x86_64/20231003.2120", + "ami_name": "salt-project/ci/fedora/37/x86_64/20231005.1618", "arch": "x86_64", "cloudwatch-agent-available": "true", "instance_type": "t3a.large", @@ -230,9 +230,9 @@ "ssh_username": "fedora" }, "fedora-38-arm64": { - "ami": "ami-04f5a34bae3040974", + "ami": "ami-0b03c270c7f50165d", "ami_description": "CI Image of Fedora 38 arm64", - "ami_name": "salt-project/ci/fedora/38/arm64/20231003.2120", + "ami_name": "salt-project/ci/fedora/38/arm64/20231005.1618", "arch": "arm64", "cloudwatch-agent-available": "true", "instance_type": "m6g.large", @@ -240,9 +240,9 @@ "ssh_username": "fedora" }, "fedora-38": { - "ami": "ami-0e69802061ed79891", + "ami": "ami-0927a80620f670c23", "ami_description": "CI Image of Fedora 38 x86_64", - "ami_name": "salt-project/ci/fedora/38/x86_64/20231003.2123", + "ami_name": "salt-project/ci/fedora/38/x86_64/20231005.1626", "arch": "x86_64", "cloudwatch-agent-available": "true", "instance_type": "t3a.large", @@ -250,9 +250,9 @@ "ssh_username": "fedora" }, "opensuse-15": { - "ami": "ami-0ebb684e16914ad0a", + "ami": "ami-0b51e3479fabb4078", "ami_description": "CI Image of Opensuse 15 x86_64", - "ami_name": "salt-project/ci/opensuse/15/x86_64/20231003.2110", + "ami_name": "salt-project/ci/opensuse/15/x86_64/20231005.1614", "arch": "x86_64", "cloudwatch-agent-available": "true", "instance_type": "t3a.large", @@ -260,9 +260,9 @@ "ssh_username": "ec2-user" }, "photonos-3-arm64": { - "ami": "ami-054765b3beb6dd97c", + "ami": "ami-0a33037524874686c", "ami_description": "CI Image of PhotonOS 3 arm64", - "ami_name": "salt-project/ci/photonos/3/arm64/20231003.2129", + "ami_name": "salt-project/ci/photonos/3/arm64/20231005.1558", "arch": "arm64", "cloudwatch-agent-available": "true", "instance_type": "m6g.large", @@ -270,9 +270,9 @@ "ssh_username": "root" }, "photonos-3": { - "ami": "ami-0224e8a4471113ebb", + "ami": "ami-068c5c07aa91d84d1", "ami_description": "CI Image of PhotonOS 3 x86_64", - "ami_name": "salt-project/ci/photonos/3/x86_64/20231003.2128", + "ami_name": "salt-project/ci/photonos/3/x86_64/20231005.1558", "arch": "x86_64", "cloudwatch-agent-available": "true", "instance_type": "t3a.large", @@ -280,9 +280,9 @@ "ssh_username": "root" }, "photonos-4-arm64": { - "ami": "ami-091f6d77aa3921394", + "ami": "ami-0f8c72854c5b5679c", "ami_description": "CI Image of PhotonOS 4 arm64", - "ami_name": "salt-project/ci/photonos/4/arm64/20231003.2124", + "ami_name": "salt-project/ci/photonos/4/arm64/20231005.1558", "arch": "arm64", "cloudwatch-agent-available": "true", "instance_type": "m6g.large", @@ -290,9 +290,9 @@ "ssh_username": "root" }, "photonos-4": { - "ami": "ami-0714704e9471a8e0c", + "ami": "ami-04b8974b830b5adb0", "ami_description": "CI Image of PhotonOS 4 x86_64", - "ami_name": "salt-project/ci/photonos/4/x86_64/20231003.2130", + "ami_name": "salt-project/ci/photonos/4/x86_64/20231005.1559", "arch": "x86_64", "cloudwatch-agent-available": "true", "instance_type": "t3a.large", @@ -300,9 +300,9 @@ "ssh_username": "root" }, "photonos-5-arm64": { - "ami": "ami-05ebc5bddb487c20b", + "ami": "ami-0f466b198cbcaf380", "ami_description": "CI Image of PhotonOS 5 arm64", - "ami_name": "salt-project/ci/photonos/5/arm64/20231003.2130", + "ami_name": "salt-project/ci/photonos/5/arm64/20231005.1559", "arch": "arm64", "cloudwatch-agent-available": "true", "instance_type": "m6g.large", @@ -310,9 +310,9 @@ "ssh_username": "root" }, "photonos-5": { - "ami": "ami-0b7e17bc1990da3af", + "ami": "ami-01bb09f84464b243e", "ami_description": "CI Image of PhotonOS 5 x86_64", - "ami_name": "salt-project/ci/photonos/5/x86_64/20231003.2131", + "ami_name": "salt-project/ci/photonos/5/x86_64/20231005.1601", "arch": "x86_64", "cloudwatch-agent-available": "true", "instance_type": "t3a.large", @@ -320,9 +320,9 @@ "ssh_username": "root" }, "ubuntu-20.04-arm64": { - "ami": "ami-09210544c9163df86", + "ami": "ami-06d9a9e3b5ae369c7", "ami_description": "CI Image of Ubuntu 20.04 arm64", - "ami_name": "salt-project/ci/ubuntu/20.04/arm64/20231003.2110", + "ami_name": "salt-project/ci/ubuntu/20.04/arm64/20231005.1555", "arch": "arm64", "cloudwatch-agent-available": "true", "instance_type": "m6g.large", @@ -330,9 +330,9 @@ "ssh_username": "ubuntu" }, "ubuntu-20.04": { - "ami": "ami-05894335447f4c052", + "ami": "ami-080a55fb6cb08134d", "ami_description": "CI Image of Ubuntu 20.04 x86_64", - "ami_name": "salt-project/ci/ubuntu/20.04/x86_64/20231003.2110", + "ami_name": "salt-project/ci/ubuntu/20.04/x86_64/20231005.1555", "arch": "x86_64", "cloudwatch-agent-available": "true", "instance_type": "t3a.large", @@ -340,9 +340,9 @@ "ssh_username": "ubuntu" }, "ubuntu-22.04-arm64": { - "ami": "ami-090423dbe605f6d3e", + "ami": "ami-0c87b8f0b8794f32e", "ami_description": "CI Image of Ubuntu 22.04 arm64", - "ami_name": "salt-project/ci/ubuntu/22.04/arm64/20231003.2111", + "ami_name": "salt-project/ci/ubuntu/22.04/arm64/20231005.1555", "arch": "arm64", "cloudwatch-agent-available": "true", "instance_type": "m6g.large", @@ -350,9 +350,9 @@ "ssh_username": "ubuntu" }, "ubuntu-22.04": { - "ami": "ami-0a465357b34ea7fdc", + "ami": "ami-0ce98043f227c9ac0", "ami_description": "CI Image of Ubuntu 22.04 x86_64", - "ami_name": "salt-project/ci/ubuntu/22.04/x86_64/20231003.2111", + "ami_name": "salt-project/ci/ubuntu/22.04/x86_64/20231005.1555", "arch": "x86_64", "cloudwatch-agent-available": "true", "instance_type": "t3a.large", @@ -360,9 +360,9 @@ "ssh_username": "ubuntu" }, "ubuntu-23.04-arm64": { - "ami": "ami-0ed81524d646f95ee", + "ami": "ami-0519c583e36309fef", "ami_description": "CI Image of Ubuntu 23.04 arm64", - "ami_name": "salt-project/ci/ubuntu/23.04/arm64/20231003.2111", + "ami_name": "salt-project/ci/ubuntu/23.04/arm64/20231005.1555", "arch": "arm64", "cloudwatch-agent-available": "true", "instance_type": "m6g.large", @@ -370,9 +370,9 @@ "ssh_username": "ubuntu" }, "ubuntu-23.04": { - "ami": "ami-02c7edd6357be51b6", + "ami": "ami-063ad5dfb49f09182", "ami_description": "CI Image of Ubuntu 23.04 x86_64", - "ami_name": "salt-project/ci/ubuntu/23.04/x86_64/20231003.2112", + "ami_name": "salt-project/ci/ubuntu/23.04/x86_64/20231005.1555", "arch": "x86_64", "cloudwatch-agent-available": "true", "instance_type": "t3a.large", @@ -380,9 +380,9 @@ "ssh_username": "ubuntu" }, "windows-2016": { - "ami": "ami-04f113ff291a8953f", + "ami": "ami-0f1ac34593b8b044f", "ami_description": "CI Image of Windows 2016 x86_64", - "ami_name": "salt-project/ci/windows/2016/x86_64/20231003.2104", + "ami_name": "salt-project/ci/windows/2016/x86_64/20231005.1615", "arch": "x86_64", "cloudwatch-agent-available": "true", "instance_type": "t3a.xlarge", @@ -390,9 +390,9 @@ "ssh_username": "Administrator" }, "windows-2019": { - "ami": "ami-06475f495e0151fc9", + "ami": "ami-09100ff6a103a28ab", "ami_description": "CI Image of Windows 2019 x86_64", - "ami_name": "salt-project/ci/windows/2019/x86_64/20231003.2106", + "ami_name": "salt-project/ci/windows/2019/x86_64/20231005.1615", "arch": "x86_64", "cloudwatch-agent-available": "true", "instance_type": "t3a.xlarge", @@ -400,9 +400,9 @@ "ssh_username": "Administrator" }, "windows-2022": { - "ami": "ami-0558da89560480f32", + "ami": "ami-0266dc6a12bc9fca6", "ami_description": "CI Image of Windows 2022 x86_64", - "ami_name": "salt-project/ci/windows/2022/x86_64/20231003.2106", + "ami_name": "salt-project/ci/windows/2022/x86_64/20231005.1616", "arch": "x86_64", "cloudwatch-agent-available": "true", "instance_type": "t3a.xlarge", diff --git a/pkg/tests/conftest.py b/pkg/tests/conftest.py index f73cb948ae2..257f4615fb3 100644 --- a/pkg/tests/conftest.py +++ b/pkg/tests/conftest.py @@ -49,18 +49,6 @@ def _system_up_to_date( grains, shell, ): - if grains["os"] == "Ubuntu" and grains["osarch"] == "amd64": - # The grub-efi-amd64-signed package seems to be a problem - # right now when updating the system - env = os.environ.copy() - env["DEBIAN_FRONTEND"] = "noninteractive" - ret = shell.run( - "apt-mark", - "hold", - "grub-efi-amd64-signed", - env=env, - ) - assert ret.returncode == 0 if grains["os_family"] == "Debian": ret = shell.run("apt", "update") assert ret.returncode == 0 From f7142cbc97afc64cd87b9311efa473b5c250fffe Mon Sep 17 00:00:00 2001 From: Pedro Algarvio Date: Fri, 22 Sep 2023 15:27:41 +0100 Subject: [PATCH 041/153] Try a few times before raising the error Signed-off-by: Pedro Algarvio --- .../pytests/functional/channel/test_server.py | 20 ++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/tests/pytests/functional/channel/test_server.py b/tests/pytests/functional/channel/test_server.py index bdf96679b78..82a9450450f 100644 --- a/tests/pytests/functional/channel/test_server.py +++ b/tests/pytests/functional/channel/test_server.py @@ -165,11 +165,21 @@ def test_pub_server_channel( req_server_channel.post_fork(handle_payload, io_loop=io_loop) if master_config["transport"] == "zeromq": - p = Path(str(master_config["sock_dir"])) / "workers.ipc" - mode = os.lstat(p).st_mode - assert bool(os.lstat(p).st_mode & stat.S_IRUSR) - assert not bool(os.lstat(p).st_mode & stat.S_IRGRP) - assert not bool(os.lstat(p).st_mode & stat.S_IROTH) + time.sleep(1) + attempts = 5 + while True: + try: + p = Path(str(master_config["sock_dir"])) / "workers.ipc" + mode = os.lstat(p).st_mode + assert bool(os.lstat(p).st_mode & stat.S_IRUSR) + assert not bool(os.lstat(p).st_mode & stat.S_IRGRP) + assert not bool(os.lstat(p).st_mode & stat.S_IROTH) + break + except FileNotFoundError as exc: + if not attempts: + raise exc from None + attempts -= 1 + time.sleep(2.5) pub_channel = salt.channel.client.AsyncPubChannel.factory(minion_config) received = [] From e7bcad0567048b2052c8c0f2bf7797e89c3c5c6a Mon Sep 17 00:00:00 2001 From: Megan Wilhite Date: Tue, 3 Oct 2023 13:49:41 -0600 Subject: [PATCH 042/153] Remove filename from logs --- salt/client/ssh/__init__.py | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/salt/client/ssh/__init__.py b/salt/client/ssh/__init__.py index e9c290e13ff..067d4575f9b 100644 --- a/salt/client/ssh/__init__.py +++ b/salt/client/ssh/__init__.py @@ -1025,20 +1025,18 @@ class Single: except OSError as err: return ( "", - f"Could not copy pre flight script {self.ssh_pre_flight} to temporary path", + "Could not copy pre flight script to temporary path", 1, ) target_script = f".{pathlib.Path(temp.name).name}" - log.trace(f"Copying the pre flight script {self.ssh_pre_file} to target") + log.trace("Copying the pre flight script to target") stdout, stderr, retcode = self.shell.send(temp.name, target_script) if retcode != 0: # We could not copy the script to the target - log.error( - f"Could not copy the pre flight script {self.ssh_pre_file} to target" - ) + log.error("Could not copy the pre flight script to target") return stdout, stderr, retcode - log.trace(f"Executing the pre flight script {self.ssh_pre_file} on target") + log.trace("Executing the pre flight script on target") return self.execute_script( target_script, script_args=self.ssh_pre_flight_args ) @@ -1430,7 +1428,7 @@ ARGS = {arguments}\n'''.format( shim_tmp_file.name, target_shim_file, makedirs=True ) if retcode != 0: - log.error(f"Could not copy the shim script to target") + log.error("Could not copy the shim script to target") return stdout, stderr, retcode # Remove our shim file From f41ed71b13241fff9c9e4c3caae8efa638e5b0f8 Mon Sep 17 00:00:00 2001 From: Megan Wilhite Date: Tue, 3 Oct 2023 13:50:50 -0600 Subject: [PATCH 043/153] Fix logs in ssh tests --- tests/pytests/unit/client/ssh/test_single.py | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/tests/pytests/unit/client/ssh/test_single.py b/tests/pytests/unit/client/ssh/test_single.py index 91c5e7db914..c88a1c2127f 100644 --- a/tests/pytests/unit/client/ssh/test_single.py +++ b/tests/pytests/unit/client/ssh/test_single.py @@ -411,11 +411,8 @@ def test_run_ssh_pre_flight_no_connect(opts, target, tmp_path, caplog): with caplog.at_level(logging.TRACE): with patch_send, patch_exec_cmd, patch_tmp: ret = single.run_ssh_pre_flight() - assert f"Copying the pre flight script {pre_flight.name}" in caplog.text - assert ( - f"Could not copy the pre flight script {pre_flight.name} to target" - in caplog.text - ) + assert "Copying the pre flight script" in caplog.text + assert "Could not copy the pre flight script to target" in caplog.text assert ret == ret_send assert send_mock.call_args_list[0][0][0] == tmp_file target_script = send_mock.call_args_list[0][0][1] @@ -506,7 +503,7 @@ def test_run_ssh_pre_flight_connect(opts, target, tmp_path, caplog): with patch_send, patch_exec_cmd, patch_tmp: ret = single.run_ssh_pre_flight() - assert f"Executing the pre flight script {pre_flight.name} on target" in caplog.text + assert "Executing the pre flight script on target" in caplog.text assert ret == ret_exec_cmd assert send_mock.call_args_list[0][0][0] == tmp_file target_script = send_mock.call_args_list[0][0][1] @@ -551,7 +548,7 @@ def test_run_ssh_pre_flight_shutil_fails(opts, target, tmp_path): assert ret == ( "", - f"Could not copy pre flight script {pre_flight} to temporary path", + "Could not copy pre flight script to temporary path", 1, ) mock_exec_cmd.assert_not_called() From d7b8fdf9d7a4a6819d445c0beda4c0e01780e6d4 Mon Sep 17 00:00:00 2001 From: Megan Wilhite Date: Tue, 3 Oct 2023 13:02:19 -0600 Subject: [PATCH 044/153] Bump urllib3 to 1.26.17 or 2.0.6 --- changelog/65334.security.md | 1 + requirements/static/ci/py3.10/cloud.txt | 2 +- requirements/static/ci/py3.10/darwin.txt | 2 +- requirements/static/ci/py3.10/docs.txt | 2 +- requirements/static/ci/py3.10/freebsd.txt | 2 +- requirements/static/ci/py3.10/lint.txt | 2 +- requirements/static/ci/py3.10/linux.txt | 2 +- requirements/static/ci/py3.10/pkgtests-windows.txt | 2 +- requirements/static/ci/py3.10/pkgtests.txt | 2 +- requirements/static/ci/py3.10/tools.txt | 2 +- requirements/static/ci/py3.10/windows.txt | 2 +- requirements/static/ci/py3.11/tools.txt | 2 +- requirements/static/ci/py3.7/cloud.txt | 2 +- requirements/static/ci/py3.7/docs.txt | 2 +- requirements/static/ci/py3.7/freebsd.txt | 2 +- requirements/static/ci/py3.7/lint.txt | 2 +- requirements/static/ci/py3.7/linux.txt | 2 +- requirements/static/ci/py3.7/windows.txt | 2 +- requirements/static/ci/py3.8/cloud.txt | 2 +- requirements/static/ci/py3.8/docs.txt | 2 +- requirements/static/ci/py3.8/freebsd.txt | 2 +- requirements/static/ci/py3.8/lint.txt | 2 +- requirements/static/ci/py3.8/linux.txt | 2 +- requirements/static/ci/py3.8/windows.txt | 2 +- requirements/static/ci/py3.9/cloud.txt | 2 +- requirements/static/ci/py3.9/darwin.txt | 2 +- requirements/static/ci/py3.9/docs.txt | 2 +- requirements/static/ci/py3.9/freebsd.txt | 2 +- requirements/static/ci/py3.9/lint.txt | 2 +- requirements/static/ci/py3.9/linux.txt | 2 +- requirements/static/ci/py3.9/tools.txt | 2 +- requirements/static/ci/py3.9/windows.txt | 2 +- requirements/static/pkg/py3.10/darwin.txt | 2 +- requirements/static/pkg/py3.10/freebsd.txt | 2 +- requirements/static/pkg/py3.10/linux.txt | 2 +- requirements/static/pkg/py3.10/windows.txt | 2 +- requirements/static/pkg/py3.7/freebsd.txt | 2 +- requirements/static/pkg/py3.7/linux.txt | 2 +- requirements/static/pkg/py3.7/windows.txt | 2 +- requirements/static/pkg/py3.8/freebsd.txt | 2 +- requirements/static/pkg/py3.8/linux.txt | 2 +- requirements/static/pkg/py3.8/windows.txt | 2 +- requirements/static/pkg/py3.9/darwin.txt | 2 +- requirements/static/pkg/py3.9/freebsd.txt | 2 +- requirements/static/pkg/py3.9/linux.txt | 2 +- requirements/static/pkg/py3.9/windows.txt | 2 +- 46 files changed, 46 insertions(+), 45 deletions(-) create mode 100644 changelog/65334.security.md diff --git a/changelog/65334.security.md b/changelog/65334.security.md new file mode 100644 index 00000000000..9f1e2ecb0a8 --- /dev/null +++ b/changelog/65334.security.md @@ -0,0 +1 @@ +Bump to `urllib3==1.26.17` or `urllib3==2.0.6` due to https://github.com/advisories/GHSA-v845-jxx5-vc9f diff --git a/requirements/static/ci/py3.10/cloud.txt b/requirements/static/ci/py3.10/cloud.txt index aaa9eeab32d..5ecd1d9b654 100644 --- a/requirements/static/ci/py3.10/cloud.txt +++ b/requirements/static/ci/py3.10/cloud.txt @@ -858,7 +858,7 @@ typing-extensions==4.2.0 # via # pytest-shell-utilities # pytest-system-statistics -urllib3==1.26.6 +urllib3==1.26.17 # via # botocore # docker diff --git a/requirements/static/ci/py3.10/darwin.txt b/requirements/static/ci/py3.10/darwin.txt index 26f65c08559..65e51c1fa5f 100644 --- a/requirements/static/ci/py3.10/darwin.txt +++ b/requirements/static/ci/py3.10/darwin.txt @@ -839,7 +839,7 @@ typing-extensions==4.2.0 # via # pytest-shell-utilities # pytest-system-statistics -urllib3==1.26.6 +urllib3==1.26.17 # via # botocore # docker diff --git a/requirements/static/ci/py3.10/docs.txt b/requirements/static/ci/py3.10/docs.txt index 588b8682f56..dada0d8deb4 100644 --- a/requirements/static/ci/py3.10/docs.txt +++ b/requirements/static/ci/py3.10/docs.txt @@ -183,7 +183,7 @@ typing-extensions==4.2.0 # myst-docutils uc-micro-py==1.0.1 # via linkify-it-py -urllib3==1.26.6 +urllib3==1.26.17 # via # -c requirements/static/ci/py3.10/linux.txt # requests diff --git a/requirements/static/ci/py3.10/freebsd.txt b/requirements/static/ci/py3.10/freebsd.txt index 0954e12ecef..1a8856b5473 100644 --- a/requirements/static/ci/py3.10/freebsd.txt +++ b/requirements/static/ci/py3.10/freebsd.txt @@ -840,7 +840,7 @@ typing-extensions==4.2.0 # via # pytest-shell-utilities # pytest-system-statistics -urllib3==1.26.6 +urllib3==1.26.17 # via # botocore # docker diff --git a/requirements/static/ci/py3.10/lint.txt b/requirements/static/ci/py3.10/lint.txt index 42e3bb70d53..dd8769b2d2b 100644 --- a/requirements/static/ci/py3.10/lint.txt +++ b/requirements/static/ci/py3.10/lint.txt @@ -830,7 +830,7 @@ twilio==7.9.2 # via -r requirements/static/ci/linux.in tzlocal==3.0 # via apscheduler -urllib3==1.26.6 +urllib3==1.26.17 # via # botocore # docker diff --git a/requirements/static/ci/py3.10/linux.txt b/requirements/static/ci/py3.10/linux.txt index 6d6a7d7eb7c..8f994690973 100644 --- a/requirements/static/ci/py3.10/linux.txt +++ b/requirements/static/ci/py3.10/linux.txt @@ -887,7 +887,7 @@ typing-extensions==4.2.0 # pytest-system-statistics tzlocal==2.1 # via apscheduler -urllib3==1.26.6 +urllib3==1.26.17 # via # botocore # docker diff --git a/requirements/static/ci/py3.10/pkgtests-windows.txt b/requirements/static/ci/py3.10/pkgtests-windows.txt index 88e31addbb2..cb162d41783 100644 --- a/requirements/static/ci/py3.10/pkgtests-windows.txt +++ b/requirements/static/ci/py3.10/pkgtests-windows.txt @@ -155,7 +155,7 @@ typing-extensions==4.4.0 # pydantic # pytest-shell-utilities # pytest-system-statistics -urllib3==1.26.14 +urllib3==2.0.6 # via requests virtualenv==20.18.0 # via pytest-salt-factories diff --git a/requirements/static/ci/py3.10/pkgtests.txt b/requirements/static/ci/py3.10/pkgtests.txt index 170a81d2350..9765f12b662 100644 --- a/requirements/static/ci/py3.10/pkgtests.txt +++ b/requirements/static/ci/py3.10/pkgtests.txt @@ -145,7 +145,7 @@ typing-extensions==4.4.0 # pydantic # pytest-shell-utilities # pytest-system-statistics -urllib3==1.26.14 +urllib3==2.0.6 # via # docker # requests diff --git a/requirements/static/ci/py3.10/tools.txt b/requirements/static/ci/py3.10/tools.txt index 071ccd01dcd..7f5565ced7f 100644 --- a/requirements/static/ci/py3.10/tools.txt +++ b/requirements/static/ci/py3.10/tools.txt @@ -52,7 +52,7 @@ six==1.16.0 # via python-dateutil typing-extensions==4.4.0 # via python-tools-scripts -urllib3==1.26.12 +urllib3==1.26.17 # via # botocore # requests diff --git a/requirements/static/ci/py3.10/windows.txt b/requirements/static/ci/py3.10/windows.txt index e840fcba26f..3fae4637543 100644 --- a/requirements/static/ci/py3.10/windows.txt +++ b/requirements/static/ci/py3.10/windows.txt @@ -385,7 +385,7 @@ typing-extensions==4.4.0 # via # pytest-shell-utilities # pytest-system-statistics -urllib3==1.26.6 +urllib3==1.26.17 # via # -r requirements/windows.txt # botocore diff --git a/requirements/static/ci/py3.11/tools.txt b/requirements/static/ci/py3.11/tools.txt index f32fde3f91d..9bc4de833c0 100644 --- a/requirements/static/ci/py3.11/tools.txt +++ b/requirements/static/ci/py3.11/tools.txt @@ -50,7 +50,7 @@ s3transfer==0.5.2 # via boto3 six==1.16.0 # via python-dateutil -urllib3==1.26.12 +urllib3==1.26.17 # via # botocore # requests diff --git a/requirements/static/ci/py3.7/cloud.txt b/requirements/static/ci/py3.7/cloud.txt index 1994333e54b..ffafc70cb5d 100644 --- a/requirements/static/ci/py3.7/cloud.txt +++ b/requirements/static/ci/py3.7/cloud.txt @@ -920,7 +920,7 @@ typing-extensions==3.10.0.0 # pytest-shell-utilities # pytest-system-statistics # yarl -urllib3==1.26.6 +urllib3==1.26.17 # via # botocore # docker diff --git a/requirements/static/ci/py3.7/docs.txt b/requirements/static/ci/py3.7/docs.txt index 31209a994b2..0780e7cc3cf 100644 --- a/requirements/static/ci/py3.7/docs.txt +++ b/requirements/static/ci/py3.7/docs.txt @@ -193,7 +193,7 @@ typing-extensions==3.10.0.0 # myst-docutils uc-micro-py==1.0.1 # via linkify-it-py -urllib3==1.26.6 +urllib3==1.26.17 # via # -c requirements/static/ci/py3.7/linux.txt # requests diff --git a/requirements/static/ci/py3.7/freebsd.txt b/requirements/static/ci/py3.7/freebsd.txt index dabd10cc635..408377d5507 100644 --- a/requirements/static/ci/py3.7/freebsd.txt +++ b/requirements/static/ci/py3.7/freebsd.txt @@ -896,7 +896,7 @@ typing-extensions==3.10.0.0 # pytest-shell-utilities # pytest-system-statistics # yarl -urllib3==1.26.6 +urllib3==1.26.17 # via # botocore # docker diff --git a/requirements/static/ci/py3.7/lint.txt b/requirements/static/ci/py3.7/lint.txt index d7dfa7be3e9..f1f2f6ea4fe 100644 --- a/requirements/static/ci/py3.7/lint.txt +++ b/requirements/static/ci/py3.7/lint.txt @@ -897,7 +897,7 @@ typing-extensions==4.6.3 # yarl tzlocal==3.0 # via apscheduler -urllib3==1.26.6 +urllib3==1.26.17 # via # botocore # docker diff --git a/requirements/static/ci/py3.7/linux.txt b/requirements/static/ci/py3.7/linux.txt index 0ab876ce56e..30444a687c5 100644 --- a/requirements/static/ci/py3.7/linux.txt +++ b/requirements/static/ci/py3.7/linux.txt @@ -945,7 +945,7 @@ typing-extensions==3.10.0.0 # yarl tzlocal==2.1 # via apscheduler -urllib3==1.26.6 +urllib3==1.26.17 # via # botocore # docker diff --git a/requirements/static/ci/py3.7/windows.txt b/requirements/static/ci/py3.7/windows.txt index fdd9bd2c9c7..7ef90d82ad2 100644 --- a/requirements/static/ci/py3.7/windows.txt +++ b/requirements/static/ci/py3.7/windows.txt @@ -405,7 +405,7 @@ typing-extensions==4.2.0 # pytest-shell-utilities # pytest-system-statistics # yarl -urllib3==1.26.6 +urllib3==1.26.17 # via # -r requirements/windows.txt # botocore diff --git a/requirements/static/ci/py3.8/cloud.txt b/requirements/static/ci/py3.8/cloud.txt index 8c140ec2936..943675c9f55 100644 --- a/requirements/static/ci/py3.8/cloud.txt +++ b/requirements/static/ci/py3.8/cloud.txt @@ -903,7 +903,7 @@ typing-extensions==3.10.0.2 # via # pytest-shell-utilities # pytest-system-statistics -urllib3==1.26.6 +urllib3==1.26.17 # via # botocore # docker diff --git a/requirements/static/ci/py3.8/docs.txt b/requirements/static/ci/py3.8/docs.txt index da96a0c3bfb..2924bc5041c 100644 --- a/requirements/static/ci/py3.8/docs.txt +++ b/requirements/static/ci/py3.8/docs.txt @@ -183,7 +183,7 @@ typing-extensions==4.2.0 # myst-docutils uc-micro-py==1.0.1 # via linkify-it-py -urllib3==1.26.6 +urllib3==1.26.17 # via # -c requirements/static/ci/py3.8/linux.txt # requests diff --git a/requirements/static/ci/py3.8/freebsd.txt b/requirements/static/ci/py3.8/freebsd.txt index 9e558df206d..1bde4d18899 100644 --- a/requirements/static/ci/py3.8/freebsd.txt +++ b/requirements/static/ci/py3.8/freebsd.txt @@ -881,7 +881,7 @@ typing-extensions==4.2.0 # via # pytest-shell-utilities # pytest-system-statistics -urllib3==1.26.6 +urllib3==1.26.17 # via # botocore # docker diff --git a/requirements/static/ci/py3.8/lint.txt b/requirements/static/ci/py3.8/lint.txt index 9e85b9f0848..37391798b2c 100644 --- a/requirements/static/ci/py3.8/lint.txt +++ b/requirements/static/ci/py3.8/lint.txt @@ -878,7 +878,7 @@ twilio==7.9.2 # via -r requirements/static/ci/linux.in tzlocal==3.0 # via apscheduler -urllib3==1.26.6 +urllib3==1.26.17 # via # botocore # docker diff --git a/requirements/static/ci/py3.8/linux.txt b/requirements/static/ci/py3.8/linux.txt index 2784ec6a38f..d2cd1008243 100644 --- a/requirements/static/ci/py3.8/linux.txt +++ b/requirements/static/ci/py3.8/linux.txt @@ -928,7 +928,7 @@ typing-extensions==4.2.0 # pytest-system-statistics tzlocal==2.1 # via apscheduler -urllib3==1.26.6 +urllib3==1.26.17 # via # botocore # docker diff --git a/requirements/static/ci/py3.8/windows.txt b/requirements/static/ci/py3.8/windows.txt index 702f5471891..9aba30cafa8 100644 --- a/requirements/static/ci/py3.8/windows.txt +++ b/requirements/static/ci/py3.8/windows.txt @@ -388,7 +388,7 @@ typing-extensions==4.2.0 # via # pytest-shell-utilities # pytest-system-statistics -urllib3==1.26.6 +urllib3==1.26.17 # via # -r requirements/windows.txt # botocore diff --git a/requirements/static/ci/py3.9/cloud.txt b/requirements/static/ci/py3.9/cloud.txt index 7ea58dcb8ab..d5481411385 100644 --- a/requirements/static/ci/py3.9/cloud.txt +++ b/requirements/static/ci/py3.9/cloud.txt @@ -906,7 +906,7 @@ typing-extensions==3.10.0.2 # via # pytest-shell-utilities # pytest-system-statistics -urllib3==1.26.6 +urllib3==1.26.17 # via # botocore # docker diff --git a/requirements/static/ci/py3.9/darwin.txt b/requirements/static/ci/py3.9/darwin.txt index 724fb21f85a..90cbc5f22e4 100644 --- a/requirements/static/ci/py3.9/darwin.txt +++ b/requirements/static/ci/py3.9/darwin.txt @@ -883,7 +883,7 @@ typing-extensions==4.2.0 # via # pytest-shell-utilities # pytest-system-statistics -urllib3==1.26.6 +urllib3==1.26.17 # via # botocore # docker diff --git a/requirements/static/ci/py3.9/docs.txt b/requirements/static/ci/py3.9/docs.txt index 772a37c357a..63268ca8d22 100644 --- a/requirements/static/ci/py3.9/docs.txt +++ b/requirements/static/ci/py3.9/docs.txt @@ -187,7 +187,7 @@ typing-extensions==4.2.0 # myst-docutils uc-micro-py==1.0.1 # via linkify-it-py -urllib3==1.26.6 +urllib3==1.26.17 # via # -c requirements/static/ci/py3.9/linux.txt # requests diff --git a/requirements/static/ci/py3.9/freebsd.txt b/requirements/static/ci/py3.9/freebsd.txt index cdaa74f68a1..e45b1cf5e80 100644 --- a/requirements/static/ci/py3.9/freebsd.txt +++ b/requirements/static/ci/py3.9/freebsd.txt @@ -884,7 +884,7 @@ typing-extensions==4.2.0 # via # pytest-shell-utilities # pytest-system-statistics -urllib3==1.26.6 +urllib3==1.26.17 # via # botocore # docker diff --git a/requirements/static/ci/py3.9/lint.txt b/requirements/static/ci/py3.9/lint.txt index 690aceb8677..4201e01999e 100644 --- a/requirements/static/ci/py3.9/lint.txt +++ b/requirements/static/ci/py3.9/lint.txt @@ -879,7 +879,7 @@ twilio==7.9.2 # via -r requirements/static/ci/linux.in tzlocal==3.0 # via apscheduler -urllib3==1.26.6 +urllib3==1.26.17 # via # botocore # docker diff --git a/requirements/static/ci/py3.9/linux.txt b/requirements/static/ci/py3.9/linux.txt index 9c340545d4b..d278e2bbf68 100644 --- a/requirements/static/ci/py3.9/linux.txt +++ b/requirements/static/ci/py3.9/linux.txt @@ -933,7 +933,7 @@ typing-extensions==4.2.0 # pytest-system-statistics tzlocal==2.1 # via apscheduler -urllib3==1.26.6 +urllib3==1.26.17 # via # botocore # docker diff --git a/requirements/static/ci/py3.9/tools.txt b/requirements/static/ci/py3.9/tools.txt index cd973f2c546..5b1a57c8490 100644 --- a/requirements/static/ci/py3.9/tools.txt +++ b/requirements/static/ci/py3.9/tools.txt @@ -52,7 +52,7 @@ six==1.16.0 # via python-dateutil typing-extensions==4.4.0 # via python-tools-scripts -urllib3==1.26.12 +urllib3==1.26.17 # via # botocore # requests diff --git a/requirements/static/ci/py3.9/windows.txt b/requirements/static/ci/py3.9/windows.txt index 168916f6062..cc37f0e1429 100644 --- a/requirements/static/ci/py3.9/windows.txt +++ b/requirements/static/ci/py3.9/windows.txt @@ -389,7 +389,7 @@ typing-extensions==4.2.0 # via # pytest-shell-utilities # pytest-system-statistics -urllib3==1.26.6 +urllib3==1.26.17 # via # -r requirements/windows.txt # botocore diff --git a/requirements/static/pkg/py3.10/darwin.txt b/requirements/static/pkg/py3.10/darwin.txt index 4bee194057e..eee8b8835a7 100644 --- a/requirements/static/pkg/py3.10/darwin.txt +++ b/requirements/static/pkg/py3.10/darwin.txt @@ -110,7 +110,7 @@ tempora==4.1.1 # via portend timelib==0.2.5 # via -r requirements/darwin.txt -urllib3==1.26.6 +urllib3==2.0.6 # via requests vultr==1.0.1 # via -r requirements/darwin.txt diff --git a/requirements/static/pkg/py3.10/freebsd.txt b/requirements/static/pkg/py3.10/freebsd.txt index c874a498b9f..42296124df1 100644 --- a/requirements/static/pkg/py3.10/freebsd.txt +++ b/requirements/static/pkg/py3.10/freebsd.txt @@ -96,7 +96,7 @@ tempora==4.1.1 # via portend timelib==0.2.5 # via -r requirements/static/pkg/freebsd.in -urllib3==1.26.6 +urllib3==2.0.6 # via requests zc.lockfile==1.4 # via cherrypy diff --git a/requirements/static/pkg/py3.10/linux.txt b/requirements/static/pkg/py3.10/linux.txt index 576625229ed..5a122faf61e 100644 --- a/requirements/static/pkg/py3.10/linux.txt +++ b/requirements/static/pkg/py3.10/linux.txt @@ -96,7 +96,7 @@ tempora==4.1.1 # via portend timelib==0.2.5 # via -r requirements/static/pkg/linux.in -urllib3==1.26.6 +urllib3==2.0.6 # via requests zc.lockfile==1.4 # via cherrypy diff --git a/requirements/static/pkg/py3.10/windows.txt b/requirements/static/pkg/py3.10/windows.txt index 59b57dab0a8..6945e3eac54 100644 --- a/requirements/static/pkg/py3.10/windows.txt +++ b/requirements/static/pkg/py3.10/windows.txt @@ -124,7 +124,7 @@ tempora==4.1.1 # via portend timelib==0.2.5 # via -r requirements/windows.txt -urllib3==1.26.6 +urllib3==2.0.6 # via # -r requirements/windows.txt # requests diff --git a/requirements/static/pkg/py3.7/freebsd.txt b/requirements/static/pkg/py3.7/freebsd.txt index 392d78aab83..1a2274ff331 100644 --- a/requirements/static/pkg/py3.7/freebsd.txt +++ b/requirements/static/pkg/py3.7/freebsd.txt @@ -96,7 +96,7 @@ timelib==0.2.5 # via -r requirements/static/pkg/freebsd.in typing-extensions==3.10.0.0 # via importlib-metadata -urllib3==1.26.6 +urllib3==2.0.6 # via requests zc.lockfile==1.4 # via cherrypy diff --git a/requirements/static/pkg/py3.7/linux.txt b/requirements/static/pkg/py3.7/linux.txt index 476f570aea0..7f4276888d4 100644 --- a/requirements/static/pkg/py3.7/linux.txt +++ b/requirements/static/pkg/py3.7/linux.txt @@ -96,7 +96,7 @@ timelib==0.2.5 # via -r requirements/static/pkg/linux.in typing-extensions==3.10.0.0 # via importlib-metadata -urllib3==1.26.6 +urllib3==2.0.6 # via requests zc.lockfile==1.4 # via cherrypy diff --git a/requirements/static/pkg/py3.7/windows.txt b/requirements/static/pkg/py3.7/windows.txt index 1a570a4602a..9ad0601b5fc 100644 --- a/requirements/static/pkg/py3.7/windows.txt +++ b/requirements/static/pkg/py3.7/windows.txt @@ -129,7 +129,7 @@ typing-extensions==4.4.0 # via # gitpython # importlib-metadata -urllib3==1.26.6 +urllib3==2.0.6 # via # -r requirements/windows.txt # requests diff --git a/requirements/static/pkg/py3.8/freebsd.txt b/requirements/static/pkg/py3.8/freebsd.txt index 725e7580c70..53a7d32e476 100644 --- a/requirements/static/pkg/py3.8/freebsd.txt +++ b/requirements/static/pkg/py3.8/freebsd.txt @@ -94,7 +94,7 @@ tempora==4.1.1 # via portend timelib==0.2.5 # via -r requirements/static/pkg/freebsd.in -urllib3==1.26.6 +urllib3==2.0.6 # via requests zc.lockfile==1.4 # via cherrypy diff --git a/requirements/static/pkg/py3.8/linux.txt b/requirements/static/pkg/py3.8/linux.txt index e2bcef47b55..a4a7b5bd400 100644 --- a/requirements/static/pkg/py3.8/linux.txt +++ b/requirements/static/pkg/py3.8/linux.txt @@ -94,7 +94,7 @@ tempora==4.1.1 # via portend timelib==0.2.5 # via -r requirements/static/pkg/linux.in -urllib3==1.26.6 +urllib3==2.0.6 # via requests zc.lockfile==1.4 # via cherrypy diff --git a/requirements/static/pkg/py3.8/windows.txt b/requirements/static/pkg/py3.8/windows.txt index 7a5669c534e..6e8ac4fc653 100644 --- a/requirements/static/pkg/py3.8/windows.txt +++ b/requirements/static/pkg/py3.8/windows.txt @@ -125,7 +125,7 @@ tempora==4.1.1 # via portend timelib==0.2.5 # via -r requirements/windows.txt -urllib3==1.26.6 +urllib3==2.0.6 # via # -r requirements/windows.txt # requests diff --git a/requirements/static/pkg/py3.9/darwin.txt b/requirements/static/pkg/py3.9/darwin.txt index f8b866e2b62..8ed6a476f3e 100644 --- a/requirements/static/pkg/py3.9/darwin.txt +++ b/requirements/static/pkg/py3.9/darwin.txt @@ -110,7 +110,7 @@ tempora==4.1.1 # via portend timelib==0.2.5 # via -r requirements/darwin.txt -urllib3==1.26.6 +urllib3==2.0.6 # via requests vultr==1.0.1 # via -r requirements/darwin.txt diff --git a/requirements/static/pkg/py3.9/freebsd.txt b/requirements/static/pkg/py3.9/freebsd.txt index 6f53c93dc14..7ca30b97f68 100644 --- a/requirements/static/pkg/py3.9/freebsd.txt +++ b/requirements/static/pkg/py3.9/freebsd.txt @@ -96,7 +96,7 @@ tempora==4.1.1 # via portend timelib==0.2.5 # via -r requirements/static/pkg/freebsd.in -urllib3==1.26.6 +urllib3==2.0.6 # via requests zc.lockfile==1.4 # via cherrypy diff --git a/requirements/static/pkg/py3.9/linux.txt b/requirements/static/pkg/py3.9/linux.txt index 314e4b7c6cd..2bcffd2470b 100644 --- a/requirements/static/pkg/py3.9/linux.txt +++ b/requirements/static/pkg/py3.9/linux.txt @@ -96,7 +96,7 @@ tempora==4.1.1 # via portend timelib==0.2.5 # via -r requirements/static/pkg/linux.in -urllib3==1.26.6 +urllib3==2.0.6 # via requests zc.lockfile==1.4 # via cherrypy diff --git a/requirements/static/pkg/py3.9/windows.txt b/requirements/static/pkg/py3.9/windows.txt index c243742d9ea..11423afa70b 100644 --- a/requirements/static/pkg/py3.9/windows.txt +++ b/requirements/static/pkg/py3.9/windows.txt @@ -125,7 +125,7 @@ tempora==4.1.1 # via portend timelib==0.2.5 # via -r requirements/windows.txt -urllib3==1.26.6 +urllib3==2.0.6 # via # -r requirements/windows.txt # requests From ef76fb36288d58bd1ea472587cc0be531fd214ec Mon Sep 17 00:00:00 2001 From: "Daniel A. Wozniak" Date: Thu, 28 Sep 2023 14:37:53 -0700 Subject: [PATCH 045/153] Upgrade relenv to 0.13.12 --- .github/workflows/ci.yml | 12 ++++++------ .github/workflows/nightly.yml | 12 ++++++------ .github/workflows/scheduled.yml | 12 ++++++------ .github/workflows/staging.yml | 12 ++++++------ changelog/65316.fixed.md | 1 + cicd/shared-gh-workflows-context.yml | 2 +- 6 files changed, 26 insertions(+), 25 deletions(-) create mode 100644 changelog/65316.fixed.md diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c07cb5ccc48..9f4cefeb660 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -442,7 +442,7 @@ jobs: salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" self-hosted-runners: ${{ fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} github-hosted-runners: ${{ fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] }} - relenv-version: "0.13.10" + relenv-version: "0.13.12" python-version: "3.10.13" build-salt-onedir: @@ -458,7 +458,7 @@ jobs: salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" self-hosted-runners: ${{ fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} github-hosted-runners: ${{ fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] }} - relenv-version: "0.13.10" + relenv-version: "0.13.12" python-version: "3.10.13" build-rpm-pkgs: @@ -470,7 +470,7 @@ jobs: uses: ./.github/workflows/build-rpm-packages.yml with: salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - relenv-version: "0.13.10" + relenv-version: "0.13.12" python-version: "3.10.13" build-deb-pkgs: @@ -482,7 +482,7 @@ jobs: uses: ./.github/workflows/build-deb-packages.yml with: salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - relenv-version: "0.13.10" + relenv-version: "0.13.12" python-version: "3.10.13" build-windows-pkgs: @@ -494,7 +494,7 @@ jobs: uses: ./.github/workflows/build-windows-packages.yml with: salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - relenv-version: "0.13.10" + relenv-version: "0.13.12" python-version: "3.10.13" build-macos-pkgs: @@ -506,7 +506,7 @@ jobs: uses: ./.github/workflows/build-macos-packages.yml with: salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - relenv-version: "0.13.10" + relenv-version: "0.13.12" python-version: "3.10.13" amazonlinux-2-pkg-tests: diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index 6dc8dc192e6..40c07b9154c 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -491,7 +491,7 @@ jobs: salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" self-hosted-runners: ${{ fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} github-hosted-runners: ${{ fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] }} - relenv-version: "0.13.10" + relenv-version: "0.13.12" python-version: "3.10.13" build-salt-onedir: @@ -507,7 +507,7 @@ jobs: salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" self-hosted-runners: ${{ fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} github-hosted-runners: ${{ fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] }} - relenv-version: "0.13.10" + relenv-version: "0.13.12" python-version: "3.10.13" build-rpm-pkgs: @@ -519,7 +519,7 @@ jobs: uses: ./.github/workflows/build-rpm-packages.yml with: salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - relenv-version: "0.13.10" + relenv-version: "0.13.12" python-version: "3.10.13" build-deb-pkgs: @@ -531,7 +531,7 @@ jobs: uses: ./.github/workflows/build-deb-packages.yml with: salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - relenv-version: "0.13.10" + relenv-version: "0.13.12" python-version: "3.10.13" build-windows-pkgs: @@ -543,7 +543,7 @@ jobs: uses: ./.github/workflows/build-windows-packages.yml with: salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - relenv-version: "0.13.10" + relenv-version: "0.13.12" python-version: "3.10.13" environment: nightly sign-packages: false @@ -558,7 +558,7 @@ jobs: uses: ./.github/workflows/build-macos-packages.yml with: salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - relenv-version: "0.13.10" + relenv-version: "0.13.12" python-version: "3.10.13" environment: nightly sign-packages: true diff --git a/.github/workflows/scheduled.yml b/.github/workflows/scheduled.yml index 2a2d617f5dc..b29a3581cd7 100644 --- a/.github/workflows/scheduled.yml +++ b/.github/workflows/scheduled.yml @@ -476,7 +476,7 @@ jobs: salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" self-hosted-runners: ${{ fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} github-hosted-runners: ${{ fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] }} - relenv-version: "0.13.10" + relenv-version: "0.13.12" python-version: "3.10.13" build-salt-onedir: @@ -492,7 +492,7 @@ jobs: salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" self-hosted-runners: ${{ fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} github-hosted-runners: ${{ fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] }} - relenv-version: "0.13.10" + relenv-version: "0.13.12" python-version: "3.10.13" build-rpm-pkgs: @@ -504,7 +504,7 @@ jobs: uses: ./.github/workflows/build-rpm-packages.yml with: salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - relenv-version: "0.13.10" + relenv-version: "0.13.12" python-version: "3.10.13" build-deb-pkgs: @@ -516,7 +516,7 @@ jobs: uses: ./.github/workflows/build-deb-packages.yml with: salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - relenv-version: "0.13.10" + relenv-version: "0.13.12" python-version: "3.10.13" build-windows-pkgs: @@ -528,7 +528,7 @@ jobs: uses: ./.github/workflows/build-windows-packages.yml with: salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - relenv-version: "0.13.10" + relenv-version: "0.13.12" python-version: "3.10.13" build-macos-pkgs: @@ -540,7 +540,7 @@ jobs: uses: ./.github/workflows/build-macos-packages.yml with: salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - relenv-version: "0.13.10" + relenv-version: "0.13.12" python-version: "3.10.13" amazonlinux-2-pkg-tests: diff --git a/.github/workflows/staging.yml b/.github/workflows/staging.yml index a709d95bf28..02e2a1a1134 100644 --- a/.github/workflows/staging.yml +++ b/.github/workflows/staging.yml @@ -486,7 +486,7 @@ jobs: salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" self-hosted-runners: ${{ fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} github-hosted-runners: ${{ fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] }} - relenv-version: "0.13.10" + relenv-version: "0.13.12" python-version: "3.10.13" build-salt-onedir: @@ -502,7 +502,7 @@ jobs: salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" self-hosted-runners: ${{ fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} github-hosted-runners: ${{ fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] }} - relenv-version: "0.13.10" + relenv-version: "0.13.12" python-version: "3.10.13" build-rpm-pkgs: @@ -514,7 +514,7 @@ jobs: uses: ./.github/workflows/build-rpm-packages.yml with: salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - relenv-version: "0.13.10" + relenv-version: "0.13.12" python-version: "3.10.13" build-deb-pkgs: @@ -526,7 +526,7 @@ jobs: uses: ./.github/workflows/build-deb-packages.yml with: salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - relenv-version: "0.13.10" + relenv-version: "0.13.12" python-version: "3.10.13" build-windows-pkgs: @@ -538,7 +538,7 @@ jobs: uses: ./.github/workflows/build-windows-packages.yml with: salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - relenv-version: "0.13.10" + relenv-version: "0.13.12" python-version: "3.10.13" environment: staging sign-packages: ${{ inputs.sign-windows-packages }} @@ -553,7 +553,7 @@ jobs: uses: ./.github/workflows/build-macos-packages.yml with: salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - relenv-version: "0.13.10" + relenv-version: "0.13.12" python-version: "3.10.13" environment: staging sign-packages: true diff --git a/changelog/65316.fixed.md b/changelog/65316.fixed.md new file mode 100644 index 00000000000..f9afcd0a7e4 --- /dev/null +++ b/changelog/65316.fixed.md @@ -0,0 +1 @@ +Upgrade relenv to 0.13.12 to address CVE-2023-4807 diff --git a/cicd/shared-gh-workflows-context.yml b/cicd/shared-gh-workflows-context.yml index 13d7bbb7754..4d7e68a2dde 100644 --- a/cicd/shared-gh-workflows-context.yml +++ b/cicd/shared-gh-workflows-context.yml @@ -1,3 +1,3 @@ nox_version: "2022.8.7" python_version: "3.10.13" -relenv_version: "0.13.10" +relenv_version: "0.13.12" From aad7618098afdc5de010e80ca628752f2483b03b Mon Sep 17 00:00:00 2001 From: "Daniel A. Wozniak" Date: Wed, 4 Oct 2023 15:25:49 -0700 Subject: [PATCH 046/153] Update changelog extension to denote security fix --- changelog/{65316.fixed.md => 65316.security.md} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename changelog/{65316.fixed.md => 65316.security.md} (100%) diff --git a/changelog/65316.fixed.md b/changelog/65316.security.md similarity index 100% rename from changelog/65316.fixed.md rename to changelog/65316.security.md From 5c236eaac16964e1e7d925232d1ccec038c004c2 Mon Sep 17 00:00:00 2001 From: Megan Wilhite Date: Tue, 3 Oct 2023 12:36:33 -0600 Subject: [PATCH 047/153] Bump urllib3 to 1.26.17 or 2.0.6 --- changelog/65334.security | 1 + requirements/static/ci/py3.10/cloud.txt | 2 +- requirements/static/ci/py3.10/darwin.txt | 2 +- requirements/static/ci/py3.10/docs.txt | 2 +- requirements/static/ci/py3.10/freebsd.txt | 2 +- requirements/static/ci/py3.10/lint.txt | 2 +- requirements/static/ci/py3.10/linux.txt | 2 +- requirements/static/ci/py3.6/cloud.txt | 2 +- requirements/static/ci/py3.6/docs.txt | 2 +- requirements/static/ci/py3.6/lint.txt | 2 +- requirements/static/ci/py3.6/linux.txt | 2 +- requirements/static/ci/py3.7/cloud.txt | 2 +- requirements/static/ci/py3.7/docs.txt | 2 +- requirements/static/ci/py3.7/freebsd.txt | 2 +- requirements/static/ci/py3.7/lint.txt | 2 +- requirements/static/ci/py3.7/linux.txt | 2 +- requirements/static/ci/py3.7/windows.txt | 2 +- requirements/static/ci/py3.8/cloud.txt | 2 +- requirements/static/ci/py3.8/docs.txt | 2 +- requirements/static/ci/py3.8/freebsd.txt | 2 +- requirements/static/ci/py3.8/lint.txt | 2 +- requirements/static/ci/py3.8/linux.txt | 2 +- requirements/static/ci/py3.8/windows.txt | 2 +- requirements/static/ci/py3.9/cloud.txt | 2 +- requirements/static/ci/py3.9/darwin.txt | 2 +- requirements/static/ci/py3.9/docs.txt | 2 +- requirements/static/ci/py3.9/freebsd.txt | 2 +- requirements/static/ci/py3.9/lint.txt | 2 +- requirements/static/ci/py3.9/linux.txt | 2 +- requirements/static/ci/py3.9/windows.txt | 2 +- requirements/static/pkg/py3.10/darwin.txt | 2 +- requirements/static/pkg/py3.10/freebsd.txt | 2 +- requirements/static/pkg/py3.10/linux.txt | 2 +- requirements/static/pkg/py3.6/linux.txt | 2 +- requirements/static/pkg/py3.7/freebsd.txt | 2 +- requirements/static/pkg/py3.7/linux.txt | 2 +- requirements/static/pkg/py3.7/windows.txt | 2 +- requirements/static/pkg/py3.8/freebsd.txt | 2 +- requirements/static/pkg/py3.8/linux.txt | 2 +- requirements/static/pkg/py3.8/windows.txt | 2 +- requirements/static/pkg/py3.9/darwin.txt | 2 +- requirements/static/pkg/py3.9/freebsd.txt | 2 +- requirements/static/pkg/py3.9/linux.txt | 2 +- requirements/static/pkg/py3.9/windows.txt | 2 +- 44 files changed, 44 insertions(+), 43 deletions(-) create mode 100644 changelog/65334.security diff --git a/changelog/65334.security b/changelog/65334.security new file mode 100644 index 00000000000..9f1e2ecb0a8 --- /dev/null +++ b/changelog/65334.security @@ -0,0 +1 @@ +Bump to `urllib3==1.26.17` or `urllib3==2.0.6` due to https://github.com/advisories/GHSA-v845-jxx5-vc9f diff --git a/requirements/static/ci/py3.10/cloud.txt b/requirements/static/ci/py3.10/cloud.txt index 3e163e77a18..6a85808c774 100644 --- a/requirements/static/ci/py3.10/cloud.txt +++ b/requirements/static/ci/py3.10/cloud.txt @@ -845,7 +845,7 @@ typing-extensions==4.2.0 # via # pytest-shell-utilities # pytest-system-statistics -urllib3==1.26.6 +urllib3==1.26.17 # via # botocore # kubernetes diff --git a/requirements/static/ci/py3.10/darwin.txt b/requirements/static/ci/py3.10/darwin.txt index 1cfb54e7426..55b40a44ce8 100644 --- a/requirements/static/ci/py3.10/darwin.txt +++ b/requirements/static/ci/py3.10/darwin.txt @@ -833,7 +833,7 @@ typing-extensions==4.2.0 # via # pytest-shell-utilities # pytest-system-statistics -urllib3==1.26.6 +urllib3==1.26.17 # via # botocore # kubernetes diff --git a/requirements/static/ci/py3.10/docs.txt b/requirements/static/ci/py3.10/docs.txt index d8aa8cbaeaa..fd3a8fbb80d 100644 --- a/requirements/static/ci/py3.10/docs.txt +++ b/requirements/static/ci/py3.10/docs.txt @@ -833,7 +833,7 @@ twilio==7.9.2 # via -r requirements/static/ci/linux.in tzlocal==3.0 # via apscheduler -urllib3==1.26.6 +urllib3==1.26.17 # via # botocore # kubernetes diff --git a/requirements/static/ci/py3.10/freebsd.txt b/requirements/static/ci/py3.10/freebsd.txt index 5dc862b00c5..4cbd3c8e568 100644 --- a/requirements/static/ci/py3.10/freebsd.txt +++ b/requirements/static/ci/py3.10/freebsd.txt @@ -830,7 +830,7 @@ typing-extensions==4.2.0 # via # pytest-shell-utilities # pytest-system-statistics -urllib3==1.26.6 +urllib3==1.26.17 # via # botocore # kubernetes diff --git a/requirements/static/ci/py3.10/lint.txt b/requirements/static/ci/py3.10/lint.txt index 96865dc989e..0f1259f7fae 100644 --- a/requirements/static/ci/py3.10/lint.txt +++ b/requirements/static/ci/py3.10/lint.txt @@ -819,7 +819,7 @@ twilio==7.9.2 # via -r requirements/static/ci/linux.in tzlocal==3.0 # via apscheduler -urllib3==1.26.6 +urllib3==1.26.17 # via # botocore # kubernetes diff --git a/requirements/static/ci/py3.10/linux.txt b/requirements/static/ci/py3.10/linux.txt index b9a9f45fcb8..c35ad1305c0 100644 --- a/requirements/static/ci/py3.10/linux.txt +++ b/requirements/static/ci/py3.10/linux.txt @@ -878,7 +878,7 @@ typing-extensions==4.2.0 # pytest-system-statistics tzlocal==2.1 # via apscheduler -urllib3==1.26.6 +urllib3==1.26.17 # via # botocore # kubernetes diff --git a/requirements/static/ci/py3.6/cloud.txt b/requirements/static/ci/py3.6/cloud.txt index be1bc344e21..f775f838e04 100644 --- a/requirements/static/ci/py3.6/cloud.txt +++ b/requirements/static/ci/py3.6/cloud.txt @@ -876,7 +876,7 @@ typing-extensions==3.10.0.0 # pytest-shell-utilities # pytest-system-statistics # yarl -urllib3==1.26.6 +urllib3==1.26.17 # via # botocore # kubernetes diff --git a/requirements/static/ci/py3.6/docs.txt b/requirements/static/ci/py3.6/docs.txt index 3a2c32fbaa8..745087510a4 100644 --- a/requirements/static/ci/py3.6/docs.txt +++ b/requirements/static/ci/py3.6/docs.txt @@ -865,7 +865,7 @@ typing-extensions==3.10.0.0 # yarl tzlocal==3.0 # via apscheduler -urllib3==1.26.6 +urllib3==1.26.17 # via # botocore # kubernetes diff --git a/requirements/static/ci/py3.6/lint.txt b/requirements/static/ci/py3.6/lint.txt index 2946e3602ba..e82930b1b5e 100644 --- a/requirements/static/ci/py3.6/lint.txt +++ b/requirements/static/ci/py3.6/lint.txt @@ -856,7 +856,7 @@ typing-extensions==3.10.0.0 # yarl tzlocal==3.0 # via apscheduler -urllib3==1.26.6 +urllib3==1.26.17 # via # botocore # kubernetes diff --git a/requirements/static/ci/py3.6/linux.txt b/requirements/static/ci/py3.6/linux.txt index 1c81008cda0..b7a1e63faf9 100644 --- a/requirements/static/ci/py3.6/linux.txt +++ b/requirements/static/ci/py3.6/linux.txt @@ -910,7 +910,7 @@ typing-extensions==3.10.0.0 # yarl tzlocal==2.1 # via apscheduler -urllib3==1.26.6 +urllib3==1.26.17 # via # botocore # kubernetes diff --git a/requirements/static/ci/py3.7/cloud.txt b/requirements/static/ci/py3.7/cloud.txt index f903b2d6d29..23073194403 100644 --- a/requirements/static/ci/py3.7/cloud.txt +++ b/requirements/static/ci/py3.7/cloud.txt @@ -906,7 +906,7 @@ typing-extensions==3.10.0.0 # pytest-shell-utilities # pytest-system-statistics # yarl -urllib3==1.26.6 +urllib3==1.26.17 # via # botocore # kubernetes diff --git a/requirements/static/ci/py3.7/docs.txt b/requirements/static/ci/py3.7/docs.txt index c67e346203f..2b752fc5f40 100644 --- a/requirements/static/ci/py3.7/docs.txt +++ b/requirements/static/ci/py3.7/docs.txt @@ -894,7 +894,7 @@ typing-extensions==3.10.0.0 # yarl tzlocal==3.0 # via apscheduler -urllib3==1.26.6 +urllib3==1.26.17 # via # botocore # kubernetes diff --git a/requirements/static/ci/py3.7/freebsd.txt b/requirements/static/ci/py3.7/freebsd.txt index 4976c9fbb6c..5d973d41837 100644 --- a/requirements/static/ci/py3.7/freebsd.txt +++ b/requirements/static/ci/py3.7/freebsd.txt @@ -887,7 +887,7 @@ typing-extensions==3.10.0.0 # pytest-shell-utilities # pytest-system-statistics # yarl -urllib3==1.26.6 +urllib3==1.26.17 # via # botocore # kubernetes diff --git a/requirements/static/ci/py3.7/lint.txt b/requirements/static/ci/py3.7/lint.txt index dd5932f1caa..c32356af790 100644 --- a/requirements/static/ci/py3.7/lint.txt +++ b/requirements/static/ci/py3.7/lint.txt @@ -885,7 +885,7 @@ typing-extensions==3.10.0.0 # yarl tzlocal==3.0 # via apscheduler -urllib3==1.26.6 +urllib3==1.26.17 # via # botocore # kubernetes diff --git a/requirements/static/ci/py3.7/linux.txt b/requirements/static/ci/py3.7/linux.txt index 09dad7aa75a..65ff4877046 100644 --- a/requirements/static/ci/py3.7/linux.txt +++ b/requirements/static/ci/py3.7/linux.txt @@ -933,7 +933,7 @@ typing-extensions==3.10.0.0 # yarl tzlocal==2.1 # via apscheduler -urllib3==1.26.6 +urllib3==1.26.17 # via # botocore # kubernetes diff --git a/requirements/static/ci/py3.7/windows.txt b/requirements/static/ci/py3.7/windows.txt index d0d6085415f..d39a2c37020 100644 --- a/requirements/static/ci/py3.7/windows.txt +++ b/requirements/static/ci/py3.7/windows.txt @@ -401,7 +401,7 @@ typing-extensions==3.10.0.0 # pytest-shell-utilities # pytest-system-statistics # yarl -urllib3==1.26.6 +urllib3==1.26.17 # via # -r requirements/windows.txt # botocore diff --git a/requirements/static/ci/py3.8/cloud.txt b/requirements/static/ci/py3.8/cloud.txt index d47a2de683a..ac77ecc13ff 100644 --- a/requirements/static/ci/py3.8/cloud.txt +++ b/requirements/static/ci/py3.8/cloud.txt @@ -890,7 +890,7 @@ typing-extensions==3.10.0.2 # via # pytest-shell-utilities # pytest-system-statistics -urllib3==1.26.6 +urllib3==1.26.17 # via # botocore # kubernetes diff --git a/requirements/static/ci/py3.8/docs.txt b/requirements/static/ci/py3.8/docs.txt index af50b9ad185..a84e86f2156 100644 --- a/requirements/static/ci/py3.8/docs.txt +++ b/requirements/static/ci/py3.8/docs.txt @@ -879,7 +879,7 @@ twilio==7.9.2 # via -r requirements/static/ci/linux.in tzlocal==3.0 # via apscheduler -urllib3==1.26.6 +urllib3==1.26.17 # via # botocore # kubernetes diff --git a/requirements/static/ci/py3.8/freebsd.txt b/requirements/static/ci/py3.8/freebsd.txt index 408b9308c10..766805cf7ea 100644 --- a/requirements/static/ci/py3.8/freebsd.txt +++ b/requirements/static/ci/py3.8/freebsd.txt @@ -873,7 +873,7 @@ typing-extensions==4.2.0 # via # pytest-shell-utilities # pytest-system-statistics -urllib3==1.26.6 +urllib3==1.26.17 # via # botocore # kubernetes diff --git a/requirements/static/ci/py3.8/lint.txt b/requirements/static/ci/py3.8/lint.txt index 63e853bf68f..df356e75c32 100644 --- a/requirements/static/ci/py3.8/lint.txt +++ b/requirements/static/ci/py3.8/lint.txt @@ -867,7 +867,7 @@ twilio==7.9.2 # via -r requirements/static/ci/linux.in tzlocal==3.0 # via apscheduler -urllib3==1.26.6 +urllib3==1.26.17 # via # botocore # kubernetes diff --git a/requirements/static/ci/py3.8/linux.txt b/requirements/static/ci/py3.8/linux.txt index 8cfc4e8a092..274fde2325f 100644 --- a/requirements/static/ci/py3.8/linux.txt +++ b/requirements/static/ci/py3.8/linux.txt @@ -919,7 +919,7 @@ typing-extensions==4.2.0 # pytest-system-statistics tzlocal==2.1 # via apscheduler -urllib3==1.26.6 +urllib3==1.26.17 # via # botocore # kubernetes diff --git a/requirements/static/ci/py3.8/windows.txt b/requirements/static/ci/py3.8/windows.txt index 5b2ba5adace..ed29068ec30 100644 --- a/requirements/static/ci/py3.8/windows.txt +++ b/requirements/static/ci/py3.8/windows.txt @@ -387,7 +387,7 @@ typing-extensions==4.2.0 # via # pytest-shell-utilities # pytest-system-statistics -urllib3==1.26.6 +urllib3==1.26.17 # via # -r requirements/windows.txt # botocore diff --git a/requirements/static/ci/py3.9/cloud.txt b/requirements/static/ci/py3.9/cloud.txt index 10730f00910..562928442d7 100644 --- a/requirements/static/ci/py3.9/cloud.txt +++ b/requirements/static/ci/py3.9/cloud.txt @@ -893,7 +893,7 @@ typing-extensions==3.10.0.2 # via # pytest-shell-utilities # pytest-system-statistics -urllib3==1.26.6 +urllib3==1.26.17 # via # botocore # kubernetes diff --git a/requirements/static/ci/py3.9/darwin.txt b/requirements/static/ci/py3.9/darwin.txt index 277defef4d5..afeec28a1d4 100644 --- a/requirements/static/ci/py3.9/darwin.txt +++ b/requirements/static/ci/py3.9/darwin.txt @@ -879,7 +879,7 @@ typing-extensions==4.2.0 # via # pytest-shell-utilities # pytest-system-statistics -urllib3==1.26.6 +urllib3==1.26.17 # via # botocore # kubernetes diff --git a/requirements/static/ci/py3.9/docs.txt b/requirements/static/ci/py3.9/docs.txt index 4ed09bed8eb..8d7fb6f4302 100644 --- a/requirements/static/ci/py3.9/docs.txt +++ b/requirements/static/ci/py3.9/docs.txt @@ -880,7 +880,7 @@ twilio==7.9.2 # via -r requirements/static/ci/linux.in tzlocal==3.0 # via apscheduler -urllib3==1.26.6 +urllib3==1.26.17 # via # botocore # kubernetes diff --git a/requirements/static/ci/py3.9/freebsd.txt b/requirements/static/ci/py3.9/freebsd.txt index 119b9a7e39b..a09f0e7578c 100644 --- a/requirements/static/ci/py3.9/freebsd.txt +++ b/requirements/static/ci/py3.9/freebsd.txt @@ -876,7 +876,7 @@ typing-extensions==4.2.0 # via # pytest-shell-utilities # pytest-system-statistics -urllib3==1.26.6 +urllib3==1.26.17 # via # botocore # kubernetes diff --git a/requirements/static/ci/py3.9/lint.txt b/requirements/static/ci/py3.9/lint.txt index 87b7665c97b..e69756544c1 100644 --- a/requirements/static/ci/py3.9/lint.txt +++ b/requirements/static/ci/py3.9/lint.txt @@ -868,7 +868,7 @@ twilio==7.9.2 # via -r requirements/static/ci/linux.in tzlocal==3.0 # via apscheduler -urllib3==1.26.6 +urllib3==1.26.17 # via # botocore # kubernetes diff --git a/requirements/static/ci/py3.9/linux.txt b/requirements/static/ci/py3.9/linux.txt index 8c635fd7cf3..01ca0c0e9e6 100644 --- a/requirements/static/ci/py3.9/linux.txt +++ b/requirements/static/ci/py3.9/linux.txt @@ -924,7 +924,7 @@ typing-extensions==4.2.0 # pytest-system-statistics tzlocal==2.1 # via apscheduler -urllib3==1.26.6 +urllib3==1.26.17 # via # botocore # kubernetes diff --git a/requirements/static/ci/py3.9/windows.txt b/requirements/static/ci/py3.9/windows.txt index 280315b4c8a..edc7125397e 100644 --- a/requirements/static/ci/py3.9/windows.txt +++ b/requirements/static/ci/py3.9/windows.txt @@ -388,7 +388,7 @@ typing-extensions==4.2.0 # via # pytest-shell-utilities # pytest-system-statistics -urllib3==1.26.6 +urllib3==1.26.17 # via # -r requirements/windows.txt # botocore diff --git a/requirements/static/pkg/py3.10/darwin.txt b/requirements/static/pkg/py3.10/darwin.txt index d3250c794d4..9a684e23867 100644 --- a/requirements/static/pkg/py3.10/darwin.txt +++ b/requirements/static/pkg/py3.10/darwin.txt @@ -107,7 +107,7 @@ tempora==4.1.1 # via portend timelib==0.2.5 # via -r requirements/darwin.txt -urllib3==1.26.6 +urllib3==2.0.6 # via requests vultr==1.0.1 # via -r requirements/darwin.txt diff --git a/requirements/static/pkg/py3.10/freebsd.txt b/requirements/static/pkg/py3.10/freebsd.txt index 2ff655041f3..3ef547e4f57 100644 --- a/requirements/static/pkg/py3.10/freebsd.txt +++ b/requirements/static/pkg/py3.10/freebsd.txt @@ -90,7 +90,7 @@ tempora==4.1.1 # via portend timelib==0.2.5 # via -r requirements/static/pkg/freebsd.in -urllib3==1.26.6 +urllib3==2.0.6 # via requests zc.lockfile==1.4 # via cherrypy diff --git a/requirements/static/pkg/py3.10/linux.txt b/requirements/static/pkg/py3.10/linux.txt index 04ca508c92f..568fce73ae0 100644 --- a/requirements/static/pkg/py3.10/linux.txt +++ b/requirements/static/pkg/py3.10/linux.txt @@ -92,7 +92,7 @@ tempora==4.1.1 # via portend timelib==0.2.5 # via -r requirements/static/pkg/linux.in -urllib3==1.26.6 +urllib3==2.0.6 # via requests zc.lockfile==1.4 # via cherrypy diff --git a/requirements/static/pkg/py3.6/linux.txt b/requirements/static/pkg/py3.6/linux.txt index f49dfbcd7c5..eaf2f2feddc 100644 --- a/requirements/static/pkg/py3.6/linux.txt +++ b/requirements/static/pkg/py3.6/linux.txt @@ -96,7 +96,7 @@ timelib==0.2.5 # via -r requirements/static/pkg/linux.in typing-extensions==3.10.0.0 # via importlib-metadata -urllib3==1.26.6 +urllib3==1.26.17 # via requests zc.lockfile==1.4 # via cherrypy diff --git a/requirements/static/pkg/py3.7/freebsd.txt b/requirements/static/pkg/py3.7/freebsd.txt index 6aa3ccea8f9..927e0f068aa 100644 --- a/requirements/static/pkg/py3.7/freebsd.txt +++ b/requirements/static/pkg/py3.7/freebsd.txt @@ -92,7 +92,7 @@ timelib==0.2.5 # via -r requirements/static/pkg/freebsd.in typing-extensions==3.10.0.0 # via importlib-metadata -urllib3==1.26.6 +urllib3==2.0.6 # via requests zc.lockfile==1.4 # via cherrypy diff --git a/requirements/static/pkg/py3.7/linux.txt b/requirements/static/pkg/py3.7/linux.txt index 0b88348435b..678c9ca8935 100644 --- a/requirements/static/pkg/py3.7/linux.txt +++ b/requirements/static/pkg/py3.7/linux.txt @@ -92,7 +92,7 @@ timelib==0.2.5 # via -r requirements/static/pkg/linux.in typing-extensions==3.10.0.0 # via importlib-metadata -urllib3==1.26.6 +urllib3==2.0.6 # via requests zc.lockfile==1.4 # via cherrypy diff --git a/requirements/static/pkg/py3.7/windows.txt b/requirements/static/pkg/py3.7/windows.txt index 99733fb8079..60d844351ee 100644 --- a/requirements/static/pkg/py3.7/windows.txt +++ b/requirements/static/pkg/py3.7/windows.txt @@ -130,7 +130,7 @@ typing-extensions==3.10.0.0 # via # gitpython # importlib-metadata -urllib3==1.26.6 +urllib3==2.0.6 # via # -r requirements/windows.txt # requests diff --git a/requirements/static/pkg/py3.8/freebsd.txt b/requirements/static/pkg/py3.8/freebsd.txt index fd731dee62d..ef0df9d3ee5 100644 --- a/requirements/static/pkg/py3.8/freebsd.txt +++ b/requirements/static/pkg/py3.8/freebsd.txt @@ -90,7 +90,7 @@ tempora==4.1.1 # via portend timelib==0.2.5 # via -r requirements/static/pkg/freebsd.in -urllib3==1.26.6 +urllib3==2.0.6 # via requests zc.lockfile==1.4 # via cherrypy diff --git a/requirements/static/pkg/py3.8/linux.txt b/requirements/static/pkg/py3.8/linux.txt index 82dde6a5496..e561616094a 100644 --- a/requirements/static/pkg/py3.8/linux.txt +++ b/requirements/static/pkg/py3.8/linux.txt @@ -90,7 +90,7 @@ tempora==4.1.1 # via portend timelib==0.2.5 # via -r requirements/static/pkg/linux.in -urllib3==1.26.6 +urllib3==2.0.6 # via requests zc.lockfile==1.4 # via cherrypy diff --git a/requirements/static/pkg/py3.8/windows.txt b/requirements/static/pkg/py3.8/windows.txt index c1eff89b569..9b2261039a0 100644 --- a/requirements/static/pkg/py3.8/windows.txt +++ b/requirements/static/pkg/py3.8/windows.txt @@ -126,7 +126,7 @@ tempora==4.1.1 # via portend timelib==0.2.5 # via -r requirements/windows.txt -urllib3==1.26.6 +urllib3==2.0.6 # via # -r requirements/windows.txt # requests diff --git a/requirements/static/pkg/py3.9/darwin.txt b/requirements/static/pkg/py3.9/darwin.txt index 2acb0ce7257..f96e4ed8b11 100644 --- a/requirements/static/pkg/py3.9/darwin.txt +++ b/requirements/static/pkg/py3.9/darwin.txt @@ -109,7 +109,7 @@ tempora==4.1.1 # via portend timelib==0.2.5 # via -r requirements/darwin.txt -urllib3==1.26.6 +urllib3==2.0.6 # via requests vultr==1.0.1 # via -r requirements/darwin.txt diff --git a/requirements/static/pkg/py3.9/freebsd.txt b/requirements/static/pkg/py3.9/freebsd.txt index 04cd7193591..ab146d121ab 100644 --- a/requirements/static/pkg/py3.9/freebsd.txt +++ b/requirements/static/pkg/py3.9/freebsd.txt @@ -92,7 +92,7 @@ tempora==4.1.1 # via portend timelib==0.2.5 # via -r requirements/static/pkg/freebsd.in -urllib3==1.26.6 +urllib3==2.0.6 # via requests zc.lockfile==1.4 # via cherrypy diff --git a/requirements/static/pkg/py3.9/linux.txt b/requirements/static/pkg/py3.9/linux.txt index 870ee43ba11..9430433f1b1 100644 --- a/requirements/static/pkg/py3.9/linux.txt +++ b/requirements/static/pkg/py3.9/linux.txt @@ -92,7 +92,7 @@ tempora==4.1.1 # via portend timelib==0.2.5 # via -r requirements/static/pkg/linux.in -urllib3==1.26.6 +urllib3==2.0.6 # via requests zc.lockfile==1.4 # via cherrypy diff --git a/requirements/static/pkg/py3.9/windows.txt b/requirements/static/pkg/py3.9/windows.txt index c9cc3c067dc..2500bf4d1e3 100644 --- a/requirements/static/pkg/py3.9/windows.txt +++ b/requirements/static/pkg/py3.9/windows.txt @@ -126,7 +126,7 @@ tempora==4.1.1 # via portend timelib==0.2.5 # via -r requirements/windows.txt -urllib3==1.26.6 +urllib3==2.0.6 # via # -r requirements/windows.txt # requests From db4636b4021ffc7b904ea8ee44b944b5b6efdcc9 Mon Sep 17 00:00:00 2001 From: ScriptAutomate Date: Tue, 10 Oct 2023 13:17:18 -0500 Subject: [PATCH 048/153] [3005.4] Update Amazon Linux 2 AMI --- cicd/amis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cicd/amis.yml b/cicd/amis.yml index 5197c9b51e4..d7792c7ef93 100644 --- a/cicd/amis.yml +++ b/cicd/amis.yml @@ -1,5 +1,5 @@ alma-8-x86_64: ami-0594d7cf435c3d2f7 -amazon-2-x86_64: ami-09682e96e7785642d +amazon-2-x86_64: ami-01cef47eb0f1d5363 arch-lts-x86_64: ami-018a6b479dcb87969 centos-7-x86_64: ami-05764f27cdf8f99e0 centosstream-8-x86_64: ami-02fc0a57f9b1fa4ed From ec38a2e5bb7451df0933ca3b02690f40ba8a714b Mon Sep 17 00:00:00 2001 From: Megan Wilhite Date: Wed, 11 Oct 2023 09:01:36 -0600 Subject: [PATCH 049/153] [3006.4] Update gitpython to 3.1.37 --- changelog/65383.security.md | 1 + requirements/darwin.txt | 2 +- requirements/static/ci/common.in | 2 +- requirements/static/ci/py3.10/cloud.txt | 2 +- requirements/static/ci/py3.10/darwin.txt | 2 +- requirements/static/ci/py3.10/freebsd.txt | 2 +- requirements/static/ci/py3.10/lint.txt | 2 +- requirements/static/ci/py3.10/linux.txt | 2 +- requirements/static/ci/py3.10/windows.txt | 2 +- requirements/static/ci/py3.7/cloud.txt | 2 +- requirements/static/ci/py3.7/freebsd.txt | 2 +- requirements/static/ci/py3.7/lint.txt | 2 +- requirements/static/ci/py3.7/linux.txt | 2 +- requirements/static/ci/py3.7/windows.txt | 2 +- requirements/static/ci/py3.8/cloud.txt | 2 +- requirements/static/ci/py3.8/freebsd.txt | 2 +- requirements/static/ci/py3.8/lint.txt | 2 +- requirements/static/ci/py3.8/linux.txt | 2 +- requirements/static/ci/py3.8/windows.txt | 2 +- requirements/static/ci/py3.9/cloud.txt | 2 +- requirements/static/ci/py3.9/darwin.txt | 2 +- requirements/static/ci/py3.9/freebsd.txt | 2 +- requirements/static/ci/py3.9/lint.txt | 2 +- requirements/static/ci/py3.9/linux.txt | 2 +- requirements/static/ci/py3.9/windows.txt | 2 +- requirements/static/pkg/py3.10/darwin.txt | 2 +- requirements/static/pkg/py3.10/windows.txt | 2 +- requirements/static/pkg/py3.7/windows.txt | 2 +- requirements/static/pkg/py3.8/windows.txt | 2 +- requirements/static/pkg/py3.9/darwin.txt | 2 +- requirements/static/pkg/py3.9/windows.txt | 2 +- requirements/windows.txt | 2 +- 32 files changed, 32 insertions(+), 31 deletions(-) create mode 100644 changelog/65383.security.md diff --git a/changelog/65383.security.md b/changelog/65383.security.md new file mode 100644 index 00000000000..d7a4d86f94d --- /dev/null +++ b/changelog/65383.security.md @@ -0,0 +1 @@ +Bump to `gitpython==3.1.37` due to https://github.com/advisories/GHSA-cwvm-v4w8-q58c diff --git a/requirements/darwin.txt b/requirements/darwin.txt index 7e9fccb25dc..fc689ebb13b 100644 --- a/requirements/darwin.txt +++ b/requirements/darwin.txt @@ -5,7 +5,7 @@ apache-libcloud>=2.4.0 cherrypy>=17.4.1 cryptography>=41.0.3 -gitpython>=3.1.35 +gitpython>=3.1.37 idna>=2.8 linode-python>=1.1.1 pyasn1>=0.4.8 diff --git a/requirements/static/ci/common.in b/requirements/static/ci/common.in index ca4663b3805..21d26ddb480 100644 --- a/requirements/static/ci/common.in +++ b/requirements/static/ci/common.in @@ -14,7 +14,7 @@ croniter>=0.3.0,!=0.3.22"; sys_platform != 'win32' dnspython docker etcd3-py==0.1.6 -gitpython>=3.1.35 +gitpython>=3.1.37 jmespath jsonschema junos-eznc; sys_platform != 'win32' and python_version <= '3.10' diff --git a/requirements/static/ci/py3.10/cloud.txt b/requirements/static/ci/py3.10/cloud.txt index 5ecd1d9b654..9de8768d232 100644 --- a/requirements/static/ci/py3.10/cloud.txt +++ b/requirements/static/ci/py3.10/cloud.txt @@ -432,7 +432,7 @@ geomet==0.2.1.post1 # via cassandra-driver gitdb==4.0.7 # via gitpython -gitpython==3.1.35 +gitpython==3.1.37 # via -r requirements/static/ci/common.in google-auth==2.1.0 # via kubernetes diff --git a/requirements/static/ci/py3.10/darwin.txt b/requirements/static/ci/py3.10/darwin.txt index 65e51c1fa5f..db1dd68dfad 100644 --- a/requirements/static/ci/py3.10/darwin.txt +++ b/requirements/static/ci/py3.10/darwin.txt @@ -430,7 +430,7 @@ geomet==0.1.2 # via cassandra-driver gitdb==4.0.5 # via gitpython -gitpython==3.1.35 +gitpython==3.1.37 # via # -r requirements/darwin.txt # -r requirements/static/ci/common.in diff --git a/requirements/static/ci/py3.10/freebsd.txt b/requirements/static/ci/py3.10/freebsd.txt index 1a8856b5473..008fdce604a 100644 --- a/requirements/static/ci/py3.10/freebsd.txt +++ b/requirements/static/ci/py3.10/freebsd.txt @@ -429,7 +429,7 @@ geomet==0.2.1.post1 # via cassandra-driver gitdb==4.0.5 # via gitpython -gitpython==3.1.35 +gitpython==3.1.37 # via -r requirements/static/ci/common.in google-auth==1.6.3 # via kubernetes diff --git a/requirements/static/ci/py3.10/lint.txt b/requirements/static/ci/py3.10/lint.txt index dd8769b2d2b..f384c6c3124 100644 --- a/requirements/static/ci/py3.10/lint.txt +++ b/requirements/static/ci/py3.10/lint.txt @@ -427,7 +427,7 @@ geomet==0.2.1.post1 # via cassandra-driver gitdb==4.0.7 # via gitpython -gitpython==3.1.35 +gitpython==3.1.37 # via -r requirements/static/ci/common.in google-auth==2.0.1 # via kubernetes diff --git a/requirements/static/ci/py3.10/linux.txt b/requirements/static/ci/py3.10/linux.txt index 8f994690973..9b345d0836c 100644 --- a/requirements/static/ci/py3.10/linux.txt +++ b/requirements/static/ci/py3.10/linux.txt @@ -443,7 +443,7 @@ geomet==0.1.2 # via cassandra-driver gitdb==4.0.5 # via gitpython -gitpython==3.1.35 +gitpython==3.1.37 # via -r requirements/static/ci/common.in google-auth==1.6.3 # via kubernetes diff --git a/requirements/static/ci/py3.10/windows.txt b/requirements/static/ci/py3.10/windows.txt index 3fae4637543..2b72e08326c 100644 --- a/requirements/static/ci/py3.10/windows.txt +++ b/requirements/static/ci/py3.10/windows.txt @@ -111,7 +111,7 @@ geomet==0.1.2 # via cassandra-driver gitdb==4.0.7 # via gitpython -gitpython==3.1.35 +gitpython==3.1.37 # via # -r requirements/static/ci/common.in # -r requirements/windows.txt diff --git a/requirements/static/ci/py3.7/cloud.txt b/requirements/static/ci/py3.7/cloud.txt index ffafc70cb5d..318ade84aa0 100644 --- a/requirements/static/ci/py3.7/cloud.txt +++ b/requirements/static/ci/py3.7/cloud.txt @@ -444,7 +444,7 @@ geomet==0.2.1.post1 # via cassandra-driver gitdb==4.0.7 # via gitpython -gitpython==3.1.35 +gitpython==3.1.37 # via -r requirements/static/ci/common.in google-auth==2.1.0 # via kubernetes diff --git a/requirements/static/ci/py3.7/freebsd.txt b/requirements/static/ci/py3.7/freebsd.txt index 408377d5507..cdea75c32f1 100644 --- a/requirements/static/ci/py3.7/freebsd.txt +++ b/requirements/static/ci/py3.7/freebsd.txt @@ -441,7 +441,7 @@ geomet==0.2.1.post1 # via cassandra-driver gitdb==4.0.5 # via gitpython -gitpython==3.1.35 +gitpython==3.1.37 # via -r requirements/static/ci/common.in google-auth==1.6.3 # via kubernetes diff --git a/requirements/static/ci/py3.7/lint.txt b/requirements/static/ci/py3.7/lint.txt index f1f2f6ea4fe..970a0502c58 100644 --- a/requirements/static/ci/py3.7/lint.txt +++ b/requirements/static/ci/py3.7/lint.txt @@ -441,7 +441,7 @@ geomet==0.2.1.post1 # via cassandra-driver gitdb==4.0.7 # via gitpython -gitpython==3.1.35 +gitpython==3.1.37 # via -r requirements/static/ci/common.in google-auth==2.0.1 # via kubernetes diff --git a/requirements/static/ci/py3.7/linux.txt b/requirements/static/ci/py3.7/linux.txt index 30444a687c5..c10ad5cb3be 100644 --- a/requirements/static/ci/py3.7/linux.txt +++ b/requirements/static/ci/py3.7/linux.txt @@ -455,7 +455,7 @@ geomet==0.1.2 # via cassandra-driver gitdb==4.0.5 # via gitpython -gitpython==3.1.35 +gitpython==3.1.37 # via -r requirements/static/ci/common.in google-auth==1.6.3 # via kubernetes diff --git a/requirements/static/ci/py3.7/windows.txt b/requirements/static/ci/py3.7/windows.txt index 7ef90d82ad2..cd931be34c8 100644 --- a/requirements/static/ci/py3.7/windows.txt +++ b/requirements/static/ci/py3.7/windows.txt @@ -117,7 +117,7 @@ geomet==0.1.2 # via cassandra-driver gitdb==4.0.7 # via gitpython -gitpython==3.1.35 +gitpython==3.1.37 # via # -r requirements/static/ci/common.in # -r requirements/windows.txt diff --git a/requirements/static/ci/py3.8/cloud.txt b/requirements/static/ci/py3.8/cloud.txt index 943675c9f55..08b1512955b 100644 --- a/requirements/static/ci/py3.8/cloud.txt +++ b/requirements/static/ci/py3.8/cloud.txt @@ -442,7 +442,7 @@ geomet==0.2.1.post1 # via cassandra-driver gitdb==4.0.7 # via gitpython -gitpython==3.1.35 +gitpython==3.1.37 # via -r requirements/static/ci/common.in google-auth==2.1.0 # via kubernetes diff --git a/requirements/static/ci/py3.8/freebsd.txt b/requirements/static/ci/py3.8/freebsd.txt index 1bde4d18899..81a1377522b 100644 --- a/requirements/static/ci/py3.8/freebsd.txt +++ b/requirements/static/ci/py3.8/freebsd.txt @@ -439,7 +439,7 @@ geomet==0.2.1.post1 # via cassandra-driver gitdb==4.0.5 # via gitpython -gitpython==3.1.35 +gitpython==3.1.37 # via -r requirements/static/ci/common.in google-auth==1.6.3 # via kubernetes diff --git a/requirements/static/ci/py3.8/lint.txt b/requirements/static/ci/py3.8/lint.txt index 37391798b2c..5c74f46f3ec 100644 --- a/requirements/static/ci/py3.8/lint.txt +++ b/requirements/static/ci/py3.8/lint.txt @@ -439,7 +439,7 @@ geomet==0.2.1.post1 # via cassandra-driver gitdb==4.0.7 # via gitpython -gitpython==3.1.35 +gitpython==3.1.37 # via -r requirements/static/ci/common.in google-auth==2.0.1 # via kubernetes diff --git a/requirements/static/ci/py3.8/linux.txt b/requirements/static/ci/py3.8/linux.txt index d2cd1008243..41ed8277834 100644 --- a/requirements/static/ci/py3.8/linux.txt +++ b/requirements/static/ci/py3.8/linux.txt @@ -453,7 +453,7 @@ geomet==0.1.2 # via cassandra-driver gitdb==4.0.5 # via gitpython -gitpython==3.1.35 +gitpython==3.1.37 # via -r requirements/static/ci/common.in google-auth==1.6.3 # via kubernetes diff --git a/requirements/static/ci/py3.8/windows.txt b/requirements/static/ci/py3.8/windows.txt index 9aba30cafa8..64819ffb263 100644 --- a/requirements/static/ci/py3.8/windows.txt +++ b/requirements/static/ci/py3.8/windows.txt @@ -113,7 +113,7 @@ geomet==0.1.2 # via cassandra-driver gitdb==4.0.7 # via gitpython -gitpython==3.1.35 +gitpython==3.1.37 # via # -r requirements/static/ci/common.in # -r requirements/windows.txt diff --git a/requirements/static/ci/py3.9/cloud.txt b/requirements/static/ci/py3.9/cloud.txt index d5481411385..b51469f9b58 100644 --- a/requirements/static/ci/py3.9/cloud.txt +++ b/requirements/static/ci/py3.9/cloud.txt @@ -442,7 +442,7 @@ geomet==0.2.1.post1 # via cassandra-driver gitdb==4.0.7 # via gitpython -gitpython==3.1.35 +gitpython==3.1.37 # via -r requirements/static/ci/common.in google-auth==2.1.0 # via kubernetes diff --git a/requirements/static/ci/py3.9/darwin.txt b/requirements/static/ci/py3.9/darwin.txt index 90cbc5f22e4..af967b83539 100644 --- a/requirements/static/ci/py3.9/darwin.txt +++ b/requirements/static/ci/py3.9/darwin.txt @@ -440,7 +440,7 @@ geomet==0.1.2 # via cassandra-driver gitdb==4.0.5 # via gitpython -gitpython==3.1.35 +gitpython==3.1.37 # via # -r requirements/darwin.txt # -r requirements/static/ci/common.in diff --git a/requirements/static/ci/py3.9/freebsd.txt b/requirements/static/ci/py3.9/freebsd.txt index e45b1cf5e80..09ef061ecbf 100644 --- a/requirements/static/ci/py3.9/freebsd.txt +++ b/requirements/static/ci/py3.9/freebsd.txt @@ -439,7 +439,7 @@ geomet==0.2.1.post1 # via cassandra-driver gitdb==4.0.5 # via gitpython -gitpython==3.1.35 +gitpython==3.1.37 # via -r requirements/static/ci/common.in google-auth==1.6.3 # via kubernetes diff --git a/requirements/static/ci/py3.9/lint.txt b/requirements/static/ci/py3.9/lint.txt index 4201e01999e..7a5d64abfb8 100644 --- a/requirements/static/ci/py3.9/lint.txt +++ b/requirements/static/ci/py3.9/lint.txt @@ -437,7 +437,7 @@ geomet==0.2.1.post1 # via cassandra-driver gitdb==4.0.7 # via gitpython -gitpython==3.1.35 +gitpython==3.1.37 # via -r requirements/static/ci/common.in google-auth==2.0.1 # via kubernetes diff --git a/requirements/static/ci/py3.9/linux.txt b/requirements/static/ci/py3.9/linux.txt index d278e2bbf68..93fe29110ec 100644 --- a/requirements/static/ci/py3.9/linux.txt +++ b/requirements/static/ci/py3.9/linux.txt @@ -455,7 +455,7 @@ geomet==0.1.2 # via cassandra-driver gitdb==4.0.5 # via gitpython -gitpython==3.1.35 +gitpython==3.1.37 # via -r requirements/static/ci/common.in google-auth==1.6.3 # via kubernetes diff --git a/requirements/static/ci/py3.9/windows.txt b/requirements/static/ci/py3.9/windows.txt index cc37f0e1429..698a206e1fa 100644 --- a/requirements/static/ci/py3.9/windows.txt +++ b/requirements/static/ci/py3.9/windows.txt @@ -113,7 +113,7 @@ geomet==0.1.2 # via cassandra-driver gitdb==4.0.7 # via gitpython -gitpython==3.1.35 +gitpython==3.1.37 # via # -r requirements/static/ci/common.in # -r requirements/windows.txt diff --git a/requirements/static/pkg/py3.10/darwin.txt b/requirements/static/pkg/py3.10/darwin.txt index eee8b8835a7..f4409081535 100644 --- a/requirements/static/pkg/py3.10/darwin.txt +++ b/requirements/static/pkg/py3.10/darwin.txt @@ -26,7 +26,7 @@ distro==1.5.0 # via -r requirements/base.txt gitdb==4.0.5 # via gitpython -gitpython==3.1.35 +gitpython==3.1.37 # via -r requirements/darwin.txt idna==2.8 # via diff --git a/requirements/static/pkg/py3.10/windows.txt b/requirements/static/pkg/py3.10/windows.txt index 6945e3eac54..3b42a56fa24 100644 --- a/requirements/static/pkg/py3.10/windows.txt +++ b/requirements/static/pkg/py3.10/windows.txt @@ -31,7 +31,7 @@ distro==1.5.0 # via -r requirements/base.txt gitdb==4.0.7 # via gitpython -gitpython==3.1.35 +gitpython==3.1.37 # via -r requirements/windows.txt idna==2.8 # via requests diff --git a/requirements/static/pkg/py3.7/windows.txt b/requirements/static/pkg/py3.7/windows.txt index 9ad0601b5fc..cceb48e7e74 100644 --- a/requirements/static/pkg/py3.7/windows.txt +++ b/requirements/static/pkg/py3.7/windows.txt @@ -31,7 +31,7 @@ distro==1.5.0 # via -r requirements/base.txt gitdb==4.0.7 # via gitpython -gitpython==3.1.35 +gitpython==3.1.37 # via -r requirements/windows.txt idna==2.8 # via requests diff --git a/requirements/static/pkg/py3.8/windows.txt b/requirements/static/pkg/py3.8/windows.txt index 6e8ac4fc653..0bcdc7e8e8f 100644 --- a/requirements/static/pkg/py3.8/windows.txt +++ b/requirements/static/pkg/py3.8/windows.txt @@ -31,7 +31,7 @@ distro==1.5.0 # via -r requirements/base.txt gitdb==4.0.7 # via gitpython -gitpython==3.1.35 +gitpython==3.1.37 # via -r requirements/windows.txt idna==2.8 # via requests diff --git a/requirements/static/pkg/py3.9/darwin.txt b/requirements/static/pkg/py3.9/darwin.txt index 8ed6a476f3e..b229d01adb0 100644 --- a/requirements/static/pkg/py3.9/darwin.txt +++ b/requirements/static/pkg/py3.9/darwin.txt @@ -26,7 +26,7 @@ distro==1.5.0 # via -r requirements/base.txt gitdb==4.0.5 # via gitpython -gitpython==3.1.35 +gitpython==3.1.37 # via -r requirements/darwin.txt idna==2.8 # via diff --git a/requirements/static/pkg/py3.9/windows.txt b/requirements/static/pkg/py3.9/windows.txt index 11423afa70b..247b74c7474 100644 --- a/requirements/static/pkg/py3.9/windows.txt +++ b/requirements/static/pkg/py3.9/windows.txt @@ -31,7 +31,7 @@ distro==1.5.0 # via -r requirements/base.txt gitdb==4.0.7 # via gitpython -gitpython==3.1.35 +gitpython==3.1.37 # via -r requirements/windows.txt idna==2.8 # via requests diff --git a/requirements/windows.txt b/requirements/windows.txt index b2553ae2fca..19ae0c889df 100644 --- a/requirements/windows.txt +++ b/requirements/windows.txt @@ -10,7 +10,7 @@ certifi>=2022.12.07 cffi>=1.14.5 cherrypy>=18.6.1 cryptography>=41.0.3 -gitpython>=3.1.35 +gitpython>=3.1.37 ioloop>=0.1a0 lxml>=4.6.3 pyasn1>=0.4.8 From e37fbda4de3f428fb1d3a1dd9c2bb834304365da Mon Sep 17 00:00:00 2001 From: Salt Project Packaging Date: Mon, 16 Oct 2023 17:32:52 +0000 Subject: [PATCH 050/153] Release v3006.4 --- CHANGELOG.md | 14 +++++++++ changelog/65163.security.md | 1 - changelog/65268.security.md | 1 - changelog/65316.security.md | 1 - changelog/65334.security.md | 1 - changelog/65383.security.md | 1 - changelog/cve-2023-34049.security.md | 2 -- doc/man/salt-api.1 | 2 +- doc/man/salt-call.1 | 2 +- doc/man/salt-cloud.1 | 2 +- doc/man/salt-cp.1 | 2 +- doc/man/salt-key.1 | 2 +- doc/man/salt-master.1 | 2 +- doc/man/salt-minion.1 | 2 +- doc/man/salt-proxy.1 | 2 +- doc/man/salt-run.1 | 2 +- doc/man/salt-ssh.1 | 2 +- doc/man/salt-syndic.1 | 2 +- doc/man/salt.1 | 2 +- doc/man/salt.7 | 25 ++++++++++++++-- doc/man/spm.1 | 2 +- doc/topics/releases/3006.4.md | 29 +++++++++++++++++++ .../releases/templates/3006.4.md.template | 14 +++++++++ pkg/debian/changelog | 16 ++++++++++ pkg/rpm/salt.spec | 15 +++++++++- 25 files changed, 122 insertions(+), 24 deletions(-) delete mode 100644 changelog/65163.security.md delete mode 100644 changelog/65268.security.md delete mode 100644 changelog/65316.security.md delete mode 100644 changelog/65334.security.md delete mode 100644 changelog/65383.security.md delete mode 100644 changelog/cve-2023-34049.security.md create mode 100644 doc/topics/releases/3006.4.md create mode 100644 doc/topics/releases/templates/3006.4.md.template diff --git a/CHANGELOG.md b/CHANGELOG.md index 9035a3667df..f82a29c7b33 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,20 @@ Versions are `MAJOR.PATCH`. # Changelog +## 3006.4 (2023-10-16) + + +### Security + +- Fix CVE-2023-34049 by ensuring we do not use a predictable name for the script and correctly check returncode of scp command. + This only impacts salt-ssh users using the pre-flight option. [#cve-2023-34049](https://github.com/saltstack/salt/issues/cve-2023-34049) +- Update to `gitpython>=3.1.35` due to https://github.com/advisories/GHSA-wfm5-v35h-vwf4 and https://github.com/advisories/GHSA-cwvm-v4w8-q58c [#65163](https://github.com/saltstack/salt/issues/65163) +- Bump to `cryptography==41.0.4` due to https://github.com/advisories/GHSA-v8gr-m533-ghj9 [#65268](https://github.com/saltstack/salt/issues/65268) +- Upgrade relenv to 0.13.12 to address CVE-2023-4807 [#65316](https://github.com/saltstack/salt/issues/65316) +- Bump to `urllib3==1.26.17` or `urllib3==2.0.6` due to https://github.com/advisories/GHSA-v845-jxx5-vc9f [#65334](https://github.com/saltstack/salt/issues/65334) +- Bump to `gitpython==3.1.37` due to https://github.com/advisories/GHSA-cwvm-v4w8-q58c [#65383](https://github.com/saltstack/salt/issues/65383) + + ## 3006.3 (2023-09-06) diff --git a/changelog/65163.security.md b/changelog/65163.security.md deleted file mode 100644 index 8d6f57c7d0c..00000000000 --- a/changelog/65163.security.md +++ /dev/null @@ -1 +0,0 @@ -Update to `gitpython>=3.1.35` due to https://github.com/advisories/GHSA-wfm5-v35h-vwf4 and https://github.com/advisories/GHSA-cwvm-v4w8-q58c diff --git a/changelog/65268.security.md b/changelog/65268.security.md deleted file mode 100644 index 15588570ad6..00000000000 --- a/changelog/65268.security.md +++ /dev/null @@ -1 +0,0 @@ -Bump to `cryptography==41.0.4` due to https://github.com/advisories/GHSA-v8gr-m533-ghj9 diff --git a/changelog/65316.security.md b/changelog/65316.security.md deleted file mode 100644 index f9afcd0a7e4..00000000000 --- a/changelog/65316.security.md +++ /dev/null @@ -1 +0,0 @@ -Upgrade relenv to 0.13.12 to address CVE-2023-4807 diff --git a/changelog/65334.security.md b/changelog/65334.security.md deleted file mode 100644 index 9f1e2ecb0a8..00000000000 --- a/changelog/65334.security.md +++ /dev/null @@ -1 +0,0 @@ -Bump to `urllib3==1.26.17` or `urllib3==2.0.6` due to https://github.com/advisories/GHSA-v845-jxx5-vc9f diff --git a/changelog/65383.security.md b/changelog/65383.security.md deleted file mode 100644 index d7a4d86f94d..00000000000 --- a/changelog/65383.security.md +++ /dev/null @@ -1 +0,0 @@ -Bump to `gitpython==3.1.37` due to https://github.com/advisories/GHSA-cwvm-v4w8-q58c diff --git a/changelog/cve-2023-34049.security.md b/changelog/cve-2023-34049.security.md deleted file mode 100644 index 6b0ca190a27..00000000000 --- a/changelog/cve-2023-34049.security.md +++ /dev/null @@ -1,2 +0,0 @@ -Fix CVE-2023-34049 by ensuring we do not use a predictable name for the script and correctly check returncode of scp command. -This only impacts salt-ssh users using the pre-flight option. diff --git a/doc/man/salt-api.1 b/doc/man/salt-api.1 index 1b084240c54..cfbe64d172a 100644 --- a/doc/man/salt-api.1 +++ b/doc/man/salt-api.1 @@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] .in \\n[rst2man-indent\\n[rst2man-indent-level]]u .. -.TH "SALT-API" "1" "Generated on September 06, 2023 at 04:52:57 PM UTC." "3006.3" "Salt" +.TH "SALT-API" "1" "Generated on October 16, 2023 at 05:24:47 PM UTC." "3006.4" "Salt" .SH NAME salt-api \- salt-api Command .sp diff --git a/doc/man/salt-call.1 b/doc/man/salt-call.1 index 56c5c5c8319..2a964330511 100644 --- a/doc/man/salt-call.1 +++ b/doc/man/salt-call.1 @@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] .in \\n[rst2man-indent\\n[rst2man-indent-level]]u .. -.TH "SALT-CALL" "1" "Generated on September 06, 2023 at 04:52:57 PM UTC." "3006.3" "Salt" +.TH "SALT-CALL" "1" "Generated on October 16, 2023 at 05:24:47 PM UTC." "3006.4" "Salt" .SH NAME salt-call \- salt-call Documentation .SH SYNOPSIS diff --git a/doc/man/salt-cloud.1 b/doc/man/salt-cloud.1 index 757a3e1eb9d..e3866a63e31 100644 --- a/doc/man/salt-cloud.1 +++ b/doc/man/salt-cloud.1 @@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] .in \\n[rst2man-indent\\n[rst2man-indent-level]]u .. -.TH "SALT-CLOUD" "1" "Generated on September 06, 2023 at 04:52:57 PM UTC." "3006.3" "Salt" +.TH "SALT-CLOUD" "1" "Generated on October 16, 2023 at 05:24:47 PM UTC." "3006.4" "Salt" .SH NAME salt-cloud \- Salt Cloud Command .sp diff --git a/doc/man/salt-cp.1 b/doc/man/salt-cp.1 index e3386d6d343..0ad964aaf7b 100644 --- a/doc/man/salt-cp.1 +++ b/doc/man/salt-cp.1 @@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] .in \\n[rst2man-indent\\n[rst2man-indent-level]]u .. -.TH "SALT-CP" "1" "Generated on September 06, 2023 at 04:52:57 PM UTC." "3006.3" "Salt" +.TH "SALT-CP" "1" "Generated on October 16, 2023 at 05:24:47 PM UTC." "3006.4" "Salt" .SH NAME salt-cp \- salt-cp Documentation .sp diff --git a/doc/man/salt-key.1 b/doc/man/salt-key.1 index 7aca0353f86..913c2cf5b9e 100644 --- a/doc/man/salt-key.1 +++ b/doc/man/salt-key.1 @@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] .in \\n[rst2man-indent\\n[rst2man-indent-level]]u .. -.TH "SALT-KEY" "1" "Generated on September 06, 2023 at 04:52:57 PM UTC." "3006.3" "Salt" +.TH "SALT-KEY" "1" "Generated on October 16, 2023 at 05:24:47 PM UTC." "3006.4" "Salt" .SH NAME salt-key \- salt-key Documentation .SH SYNOPSIS diff --git a/doc/man/salt-master.1 b/doc/man/salt-master.1 index 1762910298e..b8bd9056ff3 100644 --- a/doc/man/salt-master.1 +++ b/doc/man/salt-master.1 @@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] .in \\n[rst2man-indent\\n[rst2man-indent-level]]u .. -.TH "SALT-MASTER" "1" "Generated on September 06, 2023 at 04:52:57 PM UTC." "3006.3" "Salt" +.TH "SALT-MASTER" "1" "Generated on October 16, 2023 at 05:24:47 PM UTC." "3006.4" "Salt" .SH NAME salt-master \- salt-master Documentation .sp diff --git a/doc/man/salt-minion.1 b/doc/man/salt-minion.1 index 62aeafada86..5fb106bf3f2 100644 --- a/doc/man/salt-minion.1 +++ b/doc/man/salt-minion.1 @@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] .in \\n[rst2man-indent\\n[rst2man-indent-level]]u .. -.TH "SALT-MINION" "1" "Generated on September 06, 2023 at 04:52:57 PM UTC." "3006.3" "Salt" +.TH "SALT-MINION" "1" "Generated on October 16, 2023 at 05:24:47 PM UTC." "3006.4" "Salt" .SH NAME salt-minion \- salt-minion Documentation .sp diff --git a/doc/man/salt-proxy.1 b/doc/man/salt-proxy.1 index 1475d70de9e..97fdfa6c6ae 100644 --- a/doc/man/salt-proxy.1 +++ b/doc/man/salt-proxy.1 @@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] .in \\n[rst2man-indent\\n[rst2man-indent-level]]u .. -.TH "SALT-PROXY" "1" "Generated on September 06, 2023 at 04:52:57 PM UTC." "3006.3" "Salt" +.TH "SALT-PROXY" "1" "Generated on October 16, 2023 at 05:24:47 PM UTC." "3006.4" "Salt" .SH NAME salt-proxy \- salt-proxy Documentation .sp diff --git a/doc/man/salt-run.1 b/doc/man/salt-run.1 index 0efc3d39e35..6954234ae0c 100644 --- a/doc/man/salt-run.1 +++ b/doc/man/salt-run.1 @@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] .in \\n[rst2man-indent\\n[rst2man-indent-level]]u .. -.TH "SALT-RUN" "1" "Generated on September 06, 2023 at 04:52:57 PM UTC." "3006.3" "Salt" +.TH "SALT-RUN" "1" "Generated on October 16, 2023 at 05:24:47 PM UTC." "3006.4" "Salt" .SH NAME salt-run \- salt-run Documentation .sp diff --git a/doc/man/salt-ssh.1 b/doc/man/salt-ssh.1 index 743f004ec50..b085a6a6cde 100644 --- a/doc/man/salt-ssh.1 +++ b/doc/man/salt-ssh.1 @@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] .in \\n[rst2man-indent\\n[rst2man-indent-level]]u .. -.TH "SALT-SSH" "1" "Generated on September 06, 2023 at 04:52:57 PM UTC." "3006.3" "Salt" +.TH "SALT-SSH" "1" "Generated on October 16, 2023 at 05:24:47 PM UTC." "3006.4" "Salt" .SH NAME salt-ssh \- salt-ssh Documentation .SH SYNOPSIS diff --git a/doc/man/salt-syndic.1 b/doc/man/salt-syndic.1 index 3a71a02eee7..5e26b223e34 100644 --- a/doc/man/salt-syndic.1 +++ b/doc/man/salt-syndic.1 @@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] .in \\n[rst2man-indent\\n[rst2man-indent-level]]u .. -.TH "SALT-SYNDIC" "1" "Generated on September 06, 2023 at 04:52:57 PM UTC." "3006.3" "Salt" +.TH "SALT-SYNDIC" "1" "Generated on October 16, 2023 at 05:24:47 PM UTC." "3006.4" "Salt" .SH NAME salt-syndic \- salt-syndic Documentation .sp diff --git a/doc/man/salt.1 b/doc/man/salt.1 index 08cf0bc7b41..852508174cc 100644 --- a/doc/man/salt.1 +++ b/doc/man/salt.1 @@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] .in \\n[rst2man-indent\\n[rst2man-indent-level]]u .. -.TH "SALT" "1" "Generated on September 06, 2023 at 04:52:57 PM UTC." "3006.3" "Salt" +.TH "SALT" "1" "Generated on October 16, 2023 at 05:24:47 PM UTC." "3006.4" "Salt" .SH NAME salt \- salt .SH SYNOPSIS diff --git a/doc/man/salt.7 b/doc/man/salt.7 index 051ad6a0e75..37909803cad 100644 --- a/doc/man/salt.7 +++ b/doc/man/salt.7 @@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] .in \\n[rst2man-indent\\n[rst2man-indent-level]]u .. -.TH "SALT" "7" "Generated on September 06, 2023 at 04:52:57 PM UTC." "3006.3" "Salt" +.TH "SALT" "7" "Generated on October 16, 2023 at 05:24:47 PM UTC." "3006.4" "Salt" .SH NAME salt \- Salt Documentation .SH SALT PROJECT @@ -194128,7 +194128,7 @@ Passes through all the parameters described in the \fI\%utils.http.query function\fP: .INDENT 7.0 .TP -.B salt.utils.http.query(url, method=\(aqGET\(aq, params=None, data=None, data_file=None, header_dict=None, header_list=None, header_file=None, username=None, password=None, auth=None, decode=False, decode_type=\(aqauto\(aq, status=False, headers=False, text=False, cookies=None, cookie_jar=None, cookie_format=\(aqlwp\(aq, persist_session=False, session_cookie_jar=None, data_render=False, data_renderer=None, header_render=False, header_renderer=None, template_dict=None, test=False, test_url=None, node=\(aqminion\(aq, port=80, opts=None, backend=None, ca_bundle=None, verify_ssl=None, cert=None, text_out=None, headers_out=None, decode_out=None, stream=False, streaming_callback=None, header_callback=None, handle=False, agent=\(aqSalt/3006.3\(aq, hide_fields=None, raise_error=True, formdata=False, formdata_fieldname=None, formdata_filename=None, decode_body=True, **kwargs) +.B salt.utils.http.query(url, method=\(aqGET\(aq, params=None, data=None, data_file=None, header_dict=None, header_list=None, header_file=None, username=None, password=None, auth=None, decode=False, decode_type=\(aqauto\(aq, status=False, headers=False, text=False, cookies=None, cookie_jar=None, cookie_format=\(aqlwp\(aq, persist_session=False, session_cookie_jar=None, data_render=False, data_renderer=None, header_render=False, header_renderer=None, template_dict=None, test=False, test_url=None, node=\(aqminion\(aq, port=80, opts=None, backend=None, ca_bundle=None, verify_ssl=None, cert=None, text_out=None, headers_out=None, decode_out=None, stream=False, streaming_callback=None, header_callback=None, handle=False, agent=\(aqSalt/3006.4\(aq, hide_fields=None, raise_error=True, formdata=False, formdata_fieldname=None, formdata_filename=None, decode_body=True, **kwargs) Query a resource, and decode the return data .UNINDENT .INDENT 7.0 @@ -457626,7 +457626,7 @@ installed2 .UNINDENT .INDENT 0.0 .TP -.B salt.states.zcbuildout.installed(name, config=\(aqbuildout.cfg\(aq, quiet=False, parts=None, user=None, env=(), buildout_ver=None, test_release=False, distribute=None, new_st=None, offline=False, newest=False, python=\(aq/opt/actions\-runner/_work/salt/salt/.tools\-venvs/py3.10/docs/bin/python\(aq, debug=False, verbose=False, unless=None, onlyif=None, use_vt=False, loglevel=\(aqdebug\(aq, **kwargs) +.B salt.states.zcbuildout.installed(name, config=\(aqbuildout.cfg\(aq, quiet=False, parts=None, user=None, env=(), buildout_ver=None, test_release=False, distribute=None, new_st=None, offline=False, newest=False, python=\(aq/opt/actions\-runner/_work/salt\-priv/salt\-priv/.tools\-venvs/py3.10/docs/bin/python\(aq, debug=False, verbose=False, unless=None, onlyif=None, use_vt=False, loglevel=\(aqdebug\(aq, **kwargs) Install buildout in a specific directory .sp It is a thin wrapper to modules.buildout.buildout @@ -477556,6 +477556,25 @@ Addresses multiple CVEs in Python\(aqs dependencies: \fI\%https://docs.python.or .IP \(bu 2 Update to \fBgitpython>=3.1.32\fP due to \fI\%https://github.com/advisories/GHSA\-pr76\-5cm5\-w9cj\fP \fI\%#64988\fP .UNINDENT +(release\-3006.4)= +.SS Salt 3006.4 release notes +.SS Changelog +.SS Security +.INDENT 0.0 +.IP \(bu 2 +Fix CVE\-2023\-34049 by ensuring we do not use a predictable name for the script and correctly check returncode of scp command. +This only impacts salt\-ssh users using the pre\-flight option. \fI\%#cve\-2023\-34049\fP +.IP \(bu 2 +Update to \fBgitpython>=3.1.35\fP due to \fI\%https://github.com/advisories/GHSA\-wfm5\-v35h\-vwf4\fP and \fI\%https://github.com/advisories/GHSA\-cwvm\-v4w8\-q58c\fP \fI\%#65163\fP +.IP \(bu 2 +Bump to \fBcryptography==41.0.4\fP due to \fI\%https://github.com/advisories/GHSA\-v8gr\-m533\-ghj9\fP \fI\%#65268\fP +.IP \(bu 2 +Upgrade relenv to 0.13.12 to address CVE\-2023\-4807 \fI\%#65316\fP +.IP \(bu 2 +Bump to \fBurllib3==1.26.17\fP or \fBurllib3==2.0.6\fP due to \fI\%https://github.com/advisories/GHSA\-v845\-jxx5\-vc9f\fP \fI\%#65334\fP +.IP \(bu 2 +Bump to \fBgitpython==3.1.37\fP due to \fI\%https://github.com/advisories/GHSA\-cwvm\-v4w8\-q58c\fP \fI\%#65383\fP +.UNINDENT .sp See \fI\%Install a release candidate\fP for more information about installing an RC when one is available. diff --git a/doc/man/spm.1 b/doc/man/spm.1 index 9353636a20b..686ce512eeb 100644 --- a/doc/man/spm.1 +++ b/doc/man/spm.1 @@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] .in \\n[rst2man-indent\\n[rst2man-indent-level]]u .. -.TH "SPM" "1" "Generated on September 06, 2023 at 04:52:57 PM UTC." "3006.3" "Salt" +.TH "SPM" "1" "Generated on October 16, 2023 at 05:24:47 PM UTC." "3006.4" "Salt" .SH NAME spm \- Salt Package Manager Command .sp diff --git a/doc/topics/releases/3006.4.md b/doc/topics/releases/3006.4.md new file mode 100644 index 00000000000..83478f1cc99 --- /dev/null +++ b/doc/topics/releases/3006.4.md @@ -0,0 +1,29 @@ +(release-3006.4)= +# Salt 3006.4 release notes + + + + + + + +## Changelog + +### Security + +- Fix CVE-2023-34049 by ensuring we do not use a predictable name for the script and correctly check returncode of scp command. + This only impacts salt-ssh users using the pre-flight option. [#cve-2023-34049](https://github.com/saltstack/salt/issues/cve-2023-34049) +- Update to `gitpython>=3.1.35` due to https://github.com/advisories/GHSA-wfm5-v35h-vwf4 and https://github.com/advisories/GHSA-cwvm-v4w8-q58c [#65163](https://github.com/saltstack/salt/issues/65163) +- Bump to `cryptography==41.0.4` due to https://github.com/advisories/GHSA-v8gr-m533-ghj9 [#65268](https://github.com/saltstack/salt/issues/65268) +- Upgrade relenv to 0.13.12 to address CVE-2023-4807 [#65316](https://github.com/saltstack/salt/issues/65316) +- Bump to `urllib3==1.26.17` or `urllib3==2.0.6` due to https://github.com/advisories/GHSA-v845-jxx5-vc9f [#65334](https://github.com/saltstack/salt/issues/65334) +- Bump to `gitpython==3.1.37` due to https://github.com/advisories/GHSA-cwvm-v4w8-q58c [#65383](https://github.com/saltstack/salt/issues/65383) diff --git a/doc/topics/releases/templates/3006.4.md.template b/doc/topics/releases/templates/3006.4.md.template new file mode 100644 index 00000000000..a11ede9bf4c --- /dev/null +++ b/doc/topics/releases/templates/3006.4.md.template @@ -0,0 +1,14 @@ +(release-3006.4)= +# Salt 3006.4 release notes{{ unreleased }} +{{ warning }} + + + + +## Changelog +{{ changelog }} diff --git a/pkg/debian/changelog b/pkg/debian/changelog index bd27fccf007..e45d8665d16 100644 --- a/pkg/debian/changelog +++ b/pkg/debian/changelog @@ -1,3 +1,19 @@ +salt (3006.4) stable; urgency=medium + + + # Security + + * Fix CVE-2023-34049 by ensuring we do not use a predictable name for the script and correctly check returncode of scp command. + This only impacts salt*ssh users using the pre-flight option. [#cve-2023-34049](https://github.com/saltstack/salt/issues/cve-2023-34049) + * Update to `gitpython>=3.1.35` due to https://github.com/advisories/GHSA-wfm5-v35h-vwf4 and https://github.com/advisories/GHSA-cwvm-v4w8-q58c [#65163](https://github.com/saltstack/salt/issues/65163) + * Bump to `cryptography==41.0.4` due to https://github.com/advisories/GHSA-v8gr-m533-ghj9 [#65268](https://github.com/saltstack/salt/issues/65268) + * Upgrade relenv to 0.13.12 to address CVE-2023-4807 [#65316](https://github.com/saltstack/salt/issues/65316) + * Bump to `urllib3==1.26.17` or `urllib3==2.0.6` due to https://github.com/advisories/GHSA-v845-jxx5-vc9f [#65334](https://github.com/saltstack/salt/issues/65334) + * Bump to `gitpython==3.1.37` due to https://github.com/advisories/GHSA-cwvm-v4w8-q58c [#65383](https://github.com/saltstack/salt/issues/65383) + + + -- Salt Project Packaging Mon, 16 Oct 2023 17:22:41 +0000 + salt (3006.3) stable; urgency=medium diff --git a/pkg/rpm/salt.spec b/pkg/rpm/salt.spec index eaeae33320f..6cc4e85c23c 100644 --- a/pkg/rpm/salt.spec +++ b/pkg/rpm/salt.spec @@ -31,7 +31,7 @@ %define fish_dir %{_datadir}/fish/vendor_functions.d Name: salt -Version: 3006.3 +Version: 3006.4 Release: 0 Summary: A parallel remote execution system Group: System Environment/Daemons @@ -563,6 +563,19 @@ fi %changelog +* Mon Oct 16 2023 Salt Project Packaging - 3006.4 + +# Security + +- Fix CVE-2023-34049 by ensuring we do not use a predictable name for the script and correctly check returncode of scp command. + This only impacts salt-ssh users using the pre-flight option. [#cve-2023-34049](https://github.com/saltstack/salt/issues/cve-2023-34049) +- Update to `gitpython>=3.1.35` due to https://github.com/advisories/GHSA-wfm5-v35h-vwf4 and https://github.com/advisories/GHSA-cwvm-v4w8-q58c [#65163](https://github.com/saltstack/salt/issues/65163) +- Bump to `cryptography==41.0.4` due to https://github.com/advisories/GHSA-v8gr-m533-ghj9 [#65268](https://github.com/saltstack/salt/issues/65268) +- Upgrade relenv to 0.13.12 to address CVE-2023-4807 [#65316](https://github.com/saltstack/salt/issues/65316) +- Bump to `urllib3==1.26.17` or `urllib3==2.0.6` due to https://github.com/advisories/GHSA-v845-jxx5-vc9f [#65334](https://github.com/saltstack/salt/issues/65334) +- Bump to `gitpython==3.1.37` due to https://github.com/advisories/GHSA-cwvm-v4w8-q58c [#65383](https://github.com/saltstack/salt/issues/65383) + + * Wed Sep 06 2023 Salt Project Packaging - 3006.3 # Removed From 1184c5ebfaae8458b7ba27c9965adfd9216c311c Mon Sep 17 00:00:00 2001 From: Megan Wilhite Date: Wed, 11 Oct 2023 08:51:56 -0600 Subject: [PATCH 051/153] [3005.4] Update gitpython to 3.1.37 --- changelog/65383.security | 1 + requirements/darwin.txt | 2 +- requirements/static/ci/common.in | 2 +- requirements/static/ci/py3.10/cloud.txt | 2 +- requirements/static/ci/py3.10/darwin.txt | 2 +- requirements/static/ci/py3.10/docs.txt | 2 +- requirements/static/ci/py3.10/freebsd.txt | 2 +- requirements/static/ci/py3.10/lint.txt | 2 +- requirements/static/ci/py3.10/linux.txt | 2 +- requirements/static/ci/py3.7/cloud.txt | 2 +- requirements/static/ci/py3.7/docs.txt | 2 +- requirements/static/ci/py3.7/freebsd.txt | 2 +- requirements/static/ci/py3.7/lint.txt | 2 +- requirements/static/ci/py3.7/linux.txt | 2 +- requirements/static/ci/py3.7/windows.txt | 2 +- requirements/static/ci/py3.8/cloud.txt | 2 +- requirements/static/ci/py3.8/docs.txt | 2 +- requirements/static/ci/py3.8/freebsd.txt | 2 +- requirements/static/ci/py3.8/lint.txt | 2 +- requirements/static/ci/py3.8/linux.txt | 2 +- requirements/static/ci/py3.8/windows.txt | 2 +- requirements/static/ci/py3.9/cloud.txt | 2 +- requirements/static/ci/py3.9/darwin.txt | 2 +- requirements/static/ci/py3.9/docs.txt | 2 +- requirements/static/ci/py3.9/freebsd.txt | 2 +- requirements/static/ci/py3.9/lint.txt | 2 +- requirements/static/ci/py3.9/linux.txt | 2 +- requirements/static/ci/py3.9/windows.txt | 2 +- requirements/static/pkg/py3.10/darwin.txt | 2 +- requirements/static/pkg/py3.7/windows.txt | 2 +- requirements/static/pkg/py3.8/windows.txt | 2 +- requirements/static/pkg/py3.9/darwin.txt | 2 +- requirements/static/pkg/py3.9/windows.txt | 2 +- requirements/windows.txt | 2 +- 34 files changed, 34 insertions(+), 33 deletions(-) create mode 100644 changelog/65383.security diff --git a/changelog/65383.security b/changelog/65383.security new file mode 100644 index 00000000000..d7a4d86f94d --- /dev/null +++ b/changelog/65383.security @@ -0,0 +1 @@ +Bump to `gitpython==3.1.37` due to https://github.com/advisories/GHSA-cwvm-v4w8-q58c diff --git a/requirements/darwin.txt b/requirements/darwin.txt index c723a896dee..e61265a9310 100644 --- a/requirements/darwin.txt +++ b/requirements/darwin.txt @@ -9,7 +9,7 @@ cryptography>=41.0.3 ; python_version >= "3.7" cryptography<=40.0.2 ; python_version == "3.6" cryptography<=3.2.1 ; python_version <= "3.5" gitpython>=2.1.15 ; python_version <= "3.6" -gitpython>=3.1.35 ; python_version >= "3.7" +gitpython>=3.1.37 ; python_version >= "3.7" idna>=2.8 linode-python>=1.1.1 mako>=1.0.7 diff --git a/requirements/static/ci/common.in b/requirements/static/ci/common.in index 6defcad9fde..be3a30727cf 100644 --- a/requirements/static/ci/common.in +++ b/requirements/static/ci/common.in @@ -17,7 +17,7 @@ dnspython docker etcd3-py==0.1.6 ; python_version >= '3.6' gitpython>=2.1.15 ; python_version <= "3.6" -gitpython>=3.1.35 ; python_version >= "3.7" +gitpython>=3.1.37 ; python_version >= "3.7" jmespath jsonschema junos-eznc==2.4.0; sys_platform != 'win32' and python_version <= '3.9' diff --git a/requirements/static/ci/py3.10/cloud.txt b/requirements/static/ci/py3.10/cloud.txt index 6a85808c774..38e94b85a20 100644 --- a/requirements/static/ci/py3.10/cloud.txt +++ b/requirements/static/ci/py3.10/cloud.txt @@ -427,7 +427,7 @@ geomet==0.2.1.post1 # via cassandra-driver gitdb==4.0.7 # via gitpython -gitpython==3.1.35 ; python_version >= "3.7" +gitpython==3.1.37 ; python_version >= "3.7" # via -r requirements/static/ci/common.in google-auth==2.1.0 # via kubernetes diff --git a/requirements/static/ci/py3.10/darwin.txt b/requirements/static/ci/py3.10/darwin.txt index 55b40a44ce8..ac3eede42cf 100644 --- a/requirements/static/ci/py3.10/darwin.txt +++ b/requirements/static/ci/py3.10/darwin.txt @@ -428,7 +428,7 @@ geomet==0.1.2 # via cassandra-driver gitdb==4.0.5 # via gitpython -gitpython==3.1.35 ; python_version >= "3.7" +gitpython==3.1.37 ; python_version >= "3.7" # via # -r requirements/darwin.txt # -r requirements/static/ci/common.in diff --git a/requirements/static/ci/py3.10/docs.txt b/requirements/static/ci/py3.10/docs.txt index fd3a8fbb80d..202bdbe0e7c 100644 --- a/requirements/static/ci/py3.10/docs.txt +++ b/requirements/static/ci/py3.10/docs.txt @@ -429,7 +429,7 @@ geomet==0.2.1.post1 # via cassandra-driver gitdb==4.0.7 # via gitpython -gitpython==3.1.35 ; python_version >= "3.7" +gitpython==3.1.37 ; python_version >= "3.7" # via -r requirements/static/ci/common.in google-auth==2.0.1 # via kubernetes diff --git a/requirements/static/ci/py3.10/freebsd.txt b/requirements/static/ci/py3.10/freebsd.txt index 4cbd3c8e568..19f1ff38a06 100644 --- a/requirements/static/ci/py3.10/freebsd.txt +++ b/requirements/static/ci/py3.10/freebsd.txt @@ -425,7 +425,7 @@ geomet==0.2.1.post1 # via cassandra-driver gitdb==4.0.5 # via gitpython -gitpython==3.1.35 ; python_version >= "3.7" +gitpython==3.1.37 ; python_version >= "3.7" # via -r requirements/static/ci/common.in google-auth==1.6.3 # via kubernetes diff --git a/requirements/static/ci/py3.10/lint.txt b/requirements/static/ci/py3.10/lint.txt index 0f1259f7fae..20317a6ff2f 100644 --- a/requirements/static/ci/py3.10/lint.txt +++ b/requirements/static/ci/py3.10/lint.txt @@ -425,7 +425,7 @@ geomet==0.2.1.post1 # via cassandra-driver gitdb==4.0.7 # via gitpython -gitpython==3.1.35 ; python_version >= "3.7" +gitpython==3.1.37 ; python_version >= "3.7" # via -r requirements/static/ci/common.in google-auth==2.0.1 # via kubernetes diff --git a/requirements/static/ci/py3.10/linux.txt b/requirements/static/ci/py3.10/linux.txt index c35ad1305c0..fe495f44a6a 100644 --- a/requirements/static/ci/py3.10/linux.txt +++ b/requirements/static/ci/py3.10/linux.txt @@ -439,7 +439,7 @@ geomet==0.1.2 # via cassandra-driver gitdb==4.0.5 # via gitpython -gitpython==3.1.35 ; python_version >= "3.7" +gitpython==3.1.37 ; python_version >= "3.7" # via -r requirements/static/ci/common.in google-auth==1.6.3 # via kubernetes diff --git a/requirements/static/ci/py3.7/cloud.txt b/requirements/static/ci/py3.7/cloud.txt index 23073194403..19755d08874 100644 --- a/requirements/static/ci/py3.7/cloud.txt +++ b/requirements/static/ci/py3.7/cloud.txt @@ -439,7 +439,7 @@ geomet==0.2.1.post1 # via cassandra-driver gitdb==4.0.7 # via gitpython -gitpython==3.1.35 ; python_version >= "3.7" +gitpython==3.1.37 ; python_version >= "3.7" # via -r requirements/static/ci/common.in google-auth==2.1.0 # via kubernetes diff --git a/requirements/static/ci/py3.7/docs.txt b/requirements/static/ci/py3.7/docs.txt index 2b752fc5f40..b432d2f9bc4 100644 --- a/requirements/static/ci/py3.7/docs.txt +++ b/requirements/static/ci/py3.7/docs.txt @@ -443,7 +443,7 @@ geomet==0.2.1.post1 # via cassandra-driver gitdb==4.0.7 # via gitpython -gitpython==3.1.35 ; python_version >= "3.7" +gitpython==3.1.37 ; python_version >= "3.7" # via -r requirements/static/ci/common.in google-auth==2.0.1 # via kubernetes diff --git a/requirements/static/ci/py3.7/freebsd.txt b/requirements/static/ci/py3.7/freebsd.txt index 5d973d41837..9d62e3e5bcd 100644 --- a/requirements/static/ci/py3.7/freebsd.txt +++ b/requirements/static/ci/py3.7/freebsd.txt @@ -437,7 +437,7 @@ geomet==0.2.1.post1 # via cassandra-driver gitdb==4.0.5 # via gitpython -gitpython==3.1.35 ; python_version >= "3.7" +gitpython==3.1.37 ; python_version >= "3.7" # via -r requirements/static/ci/common.in google-auth==1.6.3 # via kubernetes diff --git a/requirements/static/ci/py3.7/lint.txt b/requirements/static/ci/py3.7/lint.txt index c32356af790..b099c2678d0 100644 --- a/requirements/static/ci/py3.7/lint.txt +++ b/requirements/static/ci/py3.7/lint.txt @@ -439,7 +439,7 @@ geomet==0.2.1.post1 # via cassandra-driver gitdb==4.0.7 # via gitpython -gitpython==3.1.35 ; python_version >= "3.7" +gitpython==3.1.37 ; python_version >= "3.7" # via -r requirements/static/ci/common.in google-auth==2.0.1 # via kubernetes diff --git a/requirements/static/ci/py3.7/linux.txt b/requirements/static/ci/py3.7/linux.txt index 65ff4877046..cbb48ffc114 100644 --- a/requirements/static/ci/py3.7/linux.txt +++ b/requirements/static/ci/py3.7/linux.txt @@ -451,7 +451,7 @@ geomet==0.1.2 # via cassandra-driver gitdb==4.0.5 # via gitpython -gitpython==3.1.35 ; python_version >= "3.7" +gitpython==3.1.37 ; python_version >= "3.7" # via -r requirements/static/ci/common.in google-auth==1.6.3 # via kubernetes diff --git a/requirements/static/ci/py3.7/windows.txt b/requirements/static/ci/py3.7/windows.txt index d39a2c37020..279b06c7d99 100644 --- a/requirements/static/ci/py3.7/windows.txt +++ b/requirements/static/ci/py3.7/windows.txt @@ -113,7 +113,7 @@ geomet==0.1.2 # via cassandra-driver gitdb==4.0.5 # via gitpython -gitpython==3.1.35 ; python_version >= "3.7" +gitpython==3.1.37 ; python_version >= "3.7" # via # -r requirements/static/ci/common.in # -r requirements/windows.txt diff --git a/requirements/static/ci/py3.8/cloud.txt b/requirements/static/ci/py3.8/cloud.txt index ac77ecc13ff..a768ba3001c 100644 --- a/requirements/static/ci/py3.8/cloud.txt +++ b/requirements/static/ci/py3.8/cloud.txt @@ -437,7 +437,7 @@ geomet==0.2.1.post1 # via cassandra-driver gitdb==4.0.7 # via gitpython -gitpython==3.1.35 ; python_version >= "3.7" +gitpython==3.1.37 ; python_version >= "3.7" # via -r requirements/static/ci/common.in google-auth==2.1.0 # via kubernetes diff --git a/requirements/static/ci/py3.8/docs.txt b/requirements/static/ci/py3.8/docs.txt index a84e86f2156..be504e720ab 100644 --- a/requirements/static/ci/py3.8/docs.txt +++ b/requirements/static/ci/py3.8/docs.txt @@ -441,7 +441,7 @@ geomet==0.2.1.post1 # via cassandra-driver gitdb==4.0.7 # via gitpython -gitpython==3.1.35 ; python_version >= "3.7" +gitpython==3.1.37 ; python_version >= "3.7" # via -r requirements/static/ci/common.in google-auth==2.0.1 # via kubernetes diff --git a/requirements/static/ci/py3.8/freebsd.txt b/requirements/static/ci/py3.8/freebsd.txt index 766805cf7ea..7d0ed289f21 100644 --- a/requirements/static/ci/py3.8/freebsd.txt +++ b/requirements/static/ci/py3.8/freebsd.txt @@ -435,7 +435,7 @@ geomet==0.2.1.post1 # via cassandra-driver gitdb==4.0.5 # via gitpython -gitpython==3.1.35 ; python_version >= "3.7" +gitpython==3.1.37 ; python_version >= "3.7" # via -r requirements/static/ci/common.in google-auth==1.6.3 # via kubernetes diff --git a/requirements/static/ci/py3.8/lint.txt b/requirements/static/ci/py3.8/lint.txt index df356e75c32..1f0b59b70a1 100644 --- a/requirements/static/ci/py3.8/lint.txt +++ b/requirements/static/ci/py3.8/lint.txt @@ -437,7 +437,7 @@ geomet==0.2.1.post1 # via cassandra-driver gitdb==4.0.7 # via gitpython -gitpython==3.1.35 ; python_version >= "3.7" +gitpython==3.1.37 ; python_version >= "3.7" # via -r requirements/static/ci/common.in google-auth==2.0.1 # via kubernetes diff --git a/requirements/static/ci/py3.8/linux.txt b/requirements/static/ci/py3.8/linux.txt index 274fde2325f..397d9974198 100644 --- a/requirements/static/ci/py3.8/linux.txt +++ b/requirements/static/ci/py3.8/linux.txt @@ -449,7 +449,7 @@ geomet==0.1.2 # via cassandra-driver gitdb==4.0.5 # via gitpython -gitpython==3.1.35 ; python_version >= "3.7" +gitpython==3.1.37 ; python_version >= "3.7" # via -r requirements/static/ci/common.in google-auth==1.6.3 # via kubernetes diff --git a/requirements/static/ci/py3.8/windows.txt b/requirements/static/ci/py3.8/windows.txt index ed29068ec30..b2fd444ce5e 100644 --- a/requirements/static/ci/py3.8/windows.txt +++ b/requirements/static/ci/py3.8/windows.txt @@ -111,7 +111,7 @@ geomet==0.1.2 # via cassandra-driver gitdb==4.0.7 # via gitpython -gitpython==3.1.35 ; python_version >= "3.7" +gitpython==3.1.37 ; python_version >= "3.7" # via # -r requirements/static/ci/common.in # -r requirements/windows.txt diff --git a/requirements/static/ci/py3.9/cloud.txt b/requirements/static/ci/py3.9/cloud.txt index 562928442d7..383f8b43667 100644 --- a/requirements/static/ci/py3.9/cloud.txt +++ b/requirements/static/ci/py3.9/cloud.txt @@ -437,7 +437,7 @@ geomet==0.2.1.post1 # via cassandra-driver gitdb==4.0.7 # via gitpython -gitpython==3.1.35 ; python_version >= "3.7" +gitpython==3.1.37 ; python_version >= "3.7" # via -r requirements/static/ci/common.in google-auth==2.1.0 # via kubernetes diff --git a/requirements/static/ci/py3.9/darwin.txt b/requirements/static/ci/py3.9/darwin.txt index afeec28a1d4..8d5b8786e42 100644 --- a/requirements/static/ci/py3.9/darwin.txt +++ b/requirements/static/ci/py3.9/darwin.txt @@ -438,7 +438,7 @@ geomet==0.1.2 # via cassandra-driver gitdb==4.0.5 # via gitpython -gitpython==3.1.35 ; python_version >= "3.7" +gitpython==3.1.37 ; python_version >= "3.7" # via # -r requirements/darwin.txt # -r requirements/static/ci/common.in diff --git a/requirements/static/ci/py3.9/docs.txt b/requirements/static/ci/py3.9/docs.txt index 8d7fb6f4302..f45ae26401d 100644 --- a/requirements/static/ci/py3.9/docs.txt +++ b/requirements/static/ci/py3.9/docs.txt @@ -439,7 +439,7 @@ geomet==0.2.1.post1 # via cassandra-driver gitdb==4.0.7 # via gitpython -gitpython==3.1.35 ; python_version >= "3.7" +gitpython==3.1.37 ; python_version >= "3.7" # via -r requirements/static/ci/common.in google-auth==2.0.1 # via kubernetes diff --git a/requirements/static/ci/py3.9/freebsd.txt b/requirements/static/ci/py3.9/freebsd.txt index a09f0e7578c..776dd68c96c 100644 --- a/requirements/static/ci/py3.9/freebsd.txt +++ b/requirements/static/ci/py3.9/freebsd.txt @@ -435,7 +435,7 @@ geomet==0.2.1.post1 # via cassandra-driver gitdb==4.0.5 # via gitpython -gitpython==3.1.35 ; python_version >= "3.7" +gitpython==3.1.37 ; python_version >= "3.7" # via -r requirements/static/ci/common.in google-auth==1.6.3 # via kubernetes diff --git a/requirements/static/ci/py3.9/lint.txt b/requirements/static/ci/py3.9/lint.txt index e69756544c1..64035f63a0e 100644 --- a/requirements/static/ci/py3.9/lint.txt +++ b/requirements/static/ci/py3.9/lint.txt @@ -435,7 +435,7 @@ geomet==0.2.1.post1 # via cassandra-driver gitdb==4.0.7 # via gitpython -gitpython==3.1.35 ; python_version >= "3.7" +gitpython==3.1.37 ; python_version >= "3.7" # via -r requirements/static/ci/common.in google-auth==2.0.1 # via kubernetes diff --git a/requirements/static/ci/py3.9/linux.txt b/requirements/static/ci/py3.9/linux.txt index 01ca0c0e9e6..e8f73ceb5a4 100644 --- a/requirements/static/ci/py3.9/linux.txt +++ b/requirements/static/ci/py3.9/linux.txt @@ -451,7 +451,7 @@ geomet==0.1.2 # via cassandra-driver gitdb==4.0.5 # via gitpython -gitpython==3.1.35 ; python_version >= "3.7" +gitpython==3.1.37 ; python_version >= "3.7" # via -r requirements/static/ci/common.in google-auth==1.6.3 # via kubernetes diff --git a/requirements/static/ci/py3.9/windows.txt b/requirements/static/ci/py3.9/windows.txt index edc7125397e..b38ad09e31d 100644 --- a/requirements/static/ci/py3.9/windows.txt +++ b/requirements/static/ci/py3.9/windows.txt @@ -111,7 +111,7 @@ geomet==0.1.2 # via cassandra-driver gitdb==4.0.7 # via gitpython -gitpython==3.1.35 ; python_version >= "3.7" +gitpython==3.1.37 ; python_version >= "3.7" # via # -r requirements/static/ci/common.in # -r requirements/windows.txt diff --git a/requirements/static/pkg/py3.10/darwin.txt b/requirements/static/pkg/py3.10/darwin.txt index 9a684e23867..fe43b275dfd 100644 --- a/requirements/static/pkg/py3.10/darwin.txt +++ b/requirements/static/pkg/py3.10/darwin.txt @@ -26,7 +26,7 @@ distro==1.5.0 # via -r requirements/base.txt gitdb==4.0.5 # via gitpython -gitpython==3.1.35 ; python_version >= "3.7" +gitpython==3.1.37 ; python_version >= "3.7" # via -r requirements/darwin.txt idna==2.8 # via diff --git a/requirements/static/pkg/py3.7/windows.txt b/requirements/static/pkg/py3.7/windows.txt index 60d844351ee..fc4ea5e330b 100644 --- a/requirements/static/pkg/py3.7/windows.txt +++ b/requirements/static/pkg/py3.7/windows.txt @@ -28,7 +28,7 @@ distro==1.5.0 # via -r requirements/base.txt gitdb==4.0.5 # via gitpython -gitpython==3.1.35 ; python_version >= "3.7" +gitpython==3.1.37 ; python_version >= "3.7" # via -r requirements/windows.txt idna==2.8 # via requests diff --git a/requirements/static/pkg/py3.8/windows.txt b/requirements/static/pkg/py3.8/windows.txt index 9b2261039a0..8cd71504140 100644 --- a/requirements/static/pkg/py3.8/windows.txt +++ b/requirements/static/pkg/py3.8/windows.txt @@ -28,7 +28,7 @@ distro==1.5.0 # via -r requirements/base.txt gitdb==4.0.7 # via gitpython -gitpython==3.1.35 ; python_version >= "3.7" +gitpython==3.1.37 ; python_version >= "3.7" # via -r requirements/windows.txt idna==2.8 # via requests diff --git a/requirements/static/pkg/py3.9/darwin.txt b/requirements/static/pkg/py3.9/darwin.txt index f96e4ed8b11..9614f770903 100644 --- a/requirements/static/pkg/py3.9/darwin.txt +++ b/requirements/static/pkg/py3.9/darwin.txt @@ -26,7 +26,7 @@ distro==1.5.0 # via -r requirements/base.txt gitdb==4.0.5 # via gitpython -gitpython==3.1.35 ; python_version >= "3.7" +gitpython==3.1.37 ; python_version >= "3.7" # via -r requirements/darwin.txt idna==2.8 # via diff --git a/requirements/static/pkg/py3.9/windows.txt b/requirements/static/pkg/py3.9/windows.txt index 2500bf4d1e3..1ed6dfa76b6 100644 --- a/requirements/static/pkg/py3.9/windows.txt +++ b/requirements/static/pkg/py3.9/windows.txt @@ -28,7 +28,7 @@ distro==1.5.0 # via -r requirements/base.txt gitdb==4.0.7 # via gitpython -gitpython==3.1.35 ; python_version >= "3.7" +gitpython==3.1.37 ; python_version >= "3.7" # via -r requirements/windows.txt idna==2.8 # via requests diff --git a/requirements/windows.txt b/requirements/windows.txt index 9784054f921..aaa93f5e238 100644 --- a/requirements/windows.txt +++ b/requirements/windows.txt @@ -15,7 +15,7 @@ cryptography>=41.0.3 ; python_version >= "3.7" cryptography<=40.0.2 ; python_version == "3.6" cryptography<=3.2.1 ; python_version <= "3.5" gitpython>=2.1.15 ; python_version <= "3.6" -gitpython>=3.1.35 ; python_version >= "3.7" +gitpython>=3.1.37 ; python_version >= "3.7" ioloop>=0.1a0 libnacl>=1.8.0 lxml>=4.6.3 From 1d983e40188ed2cc577c7d4de1e193d9abe8fa5c Mon Sep 17 00:00:00 2001 From: Megan Wilhite Date: Mon, 16 Oct 2023 13:43:24 -0600 Subject: [PATCH 052/153] Prepare release notes, changelog, and man pages for 3005.4 --- CHANGELOG.md | 13 +++++++++++ changelog/65267.security | 1 - changelog/65334.security | 1 - changelog/65383.security | 1 - changelog/cve-2023-34049.security | 2 -- doc/man/salt-api.1 | 2 +- doc/man/salt-call.1 | 2 +- doc/man/salt-cloud.1 | 2 +- doc/man/salt-cp.1 | 2 +- doc/man/salt-key.1 | 2 +- doc/man/salt-master.1 | 2 +- doc/man/salt-minion.1 | 2 +- doc/man/salt-proxy.1 | 2 +- doc/man/salt-run.1 | 2 +- doc/man/salt-ssh.1 | 2 +- doc/man/salt-syndic.1 | 2 +- doc/man/salt.1 | 2 +- doc/man/salt.7 | 39 ++++++++++++++++++++----------- doc/man/spm.1 | 2 +- doc/topics/releases/3005.4.rst | 17 ++++++++++++++ 20 files changed, 69 insertions(+), 31 deletions(-) delete mode 100644 changelog/65267.security delete mode 100644 changelog/65334.security delete mode 100644 changelog/65383.security delete mode 100644 changelog/cve-2023-34049.security create mode 100644 doc/topics/releases/3005.4.rst diff --git a/CHANGELOG.md b/CHANGELOG.md index f9fca0d973f..221549c4168 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,19 @@ Versions are `MAJOR.PATCH`. # Changelog +Salt v3005.4 (2023-10-16) +========================= + +Security +-------- + +- Fix CVE-2023-34049 by ensuring we do not use a predictable name for the script and correctly check returncode of scp command. + This only impacts salt-ssh users using the pre-flight option. (cve-2023-34049) +- Bump to `cryptography==41.0.4` due to https://github.com/advisories/GHSA-v8gr-m533-ghj9 (#65267) +- Bump to `urllib3==1.26.17` or `urllib3==2.0.6` due to https://github.com/advisories/GHSA-v845-jxx5-vc9f (#65334) +- Bump to `gitpython==3.1.37` due to https://github.com/advisories/GHSA-cwvm-v4w8-q58c (#65383) + + ## Salt v3005.3 (2023-09-14) ### Fixed diff --git a/changelog/65267.security b/changelog/65267.security deleted file mode 100644 index 15588570ad6..00000000000 --- a/changelog/65267.security +++ /dev/null @@ -1 +0,0 @@ -Bump to `cryptography==41.0.4` due to https://github.com/advisories/GHSA-v8gr-m533-ghj9 diff --git a/changelog/65334.security b/changelog/65334.security deleted file mode 100644 index 9f1e2ecb0a8..00000000000 --- a/changelog/65334.security +++ /dev/null @@ -1 +0,0 @@ -Bump to `urllib3==1.26.17` or `urllib3==2.0.6` due to https://github.com/advisories/GHSA-v845-jxx5-vc9f diff --git a/changelog/65383.security b/changelog/65383.security deleted file mode 100644 index d7a4d86f94d..00000000000 --- a/changelog/65383.security +++ /dev/null @@ -1 +0,0 @@ -Bump to `gitpython==3.1.37` due to https://github.com/advisories/GHSA-cwvm-v4w8-q58c diff --git a/changelog/cve-2023-34049.security b/changelog/cve-2023-34049.security deleted file mode 100644 index 6b0ca190a27..00000000000 --- a/changelog/cve-2023-34049.security +++ /dev/null @@ -1,2 +0,0 @@ -Fix CVE-2023-34049 by ensuring we do not use a predictable name for the script and correctly check returncode of scp command. -This only impacts salt-ssh users using the pre-flight option. diff --git a/doc/man/salt-api.1 b/doc/man/salt-api.1 index c42435a5ec1..f93a4808031 100644 --- a/doc/man/salt-api.1 +++ b/doc/man/salt-api.1 @@ -1,6 +1,6 @@ .\" Man page generated from reStructuredText. . -.TH "SALT-API" "1" "Sep 14, 2023" "3005" "Salt" +.TH "SALT-API" "1" "Oct 16, 2023" "3005" "Salt" .SH NAME salt-api \- salt-api Command . diff --git a/doc/man/salt-call.1 b/doc/man/salt-call.1 index d6778f60f25..2a1ec1051c5 100644 --- a/doc/man/salt-call.1 +++ b/doc/man/salt-call.1 @@ -1,6 +1,6 @@ .\" Man page generated from reStructuredText. . -.TH "SALT-CALL" "1" "Sep 14, 2023" "3005" "Salt" +.TH "SALT-CALL" "1" "Oct 16, 2023" "3005" "Salt" .SH NAME salt-call \- salt-call Documentation . diff --git a/doc/man/salt-cloud.1 b/doc/man/salt-cloud.1 index 54690b7655c..d2906e9ad33 100644 --- a/doc/man/salt-cloud.1 +++ b/doc/man/salt-cloud.1 @@ -1,6 +1,6 @@ .\" Man page generated from reStructuredText. . -.TH "SALT-CLOUD" "1" "Sep 14, 2023" "3005" "Salt" +.TH "SALT-CLOUD" "1" "Oct 16, 2023" "3005" "Salt" .SH NAME salt-cloud \- Salt Cloud Command . diff --git a/doc/man/salt-cp.1 b/doc/man/salt-cp.1 index 1f03be91abe..1c342aa60c0 100644 --- a/doc/man/salt-cp.1 +++ b/doc/man/salt-cp.1 @@ -1,6 +1,6 @@ .\" Man page generated from reStructuredText. . -.TH "SALT-CP" "1" "Sep 14, 2023" "3005" "Salt" +.TH "SALT-CP" "1" "Oct 16, 2023" "3005" "Salt" .SH NAME salt-cp \- salt-cp Documentation . diff --git a/doc/man/salt-key.1 b/doc/man/salt-key.1 index 568a2fd6396..978fa8f106a 100644 --- a/doc/man/salt-key.1 +++ b/doc/man/salt-key.1 @@ -1,6 +1,6 @@ .\" Man page generated from reStructuredText. . -.TH "SALT-KEY" "1" "Sep 14, 2023" "3005" "Salt" +.TH "SALT-KEY" "1" "Oct 16, 2023" "3005" "Salt" .SH NAME salt-key \- salt-key Documentation . diff --git a/doc/man/salt-master.1 b/doc/man/salt-master.1 index 86731be2685..e22e558d2ef 100644 --- a/doc/man/salt-master.1 +++ b/doc/man/salt-master.1 @@ -1,6 +1,6 @@ .\" Man page generated from reStructuredText. . -.TH "SALT-MASTER" "1" "Sep 14, 2023" "3005" "Salt" +.TH "SALT-MASTER" "1" "Oct 16, 2023" "3005" "Salt" .SH NAME salt-master \- salt-master Documentation . diff --git a/doc/man/salt-minion.1 b/doc/man/salt-minion.1 index b53b93500d0..8cccf72a077 100644 --- a/doc/man/salt-minion.1 +++ b/doc/man/salt-minion.1 @@ -1,6 +1,6 @@ .\" Man page generated from reStructuredText. . -.TH "SALT-MINION" "1" "Sep 14, 2023" "3005" "Salt" +.TH "SALT-MINION" "1" "Oct 16, 2023" "3005" "Salt" .SH NAME salt-minion \- salt-minion Documentation . diff --git a/doc/man/salt-proxy.1 b/doc/man/salt-proxy.1 index b8e82cad1c0..cefa2152540 100644 --- a/doc/man/salt-proxy.1 +++ b/doc/man/salt-proxy.1 @@ -1,6 +1,6 @@ .\" Man page generated from reStructuredText. . -.TH "SALT-PROXY" "1" "Sep 14, 2023" "3005" "Salt" +.TH "SALT-PROXY" "1" "Oct 16, 2023" "3005" "Salt" .SH NAME salt-proxy \- salt-proxy Documentation . diff --git a/doc/man/salt-run.1 b/doc/man/salt-run.1 index 02b286b287e..f710a86474d 100644 --- a/doc/man/salt-run.1 +++ b/doc/man/salt-run.1 @@ -1,6 +1,6 @@ .\" Man page generated from reStructuredText. . -.TH "SALT-RUN" "1" "Sep 14, 2023" "3005" "Salt" +.TH "SALT-RUN" "1" "Oct 16, 2023" "3005" "Salt" .SH NAME salt-run \- salt-run Documentation . diff --git a/doc/man/salt-ssh.1 b/doc/man/salt-ssh.1 index 98a488f2b08..f4c26cb5d55 100644 --- a/doc/man/salt-ssh.1 +++ b/doc/man/salt-ssh.1 @@ -1,6 +1,6 @@ .\" Man page generated from reStructuredText. . -.TH "SALT-SSH" "1" "Sep 14, 2023" "3005" "Salt" +.TH "SALT-SSH" "1" "Oct 16, 2023" "3005" "Salt" .SH NAME salt-ssh \- salt-ssh Documentation . diff --git a/doc/man/salt-syndic.1 b/doc/man/salt-syndic.1 index 19ee5394518..7c981e737a9 100644 --- a/doc/man/salt-syndic.1 +++ b/doc/man/salt-syndic.1 @@ -1,6 +1,6 @@ .\" Man page generated from reStructuredText. . -.TH "SALT-SYNDIC" "1" "Sep 14, 2023" "3005" "Salt" +.TH "SALT-SYNDIC" "1" "Oct 16, 2023" "3005" "Salt" .SH NAME salt-syndic \- salt-syndic Documentation . diff --git a/doc/man/salt.1 b/doc/man/salt.1 index 2302acd4654..5ee91d6afc9 100644 --- a/doc/man/salt.1 +++ b/doc/man/salt.1 @@ -1,6 +1,6 @@ .\" Man page generated from reStructuredText. . -.TH "SALT" "1" "Sep 14, 2023" "3005" "Salt" +.TH "SALT" "1" "Oct 16, 2023" "3005" "Salt" .SH NAME salt \- salt . diff --git a/doc/man/salt.7 b/doc/man/salt.7 index 295694bb977..2718ffd2bfd 100644 --- a/doc/man/salt.7 +++ b/doc/man/salt.7 @@ -1,6 +1,6 @@ .\" Man page generated from reStructuredText. . -.TH "SALT" "7" "Sep 14, 2023" "3005" "Salt" +.TH "SALT" "7" "Oct 16, 2023" "3005" "Salt" .SH NAME salt \- Salt Documentation . @@ -151127,7 +151127,7 @@ salt \(aq*\(aq cmd.powershell_all "dir mydirectory" force_list=True .UNINDENT .INDENT 0.0 .TP -.B salt.modules.cmdmod.retcode(cmd, cwd=None, stdin=None, runas=None, group=None, shell=\(aq/usr/bin/fish\(aq, python_shell=None, env=None, clean_env=False, template=None, umask=None, output_encoding=None, output_loglevel=\(aqdebug\(aq, log_callback=None, timeout=None, reset_system_locale=True, ignore_retcode=False, saltenv=None, use_vt=False, password=None, success_retcodes=None, success_stdout=None, success_stderr=None, **kwargs) +.B salt.modules.cmdmod.retcode(cmd, cwd=None, stdin=None, runas=None, group=None, shell=\(aq/bin/zsh\(aq, python_shell=None, env=None, clean_env=False, template=None, umask=None, output_encoding=None, output_loglevel=\(aqdebug\(aq, log_callback=None, timeout=None, reset_system_locale=True, ignore_retcode=False, saltenv=None, use_vt=False, password=None, success_retcodes=None, success_stdout=None, success_stderr=None, **kwargs) Execute a shell command and return the command\(aqs return code. .INDENT 7.0 .TP @@ -151386,7 +151386,7 @@ salt \(aq*\(aq cmd.retcode "grep f" stdin=\(aqone\entwo\enthree\enfour\enfive\en .UNINDENT .INDENT 0.0 .TP -.B salt.modules.cmdmod.run(cmd, cwd=None, stdin=None, runas=None, group=None, shell=\(aq/usr/bin/fish\(aq, python_shell=None, env=None, clean_env=False, template=None, rstrip=True, umask=None, output_encoding=None, output_loglevel=\(aqdebug\(aq, log_callback=None, hide_output=False, timeout=None, reset_system_locale=True, ignore_retcode=False, saltenv=None, use_vt=False, bg=False, password=None, encoded_cmd=False, raise_err=False, prepend_path=None, success_retcodes=None, success_stdout=None, success_stderr=None, **kwargs) +.B salt.modules.cmdmod.run(cmd, cwd=None, stdin=None, runas=None, group=None, shell=\(aq/bin/zsh\(aq, python_shell=None, env=None, clean_env=False, template=None, rstrip=True, umask=None, output_encoding=None, output_loglevel=\(aqdebug\(aq, log_callback=None, hide_output=False, timeout=None, reset_system_locale=True, ignore_retcode=False, saltenv=None, use_vt=False, bg=False, password=None, encoded_cmd=False, raise_err=False, prepend_path=None, success_retcodes=None, success_stdout=None, success_stderr=None, **kwargs) Execute the passed command and return the output as a string .INDENT 7.0 .TP @@ -151767,7 +151767,7 @@ salt \(aq*\(aq cmd.run cmd=\(aqsed \-e s/=/:/g\(aq .UNINDENT .INDENT 0.0 .TP -.B salt.modules.cmdmod.run_all(cmd, cwd=None, stdin=None, runas=None, group=None, shell=\(aq/usr/bin/fish\(aq, python_shell=None, env=None, clean_env=False, template=None, rstrip=True, umask=None, output_encoding=None, output_loglevel=\(aqdebug\(aq, log_callback=None, hide_output=False, timeout=None, reset_system_locale=True, ignore_retcode=False, saltenv=None, use_vt=False, redirect_stderr=False, password=None, encoded_cmd=False, prepend_path=None, success_retcodes=None, success_stdout=None, success_stderr=None, **kwargs) +.B salt.modules.cmdmod.run_all(cmd, cwd=None, stdin=None, runas=None, group=None, shell=\(aq/bin/zsh\(aq, python_shell=None, env=None, clean_env=False, template=None, rstrip=True, umask=None, output_encoding=None, output_loglevel=\(aqdebug\(aq, log_callback=None, hide_output=False, timeout=None, reset_system_locale=True, ignore_retcode=False, saltenv=None, use_vt=False, redirect_stderr=False, password=None, encoded_cmd=False, prepend_path=None, success_retcodes=None, success_stdout=None, success_stderr=None, **kwargs) Execute the passed command and return a dict of return data .INDENT 7.0 .TP @@ -152110,7 +152110,7 @@ salt \(aq*\(aq cmd.run_all "grep f" stdin=\(aqone\entwo\enthree\enfour\enfive\en .UNINDENT .INDENT 0.0 .TP -.B salt.modules.cmdmod.run_bg(cmd, cwd=None, runas=None, group=None, shell=\(aq/usr/bin/fish\(aq, python_shell=None, env=None, clean_env=False, template=None, umask=None, timeout=None, output_encoding=None, output_loglevel=\(aqdebug\(aq, log_callback=None, reset_system_locale=True, ignore_retcode=False, saltenv=None, password=None, prepend_path=None, success_retcodes=None, success_stdout=None, success_stderr=None, **kwargs) +.B salt.modules.cmdmod.run_bg(cmd, cwd=None, runas=None, group=None, shell=\(aq/bin/zsh\(aq, python_shell=None, env=None, clean_env=False, template=None, umask=None, timeout=None, output_encoding=None, output_loglevel=\(aqdebug\(aq, log_callback=None, reset_system_locale=True, ignore_retcode=False, saltenv=None, password=None, prepend_path=None, success_retcodes=None, success_stdout=None, success_stderr=None, **kwargs) New in version 2016.3.0. .sp @@ -152411,7 +152411,7 @@ salt \(aq*\(aq cmd.run_bg cmd=\(aqls \-lR / | sed \-e s/=/:/g > /tmp/dontwait\(a .UNINDENT .INDENT 0.0 .TP -.B salt.modules.cmdmod.run_chroot(root, cmd, cwd=None, stdin=None, runas=None, group=None, shell=\(aq/usr/bin/fish\(aq, python_shell=True, binds=None, env=None, clean_env=False, template=None, rstrip=True, umask=None, output_encoding=None, output_loglevel=\(aqquiet\(aq, log_callback=None, hide_output=False, timeout=None, reset_system_locale=True, ignore_retcode=False, saltenv=None, use_vt=False, bg=False, success_retcodes=None, success_stdout=None, success_stderr=None, **kwargs) +.B salt.modules.cmdmod.run_chroot(root, cmd, cwd=None, stdin=None, runas=None, group=None, shell=\(aq/bin/zsh\(aq, python_shell=True, binds=None, env=None, clean_env=False, template=None, rstrip=True, umask=None, output_encoding=None, output_loglevel=\(aqquiet\(aq, log_callback=None, hide_output=False, timeout=None, reset_system_locale=True, ignore_retcode=False, saltenv=None, use_vt=False, bg=False, success_retcodes=None, success_stdout=None, success_stderr=None, **kwargs) New in version 2014.7.0. .sp @@ -152632,7 +152632,7 @@ salt \(aq*\(aq cmd.run_chroot /var/lib/lxc/container_name/rootfs \(aqsh /tmp/boo .UNINDENT .INDENT 0.0 .TP -.B salt.modules.cmdmod.run_stderr(cmd, cwd=None, stdin=None, runas=None, group=None, shell=\(aq/usr/bin/fish\(aq, python_shell=None, env=None, clean_env=False, template=None, rstrip=True, umask=None, output_encoding=None, output_loglevel=\(aqdebug\(aq, log_callback=None, hide_output=False, timeout=None, reset_system_locale=True, ignore_retcode=False, saltenv=None, use_vt=False, password=None, prepend_path=None, success_retcodes=None, success_stdout=None, success_stderr=None, **kwargs) +.B salt.modules.cmdmod.run_stderr(cmd, cwd=None, stdin=None, runas=None, group=None, shell=\(aq/bin/zsh\(aq, python_shell=None, env=None, clean_env=False, template=None, rstrip=True, umask=None, output_encoding=None, output_loglevel=\(aqdebug\(aq, log_callback=None, hide_output=False, timeout=None, reset_system_locale=True, ignore_retcode=False, saltenv=None, use_vt=False, password=None, prepend_path=None, success_retcodes=None, success_stdout=None, success_stderr=None, **kwargs) Execute a command and only return the standard error .INDENT 7.0 .TP @@ -152909,7 +152909,7 @@ salt \(aq*\(aq cmd.run_stderr "grep f" stdin=\(aqone\entwo\enthree\enfour\enfive .UNINDENT .INDENT 0.0 .TP -.B salt.modules.cmdmod.run_stdout(cmd, cwd=None, stdin=None, runas=None, group=None, shell=\(aq/usr/bin/fish\(aq, python_shell=None, env=None, clean_env=False, template=None, rstrip=True, umask=None, output_encoding=None, output_loglevel=\(aqdebug\(aq, log_callback=None, hide_output=False, timeout=None, reset_system_locale=True, ignore_retcode=False, saltenv=None, use_vt=False, password=None, prepend_path=None, success_retcodes=None, success_stdout=None, success_stderr=None, **kwargs) +.B salt.modules.cmdmod.run_stdout(cmd, cwd=None, stdin=None, runas=None, group=None, shell=\(aq/bin/zsh\(aq, python_shell=None, env=None, clean_env=False, template=None, rstrip=True, umask=None, output_encoding=None, output_loglevel=\(aqdebug\(aq, log_callback=None, hide_output=False, timeout=None, reset_system_locale=True, ignore_retcode=False, saltenv=None, use_vt=False, password=None, prepend_path=None, success_retcodes=None, success_stdout=None, success_stderr=None, **kwargs) Execute a command, and only return the standard out .INDENT 7.0 .TP @@ -153186,7 +153186,7 @@ salt \(aq*\(aq cmd.run_stdout "grep f" stdin=\(aqone\entwo\enthree\enfour\enfive .UNINDENT .INDENT 0.0 .TP -.B salt.modules.cmdmod.script(source, args=None, cwd=None, stdin=None, runas=None, group=None, shell=\(aq/usr/bin/fish\(aq, python_shell=None, env=None, template=None, umask=None, output_encoding=None, output_loglevel=\(aqdebug\(aq, log_callback=None, hide_output=False, timeout=None, reset_system_locale=True, saltenv=None, use_vt=False, bg=False, password=None, success_retcodes=None, success_stdout=None, success_stderr=None, **kwargs) +.B salt.modules.cmdmod.script(source, args=None, cwd=None, stdin=None, runas=None, group=None, shell=\(aq/bin/zsh\(aq, python_shell=None, env=None, template=None, umask=None, output_encoding=None, output_loglevel=\(aqdebug\(aq, log_callback=None, hide_output=False, timeout=None, reset_system_locale=True, saltenv=None, use_vt=False, bg=False, password=None, success_retcodes=None, success_stdout=None, success_stderr=None, **kwargs) Download a script from a remote location and execute the script locally. The script can be located on the salt master file server or on an HTTP/FTP server. @@ -153462,7 +153462,7 @@ salt \(aq*\(aq cmd.script salt://scripts/runme.sh stdin=\(aqone\entwo\enthree\en .UNINDENT .INDENT 0.0 .TP -.B salt.modules.cmdmod.script_retcode(source, args=None, cwd=None, stdin=None, runas=None, group=None, shell=\(aq/usr/bin/fish\(aq, python_shell=None, env=None, template=\(aqjinja\(aq, umask=None, timeout=None, reset_system_locale=True, saltenv=None, output_encoding=None, output_loglevel=\(aqdebug\(aq, log_callback=None, use_vt=False, password=None, success_retcodes=None, success_stdout=None, success_stderr=None, **kwargs) +.B salt.modules.cmdmod.script_retcode(source, args=None, cwd=None, stdin=None, runas=None, group=None, shell=\(aq/bin/zsh\(aq, python_shell=None, env=None, template=\(aqjinja\(aq, umask=None, timeout=None, reset_system_locale=True, saltenv=None, output_encoding=None, output_loglevel=\(aqdebug\(aq, log_callback=None, use_vt=False, password=None, success_retcodes=None, success_stdout=None, success_stderr=None, **kwargs) Download a script from a remote location and execute the script locally. The script can be located on the salt master file server or on an HTTP/FTP server. @@ -153687,7 +153687,7 @@ salt \(aq*\(aq cmd.script_retcode salt://scripts/runme.sh stdin=\(aqone\entwo\en .UNINDENT .INDENT 0.0 .TP -.B salt.modules.cmdmod.shell(cmd, cwd=None, stdin=None, runas=None, group=None, shell=\(aq/usr/bin/fish\(aq, env=None, clean_env=False, template=None, rstrip=True, umask=None, output_encoding=None, output_loglevel=\(aqdebug\(aq, log_callback=None, hide_output=False, timeout=None, reset_system_locale=True, ignore_retcode=False, saltenv=None, use_vt=False, bg=False, password=None, prepend_path=None, success_retcodes=None, success_stdout=None, success_stderr=None, **kwargs) +.B salt.modules.cmdmod.shell(cmd, cwd=None, stdin=None, runas=None, group=None, shell=\(aq/bin/zsh\(aq, env=None, clean_env=False, template=None, rstrip=True, umask=None, output_encoding=None, output_loglevel=\(aqdebug\(aq, log_callback=None, hide_output=False, timeout=None, reset_system_locale=True, ignore_retcode=False, saltenv=None, use_vt=False, bg=False, password=None, prepend_path=None, success_retcodes=None, success_stdout=None, success_stderr=None, **kwargs) Execute the passed command and return the output as a string. .sp New in version 2015.5.0. @@ -192875,7 +192875,7 @@ Passes through all the parameters described in the \fI\%utils.http.query function\fP: .INDENT 7.0 .TP -.B salt.utils.http.query(url, method=\(aqGET\(aq, params=None, data=None, data_file=None, header_dict=None, header_list=None, header_file=None, username=None, password=None, auth=None, decode=False, decode_type=\(aqauto\(aq, status=False, headers=False, text=False, cookies=None, cookie_jar=None, cookie_format=\(aqlwp\(aq, persist_session=False, session_cookie_jar=None, data_render=False, data_renderer=None, header_render=False, header_renderer=None, template_dict=None, test=False, test_url=None, node=\(aqminion\(aq, port=80, opts=None, backend=None, ca_bundle=None, verify_ssl=None, cert=None, text_out=None, headers_out=None, decode_out=None, stream=False, streaming_callback=None, header_callback=None, handle=False, agent=\(aqSalt/3005.2+47.gf78d44cb11\(aq, hide_fields=None, raise_error=True, formdata=False, formdata_fieldname=None, formdata_filename=None, decode_body=True, **kwargs) +.B salt.utils.http.query(url, method=\(aqGET\(aq, params=None, data=None, data_file=None, header_dict=None, header_list=None, header_file=None, username=None, password=None, auth=None, decode=False, decode_type=\(aqauto\(aq, status=False, headers=False, text=False, cookies=None, cookie_jar=None, cookie_format=\(aqlwp\(aq, persist_session=False, session_cookie_jar=None, data_render=False, data_renderer=None, header_render=False, header_renderer=None, template_dict=None, test=False, test_url=None, node=\(aqminion\(aq, port=80, opts=None, backend=None, ca_bundle=None, verify_ssl=None, cert=None, text_out=None, headers_out=None, decode_out=None, stream=False, streaming_callback=None, header_callback=None, handle=False, agent=\(aqSalt/3005.3+25.g1184c5ebfa\(aq, hide_fields=None, raise_error=True, formdata=False, formdata_fieldname=None, formdata_filename=None, decode_body=True, **kwargs) Query a resource, and decode the return data .UNINDENT .INDENT 7.0 @@ -448748,7 +448748,7 @@ installed2 .UNINDENT .INDENT 0.0 .TP -.B salt.states.zcbuildout.installed(name, config=\(aqbuildout.cfg\(aq, quiet=False, parts=None, user=None, env=(), buildout_ver=None, test_release=False, distribute=None, new_st=None, offline=False, newest=False, python=\(aq/home/vampas/projects/SaltStack/salt/branches/freeze/.nox/docs\-man\-compress\-true\-update\-true\-clean\-true/bin/python\(aq, debug=False, verbose=False, unless=None, onlyif=None, use_vt=False, loglevel=\(aqdebug\(aq, **kwargs) +.B salt.states.zcbuildout.installed(name, config=\(aqbuildout.cfg\(aq, quiet=False, parts=None, user=None, env=(), buildout_ver=None, test_release=False, distribute=None, new_st=None, offline=False, newest=False, python=\(aq/home/ch3ll/git/salt/.nox/docs\-man\-compress\-false\-update\-true\-clean\-true/bin/python\(aq, debug=False, verbose=False, unless=None, onlyif=None, use_vt=False, loglevel=\(aqdebug\(aq, **kwargs) Install buildout in a specific directory .sp It is a thin wrapper to modules.buildout.buildout @@ -468143,6 +468143,19 @@ Bump to \fIcertifi==2023.07.22\fP due to \fI\%https://github.com/advisories/GHSA .sp Python 3.5 cannot get the updated requirements since certifi no longer supports this python version (#64720) .UNINDENT +.SS Salt 3005.3 Release Notes +.sp +Version 3005.3 is a Bug fix release for 3005\&. +.SS Changed +.INDENT 0.0 +.IP \(bu 2 +Fix __env__ and improve cache cleaning see more info at pull #65017. (#65002) +.UNINDENT +.SS Security +.INDENT 0.0 +.IP \(bu 2 +Update to \fIgitpython>=3.1.35\fP due to \fI\%https://github.com/advisories/GHSA\-wfm5\-v35h\-vwf4\fP and \fI\%https://github.com/advisories/GHSA\-cwvm\-v4w8\-q58c\fP (#65167) +.UNINDENT .SS Salt 3004 Release Notes \- Codename Silicon .SS New Features .SS Transactional System Support (MicroOS) diff --git a/doc/man/spm.1 b/doc/man/spm.1 index a5d2a65458c..a5be93e66a2 100644 --- a/doc/man/spm.1 +++ b/doc/man/spm.1 @@ -1,6 +1,6 @@ .\" Man page generated from reStructuredText. . -.TH "SPM" "1" "Sep 14, 2023" "3005" "Salt" +.TH "SPM" "1" "Oct 16, 2023" "3005" "Salt" .SH NAME spm \- Salt Package Manager Command . diff --git a/doc/topics/releases/3005.4.rst b/doc/topics/releases/3005.4.rst new file mode 100644 index 00000000000..18f904e74a2 --- /dev/null +++ b/doc/topics/releases/3005.4.rst @@ -0,0 +1,17 @@ +.. _release-3005-4: + +========================= +Salt 3005.4 Release Notes +========================= + +Version 3005.4 is a CVE security fix release for :ref:`3005 `. + + +Security +-------- + +- Fix CVE-2023-34049 by ensuring we do not use a predictable name for the script and correctly check returncode of scp command. + This only impacts salt-ssh users using the pre-flight option. (cve-2023-34049) +- Bump to `cryptography==41.0.4` due to https://github.com/advisories/GHSA-v8gr-m533-ghj9 (#65267) +- Bump to `urllib3==1.26.17` or `urllib3==2.0.6` due to https://github.com/advisories/GHSA-v845-jxx5-vc9f (#65334) +- Bump to `gitpython==3.1.37` due to https://github.com/advisories/GHSA-cwvm-v4w8-q58c (#65383) From 2dd3c8cd0c5292d60844379340f2bca19864a70f Mon Sep 17 00:00:00 2001 From: David Murphy < dmurphy@saltstack.com> Date: Tue, 3 Oct 2023 17:43:18 -0600 Subject: [PATCH 053/153] Increase code coverare for salt/client/mixins.py --- tests/pytests/integration/client/test_runner.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/tests/pytests/integration/client/test_runner.py b/tests/pytests/integration/client/test_runner.py index 3303277da81..e0b6cb400f5 100644 --- a/tests/pytests/integration/client/test_runner.py +++ b/tests/pytests/integration/client/test_runner.py @@ -1,3 +1,5 @@ +import logging + import pytest import salt.auth @@ -10,6 +12,8 @@ pytestmark = [ pytest.mark.windows_whitelisted, ] +log = logging.getLogger(__name__) + @pytest.fixture def client(client_config): @@ -150,3 +154,14 @@ def test_invalid_kwargs_are_ignored(client, auth_creds): ret = client.cmd_sync(low.copy()) assert ret assert ret[0] == "foo" + + +def test_get_docs(client, auth_creds): + ret = client.get_docs(arg="*") + assert "auth.del_token" in ret + assert "auth.mk_token" in ret + assert "cache.clear_pillar" in ret + assert "cache.grains" in ret + assert "state.soft_kill" in ret + assert "virt.start" in ret + assert "test.arg" in ret From 5765a8b4f633e1745b33183aea0ba14de81b0b79 Mon Sep 17 00:00:00 2001 From: David Murphy < dmurphy@saltstack.com> Date: Wed, 4 Oct 2023 09:43:10 -0600 Subject: [PATCH 054/153] Remove left-over logging from debugging --- tests/pytests/integration/client/test_runner.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/tests/pytests/integration/client/test_runner.py b/tests/pytests/integration/client/test_runner.py index e0b6cb400f5..adb2cd46449 100644 --- a/tests/pytests/integration/client/test_runner.py +++ b/tests/pytests/integration/client/test_runner.py @@ -1,5 +1,3 @@ -import logging - import pytest import salt.auth @@ -12,8 +10,6 @@ pytestmark = [ pytest.mark.windows_whitelisted, ] -log = logging.getLogger(__name__) - @pytest.fixture def client(client_config): From f5e4c1b886f471c8dfb1349ea29dc37c3e57d19a Mon Sep 17 00:00:00 2001 From: David Murphy Date: Thu, 5 Oct 2023 17:02:49 -0600 Subject: [PATCH 055/153] Update tests/pytests/integration/client/test_runner.py Co-authored-by: Megan Wilhite --- tests/pytests/integration/client/test_runner.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/pytests/integration/client/test_runner.py b/tests/pytests/integration/client/test_runner.py index adb2cd46449..74a25cb1353 100644 --- a/tests/pytests/integration/client/test_runner.py +++ b/tests/pytests/integration/client/test_runner.py @@ -152,7 +152,7 @@ def test_invalid_kwargs_are_ignored(client, auth_creds): assert ret[0] == "foo" -def test_get_docs(client, auth_creds): +def test_get_docs(client): ret = client.get_docs(arg="*") assert "auth.del_token" in ret assert "auth.mk_token" in ret From 84d6c962f6edd4c232d0d41d232a8fdb8b5533c0 Mon Sep 17 00:00:00 2001 From: Pedro Algarvio Date: Tue, 24 Oct 2023 12:36:27 +0100 Subject: [PATCH 056/153] Something changes on GH's Mac's, switch package name Signed-off-by: Pedro Algarvio --- tests/pytests/functional/modules/test_mac_pkgutil.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/pytests/functional/modules/test_mac_pkgutil.py b/tests/pytests/functional/modules/test_mac_pkgutil.py index 5ce546d776c..12a07726ad7 100644 --- a/tests/pytests/functional/modules/test_mac_pkgutil.py +++ b/tests/pytests/functional/modules/test_mac_pkgutil.py @@ -56,6 +56,8 @@ def macports_package_url(macports_package_filename): @pytest.fixture(scope="module") def pkg_name(grains): + if grains["osrelease_info"][0] >= 12: + return "com.apple.pkg.XcodeSystemResources" if grains["osrelease_info"][0] >= 11: return "com.apple.pkg.InstallAssistant.macOSBigSur" if grains["osrelease_info"][:2] == (10, 15): From 134ea53a43354829676af2bcf61fae84c8017aa7 Mon Sep 17 00:00:00 2001 From: twangboy Date: Mon, 16 Oct 2023 15:43:04 -0600 Subject: [PATCH 057/153] Fix issue when policy dirs are missing --- salt/modules/win_file.py | 51 +++-- tests/pytests/unit/modules/test_win_file.py | 211 ++++++++++++++++++++ 2 files changed, 243 insertions(+), 19 deletions(-) diff --git a/salt/modules/win_file.py b/salt/modules/win_file.py index d02d4589f2f..2efb15d0c24 100644 --- a/salt/modules/win_file.py +++ b/salt/modules/win_file.py @@ -16,8 +16,10 @@ import stat import sys import tempfile +import salt.utils.files import salt.utils.path import salt.utils.platform +import salt.utils.user from salt.exceptions import CommandExecutionError, SaltInvocationError from salt.modules.file import ( __clean_tmp, @@ -107,6 +109,15 @@ try: except ImportError: HAS_WINDOWS_MODULES = False +HAS_WIN_DACL = False +try: + if salt.utils.platform.is_windows(): + import salt.utils.win_dacl + + HAS_WIN_DACL = True +except ImportError: + HAS_WIN_DACL = False + if salt.utils.platform.is_windows(): if HAS_WINDOWS_MODULES: # namespace functions from file.py @@ -194,6 +205,8 @@ def __virtual__(): """ if not salt.utils.platform.is_windows() or not HAS_WINDOWS_MODULES: return False, "Module win_file: Missing Win32 modules" + if not HAS_WIN_DACL: + return False, "Module win_file: Unable to load salt.utils.win_dacl" return __virtualname__ @@ -305,7 +318,7 @@ def group_to_gid(group): if group is None: return "" - return __utils__["dacl.get_sid_string"](group) + return salt.utils.win_dacl.get_sid_string(group) def get_pgid(path, follow_symlinks=True): @@ -346,8 +359,8 @@ def get_pgid(path, follow_symlinks=True): if follow_symlinks and sys.getwindowsversion().major >= 6: path = _resolve_symlink(path) - group_name = __utils__["dacl.get_primary_group"](path) - return __utils__["dacl.get_sid_string"](group_name) + group_name = salt.utils.win_dacl.get_primary_group(path) + return salt.utils.win_dacl.get_sid_string(group_name) def get_pgroup(path, follow_symlinks=True): @@ -498,7 +511,7 @@ def uid_to_user(uid): if uid is None or uid == "": return "" - return __utils__["dacl.get_name"](uid) + return salt.utils.win_dacl.get_name(uid) def user_to_uid(user): @@ -518,9 +531,9 @@ def user_to_uid(user): salt '*' file.user_to_uid myusername """ if user is None: - user = __utils__["user.get_user"]() + user = salt.utils.user.get_user() - return __utils__["dacl.get_sid_string"](user) + return salt.utils.win_dacl.get_sid_string(user) def get_uid(path, follow_symlinks=True): @@ -558,8 +571,8 @@ def get_uid(path, follow_symlinks=True): if follow_symlinks and sys.getwindowsversion().major >= 6: path = _resolve_symlink(path) - owner_sid = __utils__["dacl.get_owner"](path) - return __utils__["dacl.get_sid_string"](owner_sid) + owner_sid = salt.utils.win_dacl.get_owner(path) + return salt.utils.win_dacl.get_sid_string(owner_sid) def get_user(path, follow_symlinks=True): @@ -597,7 +610,7 @@ def get_user(path, follow_symlinks=True): if follow_symlinks and sys.getwindowsversion().major >= 6: path = _resolve_symlink(path) - return __utils__["dacl.get_owner"](path) + return salt.utils.win_dacl.get_owner(path) def get_mode(path): @@ -735,9 +748,9 @@ def chown(path, user, group=None, pgroup=None, follow_symlinks=True): if not os.path.exists(path): raise CommandExecutionError("Path not found: {}".format(path)) - __utils__["dacl.set_owner"](path, user) + salt.utils.win_dacl.set_owner(path, user) if pgroup: - __utils__["dacl.set_primary_group"](path, pgroup) + salt.utils.win_dacl.set_primary_group(path, pgroup) return True @@ -767,7 +780,7 @@ def chpgrp(path, group): salt '*' file.chpgrp c:\\temp\\test.txt Administrators salt '*' file.chpgrp c:\\temp\\test.txt "'None'" """ - return __utils__["dacl.set_primary_group"](path, group) + return salt.utils.win_dacl.set_primary_group(path, group) def chgrp(path, group): @@ -802,7 +815,7 @@ def chgrp(path, group): .. code-block:: bash - salt '*' file.chpgrp c:\\temp\\test.txt administrators + salt '*' file.chgrp c:\\temp\\test.txt administrators """ func_name = "{}.chgrp".format(__virtualname__) if __opts__.get("fun", "") == func_name: @@ -871,7 +884,7 @@ def stats(path, hash_type="sha256", follow_symlinks=True): ret["mtime"] = pstat.st_mtime ret["ctime"] = pstat.st_ctime ret["size"] = pstat.st_size - ret["mode"] = __utils__["files.normalize_mode"](oct(stat.S_IMODE(pstat.st_mode))) + ret["mode"] = salt.utils.files.normalize_mode(oct(stat.S_IMODE(pstat.st_mode))) if hash_type: ret["sum"] = get_sum(path, hash_type) ret["type"] = "file" @@ -1503,7 +1516,7 @@ def is_link(path): ) try: - return __utils__["path.islink"](path) + return salt.utils.path.islink(path) except Exception as exc: # pylint: disable=broad-except raise CommandExecutionError(exc) @@ -1594,10 +1607,10 @@ def mkdir( # Set owner if owner: - __utils__["dacl.set_owner"](obj_name=path, principal=owner) + salt.utils.win_dacl.set_owner(obj_name=path, principal=owner) # Set permissions - __utils__["dacl.set_perms"]( + salt.utils.win_dacl.set_perms( obj_name=path, obj_type="file", grant_perms=grant_perms, @@ -1916,7 +1929,7 @@ def check_perms( path = os.path.expanduser(path) - return __utils__["dacl.check_perms"]( + return salt.utils.win_dacl.check_perms( obj_name=path, obj_type="file", ret=ret, @@ -2002,7 +2015,7 @@ def set_perms(path, grant_perms=None, deny_perms=None, inheritance=True, reset=F # Specify advanced attributes with a list salt '*' file.set_perms C:\\Temp\\ "{'jsnuffy': {'perms': ['read_attributes', 'read_ea'], 'applies_to': 'this_folder_only'}}" """ - return __utils__["dacl.set_perms"]( + return salt.utils.win_dacl.set_perms( obj_name=path, obj_type="file", grant_perms=grant_perms, diff --git a/tests/pytests/unit/modules/test_win_file.py b/tests/pytests/unit/modules/test_win_file.py index efcdb31a550..ea0f6a547f3 100644 --- a/tests/pytests/unit/modules/test_win_file.py +++ b/tests/pytests/unit/modules/test_win_file.py @@ -1,13 +1,43 @@ +import os import re import pytest import salt.modules.win_file as win_file +import salt.utils.user +import salt.utils.win_dacl from salt.exceptions import CommandExecutionError +from tests.support.mock import patch pytestmark = [pytest.mark.windows_whitelisted, pytest.mark.skip_unless_on_windows] +@pytest.fixture +def configure_loader_modules(): + return { + win_file: {}, + salt.utils.win_dacl: {}, + } + + +def test__virtual__not_windows(): + with patch("salt.utils.platform.is_windows", autospec=True, return_value=False): + expected = (False, "Module win_file: Missing Win32 modules") + result = win_file.__virtual__() + assert result == expected + with patch("salt.modules.win_file.HAS_WINDOWS_MODULES", False): + expected = (False, "Module win_file: Missing Win32 modules") + result = win_file.__virtual__() + assert result == expected + + +def test__virtual__no_dacl(): + with patch("salt.modules.win_file.HAS_WIN_DACL", False): + expected = (False, "Module win_file: Unable to load salt.utils.win_dacl") + result = win_file.__virtual__() + assert result == expected + + def test__get_version_os(): expected = ["32-bit Windows", "Windows NT"] result = win_file._get_version_os(0x00040004) @@ -56,6 +86,187 @@ def test__get_version_sys(): assert regex.search(result) +def test_get_pgid_error(): + with pytest.raises(CommandExecutionError): + win_file.get_pgid("C:\\Path\\That\\Does\\Not\\Exist.txt") + + +def test_get_pgid(): + """ + We can't know what this value is, so we're just making sure it found + something + """ + result = win_file.get_pgid(os.getenv("COMSPEC")) + assert not result == "" + + +def test_group_to_gid(): + with patch.dict(win_file.__opts__, {}): + result = win_file.group_to_gid("Administrators") + expected = "S-1-5-32-544" + assert result == expected + + +def test_group_to_gid_empty(): + with patch.dict(win_file.__opts__, {}): + result = win_file.group_to_gid("") + expected = "S-1-5-32" + assert result == expected + + +def test_uid_to_user(): + result = win_file.uid_to_user("S-1-5-32-544") + expected = "Administrators" + assert result == expected + + +def test_uid_to_user_empty(): + result = win_file.uid_to_user("") + expected = "" + assert result == expected + + +def test_user_to_uid(): + result = win_file.user_to_uid("Administrator") + expected = salt.utils.win_dacl.get_sid_string("Administrator") + assert result == expected + + +def test_user_to_uid_none(): + result = win_file.user_to_uid(None) + expected = salt.utils.win_dacl.get_sid_string(salt.utils.user.get_user()) + assert result == expected + + +def test_get_uid(): + """ + We can't know what this value is, so we're just making sure it found + something + """ + result = win_file.get_uid(os.getenv("WINDIR")) + assert not result == "" + + +def test_get_uid_error(): + with pytest.raises(CommandExecutionError): + win_file.get_uid("C:\\fake\\path") + + +def test_chown(tmp_path): + test_file = tmp_path / "test_file.txt" + test_file.touch() + win_file.chown(path=str(test_file), user="Administrators", pgroup="Guests") + assert win_file.get_user(str(test_file)) == "Administrators" + assert win_file.get_pgroup(str(test_file)) == "Guests" + + +def test_chpgrp(tmp_path): + test_file = tmp_path / "test_file.txt" + test_file.touch() + win_file.chown(path=str(test_file), user="Administrators", pgroup="Guests") + win_file.chpgrp(path=str(test_file), group="Administrators") + assert win_file.get_pgroup(str(test_file)) == "Administrators" + + +def test_stats_mode(tmp_path): + test_file = tmp_path / "test_file.txt" + test_file.touch() + results = win_file.stats(str(test_file)) + assert results["mode"] == "0666" + + +def test_is_link_true(tmp_path): + test_source = tmp_path / "test_source.txt" + test_link = tmp_path / "test_link.txt" + test_source.touch() + test_link.symlink_to(test_source) + results = win_file.is_link(str(test_link)) + expected = True + assert results == expected + + +def test_is_link_false(tmp_path): + test_file = tmp_path / "test_not_link.txt" + test_file.touch() + results = win_file.is_link(str(test_file)) + expected = False + assert results == expected + + +def test_mkdir(tmp_path): + test_dir = tmp_path / "test_dir" + grant_perms = {"Guests": {"perms": "full_control"}} + win_file.mkdir( + path=str(test_dir), + owner="Administrators", + grant_perms=grant_perms, + ) + owner = win_file.get_user(str(test_dir)) + assert owner == "Administrators" + perms = salt.utils.win_dacl.get_permissions(str(test_dir)) + assert perms["Not Inherited"]["Guests"]["grant"]["permissions"] == "Full control" + + +def test_check_perms(tmp_path): + test_dir = tmp_path / "test_dir" + test_dir.mkdir() + grant_perms = {"Guests": {"perms": "full_control"}} + ret = {} + with patch.dict(salt.utils.win_dacl.__opts__, {"test": False}): + result = win_file.check_perms( + path=str(test_dir), + ret=ret, + owner="Guests", + grant_perms=grant_perms, + ) + + expected = { + "changes": { + "grant_perms": { + "Guests": { + "permissions": "full_control", + }, + }, + "owner": "Guests", + }, + "comment": "", + "name": str(test_dir), + "result": True, + } + + assert result == expected + owner = win_file.get_user(str(test_dir)) + assert owner == "Guests" + perms = salt.utils.win_dacl.get_permissions(str(test_dir)) + assert perms["Not Inherited"]["Guests"]["grant"]["permissions"] == "Full control" + + +def test_set_perms(tmp_path): + test_dir = tmp_path / "test_dir" + test_dir.mkdir() + grant_perms = {"Guests": {"perms": "full_control"}} + win_file.set_perms( + path=str(test_dir), + grant_perms=grant_perms, + ) + perms = salt.utils.win_dacl.get_permissions(str(test_dir)) + assert perms["Not Inherited"]["Guests"]["grant"]["permissions"] == "Full control" + + +def test_get_user(): + """ + We can't know what this value is, so we're just making sure it found + something + """ + result = win_file.get_user(os.getenv("WINDIR")) + assert not result == "" + + +def test_get_user_error(): + with pytest.raises(CommandExecutionError): + win_file.get_user("C:\\fake\\path") + + def test_version_missing_file(): with pytest.raises(CommandExecutionError): win_file.version("C:\\Windows\\bogus.exe") From 636eff5fda14d945e757b9ef1c91e5b7ba95415c Mon Sep 17 00:00:00 2001 From: twangboy Date: Mon, 16 Oct 2023 15:45:00 -0600 Subject: [PATCH 058/153] Add changelog --- changelog/65411.fixed.md | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 changelog/65411.fixed.md diff --git a/changelog/65411.fixed.md b/changelog/65411.fixed.md new file mode 100644 index 00000000000..0500a7364ee --- /dev/null +++ b/changelog/65411.fixed.md @@ -0,0 +1,2 @@ +Fixes an issue setting user or machine policy on Windows when the Group Policy +directory is missing From 1e976cf7353471af7340517e8407e8de4afdc975 Mon Sep 17 00:00:00 2001 From: twangboy Date: Tue, 17 Oct 2023 07:56:09 -0600 Subject: [PATCH 059/153] Fix lint --- salt/modules/win_file.py | 1 + salt/utils/win_dacl.py | 5 +-- .../modules/win_file/test_check_perms.py | 14 +++---- .../states/file/test_directory_win.py | 41 ++++--------------- tests/pytests/functional/states/test_reg.py | 1 - .../functional/utils/win_dacl/test_file.py | 31 +++++++------- .../functional/utils/win_dacl/test_reg.py | 40 +++++++----------- .../modules/file/test_file_block_replace.py | 5 ++- tests/pytests/unit/modules/test_win_file.py | 6 +-- tests/unit/modules/test_heat.py | 6 +-- tests/unit/states/test_heat.py | 6 +-- 11 files changed, 57 insertions(+), 99 deletions(-) diff --git a/salt/modules/win_file.py b/salt/modules/win_file.py index 2efb15d0c24..a7a411c93cc 100644 --- a/salt/modules/win_file.py +++ b/salt/modules/win_file.py @@ -1938,6 +1938,7 @@ def check_perms( deny_perms=deny_perms, inheritance=inheritance, reset=reset, + test_mode=__opts__["test"], ) diff --git a/salt/utils/win_dacl.py b/salt/utils/win_dacl.py index ec16f7a22c6..2e9fe87b811 100644 --- a/salt/utils/win_dacl.py +++ b/salt/utils/win_dacl.py @@ -2349,7 +2349,7 @@ def check_perms( deny_perms=None, inheritance=True, reset=False, - test_mode=None, + test_mode=False, ): """ Check owner and permissions for the passed directory. This function checks @@ -2429,9 +2429,6 @@ def check_perms( } }) """ - if test_mode is None: - test_mode = __opts__["test"] - # Validate obj_type if obj_type.lower() not in flags().obj_type: raise SaltInvocationError('Invalid "obj_type" passed: {}'.format(obj_type)) diff --git a/tests/pytests/functional/modules/win_file/test_check_perms.py b/tests/pytests/functional/modules/win_file/test_check_perms.py index 53e656eab18..7b829b35eed 100644 --- a/tests/pytests/functional/modules/win_file/test_check_perms.py +++ b/tests/pytests/functional/modules/win_file/test_check_perms.py @@ -21,9 +21,9 @@ def configure_loader_modules(): "__utils__": { "dacl.check_perms": win_dacl.check_perms, "dacl.set_perms": win_dacl.set_perms, - } + }, + "__opts__": {"test": False}, }, - win_dacl: {"__opts__": {"test": False}}, } @@ -43,7 +43,7 @@ def test_check_perms_set_owner_test_true(test_file): "name": str(test_file), "result": None, } - with patch.dict(win_dacl.__opts__, {"test": True}): + with patch.dict(win_file.__opts__, {"test": True}): result = win_file.check_perms( path=str(test_file), owner="Backup Operators", inheritance=None ) @@ -76,7 +76,7 @@ def test_check_perms_deny_test_true(test_file): "name": str(test_file), "result": None, } - with patch.dict(win_dacl.__opts__, {"test": True}): + with patch.dict(win_file.__opts__, {"test": True}): result = win_file.check_perms( path=str(test_file), deny_perms={"Users": {"perms": "read_execute"}}, @@ -113,7 +113,7 @@ def test_check_perms_grant_test_true(test_file): "name": str(test_file), "result": None, } - with patch.dict(win_dacl.__opts__, {"test": True}): + with patch.dict(win_file.__opts__, {"test": True}): result = win_file.check_perms( path=str(test_file), grant_perms={"Users": {"perms": "read_execute"}}, @@ -150,7 +150,7 @@ def test_check_perms_inheritance_false_test_true(test_file): "name": str(test_file), "result": None, } - with patch.dict(win_dacl.__opts__, {"test": True}): + with patch.dict(win_file.__opts__, {"test": True}): result = win_file.check_perms(path=str(test_file), inheritance=False) assert result == expected @@ -214,7 +214,7 @@ def test_check_perms_reset_test_true(test_file): "name": str(test_file), "result": None, } - with patch.dict(win_dacl.__opts__, {"test": True}): + with patch.dict(win_file.__opts__, {"test": True}): result = win_file.check_perms( path=str(test_file), grant_perms={ diff --git a/tests/pytests/functional/states/file/test_directory_win.py b/tests/pytests/functional/states/file/test_directory_win.py index f8a58dc4fd0..685f48195c3 100644 --- a/tests/pytests/functional/states/file/test_directory_win.py +++ b/tests/pytests/functional/states/file/test_directory_win.py @@ -2,8 +2,6 @@ import os import pytest -import salt.modules.win_file as win_file -import salt.states.file as file import salt.utils.win_dacl as win_dacl import salt.utils.win_functions as win_functions @@ -20,28 +18,7 @@ pytestmark = [ ] -@pytest.fixture(scope="module") -def configure_loader_modules(): - return { - file: { - "__opts__": {"test": False}, - "__salt__": { - "file.mkdir": win_file.mkdir, - "file.check_perms": win_file.check_perms, - }, - }, - win_file: { - "__utils__": { - "dacl.check_perms": win_dacl.check_perms, - "dacl.set_owner": win_dacl.set_owner, - "dacl.set_perms": win_dacl.set_perms, - }, - }, - win_dacl: {"__opts__": {"test": False}}, - } - - -def test_directory_new(tmp_path): +def test_directory_new(file, tmp_path): """ Test file.directory when the directory does not exist Should just return "New Dir" @@ -107,7 +84,7 @@ def test_directory_new(tmp_path): assert permissions == expected -def test_directory_new_no_inherit(tmp_path): +def test_directory_new_no_inherit(file, tmp_path): """ Test file.directory when the directory does not exist Should just return "New Dir" @@ -127,7 +104,7 @@ def test_directory_new_no_inherit(tmp_path): assert permissions["Inherited"] == {} -def test_directory_new_reset(tmp_path): +def test_directory_new_reset(file, tmp_path): """ Test file.directory when the directory does not exist Should just return "New Dir" @@ -182,7 +159,7 @@ def test_directory_new_reset(tmp_path): assert permissions == expected -def test_directory_new_reset_no_inherit(tmp_path): +def test_directory_new_reset_no_inherit(file, tmp_path): """ Test file.directory when the directory does not exist Should just return "New Dir" @@ -219,7 +196,7 @@ def test_directory_new_reset_no_inherit(tmp_path): assert permissions == expected -def test_directory_existing(tmp_path): +def test_directory_existing(file, tmp_path): path = str(tmp_path) ret = file.directory( name=path, @@ -293,7 +270,7 @@ def test_directory_existing(tmp_path): assert permissions == expected -def test_directory_existing_existing_user(tmp_path): +def test_directory_existing_existing_user(file, tmp_path): path = str(tmp_path) win_dacl.set_permissions( obj_name=path, @@ -374,7 +351,7 @@ def test_directory_existing_existing_user(tmp_path): assert permissions == expected -def test_directory_existing_no_inherit(tmp_path): +def test_directory_existing_no_inherit(file, tmp_path): path = str(tmp_path) ret = file.directory( name=path, @@ -398,7 +375,7 @@ def test_directory_existing_no_inherit(tmp_path): assert permissions["Inherited"] == {} -def test_directory_existing_reset(tmp_path): +def test_directory_existing_reset(file, tmp_path): path = str(tmp_path) win_dacl.set_permissions( obj_name=path, @@ -462,7 +439,7 @@ def test_directory_existing_reset(tmp_path): assert permissions == expected -def test_directory_existing_reset_no_inherit(tmp_path): +def test_directory_existing_reset_no_inherit(file, tmp_path): path = str(tmp_path) ret = file.directory( name=path, diff --git a/tests/pytests/functional/states/test_reg.py b/tests/pytests/functional/states/test_reg.py index 10a4d155aa6..def550f55ac 100644 --- a/tests/pytests/functional/states/test_reg.py +++ b/tests/pytests/functional/states/test_reg.py @@ -49,7 +49,6 @@ def configure_loader_modules(): "dacl.check_perms": win_dacl.check_perms, }, }, - win_dacl: {"__opts__": {"test": False}}, } diff --git a/tests/pytests/functional/utils/win_dacl/test_file.py b/tests/pytests/functional/utils/win_dacl/test_file.py index bb6bd123869..7de08f03422 100644 --- a/tests/pytests/functional/utils/win_dacl/test_file.py +++ b/tests/pytests/functional/utils/win_dacl/test_file.py @@ -1,7 +1,6 @@ import pytest import salt.utils.win_dacl as win_dacl -from tests.support.mock import patch pytestmark = [ pytest.mark.windows_whitelisted, @@ -819,22 +818,22 @@ def test_check_perms(test_file): def test_check_perms_test_true(test_file): - with patch.dict(win_dacl.__opts__, {"test": True}): - result = win_dacl.check_perms( - obj_name=str(test_file), - obj_type="file", - ret=None, - owner="Users", - grant_perms={"Backup Operators": {"perms": "read"}}, - deny_perms={ - "NETWORK SERVICE": { - "perms": ["delete", "set_value", "write_dac", "write_owner"] - }, - "Backup Operators": {"perms": ["delete"]}, + result = win_dacl.check_perms( + obj_name=str(test_file), + obj_type="file", + ret=None, + owner="Users", + grant_perms={"Backup Operators": {"perms": "read"}}, + deny_perms={ + "NETWORK SERVICE": { + "perms": ["delete", "set_value", "write_dac", "write_owner"] }, - inheritance=True, - reset=False, - ) + "Backup Operators": {"perms": ["delete"]}, + }, + inheritance=True, + reset=False, + test_mode=True, + ) expected = { "changes": { diff --git a/tests/pytests/functional/utils/win_dacl/test_reg.py b/tests/pytests/functional/utils/win_dacl/test_reg.py index af6de169e6c..870b9765ad6 100644 --- a/tests/pytests/functional/utils/win_dacl/test_reg.py +++ b/tests/pytests/functional/utils/win_dacl/test_reg.py @@ -3,7 +3,6 @@ from saltfactories.utils import random_string import salt.utils.win_dacl as win_dacl import salt.utils.win_reg as win_reg -from tests.support.mock import patch pytestmark = [ pytest.mark.windows_whitelisted, @@ -12,15 +11,6 @@ pytestmark = [ ] -@pytest.fixture -def configure_loader_modules(minion_opts): - return { - win_dacl: { - "__opts__": minion_opts, - }, - } - - @pytest.fixture(scope="module") def fake_key(): return "SOFTWARE\\{}".format(random_string("SaltTesting-", lowercase=False)) @@ -433,22 +423,22 @@ def test_check_perms(reg_key): def test_check_perms_test_true(reg_key): - with patch.dict(win_dacl.__opts__, {"test": True}): - result = win_dacl.check_perms( - obj_name=reg_key, - obj_type="registry", - ret=None, - owner="Users", - grant_perms={"Backup Operators": {"perms": "read"}}, - deny_perms={ - "NETWORK SERVICE": { - "perms": ["delete", "set_value", "write_dac", "write_owner"] - }, - "Backup Operators": {"perms": ["delete"]}, + result = win_dacl.check_perms( + obj_name=reg_key, + obj_type="registry", + ret=None, + owner="Users", + grant_perms={"Backup Operators": {"perms": "read"}}, + deny_perms={ + "NETWORK SERVICE": { + "perms": ["delete", "set_value", "write_dac", "write_owner"] }, - inheritance=True, - reset=False, - ) + "Backup Operators": {"perms": ["delete"]}, + }, + inheritance=True, + reset=False, + test_mode=True, + ) expected = { "changes": { diff --git a/tests/pytests/unit/modules/file/test_file_block_replace.py b/tests/pytests/unit/modules/file/test_file_block_replace.py index 577e6004a42..71e2d970895 100644 --- a/tests/pytests/unit/modules/file/test_file_block_replace.py +++ b/tests/pytests/unit/modules/file/test_file_block_replace.py @@ -57,7 +57,10 @@ def configure_loader_modules(): ret.update( { win_dacl: {"__opts__": opts}, - win_file: {"__utils__": {"dacl.check_perms": win_dacl.check_perms}}, + win_file: { + "__utils__": {"dacl.check_perms": win_dacl.check_perms}, + "__opts__": opts, + }, } ) diff --git a/tests/pytests/unit/modules/test_win_file.py b/tests/pytests/unit/modules/test_win_file.py index ea0f6a547f3..83667bb6377 100644 --- a/tests/pytests/unit/modules/test_win_file.py +++ b/tests/pytests/unit/modules/test_win_file.py @@ -97,7 +97,7 @@ def test_get_pgid(): something """ result = win_file.get_pgid(os.getenv("COMSPEC")) - assert not result == "" + assert result != "" def test_group_to_gid(): @@ -144,7 +144,7 @@ def test_get_uid(): something """ result = win_file.get_uid(os.getenv("WINDIR")) - assert not result == "" + assert result != "" def test_get_uid_error(): @@ -259,7 +259,7 @@ def test_get_user(): something """ result = win_file.get_user(os.getenv("WINDIR")) - assert not result == "" + assert result != "" def test_get_user_error(): diff --git a/tests/unit/modules/test_heat.py b/tests/unit/modules/test_heat.py index 9520085bddf..4aaec60eecd 100644 --- a/tests/unit/modules/test_heat.py +++ b/tests/unit/modules/test_heat.py @@ -4,7 +4,6 @@ import salt.modules.file as file_ import salt.modules.heat as heat import salt.modules.win_file as win_file import salt.utils.platform -import salt.utils.win_dacl as dacl from tests.support.mixins import LoaderModuleMockMixin from tests.support.mock import MagicMock, patch from tests.support.runtests import RUNTIME_VARS @@ -78,10 +77,7 @@ class HeatTestCase(TestCase, LoaderModuleMockMixin): "config.backup_mode": MagicMock(return_value=False), }, }, - win_file: { - "__utils__": {"dacl.check_perms": salt.utils.win_dacl.check_perms} - }, - dacl: {"__opts__": {"test": False}}, + win_file: {"__opts__": {"test": False}}, } def setUp(self): diff --git a/tests/unit/states/test_heat.py b/tests/unit/states/test_heat.py index c36bc2e98b5..b6b644a665f 100644 --- a/tests/unit/states/test_heat.py +++ b/tests/unit/states/test_heat.py @@ -5,7 +5,6 @@ import salt.modules.heat import salt.modules.win_file as win_file import salt.states.heat as heat import salt.utils.platform -import salt.utils.win_dacl as dacl import tests.unit.modules.test_heat from tests.support.mixins import LoaderModuleMockMixin from tests.support.mock import MagicMock, patch @@ -38,10 +37,7 @@ class HeatTestCase(TestCase, LoaderModuleMockMixin): "config.backup_mode": MagicMock(return_value=False), }, }, - win_file: { - "__utils__": {"dacl.check_perms": salt.utils.win_dacl.check_perms} - }, - dacl: {"__opts__": {"test": False}}, + win_file: {"__opts__": {"test": False}}, } def setUp(self): From 9a3b2bd316f098e7fd4995c8ca308b43a9775e7c Mon Sep 17 00:00:00 2001 From: David Murphy < dmurphy@saltstack.com> Date: Mon, 23 Oct 2023 14:50:15 -0600 Subject: [PATCH 060/153] Added pragma no cover since fundamental import --- salt/_compat.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/salt/_compat.py b/salt/_compat.py index ed404e877b0..7d20691f594 100644 --- a/salt/_compat.py +++ b/salt/_compat.py @@ -4,6 +4,8 @@ Salt compatibility code # pylint: disable=unused-import import sys +# pragma: no cover + # The ipaddress module included in Salt is from Python 3.9.5. # When running from Py3.9.5+ use the standard library module, use ours otherwise if sys.version_info >= (3, 9, 5): From 58564f5882a823c6cdd48d104c77d2b7c6b932f5 Mon Sep 17 00:00:00 2001 From: Pedro Algarvio Date: Sun, 22 Oct 2023 12:20:02 +0100 Subject: [PATCH 061/153] Skip test that hangs on PhotonOS 3 Signed-off-by: Pedro Algarvio --- tests/pytests/unit/cloud/test_map.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tests/pytests/unit/cloud/test_map.py b/tests/pytests/unit/cloud/test_map.py index 7a6d3f5fdca..93d3cde94f5 100644 --- a/tests/pytests/unit/cloud/test_map.py +++ b/tests/pytests/unit/cloud/test_map.py @@ -99,10 +99,12 @@ def salt_cloud_config_file(salt_master_factory): return os.path.join(salt_master_factory.config_dir, "cloud") -def test_cloud_map_merge_conf(salt_cloud_config_file): +def test_cloud_map_merge_conf(salt_cloud_config_file, grains): """ Ensure that nested values can be selectivly overridden in a map file """ + if grains["os"] == "VMware Photon OS" and grains["osmajorrelease"] == 3: + pytest.skip("Test hangs on PhotonOS 3") with patch( "salt.config.check_driver_dependencies", MagicMock(return_value=True) ), patch("salt.cloud.Map.read", MagicMock(return_value=EXAMPLE_MAP)): From 468e6b5763657c513455419b7f9e66d33d770fe9 Mon Sep 17 00:00:00 2001 From: Pedro Algarvio Date: Sat, 21 Oct 2023 18:39:32 +0100 Subject: [PATCH 062/153] Avoid having to resolve DNS for a unittest Signed-off-by: Pedro Algarvio --- tests/pytests/unit/cloud/test_map.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tests/pytests/unit/cloud/test_map.py b/tests/pytests/unit/cloud/test_map.py index 93d3cde94f5..06f71b6d6e5 100644 --- a/tests/pytests/unit/cloud/test_map.py +++ b/tests/pytests/unit/cloud/test_map.py @@ -18,7 +18,7 @@ EXAMPLE_PROVIDERS = { "vmware": { "driver": "vmware", "password": "123456", - "url": "vca1.saltstack.com", + "url": "vca1.localhost", "minion": {"master": "providermaster", "grains": {"providergrain": True}}, "profiles": {}, "user": "root", @@ -31,7 +31,7 @@ EXAMPLE_PROVIDERS = { "profiles": {}, "minion": {"master": "providermaster", "grains": {"providergrain": True}}, "image": "rhel6_64prod", - "url": "vca2.saltstack.com", + "url": "vca2.localhost", "user": "root", } }, @@ -160,7 +160,7 @@ def test_cloud_map_merge_conf(salt_cloud_config_file, grains): "profile": "nyc-vm", "provider": "nyc_vcenter:vmware", "resourcepool": "Resources", - "url": "vca1.saltstack.com", + "url": "vca1.localhost", "user": "root", }, "db2": { @@ -198,7 +198,7 @@ def test_cloud_map_merge_conf(salt_cloud_config_file, grains): "profile": "nyc-vm", "provider": "nj_vcenter:vmware", "resourcepool": "Resources", - "url": "vca2.saltstack.com", + "url": "vca2.localhost", "user": "root", }, "db3": { @@ -218,7 +218,7 @@ def test_cloud_map_merge_conf(salt_cloud_config_file, grains): "profile": "nj-vm", "provider": "nj_vcenter:vmware", "resourcepool": "Resources", - "url": "vca2.saltstack.com", + "url": "vca2.localhost", "user": "root", }, } From bb86351eca998913e428b406b748313dc0b50a0c Mon Sep 17 00:00:00 2001 From: Pedro Algarvio Date: Tue, 24 Oct 2023 21:26:49 +0100 Subject: [PATCH 063/153] Fix variable name Signed-off-by: Pedro Algarvio --- tests/integration/modules/test_mac_power.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/integration/modules/test_mac_power.py b/tests/integration/modules/test_mac_power.py index e8aa0f535f3..aa0de266707 100644 --- a/tests/integration/modules/test_mac_power.py +++ b/tests/integration/modules/test_mac_power.py @@ -230,7 +230,7 @@ class MacPowerModuleTestRestartPowerFailure(ModuleCase): Reset to original value """ if self.RESTART_POWER is not None: - self.run_function("power.set_sleep_on_power_button", [self.SLEEP_ON_BUTTON]) + self.run_function("power.set_sleep_on_power_button", [self.RESTART_POWER]) def test_restart_power_failure(self): """ From 6cb08d68b474df93b670cc42086d7d76d4e53aad Mon Sep 17 00:00:00 2001 From: Pedro Algarvio Date: Mon, 23 Oct 2023 13:04:48 +0100 Subject: [PATCH 064/153] Fix test groups issue when re-running test failures Signed-off-by: Pedro Algarvio --- tests/conftest.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/tests/conftest.py b/tests/conftest.py index 4fb52ea090e..edfa61ad422 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -813,6 +813,17 @@ def groups_collection_modifyitems(config, items): # Just one group, don't do any filtering return + terminal_reporter = config.pluginmanager.get_plugin("terminalreporter") + + if config.getoption("--last-failed") or config.getoption("--failed-first"): + # This is a test failure rerun, applying test groups would break this + terminal_reporter.write( + "\nNot splitting collected tests into chunks since --lf/--last-failed or " + "-ff/--failed-first was passed on the CLI.\n", + yellow=True, + ) + return + total_items = len(items) # Devide into test groups @@ -828,7 +839,6 @@ def groups_collection_modifyitems(config, items): if deselected: config.hook.pytest_deselected(items=deselected) - terminal_reporter = config.pluginmanager.get_plugin("terminalreporter") terminal_reporter.write( f"Running test group #{group_id}(out of #{group_count}) ({len(items)} out of {total_items} tests)\n", yellow=True, From 841486c9760d8c709d1d80df50b084e88190171c Mon Sep 17 00:00:00 2001 From: Thomas Phipps Date: Wed, 11 Oct 2023 22:31:40 +0000 Subject: [PATCH 065/153] add code coverage for salt/payload.py --- tests/pytests/functional/test_payload.py | 14 +++- tests/pytests/unit/test_payload.py | 93 ++++++++++++++++++++++++ 2 files changed, 106 insertions(+), 1 deletion(-) diff --git a/tests/pytests/functional/test_payload.py b/tests/pytests/functional/test_payload.py index 9d069eb0f4a..e39e1ecc0fd 100644 --- a/tests/pytests/functional/test_payload.py +++ b/tests/pytests/functional/test_payload.py @@ -140,4 +140,16 @@ def test_destroy(sreq, echo_server): """ # ensure no exceptions when we go to destroy the sreq, since __del__ # swallows exceptions, we have to call destroy directly - sreq.destroy() + assert sreq.send("clear", "foo") == {"enc": "clear", "load": "foo"} + try: + sreq.destroy() + except Exception as exc: # pylint: disable=broad-except + pytest.fail(f"sreq.destroy threw an exception {exc}") + + +@pytest.mark.slow_test +def test_clear_socket(sreq, echo_server): + assert sreq.send("clear", "foo") == {"enc": "clear", "load": "foo"} + assert hasattr(sreq, "_socket") + sreq.clear_socket() + assert hasattr(sreq, "_socket") is False diff --git a/tests/pytests/unit/test_payload.py b/tests/pytests/unit/test_payload.py index ecd77ab4fcf..f35442c7960 100644 --- a/tests/pytests/unit/test_payload.py +++ b/tests/pytests/unit/test_payload.py @@ -7,8 +7,11 @@ import copy import datetime import logging +import zmq + import salt.exceptions import salt.payload +import salt.utils.msgpack from salt.defaults import _Constant from salt.utils import immutabletypes from salt.utils.odict import OrderedDict @@ -210,3 +213,93 @@ def test_constants(): sdata = salt.payload.dumps(constant) odata = salt.payload.loads(sdata) assert odata == constant + + +def test_package(): + value = salt.utils.msgpack.dumps("test") + assert value == salt.payload.package("test") + + +def test_unpackage(): + value = [b"test"] + packed = salt.utils.msgpack.dumps(value) + assert value == salt.payload.unpackage(packed) + + +def test_format_payload(): + expected = salt.utils.msgpack.dumps( + {"enc": [b"test"], "load": {"kwargs": {"foo": "bar"}}} + ) + enc = [b"test"] + kwargs = {"foo": "bar"} + payload = salt.payload.format_payload(enc=enc, kwargs=kwargs) + assert expected == payload + + +def test_SREQ_init(): + req = salt.payload.SREQ( + "tcp://salt:3434", id_=b"id", serial="msgpack", linger=1, opts=None + ) + assert req.master == "tcp://salt:3434" + assert req.id_ == b"id" + assert req.linger == 1 + assert req.opts is None + assert isinstance(req.context, zmq.Context) + assert isinstance(req.poller, zmq.Poller) + + +def test_SREQ_socket(): + req = salt.payload.SREQ( + "tcp://salt:3434", id_=b"id", serial="msgpack", linger=1, opts=None + ) + # socket() is a property that auto creates a socket if a socket is wanted. + socket = req.socket + assert isinstance(socket, zmq.Socket) + + req = salt.payload.SREQ( + "tcp://[2001:db8:85a3:8d3:1319:8a2e:370:7348]:3434", + id_=b"id", + serial="msgpack", + linger=1, + opts=None, + ) + # socket() is a property that auto creates a socket if a socket is wanted. + socket = req.socket + assert isinstance(socket, zmq.Socket) + + req = salt.payload.SREQ( + "tcp://salt:3434", id_=None, serial="msgpack", linger=1, opts=None + ) + # socket() is a property that auto creates a socket if a socket is wanted. + socket = req.socket + assert isinstance(socket, zmq.Socket) + + +def test_SREQ_set_tcp_keepalive(): + opts = {"tcp_keepalive": True} + req = salt.payload.SREQ( + "tcp://salt:3434", id_=b"id", serial="msgpack", linger=1, opts=opts + ) + socket = req.socket + assert req._socket.getsockopt(zmq.TCP_KEEPALIVE) + + opts = {"tcp_keepalive_idle": 100} + req = salt.payload.SREQ( + "tcp://salt:3434", id_=b"id", serial="msgpack", linger=1, opts=opts + ) + socket = req.socket + assert req._socket.getsockopt(zmq.TCP_KEEPALIVE_IDLE) == 100 + + opts = {"tcp_keepalive_cnt": 100} + req = salt.payload.SREQ( + "tcp://salt:3434", id_=b"id", serial="msgpack", linger=1, opts=opts + ) + socket = req.socket + assert req._socket.getsockopt(zmq.TCP_KEEPALIVE_CNT) == 100 + + opts = {"tcp_keepalive_intvl": 100} + req = salt.payload.SREQ( + "tcp://salt:3434", id_=b"id", serial="msgpack", linger=1, opts=opts + ) + socket = req.socket + assert req._socket.getsockopt(zmq.TCP_KEEPALIVE_INTVL) == 100 From 38725e27d7c5e9c871c9a1ea939759dd845a3516 Mon Sep 17 00:00:00 2001 From: Thomas Phipps Date: Mon, 16 Oct 2023 02:47:24 +0000 Subject: [PATCH 066/153] revert the destroy, and use s0undt3chs advise --- tests/pytests/functional/test_payload.py | 11 ++++++----- tests/pytests/unit/test_payload.py | 6 +++--- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/tests/pytests/functional/test_payload.py b/tests/pytests/functional/test_payload.py index e39e1ecc0fd..8dcd3fa1a56 100644 --- a/tests/pytests/functional/test_payload.py +++ b/tests/pytests/functional/test_payload.py @@ -138,17 +138,18 @@ def test_destroy(sreq, echo_server): """ Test the __del__ capabilities """ + # ensure we actually have an open socket and not just testing against + # no actual sockets created. + assert sreq.send("clear", "foo") == {"enc": "clear", "load": "foo"} # ensure no exceptions when we go to destroy the sreq, since __del__ # swallows exceptions, we have to call destroy directly - assert sreq.send("clear", "foo") == {"enc": "clear", "load": "foo"} - try: - sreq.destroy() - except Exception as exc: # pylint: disable=broad-except - pytest.fail(f"sreq.destroy threw an exception {exc}") + sreq.destroy() @pytest.mark.slow_test def test_clear_socket(sreq, echo_server): + # ensure we actually have an open socket and not just testing against + # no actual sockets created. assert sreq.send("clear", "foo") == {"enc": "clear", "load": "foo"} assert hasattr(sreq, "_socket") sreq.clear_socket() diff --git a/tests/pytests/unit/test_payload.py b/tests/pytests/unit/test_payload.py index f35442c7960..cf862e256b8 100644 --- a/tests/pytests/unit/test_payload.py +++ b/tests/pytests/unit/test_payload.py @@ -217,13 +217,13 @@ def test_constants(): def test_package(): value = salt.utils.msgpack.dumps("test") - assert value == salt.payload.package("test") + assert salt.payload.package("test") == value def test_unpackage(): value = [b"test"] packed = salt.utils.msgpack.dumps(value) - assert value == salt.payload.unpackage(packed) + assert salt.payload.unpackage(packed) == value def test_format_payload(): @@ -233,7 +233,7 @@ def test_format_payload(): enc = [b"test"] kwargs = {"foo": "bar"} payload = salt.payload.format_payload(enc=enc, kwargs=kwargs) - assert expected == payload + assert payload == expected def test_SREQ_init(): From 5a62968da89a5e667f46b52eca909e934e05ccaf Mon Sep 17 00:00:00 2001 From: Pedro Algarvio Date: Mon, 23 Oct 2023 13:04:48 +0100 Subject: [PATCH 067/153] Fix test groups issue when re-running test failures Signed-off-by: Pedro Algarvio --- tests/conftest.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/tests/conftest.py b/tests/conftest.py index dfa323802e6..69e150698e7 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -813,6 +813,17 @@ def groups_collection_modifyitems(config, items): # Just one group, don't do any filtering return + terminal_reporter = config.pluginmanager.get_plugin("terminalreporter") + + if config.getoption("--last-failed") or config.getoption("--failed-first"): + # This is a test failure rerun, applying test groups would break this + terminal_reporter.write( + "\nNot splitting collected tests into chunks since --lf/--last-failed or " + "-ff/--failed-first was passed on the CLI.\n", + yellow=True, + ) + return + total_items = len(items) # Devide into test groups @@ -828,7 +839,6 @@ def groups_collection_modifyitems(config, items): if deselected: config.hook.pytest_deselected(items=deselected) - terminal_reporter = config.pluginmanager.get_plugin("terminalreporter") terminal_reporter.write( f"Running test group #{group_id}(out of #{group_count}) ({len(items)} out of {total_items} tests)\n", yellow=True, From 32fac46e75c7fce6db5354e1965dea88f07c0c11 Mon Sep 17 00:00:00 2001 From: Pedro Algarvio Date: Thu, 26 Oct 2023 17:29:47 +0100 Subject: [PATCH 068/153] Fix test since it's now only one call Signed-off-by: Pedro Algarvio --- tests/pytests/unit/modules/test_aptpkg.py | 90 ++++++++++------------- 1 file changed, 40 insertions(+), 50 deletions(-) diff --git a/tests/pytests/unit/modules/test_aptpkg.py b/tests/pytests/unit/modules/test_aptpkg.py index cdc6efc8a68..12e154c25e7 100644 --- a/tests/pytests/unit/modules/test_aptpkg.py +++ b/tests/pytests/unit/modules/test_aptpkg.py @@ -1711,37 +1711,39 @@ def test_latest_version_fromrepo_multiple_names(): "linux-cloud-tools-virtual": ["5.15.0.69.67"], "linux-generic": ["5.15.0.69.67"], } - apt_ret_cloud = { + apt_ret = { "pid": 4361, "retcode": 0, - "stdout": "linux-cloud-tools-virtual:\n" - f"Installed: 5.15.0.69.67\n Candidate: {version}\n Version" - f"table:\n {version} 990\n 990" - f"https://mirrors.edge.kernel.org/ubuntu {fromrepo}/main amd64" - "Packages\n 500 https://mirrors.edge.kernel.org/ubuntu" - "jammy-security/main amd64 Packages\n ***5.15.0.69.67 100\n" - "100 /var/lib/dpkg/status\n 5.15.0.25.27 500\n 500" - "https://mirrors.edge.kernel.org/ubuntu jammy/main amd64 Packages", - "stderr": "", - } - apt_ret_generic = { - "pid": 4821, - "retcode": 0, - "stdout": "linux-generic:\n" - f"Installed: 5.15.0.69.67\n Candidate: {version}\n" - f"Version table:\n {version} 990\n 990" - "https://mirrors.edge.kernel.org/ubuntu" - "jammy-updates/main amd64 Packages\n 500" - "https://mirrors.edge.kernel.org/ubuntu" - "jammy-security/main amd64 Packages\n *** 5.15.0.69.67" - "100\n 100 /var/lib/dpkg/status\n 5.15.0.25.27" - "500\n 500 https://mirrors.edge.kernel.org/ubuntu" - "jammy/main amd64 Packages", + "stdout": textwrap.dedent( + f"""\ + linux-cloud-tools-virtual: + Installed: 5.15.0.69.67 + Candidate: {version} + Versiontable: + {version} 990 + 990https://mirrors.edge.kernel.org/ubuntu {fromrepo}/main amd64Packages + 500 https://mirrors.edge.kernel.org/ubuntujammy-security/main amd64 Packages + ***5.15.0.69.67 100 + 100 /var/lib/dpkg/status + 5.15.0.25.27 500 + 500https://mirrors.edge.kernel.org/ubuntu jammy/main amd64 Packages + linux-generic: + Installed: 5.15.0.69.67 + Candidate: {version} + Version table: + {version} 990 + 990https://mirrors.edge.kernel.org/ubuntujammy-updates/main amd64 Packages + 500https://mirrors.edge.kernel.org/ubuntujammy-security/main amd64 Packages + *** 5.15.0.69.67100 + 100 /var/lib/dpkg/status + 5.15.0.25.27500 + 500 https://mirrors.edge.kernel.org/ubuntujammy/main amd64 Packages + """ + ), "stderr": "", } - mock_apt = MagicMock() - mock_apt.side_effect = [apt_ret_cloud, apt_ret_generic] + mock_apt = MagicMock(return_value=apt_ret) patch_apt = patch("salt.modules.aptpkg._call_apt", mock_apt) mock_list_pkgs = MagicMock(return_value=list_ret) patch_list_pkgs = patch("salt.modules.aptpkg.list_pkgs", mock_list_pkgs) @@ -1754,30 +1756,18 @@ def test_latest_version_fromrepo_multiple_names(): show_installed=True, ) assert ret == {"linux-cloud-tools-virtual": version, "linux-generic": version} - assert mock_apt.call_args_list == [ - call( - [ - "apt-cache", - "-q", - "policy", - "linux-cloud-tools-virtual", - "-o", - "APT::Default-Release=jammy-updates", - ], - scope=False, - ), - call( - [ - "apt-cache", - "-q", - "policy", - "linux-generic", - "-o", - "APT::Default-Release=jammy-updates", - ], - scope=False, - ), - ] + mock_apt.assert_called_once_with( + [ + "apt-cache", + "-q", + "policy", + "linux-cloud-tools-virtual", + "linux-generic", + "-o", + "APT::Default-Release=jammy-updates", + ], + scope=False, + ) def test_hold(): From 90666c833350d30638ea3a4ec5abfdb290394519 Mon Sep 17 00:00:00 2001 From: Pedro Algarvio Date: Fri, 27 Oct 2023 08:34:36 +0100 Subject: [PATCH 069/153] Run `pyupgrade` against the changes from the merge-forward Signed-off-by: Pedro Algarvio --- salt/utils/win_dacl.py | 88 ++++++++----------- tests/pytests/functional/states/test_reg.py | 20 ++--- tests/pytests/functional/test_payload.py | 4 +- .../functional/utils/win_dacl/test_reg.py | 2 +- .../modules/file/test_file_block_replace.py | 22 ++--- tests/unit/modules/test_heat.py | 2 +- 6 files changed, 56 insertions(+), 82 deletions(-) diff --git a/salt/utils/win_dacl.py b/salt/utils/win_dacl.py index 2e9fe87b811..346dac41de5 100644 --- a/salt/utils/win_dacl.py +++ b/salt/utils/win_dacl.py @@ -496,9 +496,7 @@ def dacl(obj_name=None, obj_type="file"): """ # Validate obj_type if obj_type.lower() not in self.obj_type: - raise SaltInvocationError( - 'Invalid "obj_type" passed: {}'.format(obj_type) - ) + raise SaltInvocationError(f'Invalid "obj_type" passed: {obj_type}') self.dacl_type = obj_type.lower() @@ -514,7 +512,7 @@ def dacl(obj_name=None, obj_type="file"): ) except pywintypes.error as exc: if "The system cannot find" in exc.strerror: - msg = "System cannot find {}".format(obj_name) + msg = f"System cannot find {obj_name}" log.exception(msg) raise CommandExecutionError(msg) raise @@ -588,9 +586,7 @@ def dacl(obj_name=None, obj_type="file"): valid_hive = hives[passed_hive.upper()] except KeyError: log.exception("Invalid Registry Hive: %s", passed_hive) - raise CommandExecutionError( - "Invalid Registry Hive: {}".format(passed_hive) - ) + raise CommandExecutionError(f"Invalid Registry Hive: {passed_hive}") reg.insert(0, valid_hive) @@ -632,7 +628,7 @@ def dacl(obj_name=None, obj_type="file"): if applies_to not in self.ace_prop[self.dacl_type]: raise SaltInvocationError( - "Invalid 'applies_to' for type {}".format(self.dacl_type) + f"Invalid 'applies_to' for type {self.dacl_type}" ) if self.dacl is None: @@ -644,7 +640,7 @@ def dacl(obj_name=None, obj_type="file"): try: perm_flag = self.ace_perms[self.dacl_type]["basic"][permissions] except KeyError as exc: - msg = "Invalid permission specified: {}".format(permissions) + msg = f"Invalid permission specified: {permissions}" log.exception(msg) raise CommandExecutionError(msg, exc) else: @@ -652,12 +648,12 @@ def dacl(obj_name=None, obj_type="file"): try: perm_flag |= self.ace_perms[self.dacl_type]["advanced"][perm] except KeyError as exc: - msg = "Invalid permission specified: {}".format(perm) + msg = f"Invalid permission specified: {perm}" log.exception(msg) raise CommandExecutionError(msg, exc) if access_mode.lower() not in ["grant", "deny"]: - raise SaltInvocationError("Invalid Access Mode: {}".format(access_mode)) + raise SaltInvocationError(f"Invalid Access Mode: {access_mode}") # Add ACE to the DACL # Grant or Deny @@ -686,11 +682,9 @@ def dacl(obj_name=None, obj_type="file"): ) else: log.exception("Invalid access mode: %s", access_mode) - raise SaltInvocationError( - "Invalid access mode: {}".format(access_mode) - ) + raise SaltInvocationError(f"Invalid access mode: {access_mode}") except Exception as exc: # pylint: disable=broad-except - return False, "Error: {}".format(exc) + return False, f"Error: {exc}" return True @@ -945,7 +939,7 @@ def dacl(obj_name=None, obj_type="file"): # If still nothing, it must be undefined if not ace_perms: - ace_perms = ["Undefined Permission: {}".format(ace[1])] + ace_perms = [f"Undefined Permission: {ace[1]}"] return ( principal, @@ -1001,7 +995,7 @@ def dacl(obj_name=None, obj_type="file"): offset += 1 if not ret: - ret = ["ACE not found for {}".format(principal)] + ret = [f"ACE not found for {principal}"] return ret @@ -1100,7 +1094,7 @@ def dacl(obj_name=None, obj_type="file"): ) except pywintypes.error as exc: raise CommandExecutionError( - "Failed to set permissions: {}".format(obj_name), exc.strerror + f"Failed to set permissions: {obj_name}", exc.strerror ) return True @@ -1146,7 +1140,7 @@ def get_sid(principal): sid = win32security.ConvertStringSidToSid(sid) except pywintypes.error: log.exception("Invalid user/group or sid: %s", principal) - raise CommandExecutionError("Invalid user/group or sid: {}".format(principal)) + raise CommandExecutionError(f"Invalid user/group or sid: {principal}") except TypeError: raise CommandExecutionError @@ -1189,7 +1183,7 @@ def get_sid_string(principal): return win32security.ConvertSidToStringSid(principal) except pywintypes.error: log.exception("Invalid principal %s", principal) - raise CommandExecutionError("Invalid principal {}".format(principal)) + raise CommandExecutionError(f"Invalid principal {principal}") def get_name(principal): @@ -1249,7 +1243,7 @@ def get_name(principal): # https://docs.microsoft.com/en-us/previous-versions/technet-magazine/cc138011(v=msdn.10) # https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2008-R2-and-2008/dd548356(v=ws.10) if str_sid.startswith("S-1-5-80"): - name = "NT Service\\{}".format(name) + name = f"NT Service\\{name}" return name except (pywintypes.error, TypeError) as exc: @@ -1261,10 +1255,10 @@ def get_name(principal): # All capability SIDs begin with `S-1-15-3`, so we'll only throw an # error when the sid does not begin with `S-1-15-3` if not str_sid.startswith("S-1-15-3"): - message = 'Error resolving "{}"'.format(principal) + message = f'Error resolving "{principal}"' if type(exc) == pywintypes.error: win_error = win32api.FormatMessage(exc.winerror).rstrip("\n") - message = "{}: {}".format(message, win_error) + message = f"{message}: {win_error}" log.exception(message) raise CommandExecutionError(message, exc) @@ -1326,7 +1320,7 @@ def get_owner(obj_name, obj_type="file"): try: obj_type_flag = flags().obj_type[obj_type.lower()] except KeyError: - raise SaltInvocationError('Invalid "obj_type" passed: {}'.format(obj_type)) + raise SaltInvocationError(f'Invalid "obj_type" passed: {obj_type}') if obj_type in ["registry", "registry32"]: obj_name = dacl().get_reg_name(obj_name) @@ -1348,7 +1342,7 @@ def get_owner(obj_name, obj_type="file"): else: log.exception("Failed to get the owner: %s", obj_name) raise CommandExecutionError( - "Failed to get owner: {}".format(obj_name), exc.strerror + f"Failed to get owner: {obj_name}", exc.strerror ) return get_name(owner_sid) @@ -1411,7 +1405,7 @@ def get_primary_group(obj_name, obj_type="file"): try: obj_type_flag = flags().obj_type[obj_type.lower()] except KeyError: - raise SaltInvocationError('Invalid "obj_type" passed: {}'.format(obj_type)) + raise SaltInvocationError(f'Invalid "obj_type" passed: {obj_type}') if "registry" in obj_type.lower(): obj_name = dacl().get_reg_name(obj_name) @@ -1434,7 +1428,7 @@ def get_primary_group(obj_name, obj_type="file"): else: log.exception("Failed to get the primary group: %s", obj_name) raise CommandExecutionError( - "Failed to get primary group: {}".format(obj_name), exc.strerror + f"Failed to get primary group: {obj_name}", exc.strerror ) return get_name(win32security.ConvertSidToStringSid(primary_group_gid)) @@ -1476,7 +1470,7 @@ def set_owner(obj_name, principal, obj_type="file"): # Validate obj_type if obj_type.lower() not in obj_flags.obj_type: - raise SaltInvocationError('Invalid "obj_type" passed: {}'.format(obj_type)) + raise SaltInvocationError(f'Invalid "obj_type" passed: {obj_type}') if "registry" in obj_type.lower(): obj_name = dacl().get_reg_name(obj_name) @@ -1513,9 +1507,7 @@ def set_owner(obj_name, principal, obj_type="file"): ) except pywintypes.error as exc: log.exception("Failed to make %s the owner: %s", principal, exc) - raise CommandExecutionError( - "Failed to set owner: {}".format(obj_name), exc.strerror - ) + raise CommandExecutionError(f"Failed to set owner: {obj_name}", exc.strerror) return True @@ -1561,7 +1553,7 @@ def set_primary_group(obj_name, principal, obj_type="file"): # Validate obj_type if obj_type.lower() not in obj_flags.obj_type: - raise SaltInvocationError('Invalid "obj_type" passed: {}'.format(obj_type)) + raise SaltInvocationError(f'Invalid "obj_type" passed: {obj_type}') if "registry" in obj_type.lower(): obj_name = dacl().get_reg_name(obj_name) @@ -1599,7 +1591,7 @@ def set_primary_group(obj_name, principal, obj_type="file"): except pywintypes.error as exc: log.exception("Failed to make %s the primary group: %s", principal, exc) raise CommandExecutionError( - "Failed to set primary group: {}".format(obj_name), exc.strerror + f"Failed to set primary group: {obj_name}", exc.strerror ) return True @@ -1819,9 +1811,7 @@ def has_permission( """ # Validate access_mode if access_mode.lower() not in ["grant", "deny"]: - raise SaltInvocationError( - 'Invalid "access_mode" passed: {}'.format(access_mode) - ) + raise SaltInvocationError(f'Invalid "access_mode" passed: {access_mode}') access_mode = access_mode.lower() # Get the DACL @@ -1838,7 +1828,7 @@ def has_permission( obj_dacl.ace_perms[obj_type]["advanced"].get(permission.lower(), False), ) if not chk_flag: - raise SaltInvocationError('Invalid "permission" passed: {}'.format(permission)) + raise SaltInvocationError(f'Invalid "permission" passed: {permission}') # Check each ace for sid and type cur_flag = None @@ -1919,9 +1909,7 @@ def has_permissions( # Validate access_mode if access_mode.lower() not in ["grant", "deny"]: - raise SaltInvocationError( - 'Invalid "access_mode" passed: {}'.format(access_mode) - ) + raise SaltInvocationError(f'Invalid "access_mode" passed: {access_mode}') access_mode = access_mode.lower() # Get the DACL @@ -1940,9 +1928,7 @@ def has_permissions( obj_dacl.ace_perms[obj_type]["advanced"].get(permission.lower(), False), ) if not chk_flag: - raise SaltInvocationError( - 'Invalid "permission" passed: {}'.format(permission) - ) + raise SaltInvocationError(f'Invalid "permission" passed: {permission}') # Check each ace for sid and type cur_flag = None @@ -1998,7 +1984,7 @@ def set_inheritance(obj_name, enabled, obj_type="file", clear=False): """ if obj_type not in ["file", "registry", "registry32"]: raise SaltInvocationError( - "obj_type called with incorrect parameter: {}".format(obj_name) + f"obj_type called with incorrect parameter: {obj_name}" ) if clear: @@ -2161,7 +2147,7 @@ def copy_security( try: obj_type_flag = flags().obj_type[obj_type.lower()] except KeyError: - raise SaltInvocationError('Invalid "obj_type" passed: {}'.format(obj_type)) + raise SaltInvocationError(f'Invalid "obj_type" passed: {obj_type}') security_flags = 0 if copy_owner: @@ -2214,9 +2200,7 @@ def copy_security( target, obj_type_flag, security_flags, sd_sid, sd_gid, sd_dacl, sd_sacl ) except pywintypes.error as exc: - raise CommandExecutionError( - "Failed to set security info: {}".format(exc.strerror) - ) + raise CommandExecutionError(f"Failed to set security info: {exc.strerror}") return True @@ -2254,7 +2238,7 @@ def _check_perms(obj_name, obj_type, new_perms, access_mode, ret, test_mode=Fals dict: A dictionary of return data as expected by the state system """ access_mode = access_mode.lower() - perms_label = "{}_perms".format(access_mode) + perms_label = f"{access_mode}_perms" cur_perms = get_permissions(obj_name=obj_name, obj_type=obj_type) changes = {} for user in new_perms: @@ -2431,7 +2415,7 @@ def check_perms( """ # Validate obj_type if obj_type.lower() not in flags().obj_type: - raise SaltInvocationError('Invalid "obj_type" passed: {}'.format(obj_type)) + raise SaltInvocationError(f'Invalid "obj_type" passed: {obj_type}') obj_type = obj_type.lower() @@ -2457,9 +2441,7 @@ def check_perms( ret["changes"]["owner"] = owner except CommandExecutionError: ret["result"] = False - ret["comment"].append( - 'Failed to change owner to "{}"'.format(owner) - ) + ret["comment"].append(f'Failed to change owner to "{owner}"') # Check inheritance if inheritance is not None: diff --git a/tests/pytests/functional/states/test_reg.py b/tests/pytests/functional/states/test_reg.py index def550f55ac..61d5792746a 100644 --- a/tests/pytests/functional/states/test_reg.py +++ b/tests/pytests/functional/states/test_reg.py @@ -29,7 +29,7 @@ class RegVars: self.key = "SOFTWARE\\Salt-Testing" self.hive = self.hive self.key = self.key - self.name = "{}\\{}".format(self.hive, self.key) + self.name = f"{self.hive}\\{self.key}" self.vname = "version" self.vdata = "0.15.3" self.current_user = win_functions.get_current_user(with_domain=False) @@ -97,7 +97,7 @@ def test_present(reg_vars): Test reg.present """ expected = { - "comment": "Added {} to {}".format(reg_vars.vname, reg_vars.name), + "comment": f"Added {reg_vars.vname} to {reg_vars.name}", "changes": { "reg": { "Added": { @@ -234,7 +234,7 @@ def test_present_string_dword(reg_vars, clean): vtype = "REG_DWORD" expected_vdata = 1 expected = { - "comment": "Added {} to {}".format(vname, reg_vars.name), + "comment": f"Added {vname} to {reg_vars.name}", "changes": { "reg": { "Added": { @@ -268,7 +268,7 @@ def test_present_string_dword_existing(reg_vars, clean): hive=reg_vars.hive, key=reg_vars.key, vname=vname, vdata=vdata, vtype=vtype ) expected = { - "comment": "{} in {} is already present".format(vname, reg_vars.name), + "comment": f"{vname} in {reg_vars.name} is already present", "changes": {}, "name": reg_vars.name, "result": True, @@ -304,7 +304,7 @@ def test_present_test_true(reg_vars, clean): def test_present_existing(reg_vars, reset): expected = { - "comment": "{} in {} is already present".format(reg_vars.vname, reg_vars.name), + "comment": f"{reg_vars.vname} in {reg_vars.name} is already present", "changes": {}, "name": reg_vars.name, "result": True, @@ -323,7 +323,7 @@ def test_present_existing_key_only(reg_vars, clean): reg_util.set_value(hive=reg_vars.hive, key=reg_vars.key) expected = { - "comment": "(Default) in {} is already present".format(reg_vars.name), + "comment": f"(Default) in {reg_vars.name} is already present", "changes": {}, "name": reg_vars.name, "result": True, @@ -333,7 +333,7 @@ def test_present_existing_key_only(reg_vars, clean): def test_present_existing_test_true(reg_vars, reset): expected = { - "comment": "{} in {} is already present".format(reg_vars.vname, reg_vars.name), + "comment": f"{reg_vars.vname} in {reg_vars.name} is already present", "changes": {}, "name": reg_vars.name, "result": True, @@ -350,7 +350,7 @@ def test_absent(reg_vars, reset): Test to remove a registry entry. """ expected = { - "comment": "Removed {} from {}".format(reg_vars.key, reg_vars.hive), + "comment": f"Removed {reg_vars.key} from {reg_vars.hive}", "changes": { "reg": {"Removed": {"Entry": reg_vars.vname, "Key": reg_vars.name}} }, @@ -379,7 +379,7 @@ def test_absent_already_absent(reg_vars, clean): Test to remove a registry entry. """ expected = { - "comment": "{} is already absent".format(reg_vars.name), + "comment": f"{reg_vars.name} is already absent", "changes": {}, "name": reg_vars.name, "result": True, @@ -392,7 +392,7 @@ def test_absent_already_absent_test_true(reg_vars, clean): Test to remove a registry entry. """ expected = { - "comment": "{} is already absent".format(reg_vars.name), + "comment": f"{reg_vars.name} is already absent", "changes": {}, "name": reg_vars.name, "result": True, diff --git a/tests/pytests/functional/test_payload.py b/tests/pytests/functional/test_payload.py index 8dcd3fa1a56..1b76227e0e5 100644 --- a/tests/pytests/functional/test_payload.py +++ b/tests/pytests/functional/test_payload.py @@ -43,7 +43,7 @@ class EchoServer: """ context = zmq.Context() socket = context.socket(zmq.REP) - socket.bind("tcp://*:{}".format(port)) + socket.bind(f"tcp://*:{port}") while event.is_set(): try: # Wait for next request from client @@ -77,7 +77,7 @@ def echo_server(echo_port): @pytest.fixture def sreq(echo_port): - yield salt.payload.SREQ("tcp://127.0.0.1:{}".format(echo_port)) + yield salt.payload.SREQ(f"tcp://127.0.0.1:{echo_port}") @pytest.mark.slow_test diff --git a/tests/pytests/functional/utils/win_dacl/test_reg.py b/tests/pytests/functional/utils/win_dacl/test_reg.py index 870b9765ad6..14a8383f1ec 100644 --- a/tests/pytests/functional/utils/win_dacl/test_reg.py +++ b/tests/pytests/functional/utils/win_dacl/test_reg.py @@ -19,7 +19,7 @@ def fake_key(): @pytest.fixture(scope="function") def reg_key(fake_key): win_reg.set_value(hive="HKLM", key=fake_key, vname="fake_name", vdata="fake_data") - yield "HKLM\\{}".format(fake_key) + yield f"HKLM\\{fake_key}" win_reg.delete_key_recursive(hive="HKLM", key=fake_key) diff --git a/tests/pytests/unit/modules/file/test_file_block_replace.py b/tests/pytests/unit/modules/file/test_file_block_replace.py index 71e2d970895..8a05154f41c 100644 --- a/tests/pytests/unit/modules/file/test_file_block_replace.py +++ b/tests/pytests/unit/modules/file/test_file_block_replace.py @@ -206,9 +206,7 @@ def test_replace_append(multiline_file): with salt.utils.files.fopen(multiline_file, "rb") as fp: assert ( salt.utils.stringutils.to_bytes( - os.linesep.join( - ["#-- START BLOCK 2", "{}#-- END BLOCK 2".format(new_content)] - ) + os.linesep.join(["#-- START BLOCK 2", f"{new_content}#-- END BLOCK 2"]) ) in fp.read() ) @@ -249,9 +247,7 @@ def test_replace_insert_after(multiline_file): with salt.utils.files.fopen(multiline_file, "rb") as fp: assert ( salt.utils.stringutils.to_bytes( - os.linesep.join( - ["#-- START BLOCK 2", "{}#-- END BLOCK 2".format(new_content)] - ) + os.linesep.join(["#-- START BLOCK 2", f"{new_content}#-- END BLOCK 2"]) ) in fp.read() ) @@ -328,9 +324,7 @@ def test_replace_prepend(multiline_file): with salt.utils.files.fopen(multiline_file, "rb") as fp: assert ( salt.utils.stringutils.to_bytes( - os.linesep.join( - ["#-- START BLOCK 2", "{}#-- END BLOCK 2".format(new_content)] - ) + os.linesep.join(["#-- START BLOCK 2", f"{new_content}#-- END BLOCK 2"]) ) not in fp.read() ) @@ -355,7 +349,7 @@ def test_replace_prepend(multiline_file): os.linesep.join( [ "#-- START BLOCK 2", - "{}#-- END BLOCK 2".format(new_content), + f"{new_content}#-- END BLOCK 2", ] ) ) @@ -397,9 +391,7 @@ def test_replace_insert_before(multiline_file): with salt.utils.files.fopen(multiline_file, "rb") as fp: assert ( salt.utils.stringutils.to_bytes( - os.linesep.join( - ["#-- START BLOCK 2", "{}#-- END BLOCK 2".format(new_content)] - ) + os.linesep.join(["#-- START BLOCK 2", f"{new_content}#-- END BLOCK 2"]) ) in fp.read() ) @@ -431,7 +423,7 @@ def test_replace_partial_marked_lines(multiline_file): def test_backup(multiline_file): fext = ".bak" - bak_file = "{}{}".format(multiline_file, fext) + bak_file = f"{multiline_file}{fext}" if salt.utils.platform.is_windows(): check_perms_patch = win_file.check_perms @@ -451,7 +443,7 @@ def test_backup(multiline_file): assert not os.path.exists(bak_file) fext = ".bak" - bak_file = "{}{}".format(multiline_file, fext) + bak_file = f"{multiline_file}{fext}" if salt.utils.platform.is_windows(): check_perms_patch = win_file.check_perms diff --git a/tests/unit/modules/test_heat.py b/tests/unit/modules/test_heat.py index 4aaec60eecd..5419913268d 100644 --- a/tests/unit/modules/test_heat.py +++ b/tests/unit/modules/test_heat.py @@ -162,7 +162,7 @@ class HeatTestCase(TestCase, LoaderModuleMockMixin): ) assert ret == { "result": False, - "comment": "Can not open environment: {}, ".format(env_file), + "comment": f"Can not open environment: {env_file}, ", } def test_heat_update_stack(self): From a919a3ea8782b252a3e65ad8787f73a906cf7fa5 Mon Sep 17 00:00:00 2001 From: David Murphy < dmurphy@saltstack.com> Date: Fri, 13 Oct 2023 15:41:51 -0600 Subject: [PATCH 070/153] Initial port of test/unit/module/test_postgres.py to pytests --- tests/pytests/unit/modules/test_postgres.py | 2049 +++++++++++++++++- tests/unit/modules/test_postgres.py | 2086 ------------------- 2 files changed, 2048 insertions(+), 2087 deletions(-) delete mode 100644 tests/unit/modules/test_postgres.py diff --git a/tests/pytests/unit/modules/test_postgres.py b/tests/pytests/unit/modules/test_postgres.py index 393c087d164..ee3d907b901 100644 --- a/tests/pytests/unit/modules/test_postgres.py +++ b/tests/pytests/unit/modules/test_postgres.py @@ -1,8 +1,15 @@ +import datetime +import logging +import re + import pytest import salt.modules.config as configmod import salt.modules.postgres as postgres -from tests.support.mock import MagicMock, patch +from salt.exceptions import SaltInvocationError +from tests.support.mock import MagicMock, Mock, call, patch + +log = logging.getLogger(__name__) # 'md5' + md5('password' + 'username') md5_pw = "md55a231fcdb710d73268c4f44283487ba2" @@ -17,6 +24,33 @@ test_privileges_list_function_csv = ( 'name\n"{baruwatest=X/baruwatest,bayestest=r/baruwatest,baruwa=X*/baruwatest}"\n' ) +test_list_db_csv = ( + "Name,Owner,Encoding,Collate,Ctype,Access privileges,Tablespace\n" + "template1,postgres,LATIN1,en_US,en_US" + ',"{=c/postgres,postgres=CTc/postgres}",pg_default\n' + "template0,postgres,LATIN1,en_US,en_US" + ',"{=c/postgres,postgres=CTc/postgres}",pg_default\n' + "postgres,postgres,LATIN1,en_US,en_US,,pg_default\n" + "test_db,postgres,LATIN1,en_US,en_US,,pg_default" +) + +test_list_schema_csv = ( + "name,owner,acl\n" + 'public,postgres,"{postgres=UC/postgres,=UC/postgres}"\n' + 'pg_toast,postgres,""' +) + +test_list_language_csv = "Name\ninternal\nc\nsql\nplpgsql\n" + +test_privileges_list_table_csv = ( + "name\n" + '"{baruwatest=arwdDxt/baruwatest,bayestest=arwd/baruwatest,baruwa=a*r*w*d*D*x*t*/baruwatest}"\n' +) + +test_privileges_list_group_csv = ( + "rolname,admin_option\nbaruwa,f\nbaruwatest2,t\nbaruwatest,f\n" +) + @pytest.fixture def configure_loader_modules(): @@ -181,3 +215,2016 @@ def test__run_initdb_with_timeout(): with patch.dict(configmod.__opts__, {"postgres.pass": None}): postgres._run_initdb("fakename", runas="saltuser") cmd_run_mock.assert_called_with(cmd_str, timeout=0, **kwargs) + + +def test_run_psql(): + postgres._run_psql('echo "hi"') + cmd = postgres.__salt__["cmd.run_all"] + assert "postgres" == cmd.call_args[1]["runas"] + + +def test_db_alter(): + with patch( + "salt.modules.postgres._run_psql", Mock(return_value={"retcode": 0}) + ), patch("salt.utils.path.which", MagicMock(return_value="/usr/bin/pgsql")): + ret = postgres.db_alter( + "dbname", + user="testuser", + host="testhost", + port="testport", + maintenance_db="maint_db", + password="foo", + tablespace="testspace", + owner="otheruser", + runas="foo", + ) + log.warning(f"DGM test_db_alter ret '{ret}'") + + postgres._run_psql.assert_has_calls( + [ + call( + [ + "/usr/bin/pgsql", + "--no-align", + "--no-readline", + "--no-psqlrc", + "--no-password", + "--username", + "testuser", + "--host", + "testhost", + "--port", + "testport", + "--dbname", + "maint_db", + "-c", + 'ALTER DATABASE "dbname" OWNER TO "otheruser"', + ], + host="testhost", + user="testuser", + password="foo", + runas="foo", + port="testport", + ), + call( + [ + "/usr/bin/pgsql", + "--no-align", + "--no-readline", + "--no-psqlrc", + "--no-password", + "--username", + "testuser", + "--host", + "testhost", + "--port", + "testport", + "--dbname", + "maint_db", + "-c", + 'ALTER DATABASE "dbname" SET TABLESPACE "testspace"', + ], + host="testhost", + user="testuser", + password="foo", + runas="foo", + port="testport", + ), + ] + ) + + +def test_db_alter_owner_recurse(): + with patch( + "salt.modules.postgres.owner_to", Mock(return_value={"retcode": None}) + ), patch("salt.utils.path.which", MagicMock(return_value="/usr/bin/pgsql")): + postgres.db_alter( + "dbname", + user="testuser", + host="testhost", + port="testport", + maintenance_db="maint_db", + password="foo", + tablespace="testspace", + owner="otheruser", + owner_recurse=True, + runas="foo", + ) + postgres.owner_to.assert_called_once_with( + "dbname", + "otheruser", + user="testuser", + host="testhost", + port="testport", + password="foo", + runas="foo", + ) + + +def test_db_create(): + with patch( + "salt.modules.postgres._run_psql", Mock(return_value={"retcode": 0}) + ), patch("salt.utils.path.which", MagicMock(return_value="/usr/bin/pgsql")): + postgres.db_create( + "dbname", + user="testuser", + host="testhost", + port="testport", + maintenance_db="maint_db", + password="foo", + tablespace="testspace", + owner="otheruser", + runas="foo", + ) + + postgres._run_psql.assert_called_once_with( + [ + "/usr/bin/pgsql", + "--no-align", + "--no-readline", + "--no-psqlrc", + "--no-password", + "--username", + "testuser", + "--host", + "testhost", + "--port", + "testport", + "--dbname", + "maint_db", + "-c", + 'CREATE DATABASE "dbname" WITH TABLESPACE = "testspace" ' + 'OWNER = "otheruser"', + ], + host="testhost", + user="testuser", + password="foo", + runas="foo", + port="testport", + ) + + +def test_db_create_empty_string_param(): + with patch( + "salt.modules.postgres._run_psql", Mock(return_value={"retcode": 0}) + ), patch("salt.utils.path.which", MagicMock(return_value="/usr/bin/pgsql")): + postgres.db_create( + "dbname", + lc_collate="", + encoding="utf8", + user="testuser", + host="testhost", + port=1234, + maintenance_db="maint_db", + password="foo", + ) + + postgres._run_psql.assert_called_once_with( + [ + "/usr/bin/pgsql", + "--no-align", + "--no-readline", + "--no-psqlrc", + "--no-password", + "--username", + "testuser", + "--host", + "testhost", + "--port", + "1234", + "--dbname", + "maint_db", + "-c", + "CREATE DATABASE \"dbname\" WITH ENCODING = 'utf8' LC_COLLATE = ''", + ], + host="testhost", + password="foo", + port=1234, + runas=None, + user="testuser", + ) + + +def test_db_create_with_trivial_sql_injection(): + with patch( + "salt.modules.postgres._run_psql", Mock(return_value={"retcode": 0}) + ), patch("salt.utils.path.which", MagicMock(return_value="/usr/bin/pgsql")): + pytest.raises( + SaltInvocationError, + postgres.db_create, + "dbname", + lc_collate="foo' ENCODING='utf8", + ) + + +def test_db_exists(): + with patch( + "salt.modules.postgres._run_psql", + Mock(return_value={"retcode": 0, "stdout": test_list_db_csv}), + ), patch("salt.utils.path.which", MagicMock(return_value="/usr/bin/pgsql")): + ret = postgres.db_exists( + "test_db", + user="testuser", + host="testhost", + port="testport", + maintenance_db="maint_db", + password="foo", + runas="foo", + ) + assert ret + + +def test_db_list(): + with patch( + "salt.modules.postgres._run_psql", + Mock(return_value={"retcode": 0, "stdout": test_list_db_csv}), + ), patch("salt.utils.path.which", MagicMock(return_value="/usr/bin/pgsql")): + ret = postgres.db_list( + user="testuser", + host="testhost", + port="testport", + maintenance_db="maint_db", + password="foo", + runas="foo", + ) + assert ret == { + "test_db": { + "Encoding": "LATIN1", + "Ctype": "en_US", + "Tablespace": "pg_default", + "Collate": "en_US", + "Owner": "postgres", + "Access privileges": "", + }, + "template1": { + "Encoding": "LATIN1", + "Ctype": "en_US", + "Tablespace": "pg_default", + "Collate": "en_US", + "Owner": "postgres", + "Access privileges": "{=c/postgres,postgres=CTc/postgres}", + }, + "template0": { + "Encoding": "LATIN1", + "Ctype": "en_US", + "Tablespace": "pg_default", + "Collate": "en_US", + "Owner": "postgres", + "Access privileges": "{=c/postgres,postgres=CTc/postgres}", + }, + "postgres": { + "Encoding": "LATIN1", + "Ctype": "en_US", + "Tablespace": "pg_default", + "Collate": "en_US", + "Owner": "postgres", + "Access privileges": "", + }, + } + + +def test_db_remove(): + with patch( + "salt.modules.postgres._run_psql", Mock(return_value={"retcode": 0}) + ), patch("salt.utils.path.which", MagicMock(return_value="/usr/bin/pgsql")): + postgres.db_remove( + "test_db", + user="testuser", + host="testhost", + port="testport", + maintenance_db="maint_db", + password="foo", + runas="foo", + ) + + calls = ( + call( + [ + "/usr/bin/pgsql", + "--no-align", + "--no-readline", + "--no-psqlrc", + "--no-password", + "--username", + "testuser", + "--host", + "testhost", + "--port", + "testport", + "--dbname", + "maint_db", + "-c", + 'REVOKE CONNECT ON DATABASE "test_db" FROM public;', + ], + host="testhost", + password="foo", + port="testport", + runas="foo", + user="testuser", + ), + call( + [ + "/usr/bin/pgsql", + "--no-align", + "--no-readline", + "--no-psqlrc", + "--no-password", + "--username", + "testuser", + "--host", + "testhost", + "--port", + "testport", + "--dbname", + "maint_db", + "-c", + "SELECT pid, pg_terminate_backend(pid) FROM pg_stat_activity" + " WHERE datname = 'test_db' AND pid <> pg_backend_pid();", + ], + host="testhost", + password="foo", + port="testport", + runas="foo", + user="testuser", + ), + call( + [ + "/usr/bin/pgsql", + "--no-align", + "--no-readline", + "--no-psqlrc", + "--no-password", + "--username", + "testuser", + "--host", + "testhost", + "--port", + "testport", + "--dbname", + "maint_db", + "-c", + 'DROP DATABASE "test_db";', + ], + host="testhost", + password="foo", + port="testport", + runas="foo", + user="testuser", + ), + ) + + postgres._run_psql.assert_has_calls(calls, any_order=True) + + +def test_group_create(): + with patch( + "salt.modules.postgres._run_psql", Mock(return_value={"retcode": 0}) + ), patch("salt.utils.path.which", MagicMock(return_value="/usr/bin/pgsql")), patch( + "salt.modules.postgres.user_exists", Mock(return_value=False) + ): + postgres.group_create( + "testgroup", + user="testuser", + host="testhost", + port="testport", + maintenance_db="maint_db", + password="foo", + createdb=False, + encrypted=False, + superuser=False, + replication=False, + rolepassword="testrolepass", + groups="testgroup", + runas="foo", + ) + # postgres._run_psql.call_args[0][0] will contain the list of CLI args. + # The first 14 elements of this list are initial args used in all (or + # virtually all) commands run through _run_psql(), so the actual SQL + # query will be in the 15th argument. + assert postgres._run_psql.call_args[0][0][14].startswith("CREATE ROLE") + + +def test_group_remove(): + with patch( + "salt.modules.postgres._run_psql", Mock(return_value={"retcode": 0}) + ), patch("salt.utils.path.which", MagicMock(return_value="/usr/bin/pgsql")), patch( + "salt.modules.postgres.user_exists", Mock(return_value=True) + ): + postgres.group_remove( + "testgroup", + user="testuser", + host="testhost", + port="testport", + maintenance_db="maint_db", + password="foo", + runas="foo", + ) + postgres._run_psql.assert_called_once_with( + [ + "/usr/bin/pgsql", + "--no-align", + "--no-readline", + "--no-psqlrc", + "--no-password", + "--username", + "testuser", + "--host", + "testhost", + "--port", + "testport", + "--dbname", + "maint_db", + "-c", + 'DROP ROLE "testgroup"', + ], + host="testhost", + user="testuser", + password="foo", + runas="foo", + port="testport", + ) + + +def test_group_update(): + with patch( + "salt.modules.postgres._run_psql", Mock(return_value={"retcode": 0}) + ), patch( + "salt.modules.postgres.role_get", + Mock(return_value={"superuser": False}), + ): + postgres.group_update( + "testgroup", + user='"testuser"', + host="testhost", + port="testport", + maintenance_db="maint_db", + password="foo", + createdb=False, + encrypted=False, + replication=False, + rolepassword="test_role_pass", + groups="testgroup", + runas="foo", + ) + # postgres._run_psql.call_args[0][0] will contain the list of CLI args. + # The first 14 elements of this list are initial args used in all (or + # virtually all) commands run through _run_psql(), so the actual SQL + # query will be in the 15th argument. + assert re.match( + 'ALTER.* "testgroup" .* UNENCRYPTED PASSWORD', + postgres._run_psql.call_args[0][0][14], + ) + + +def test_user_create(): + with patch( + "salt.modules.postgres._run_psql", Mock(return_value={"retcode": 0}) + ), patch("salt.modules.postgres.user_exists", Mock(return_value=False)): + postgres.user_create( + "testuser", + user="testuser", + host="testhost", + port="testport", + maintenance_db="maint_test", + password="test_pass", + login=True, + createdb=False, + createroles=False, + encrypted=False, + superuser=False, + replication=False, + rolepassword="test_role_pass", + valid_until="2042-07-01", + groups="test_groups", + runas="foo", + ) + # postgres._run_psql.call_args[0][0] will contain the list of CLI args. + # The first 14 elements of this list are initial args used in all (or + # virtually all) commands run through _run_psql(), so the actual SQL + # query will be in the 15th argument. + call = postgres._run_psql.call_args[0][0][14] + assert re.match('CREATE ROLE "testuser"', call) + for i in ( + "INHERIT", + "NOCREATEDB", + "NOCREATEROLE", + "NOSUPERUSER", + "NOREPLICATION", + "LOGIN", + "UNENCRYPTED", + "PASSWORD", + "VALID UNTIL", + ): + assert i in call, f"{i} not in {call}" + + +def test_user_exists(): + with patch( + "salt.modules.postgres._run_psql", Mock(return_value={"retcode": 0}) + ), patch("salt.modules.postgres.version", Mock(return_value="9.1")), patch( + "salt.modules.postgres.psql_query", + Mock( + return_value=[ + { + "name": "test_user", + "superuser": "t", + "inherits privileges": "t", + "can create roles": "t", + "can create databases": "t", + "can update system catalogs": "t", + "can login": "t", + "replication": None, + "password": "test_password", + "connections": "-1", + "groups": "", + "expiry time": "", + "defaults variables": None, + } + ] + ), + ): + ret = postgres.user_exists( + "test_user", + user="test_user", + host="test_host", + port="test_port", + maintenance_db="maint_db", + password="test_password", + runas="foo", + ) + assert ret + + +def test_user_list(): + with patch( + "salt.modules.postgres._run_psql", Mock(return_value={"retcode": 0}) + ), patch("salt.modules.postgres.version", Mock(return_value="9.1")), patch( + "salt.modules.postgres.psql_query", + Mock( + return_value=[ + { + "name": "test_user", + "superuser": "t", + "inherits privileges": "t", + "can create roles": "t", + "can create databases": "t", + "can update system catalogs": "t", + "can login": "t", + "replication": None, + "connections": "-1", + "groups": "", + "expiry time": "2017-08-16 08:57:46", + "defaults variables": None, + } + ] + ), + ): + ret = postgres.user_list( + "test_user", + host="test_host", + port="test_port", + maintenance_db="maint_db", + password="test_password", + runas="foo", + ) + + assert ret == { + "test_user": { + "superuser": True, + "defaults variables": None, + "can create databases": True, + "can create roles": True, + "connections": None, + "replication": None, + "expiry time": datetime.datetime(2017, 8, 16, 8, 57, 46), + "can login": True, + "can update system catalogs": True, + "groups": [], + "inherits privileges": True, + } + } + + +def test_user_remove(): + with patch( + "salt.modules.postgres._run_psql", Mock(return_value={"retcode": 0}) + ), patch("salt.utils.path.which", MagicMock(return_value="/usr/bin/pgsql")), patch( + "salt.modules.postgres.version", Mock(return_value="9.1") + ), patch( + "salt.modules.postgres.user_exists", Mock(return_value=True) + ): + postgres.user_remove( + "testuser", + user="testuser", + host="testhost", + port="testport", + maintenance_db="maint_db", + password="testpassword", + runas="foo", + ) + postgres._run_psql.assert_called_once_with( + [ + "/usr/bin/pgsql", + "--no-align", + "--no-readline", + "--no-psqlrc", + "--no-password", + "--username", + "testuser", + "--host", + "testhost", + "--port", + "testport", + "--dbname", + "maint_db", + "-c", + 'DROP ROLE "testuser"', + ], + host="testhost", + port="testport", + user="testuser", + password="testpassword", + runas="foo", + ) + + +def test_user_update(): + with patch( + "salt.modules.postgres._run_psql", Mock(return_value={"retcode": 0}) + ), patch( + "salt.modules.postgres.role_get", + Mock(return_value={"superuser": False}), + ): + postgres.user_update( + "test_username", + user="test_user", + host="test_host", + port="test_port", + maintenance_db="test_maint", + password="test_pass", + createdb=False, + createroles=False, + encrypted=False, + inherit=True, + login=True, + replication=False, + rolepassword="test_role_pass", + valid_until="2017-07-01", + groups="test_groups", + runas="foo", + ) + # postgres._run_psql.call_args[0][0] will contain the list of CLI args. + # The first 14 elements of this list are initial args used in all (or + # virtually all) commands run through _run_psql(), so the actual SQL + # query will be in the 15th argument. + assert re.match( + 'ALTER ROLE "test_username" WITH INHERIT NOCREATEDB ' + "NOCREATEROLE NOREPLICATION LOGIN " + "UNENCRYPTED PASSWORD ['\"]{0,5}test_role_pass['\"]{0,5} " + "VALID UNTIL '2017-07-01';" + ' GRANT "test_groups" TO "test_username"', + postgres._run_psql.call_args[0][0][14], + ) + + +def test_user_update2(): + with patch( + "salt.modules.postgres._run_psql", Mock(return_value={"retcode": 0}) + ), patch( + "salt.modules.postgres.role_get", + Mock(return_value={"superuser": False}), + ): + postgres.user_update( + "test_username", + user="test_user", + host="test_host", + port="test_port", + maintenance_db="test_maint", + password="test_pass", + createdb=False, + createroles=True, + encrypted=False, + inherit=True, + login=True, + replication=False, + groups="test_groups", + runas="foo", + ) + # postgres._run_psql.call_args[0][0] will contain the list of CLI args. + # The first 14 elements of this list are initial args used in all (or + # virtually all) commands run through _run_psql(), so the actual SQL + # query will be in the 15th argument. + assert re.match( + 'ALTER ROLE "test_username" WITH INHERIT NOCREATEDB ' + "CREATEROLE NOREPLICATION LOGIN;" + ' GRANT "test_groups" TO "test_username"', + postgres._run_psql.call_args[0][0][14], + ) + + +def test_user_update3(): + with patch( + "salt.modules.postgres._run_psql", Mock(return_value={"retcode": 0}) + ), patch( + "salt.modules.postgres.role_get", + Mock(return_value={"superuser": False}), + ): + postgres.user_update( + "test_username", + user="test_user", + host="test_host", + port="test_port", + maintenance_db="test_maint", + password="test_pass", + createdb=False, + createroles=True, + encrypted=False, + inherit=True, + login=True, + rolepassword=False, + replication=False, + groups="test_groups", + runas="foo", + ) + # postgres._run_psql.call_args[0][0] will contain the list of CLI args. + # The first 14 elements of this list are initial args used in all (or + # virtually all) commands run through _run_psql(), so the actual SQL + # query will be in the 15th argument. + assert re.match( + 'ALTER ROLE "test_username" WITH INHERIT NOCREATEDB ' + "CREATEROLE NOREPLICATION LOGIN NOPASSWORD;" + ' GRANT "test_groups" TO "test_username"', + postgres._run_psql.call_args[0][0][14], + ) + + +def test_user_update_encrypted_passwd(): + with patch( + "salt.modules.postgres._run_psql", Mock(return_value={"retcode": 0}) + ), patch( + "salt.modules.postgres.role_get", + Mock(return_value={"superuser": False}), + ): + postgres.user_update( + "test_username", + user="test_user", + host="test_host", + port="test_port", + maintenance_db="test_maint", + password="test_pass", + createdb=False, + createroles=True, + encrypted=True, + inherit=True, + login=True, + rolepassword="foobar", + replication=False, + groups="test_groups", + runas="foo", + ) + # postgres._run_psql.call_args[0][0] will contain the list of CLI args. + # The first 14 elements of this list are initial args used in all (or + # virtually all) commands run through _run_psql(), so the actual SQL + # query will be in the 15th argument. + assert re.match( + 'ALTER ROLE "test_username" WITH INHERIT NOCREATEDB ' + "CREATEROLE NOREPLICATION LOGIN " + "ENCRYPTED PASSWORD " + "['\"]{0,5}md531c27e68d3771c392b52102c01be1da1['\"]{0,5}" + '; GRANT "test_groups" TO "test_username"', + postgres._run_psql.call_args[0][0][14], + ) + + +def test_version(): + with patch( + "salt.modules.postgres._run_psql", + Mock(return_value={"retcode": 0, "stdout": "9.1.9"}), + ): + postgres.version( + user="test_user", + host="test_host", + port="test_port", + maintenance_db="test_maint", + password="test_pass", + runas="foo", + ) + # postgres._run_psql.call_args[0][0] will contain the list of CLI args. + # The first 14 elements of this list are initial args used in all (or + # virtually all) commands run through _run_psql(), so the actual SQL + # query will be in the 15th argument. + assert re.match( + "SELECT setting FROM pg_catalog.pg_settings", + postgres._run_psql.call_args[0][0][14], + ) + + +def test_installed_extensions(): + with patch( + "salt.modules.postgres.psql_query", + Mock(return_value=[{"extname": "foo", "extversion": "1"}]), + ): + exts = postgres.installed_extensions() + assert exts == {"foo": {"extversion": "1", "extname": "foo"}} + + +def test_available_extensions(): + with patch( + "salt.modules.postgres.psql_query", + Mock(return_value=[{"name": "foo", "default_version": "1"}]), + ): + exts = postgres.available_extensions() + assert exts == {"foo": {"default_version": "1", "name": "foo"}} + + +def test_drop_extension2(): + with patch( + "salt.modules.postgres.installed_extensions", Mock(side_effect=[{}, {}]) + ): + with patch( + "salt.modules.postgres._psql_prepare_and_run", Mock(return_value=None) + ): + with patch( + "salt.modules.postgres.available_extensions", + Mock(return_value={"foo": {"default_version": "1", "name": "foo"}}), + ): + assert postgres.drop_extension("foo") + + +def test_drop_extension3(): + with patch( + "salt.modules.postgres.installed_extensions", + Mock(side_effect=[{"foo": {"extversion": "1", "extname": "foo"}}, {}]), + ): + with patch( + "salt.modules.postgres._psql_prepare_and_run", Mock(return_value=None) + ): + with patch( + "salt.modules.postgres.available_extensions", + Mock(return_value={"foo": {"default_version": "1", "name": "foo"}}), + ): + assert postgres.drop_extension("foo") + + +def test_drop_extension1(): + with patch( + "salt.modules.postgres.installed_extensions", + Mock( + side_effect=[ + {"foo": {"extversion": "1", "extname": "foo"}}, + {"foo": {"extversion": "1", "extname": "foo"}}, + ] + ), + ): + with patch( + "salt.modules.postgres._psql_prepare_and_run", Mock(return_value=None) + ): + with patch( + "salt.modules.postgres.available_extensions", + Mock(return_value={"foo": {"default_version": "1", "name": "foo"}}), + ): + assert not postgres.drop_extension("foo") + + +def test_create_mtdata(): + with patch( + "salt.modules.postgres.installed_extensions", + Mock( + return_value={ + "foo": { + "extversion": "0.8", + "extrelocatable": "t", + "schema_name": "foo", + "extname": "foo", + } + }, + ), + ): + with patch( + "salt.modules.postgres.available_extensions", + Mock(return_value={"foo": {"default_version": "1.4", "name": "foo"}}), + ): + ret = postgres.create_metadata("foo", schema="bar", ext_version="1.4") + assert postgres._EXTENSION_INSTALLED in ret + assert postgres._EXTENSION_TO_UPGRADE in ret + assert postgres._EXTENSION_TO_MOVE in ret + + ret = postgres.create_metadata("foo", schema="foo", ext_version="0.4") + assert postgres._EXTENSION_INSTALLED in ret + assert postgres._EXTENSION_TO_UPGRADE not in ret + assert postgres._EXTENSION_TO_MOVE not in ret + + ret = postgres.create_metadata("foo") + assert postgres._EXTENSION_INSTALLED in ret + assert postgres._EXTENSION_TO_UPGRADE not in ret + assert postgres._EXTENSION_TO_MOVE not in ret + + ret = postgres.create_metadata("foobar") + assert postgres._EXTENSION_NOT_INSTALLED in ret + assert postgres._EXTENSION_INSTALLED not in ret + assert postgres._EXTENSION_TO_UPGRADE not in ret + assert postgres._EXTENSION_TO_MOVE not in ret + + +def test_create_extension_newerthan(): + """ + scenario of creating upgrading extensions with possible schema and + version specifications + """ + with patch( + "salt.modules.postgres.create_metadata", + Mock( + side_effect=[ + # create succeeded + [postgres._EXTENSION_NOT_INSTALLED], + [postgres._EXTENSION_INSTALLED], + [postgres._EXTENSION_NOT_INSTALLED], + [postgres._EXTENSION_INSTALLED], + # create failed + [postgres._EXTENSION_NOT_INSTALLED], + [postgres._EXTENSION_NOT_INSTALLED], + # move+upgrade succeeded + [ + postgres._EXTENSION_TO_MOVE, + postgres._EXTENSION_TO_UPGRADE, + postgres._EXTENSION_INSTALLED, + ], + [postgres._EXTENSION_INSTALLED], + # move succeeded + [postgres._EXTENSION_TO_MOVE, postgres._EXTENSION_INSTALLED], + [postgres._EXTENSION_INSTALLED], + # upgrade succeeded + [postgres._EXTENSION_TO_UPGRADE, postgres._EXTENSION_INSTALLED], + [postgres._EXTENSION_INSTALLED], + # upgrade failed + [postgres._EXTENSION_TO_UPGRADE, postgres._EXTENSION_INSTALLED], + [postgres._EXTENSION_TO_UPGRADE, postgres._EXTENSION_INSTALLED], + # move failed + [postgres._EXTENSION_TO_MOVE, postgres._EXTENSION_INSTALLED], + [postgres._EXTENSION_TO_MOVE, postgres._EXTENSION_INSTALLED], + ] + ), + ): + with patch( + "salt.modules.postgres._psql_prepare_and_run", Mock(return_value=None) + ): + with patch( + "salt.modules.postgres.available_extensions", + Mock(return_value={"foo": {"default_version": "1.4", "name": "foo"}}), + ): + assert postgres.create_extension("foo") + assert re.match( + 'CREATE EXTENSION IF NOT EXISTS "foo" ;', + postgres._psql_prepare_and_run.call_args[0][0][1], + ) + + assert postgres.create_extension( + "foo", schema="a", ext_version="b", from_version="c" + ) + assert re.match( + 'CREATE EXTENSION IF NOT EXISTS "foo" ' + 'WITH SCHEMA "a" VERSION b FROM c ;', + postgres._psql_prepare_and_run.call_args[0][0][1], + ) + assert not postgres.create_extension("foo") + + ret = postgres.create_extension("foo", ext_version="a", schema="b") + assert ret + assert re.match( + 'ALTER EXTENSION "foo" SET SCHEMA "b";' + ' ALTER EXTENSION "foo" UPDATE TO a;', + postgres._psql_prepare_and_run.call_args[0][0][1], + ) + + ret = postgres.create_extension("foo", ext_version="a", schema="b") + assert ret + assert re.match( + 'ALTER EXTENSION "foo" SET SCHEMA "b";', + postgres._psql_prepare_and_run.call_args[0][0][1], + ) + + ret = postgres.create_extension("foo", ext_version="a", schema="b") + assert ret + assert re.match( + 'ALTER EXTENSION "foo" UPDATE TO a;', + postgres._psql_prepare_and_run.call_args[0][0][1], + ) + assert not postgres.create_extension("foo", ext_version="a", schema="b") + assert not postgres.create_extension("foo", ext_version="a", schema="b") + + +def test_encrypt_passwords(): + assert postgres._maybe_encrypt_password("foo", "bar", False) == "bar" + assert ( + postgres._maybe_encrypt_password("foo", "bar", True) + == "md596948aad3fcae80c08a35c9b5958cd89" + ) + + +def test_schema_list(): + with patch( + "salt.modules.postgres._run_psql", + Mock(return_value={"retcode": 0, "stdout": test_list_schema_csv}), + ): + ret = postgres.schema_list( + "maint_db", + db_user="testuser", + db_host="testhost", + db_port="testport", + db_password="foo", + ) + assert ret == { + "public": { + "acl": "{postgres=UC/postgres,=UC/postgres}", + "owner": "postgres", + }, + "pg_toast": {"acl": "", "owner": "postgres"}, + } + + +def test_schema_exists(): + with patch("salt.modules.postgres._run_psql", Mock(return_value={"retcode": 0})): + with patch( + "salt.modules.postgres.psql_query", + Mock( + return_value=[ + { + "name": "public", + "acl": "{postgres=UC/postgres,=UC/postgres}", + "owner": "postgres", + } + ] + ), + ): + ret = postgres.schema_exists("template1", "public") + assert ret + + +def test_schema_get(): + with patch("salt.modules.postgres._run_psql", Mock(return_value={"retcode": 0})): + with patch( + "salt.modules.postgres.psql_query", + Mock( + return_value=[ + { + "name": "public", + "acl": "{postgres=UC/postgres,=UC/postgres}", + "owner": "postgres", + } + ] + ), + ): + ret = postgres.schema_get("template1", "public") + assert ret + + +def test_schema_get_again(): + with patch("salt.modules.postgres._run_psql", Mock(return_value={"retcode": 0})): + with patch( + "salt.modules.postgres.psql_query", + Mock( + return_value=[ + { + "name": "public", + "acl": "{postgres=UC/postgres,=UC/postgres}", + "owner": "postgres", + } + ] + ), + ): + ret = postgres.schema_get("template1", "pg_toast") + assert not ret + + +def test_schema_create(): + with patch( + "salt.modules.postgres._run_psql", Mock(return_value={"retcode": 0}) + ), patch("salt.utils.path.which", MagicMock(return_value="/usr/bin/pgsql")): + with patch("salt.modules.postgres.schema_exists", Mock(return_value=False)): + postgres.schema_create( + "maint_db", + "testschema", + user="user", + db_host="testhost", + db_port="testport", + db_user="testuser", + db_password="testpassword", + ) + postgres._run_psql.assert_called_once_with( + [ + "/usr/bin/pgsql", + "--no-align", + "--no-readline", + "--no-psqlrc", + "--no-password", + "--username", + "testuser", + "--host", + "testhost", + "--port", + "testport", + "--dbname", + "maint_db", + "-c", + 'CREATE SCHEMA "testschema"', + ], + host="testhost", + port="testport", + password="testpassword", + user="testuser", + runas="user", + ) + + +def test_schema_create2(): + with patch("salt.modules.postgres.schema_exists", Mock(return_value=True)): + ret = postgres.schema_create( + "test_db", + "test_schema", + user="user", + db_host="test_host", + db_port="test_port", + db_user="test_user", + db_password="test_password", + ) + assert not ret + + +def test_schema_remove(): + with patch( + "salt.modules.postgres._run_psql", Mock(return_value={"retcode": 0}) + ), patch("salt.utils.path.which", MagicMock(return_value="/usr/bin/pgsql")): + with patch("salt.modules.postgres.schema_exists", Mock(return_value=True)): + postgres.schema_remove( + "maint_db", + "testschema", + user="user", + db_host="testhost", + db_port="testport", + db_user="testuser", + db_password="testpassword", + ) + postgres._run_psql.assert_called_once_with( + [ + "/usr/bin/pgsql", + "--no-align", + "--no-readline", + "--no-psqlrc", + "--no-password", + "--username", + "testuser", + "--host", + "testhost", + "--port", + "testport", + "--dbname", + "maint_db", + "-c", + 'DROP SCHEMA "testschema"', + ], + host="testhost", + port="testport", + password="testpassword", + user="testuser", + runas="user", + ) + + +def test_schema_remove2(): + with patch("salt.modules.postgres.schema_exists", Mock(return_value=False)): + ret = postgres.schema_remove( + "test_db", + "test_schema", + user="user", + db_host="test_host", + db_port="test_port", + db_user="test_user", + db_password="test_password", + ) + assert not ret + + +def test_language_list(): + """ + Test language listing + """ + with patch( + "salt.modules.postgres._run_psql", + Mock(return_value={"retcode": 0, "stdout": test_list_language_csv}), + ): + ret = postgres.language_list( + "testdb", + user="testuser", + host="testhost", + port="testport", + password="foo", + ) + assert ret == { + "c": "c", + "internal": "internal", + "plpgsql": "plpgsql", + "sql": "sql", + } + + +def test_language_exists(): + """ + Test language existence check + """ + with patch("salt.modules.postgres._run_psql", Mock(return_value={"retcode": 0})): + with patch( + "salt.modules.postgres.psql_query", + Mock( + return_value=[ + {"Name": "internal"}, + {"Name": "c"}, + {"Name": "sql"}, + {"Name": "plpgsql"}, + ] + ), + ): + with patch( + "salt.modules.postgres.language_exists", Mock(return_value=True) + ): + ret = postgres.language_exists("sql", "testdb") + assert ret + + +def test_language_create(): + """ + Test language creation - does not exist in db + """ + with patch( + "salt.modules.postgres._run_psql", Mock(return_value={"retcode": 0}) + ), patch("salt.utils.path.which", MagicMock(return_value="/usr/bin/pgsql")): + with patch("salt.modules.postgres.language_exists", Mock(return_value=False)): + postgres.language_create( + "plpythonu", + "testdb", + runas="user", + host="testhost", + port="testport", + user="testuser", + password="testpassword", + ) + postgres._run_psql.assert_called_once_with( + [ + "/usr/bin/pgsql", + "--no-align", + "--no-readline", + "--no-psqlrc", + "--no-password", + "--username", + "testuser", + "--host", + "testhost", + "--port", + "testport", + "--dbname", + "testdb", + "-c", + "CREATE LANGUAGE plpythonu", + ], + host="testhost", + port="testport", + password="testpassword", + user="testuser", + runas="user", + ) + + +def test_language_create_exists(): + """ + Test language creation - already exists in db + """ + with patch("salt.modules.postgres.language_exists", Mock(return_value=True)): + ret = postgres.language_create( + "plpythonu", + "testdb", + runas="user", + host="testhost", + port="testport", + user="testuser", + password="testpassword", + ) + assert not ret + + +def test_language_remove(): + """ + Test language removal - exists in db + """ + with patch( + "salt.modules.postgres._run_psql", Mock(return_value={"retcode": 0}) + ), patch("salt.utils.path.which", MagicMock(return_value="/usr/bin/pgsql")): + with patch("salt.modules.postgres.language_exists", Mock(return_value=True)): + postgres.language_remove( + "plpgsql", + "testdb", + runas="user", + host="testhost", + port="testport", + user="testuser", + password="testpassword", + ) + postgres._run_psql.assert_called_once_with( + [ + "/usr/bin/pgsql", + "--no-align", + "--no-readline", + "--no-psqlrc", + "--no-password", + "--username", + "testuser", + "--host", + "testhost", + "--port", + "testport", + "--dbname", + "testdb", + "-c", + "DROP LANGUAGE plpgsql", + ], + host="testhost", + port="testport", + password="testpassword", + user="testuser", + runas="user", + ) + + +def test_language_remove_non_exist(): + """ + Test language removal - does not exist in db + """ + with patch("salt.modules.postgres.language_exists", Mock(return_value=False)): + ret = postgres.language_remove( + "plpgsql", + "testdb", + runas="user", + host="testhost", + port="testport", + user="testuser", + password="testpassword", + ) + assert not ret + + +def test_privileges_list_table(): + """ + Test privilege listing on a table + """ + with patch( + "salt.modules.postgres._run_psql", + Mock(return_value={"retcode": 0, "stdout": test_privileges_list_table_csv}), + ), patch("salt.utils.path.which", MagicMock(return_value="/usr/bin/pgsql")): + ret = postgres.privileges_list( + "awl", + "table", + maintenance_db="db_name", + runas="user", + host="testhost", + port="testport", + user="testuser", + password="testpassword", + ) + expected = { + "bayestest": { + "INSERT": False, + "UPDATE": False, + "SELECT": False, + "DELETE": False, + }, + "baruwa": { + "INSERT": True, + "TRUNCATE": True, + "UPDATE": True, + "TRIGGER": True, + "REFERENCES": True, + "SELECT": True, + "DELETE": True, + }, + "baruwatest": { + "INSERT": False, + "TRUNCATE": False, + "UPDATE": False, + "TRIGGER": False, + "REFERENCES": False, + "SELECT": False, + "DELETE": False, + }, + } + assert ret == expected + + query = ( + "COPY (SELECT relacl AS name FROM pg_catalog.pg_class c " + "JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace " + "WHERE nspname = 'public' AND relname = 'awl' AND relkind in ('r', 'v') " + "ORDER BY relname) TO STDOUT WITH CSV HEADER" + ) + + postgres._run_psql.assert_called_once_with( + [ + "/usr/bin/pgsql", + "--no-align", + "--no-readline", + "--no-psqlrc", + "--no-password", + "--username", + "testuser", + "--host", + "testhost", + "--port", + "testport", + "--dbname", + "db_name", + "-v", + "datestyle=ISO,MDY", + "-c", + query, + ], + host="testhost", + port="testport", + password="testpassword", + user="testuser", + runas="user", + ) + + +def test_privileges_list_group(): + """ + Test privilege listing on a group + """ + with patch( + "salt.modules.postgres._run_psql", + Mock(return_value={"retcode": 0, "stdout": test_privileges_list_group_csv}), + ), patch("salt.utils.path.which", MagicMock(return_value="/usr/bin/pgsql")): + ret = postgres.privileges_list( + "admin", + "group", + maintenance_db="db_name", + runas="user", + host="testhost", + port="testport", + user="testuser", + password="testpassword", + ) + expected = { + "baruwa": False, + "baruwatest": False, + "baruwatest2": True, + } + assert ret == expected + + query = ( + "COPY (SELECT rolname, admin_option " + "FROM pg_catalog.pg_auth_members m JOIN pg_catalog.pg_roles r " + "ON m.member=r.oid WHERE m.roleid IN (SELECT oid FROM " + "pg_catalog.pg_roles WHERE rolname='admin') ORDER BY rolname) " + "TO STDOUT WITH CSV HEADER" + ) + + postgres._run_psql.assert_called_once_with( + [ + "/usr/bin/pgsql", + "--no-align", + "--no-readline", + "--no-psqlrc", + "--no-password", + "--username", + "testuser", + "--host", + "testhost", + "--port", + "testport", + "--dbname", + "db_name", + "-v", + "datestyle=ISO,MDY", + "-c", + query, + ], + host="testhost", + port="testport", + password="testpassword", + user="testuser", + runas="user", + ) + + +def test_has_privileges_on_table(): + """ + Test privilege checks on table + """ + with patch( + "salt.modules.postgres._run_psql", + Mock(return_value={"retcode": 0, "stdout": test_privileges_list_table_csv}), + ): + ret = postgres.has_privileges( + "baruwa", + "awl", + "table", + "SELECT,INSERT", + grant_option=True, + maintenance_db="db_name", + runas="user", + host="testhost", + port="testport", + user="testuser", + password="testpassword", + ) + assert ret + + ret = postgres.has_privileges( + "baruwa", + "awl", + "table", + "ALL", + grant_option=True, + maintenance_db="db_name", + runas="user", + host="testhost", + port="testport", + user="testuser", + password="testpassword", + ) + assert ret + + ret = postgres.has_privileges( + "baruwa", + "awl", + "table", + "ALL", + grant_option=False, + maintenance_db="db_name", + runas="user", + host="testhost", + port="testport", + user="testuser", + password="testpassword", + ) + assert ret + + ret = postgres.has_privileges( + "bayestest", + "awl", + "table", + "SELECT,INSERT,TRUNCATE", + maintenance_db="db_name", + runas="user", + host="testhost", + port="testport", + user="testuser", + password="testpassword", + ) + assert not ret + + ret = postgres.has_privileges( + "bayestest", + "awl", + "table", + "SELECT,INSERT", + maintenance_db="db_name", + runas="user", + host="testhost", + port="testport", + user="testuser", + password="testpassword", + ) + assert ret + + +def test_has_privileges_on_group(): + """ + Test privilege checks on group + """ + with patch( + "salt.modules.postgres._run_psql", + Mock(return_value={"retcode": 0, "stdout": test_privileges_list_group_csv}), + ): + ret = postgres.has_privileges( + "baruwa", + "admin", + "group", + maintenance_db="db_name", + runas="user", + host="testhost", + port="testport", + user="testuser", + password="testpassword", + ) + assert ret + + ret = postgres.has_privileges( + "baruwa", + "admin", + "group", + grant_option=True, + maintenance_db="db_name", + runas="user", + host="testhost", + port="testport", + user="testuser", + password="testpassword", + ) + assert not ret + + ret = postgres.has_privileges( + "tony", + "admin", + "group", + maintenance_db="db_name", + runas="user", + host="testhost", + port="testport", + user="testuser", + password="testpassword", + ) + assert not ret + + +def test_privileges_grant_table(): + """ + Test granting privileges on table + """ + with patch( + "salt.modules.postgres._run_psql", Mock(return_value={"retcode": 0}) + ), patch("salt.utils.path.which", MagicMock(return_value="/usr/bin/pgsql")): + with patch("salt.modules.postgres.has_privileges", Mock(return_value=False)): + ret = postgres.privileges_grant( + "baruwa", + "awl", + "table", + "ALL", + grant_option=True, + maintenance_db="db_name", + runas="user", + host="testhost", + port="testport", + user="testuser", + password="testpassword", + ) + + query = 'GRANT ALL ON TABLE public."awl" TO "baruwa" WITH GRANT OPTION' + + postgres._run_psql.assert_called_once_with( + [ + "/usr/bin/pgsql", + "--no-align", + "--no-readline", + "--no-psqlrc", + "--no-password", + "--username", + "testuser", + "--host", + "testhost", + "--port", + "testport", + "--dbname", + "db_name", + "-c", + query, + ], + host="testhost", + port="testport", + password="testpassword", + user="testuser", + runas="user", + ) + + with patch( + "salt.modules.postgres._run_psql", Mock(return_value={"retcode": 0}) + ), patch("salt.utils.path.which", MagicMock(return_value="/usr/bin/pgsql")), patch( + "salt.modules.postgres.has_privileges", Mock(return_value=False) + ): + ret = postgres.privileges_grant( + "baruwa", + "awl", + "table", + "ALL", + maintenance_db="db_name", + runas="user", + host="testhost", + port="testport", + user="testuser", + password="testpassword", + ) + + query = 'GRANT ALL ON TABLE public."awl" TO "baruwa"' + + postgres._run_psql.assert_called_once_with( + [ + "/usr/bin/pgsql", + "--no-align", + "--no-readline", + "--no-psqlrc", + "--no-password", + "--username", + "testuser", + "--host", + "testhost", + "--port", + "testport", + "--dbname", + "db_name", + "-c", + query, + ], + host="testhost", + port="testport", + password="testpassword", + user="testuser", + runas="user", + ) + + # Test grant on all tables + with patch( + "salt.modules.postgres._run_psql", Mock(return_value={"retcode": 0}) + ), patch("salt.utils.path.which", MagicMock(return_value="/usr/bin/pgsql")), patch( + "salt.modules.postgres.has_privileges", Mock(return_value=False) + ): + ret = postgres.privileges_grant( + "baruwa", + "ALL", + "table", + "SELECT", + maintenance_db="db_name", + runas="user", + host="testhost", + port="testport", + user="testuser", + password="testpassword", + ) + + query = 'GRANT SELECT ON ALL TABLES IN SCHEMA public TO "baruwa"' + + postgres._run_psql.assert_called_once_with( + [ + "/usr/bin/pgsql", + "--no-align", + "--no-readline", + "--no-psqlrc", + "--no-password", + "--username", + "testuser", + "--host", + "testhost", + "--port", + "testport", + "--dbname", + "db_name", + "-c", + query, + ], + host="testhost", + port="testport", + password="testpassword", + user="testuser", + runas="user", + ) + + +def test_privileges_grant_group(): + """ + Test granting privileges on group + """ + with patch( + "salt.modules.postgres._run_psql", Mock(return_value={"retcode": 0}) + ), patch("salt.utils.path.which", MagicMock(return_value="/usr/bin/pgsql")), patch( + "salt.modules.postgres.has_privileges", Mock(return_value=False) + ): + ret = postgres.privileges_grant( + "baruwa", + "admins", + "group", + grant_option=True, + maintenance_db="db_name", + runas="user", + host="testhost", + port="testport", + user="testuser", + password="testpassword", + ) + + query = 'GRANT admins TO "baruwa" WITH ADMIN OPTION' + + postgres._run_psql.assert_called_once_with( + [ + "/usr/bin/pgsql", + "--no-align", + "--no-readline", + "--no-psqlrc", + "--no-password", + "--username", + "testuser", + "--host", + "testhost", + "--port", + "testport", + "--dbname", + "db_name", + "-c", + query, + ], + host="testhost", + port="testport", + password="testpassword", + user="testuser", + runas="user", + ) + + with patch( + "salt.modules.postgres._run_psql", Mock(return_value={"retcode": 0}) + ), patch("salt.utils.path.which", MagicMock(return_value="/usr/bin/pgsql")), patch( + "salt.modules.postgres.has_privileges", Mock(return_value=False) + ): + ret = postgres.privileges_grant( + "baruwa", + "admins", + "group", + maintenance_db="db_name", + runas="user", + host="testhost", + port="testport", + user="testuser", + password="testpassword", + ) + + query = 'GRANT admins TO "baruwa"' + + postgres._run_psql.assert_called_once_with( + [ + "/usr/bin/pgsql", + "--no-align", + "--no-readline", + "--no-psqlrc", + "--no-password", + "--username", + "testuser", + "--host", + "testhost", + "--port", + "testport", + "--dbname", + "db_name", + "-c", + query, + ], + host="testhost", + port="testport", + password="testpassword", + user="testuser", + runas="user", + ) + + +def test_privileges_revoke_table(): + """ + Test revoking privileges on table + """ + with patch( + "salt.modules.postgres._run_psql", Mock(return_value={"retcode": 0}) + ), patch("salt.utils.path.which", MagicMock(return_value="/usr/bin/pgsql")), patch( + "salt.modules.postgres.has_privileges", Mock(return_value=True) + ): + ret = postgres.privileges_revoke( + "baruwa", + "awl", + "table", + "ALL", + maintenance_db="db_name", + runas="user", + host="testhost", + port="testport", + user="testuser", + password="testpassword", + ) + + query = "REVOKE ALL ON TABLE public.awl FROM baruwa" + + postgres._run_psql.assert_called_once_with( + [ + "/usr/bin/pgsql", + "--no-align", + "--no-readline", + "--no-psqlrc", + "--no-password", + "--username", + "testuser", + "--host", + "testhost", + "--port", + "testport", + "--dbname", + "db_name", + "-c", + query, + ], + host="testhost", + port="testport", + password="testpassword", + user="testuser", + runas="user", + ) + + +def test_privileges_revoke_group(): + """ + Test revoking privileges on group + """ + with patch( + "salt.modules.postgres._run_psql", Mock(return_value={"retcode": 0}) + ), patch("salt.utils.path.which", MagicMock(return_value="/usr/bin/pgsql")), patch( + "salt.modules.postgres.has_privileges", Mock(return_value=True) + ): + ret = postgres.privileges_revoke( + "baruwa", + "admins", + "group", + maintenance_db="db_name", + runas="user", + host="testhost", + port="testport", + user="testuser", + password="testpassword", + ) + + query = "REVOKE admins FROM baruwa" + + postgres._run_psql.assert_called_once_with( + [ + "/usr/bin/pgsql", + "--no-align", + "--no-readline", + "--no-psqlrc", + "--no-password", + "--username", + "testuser", + "--host", + "testhost", + "--port", + "testport", + "--dbname", + "db_name", + "-c", + query, + ], + host="testhost", + port="testport", + password="testpassword", + user="testuser", + runas="user", + ) + + +def test_datadir_init(): + """ + Test Initializing a postgres data directory + """ + with patch("salt.modules.postgres._run_initdb", Mock(return_value={"retcode": 0})): + with patch("salt.modules.postgres.datadir_exists", Mock(return_value=False)): + name = "/var/lib/pgsql/data" + ret = postgres.datadir_init( + name, user="postgres", password="test", runas="postgres" + ) + postgres._run_initdb.assert_called_once_with( + name, + auth="password", + encoding="UTF8", + locale=None, + password="test", + runas="postgres", + checksums=False, + waldir=None, + user="postgres", + ) + assert ret + + +def test_datadir_exists(): + """ + Test Checks if postgres data directory has been initialized + """ + with patch("os.path.isfile", Mock(return_value=True)): + name = "/var/lib/pgsql/data" + ret = postgres.datadir_exists(name) + assert ret + + +def test_pg_is_older_ext_ver(): + """ + Test Checks if postgres extension version string is older + """ + assert postgres._pg_is_older_ext_ver("8.5", "9.5") + assert postgres._pg_is_older_ext_ver("8.5", "8.6") + assert postgres._pg_is_older_ext_ver("8.5.2", "8.5.3") + assert not postgres._pg_is_older_ext_ver("9.5", "8.5") + assert postgres._pg_is_older_ext_ver("9.5", "9.6") + assert postgres._pg_is_older_ext_ver("9.5.0", "9.5.1") + assert postgres._pg_is_older_ext_ver("9.5", "9.5.1") + assert not postgres._pg_is_older_ext_ver("9.5.1", "9.5") + assert not postgres._pg_is_older_ext_ver("9.5b", "9.5a") + assert postgres._pg_is_older_ext_ver("10a", "10b") + assert postgres._pg_is_older_ext_ver("1.2.3.4", "1.2.3.5") + assert postgres._pg_is_older_ext_ver("10dev", "10next") + assert not postgres._pg_is_older_ext_ver("10next", "10dev") diff --git a/tests/unit/modules/test_postgres.py b/tests/unit/modules/test_postgres.py deleted file mode 100644 index 6f77fc03902..00000000000 --- a/tests/unit/modules/test_postgres.py +++ /dev/null @@ -1,2086 +0,0 @@ -import datetime -import logging -import re - -import salt.modules.postgres as postgres -from salt.exceptions import SaltInvocationError -from tests.support.mixins import LoaderModuleMockMixin -from tests.support.mock import Mock, call, patch -from tests.support.unit import TestCase - -test_list_db_csv = ( - "Name,Owner,Encoding,Collate,Ctype,Access privileges,Tablespace\n" - "template1,postgres,LATIN1,en_US,en_US" - ',"{=c/postgres,postgres=CTc/postgres}",pg_default\n' - "template0,postgres,LATIN1,en_US,en_US" - ',"{=c/postgres,postgres=CTc/postgres}",pg_default\n' - "postgres,postgres,LATIN1,en_US,en_US,,pg_default\n" - "test_db,postgres,LATIN1,en_US,en_US,,pg_default" -) - -test_list_schema_csv = ( - "name,owner,acl\n" - 'public,postgres,"{postgres=UC/postgres,=UC/postgres}"\n' - 'pg_toast,postgres,""' -) - -test_list_language_csv = "Name\ninternal\nc\nsql\nplpgsql\n" - -test_privileges_list_table_csv = ( - "name\n" - '"{baruwatest=arwdDxt/baruwatest,bayestest=arwd/baruwatest,baruwa=a*r*w*d*D*x*t*/baruwatest}"\n' -) - -test_privileges_list_group_csv = ( - "rolname,admin_option\nbaruwa,f\nbaruwatest2,t\nbaruwatest,f\n" -) - -log = logging.getLogger(__name__) - - -class PostgresTestCase(TestCase, LoaderModuleMockMixin): - def setup_loader_modules(self): - patcher = patch("salt.utils.path.which", Mock(return_value="/usr/bin/pgsql")) - patcher.start() - self.addCleanup(patcher.stop) - return { - postgres: { - "__grains__": {"os_family": "Linux"}, - "__salt__": { - "config.option": Mock(), - "cmd.run_all": Mock(), - "file.chown": Mock(), - "file.remove": Mock(), - }, - } - } - - def test_run_psql(self): - postgres._run_psql('echo "hi"') - cmd = postgres.__salt__["cmd.run_all"] - - self.assertEqual("postgres", cmd.call_args[1]["runas"]) - - def test_db_alter(self): - with patch( - "salt.modules.postgres._run_psql", Mock(return_value={"retcode": 0}) - ): - postgres.db_alter( - "dbname", - user="testuser", - host="testhost", - port="testport", - maintenance_db="maint_db", - password="foo", - tablespace="testspace", - owner="otheruser", - runas="foo", - ) - postgres._run_psql.assert_has_calls( - [ - call( - [ - "/usr/bin/pgsql", - "--no-align", - "--no-readline", - "--no-psqlrc", - "--no-password", - "--username", - "testuser", - "--host", - "testhost", - "--port", - "testport", - "--dbname", - "maint_db", - "-c", - 'ALTER DATABASE "dbname" OWNER TO "otheruser"', - ], - host="testhost", - user="testuser", - password="foo", - runas="foo", - port="testport", - ), - call( - [ - "/usr/bin/pgsql", - "--no-align", - "--no-readline", - "--no-psqlrc", - "--no-password", - "--username", - "testuser", - "--host", - "testhost", - "--port", - "testport", - "--dbname", - "maint_db", - "-c", - 'ALTER DATABASE "dbname" SET TABLESPACE "testspace"', - ], - host="testhost", - user="testuser", - password="foo", - runas="foo", - port="testport", - ), - ] - ) - - def test_db_alter_owner_recurse(self): - with patch( - "salt.modules.postgres.owner_to", Mock(return_value={"retcode": None}) - ): - postgres.db_alter( - "dbname", - user="testuser", - host="testhost", - port="testport", - maintenance_db="maint_db", - password="foo", - tablespace="testspace", - owner="otheruser", - owner_recurse=True, - runas="foo", - ) - postgres.owner_to.assert_called_once_with( - "dbname", - "otheruser", - user="testuser", - host="testhost", - port="testport", - password="foo", - runas="foo", - ) - - def test_db_create(self): - with patch( - "salt.modules.postgres._run_psql", Mock(return_value={"retcode": 0}) - ): - postgres.db_create( - "dbname", - user="testuser", - host="testhost", - port="testport", - maintenance_db="maint_db", - password="foo", - tablespace="testspace", - owner="otheruser", - runas="foo", - ) - - postgres._run_psql.assert_called_once_with( - [ - "/usr/bin/pgsql", - "--no-align", - "--no-readline", - "--no-psqlrc", - "--no-password", - "--username", - "testuser", - "--host", - "testhost", - "--port", - "testport", - "--dbname", - "maint_db", - "-c", - 'CREATE DATABASE "dbname" WITH TABLESPACE = "testspace" ' - 'OWNER = "otheruser"', - ], - host="testhost", - user="testuser", - password="foo", - runas="foo", - port="testport", - ) - - def test_db_create_empty_string_param(self): - with patch( - "salt.modules.postgres._run_psql", Mock(return_value={"retcode": 0}) - ): - postgres.db_create( - "dbname", - lc_collate="", - encoding="utf8", - user="testuser", - host="testhost", - port=1234, - maintenance_db="maint_db", - password="foo", - ) - - postgres._run_psql.assert_called_once_with( - [ - "/usr/bin/pgsql", - "--no-align", - "--no-readline", - "--no-psqlrc", - "--no-password", - "--username", - "testuser", - "--host", - "testhost", - "--port", - "1234", - "--dbname", - "maint_db", - "-c", - "CREATE DATABASE \"dbname\" WITH ENCODING = 'utf8' LC_COLLATE = ''", - ], - host="testhost", - password="foo", - port=1234, - runas=None, - user="testuser", - ) - - def test_db_create_with_trivial_sql_injection(self): - with patch( - "salt.modules.postgres._run_psql", Mock(return_value={"retcode": 0}) - ): - self.assertRaises( - SaltInvocationError, - postgres.db_create, - "dbname", - lc_collate="foo' ENCODING='utf8", - ) - - def test_db_exists(self): - with patch( - "salt.modules.postgres._run_psql", - Mock(return_value={"retcode": 0, "stdout": test_list_db_csv}), - ): - ret = postgres.db_exists( - "test_db", - user="testuser", - host="testhost", - port="testport", - maintenance_db="maint_db", - password="foo", - runas="foo", - ) - self.assertTrue(ret) - - def test_db_list(self): - with patch( - "salt.modules.postgres._run_psql", - Mock(return_value={"retcode": 0, "stdout": test_list_db_csv}), - ): - ret = postgres.db_list( - user="testuser", - host="testhost", - port="testport", - maintenance_db="maint_db", - password="foo", - runas="foo", - ) - self.assertDictEqual( - ret, - { - "test_db": { - "Encoding": "LATIN1", - "Ctype": "en_US", - "Tablespace": "pg_default", - "Collate": "en_US", - "Owner": "postgres", - "Access privileges": "", - }, - "template1": { - "Encoding": "LATIN1", - "Ctype": "en_US", - "Tablespace": "pg_default", - "Collate": "en_US", - "Owner": "postgres", - "Access privileges": "{=c/postgres,postgres=CTc/postgres}", - }, - "template0": { - "Encoding": "LATIN1", - "Ctype": "en_US", - "Tablespace": "pg_default", - "Collate": "en_US", - "Owner": "postgres", - "Access privileges": "{=c/postgres,postgres=CTc/postgres}", - }, - "postgres": { - "Encoding": "LATIN1", - "Ctype": "en_US", - "Tablespace": "pg_default", - "Collate": "en_US", - "Owner": "postgres", - "Access privileges": "", - }, - }, - ) - - def test_db_remove(self): - with patch( - "salt.modules.postgres._run_psql", Mock(return_value={"retcode": 0}) - ): - postgres.db_remove( - "test_db", - user="testuser", - host="testhost", - port="testport", - maintenance_db="maint_db", - password="foo", - runas="foo", - ) - - calls = ( - call( - [ - "/usr/bin/pgsql", - "--no-align", - "--no-readline", - "--no-psqlrc", - "--no-password", - "--username", - "testuser", - "--host", - "testhost", - "--port", - "testport", - "--dbname", - "maint_db", - "-c", - 'REVOKE CONNECT ON DATABASE "test_db" FROM public;', - ], - host="testhost", - password="foo", - port="testport", - runas="foo", - user="testuser", - ), - call( - [ - "/usr/bin/pgsql", - "--no-align", - "--no-readline", - "--no-psqlrc", - "--no-password", - "--username", - "testuser", - "--host", - "testhost", - "--port", - "testport", - "--dbname", - "maint_db", - "-c", - "SELECT pid, pg_terminate_backend(pid) FROM pg_stat_activity" - " WHERE datname = 'test_db' AND pid <> pg_backend_pid();", - ], - host="testhost", - password="foo", - port="testport", - runas="foo", - user="testuser", - ), - call( - [ - "/usr/bin/pgsql", - "--no-align", - "--no-readline", - "--no-psqlrc", - "--no-password", - "--username", - "testuser", - "--host", - "testhost", - "--port", - "testport", - "--dbname", - "maint_db", - "-c", - 'DROP DATABASE "test_db";', - ], - host="testhost", - password="foo", - port="testport", - runas="foo", - user="testuser", - ), - ) - - postgres._run_psql.assert_has_calls(calls, any_order=True) - - def test_group_create(self): - with patch( - "salt.modules.postgres._run_psql", Mock(return_value={"retcode": 0}) - ): - with patch("salt.modules.postgres.user_exists", Mock(return_value=False)): - postgres.group_create( - "testgroup", - user="testuser", - host="testhost", - port="testport", - maintenance_db="maint_db", - password="foo", - createdb=False, - encrypted=False, - superuser=False, - replication=False, - rolepassword="testrolepass", - groups="testgroup", - runas="foo", - ) - # postgres._run_psql.call_args[0][0] will contain the list of CLI args. - # The first 14 elements of this list are initial args used in all (or - # virtually all) commands run through _run_psql(), so the actual SQL - # query will be in the 15th argument. - self.assertTrue( - postgres._run_psql.call_args[0][0][14].startswith("CREATE ROLE") - ) - - def test_group_remove(self): - with patch( - "salt.modules.postgres._run_psql", Mock(return_value={"retcode": 0}) - ): - with patch("salt.modules.postgres.user_exists", Mock(return_value=True)): - postgres.group_remove( - "testgroup", - user="testuser", - host="testhost", - port="testport", - maintenance_db="maint_db", - password="foo", - runas="foo", - ) - postgres._run_psql.assert_called_once_with( - [ - "/usr/bin/pgsql", - "--no-align", - "--no-readline", - "--no-psqlrc", - "--no-password", - "--username", - "testuser", - "--host", - "testhost", - "--port", - "testport", - "--dbname", - "maint_db", - "-c", - 'DROP ROLE "testgroup"', - ], - host="testhost", - user="testuser", - password="foo", - runas="foo", - port="testport", - ) - - def test_group_update(self): - with patch( - "salt.modules.postgres._run_psql", Mock(return_value={"retcode": 0}) - ): - with patch( - "salt.modules.postgres.role_get", - Mock(return_value={"superuser": False}), - ): - postgres.group_update( - "testgroup", - user='"testuser"', - host="testhost", - port="testport", - maintenance_db="maint_db", - password="foo", - createdb=False, - encrypted=False, - replication=False, - rolepassword="test_role_pass", - groups="testgroup", - runas="foo", - ) - # postgres._run_psql.call_args[0][0] will contain the list of CLI args. - # The first 14 elements of this list are initial args used in all (or - # virtually all) commands run through _run_psql(), so the actual SQL - # query will be in the 15th argument. - self.assertTrue( - re.match( - 'ALTER.* "testgroup" .* UNENCRYPTED PASSWORD', - postgres._run_psql.call_args[0][0][14], - ) - ) - - def test_user_create(self): - with patch( - "salt.modules.postgres._run_psql", Mock(return_value={"retcode": 0}) - ): - with patch("salt.modules.postgres.user_exists", Mock(return_value=False)): - postgres.user_create( - "testuser", - user="testuser", - host="testhost", - port="testport", - maintenance_db="maint_test", - password="test_pass", - login=True, - createdb=False, - createroles=False, - encrypted=False, - superuser=False, - replication=False, - rolepassword="test_role_pass", - valid_until="2042-07-01", - groups="test_groups", - runas="foo", - ) - # postgres._run_psql.call_args[0][0] will contain the list of CLI args. - # The first 14 elements of this list are initial args used in all (or - # virtually all) commands run through _run_psql(), so the actual SQL - # query will be in the 15th argument. - call = postgres._run_psql.call_args[0][0][14] - self.assertTrue(re.match('CREATE ROLE "testuser"', call)) - for i in ( - "INHERIT", - "NOCREATEDB", - "NOCREATEROLE", - "NOSUPERUSER", - "NOREPLICATION", - "LOGIN", - "UNENCRYPTED", - "PASSWORD", - "VALID UNTIL", - ): - self.assertTrue(i in call, "{} not in {}".format(i, call)) - - def test_user_exists(self): - with patch( - "salt.modules.postgres._run_psql", Mock(return_value={"retcode": 0}) - ): - with patch("salt.modules.postgres.version", Mock(return_value="9.1")): - with patch( - "salt.modules.postgres.psql_query", - Mock( - return_value=[ - { - "name": "test_user", - "superuser": "t", - "inherits privileges": "t", - "can create roles": "t", - "can create databases": "t", - "can update system catalogs": "t", - "can login": "t", - "replication": None, - "password": "test_password", - "connections": "-1", - "groups": "", - "expiry time": "", - "defaults variables": None, - } - ] - ), - ): - ret = postgres.user_exists( - "test_user", - user="test_user", - host="test_host", - port="test_port", - maintenance_db="maint_db", - password="test_password", - runas="foo", - ) - self.assertTrue(ret) - - def test_user_list(self): - with patch( - "salt.modules.postgres._run_psql", Mock(return_value={"retcode": 0}) - ): - with patch("salt.modules.postgres.version", Mock(return_value="9.1")): - with patch( - "salt.modules.postgres.psql_query", - Mock( - return_value=[ - { - "name": "test_user", - "superuser": "t", - "inherits privileges": "t", - "can create roles": "t", - "can create databases": "t", - "can update system catalogs": "t", - "can login": "t", - "replication": None, - "connections": "-1", - "groups": "", - "expiry time": "2017-08-16 08:57:46", - "defaults variables": None, - } - ] - ), - ): - ret = postgres.user_list( - "test_user", - host="test_host", - port="test_port", - maintenance_db="maint_db", - password="test_password", - runas="foo", - ) - - self.assertDictEqual( - ret, - { - "test_user": { - "superuser": True, - "defaults variables": None, - "can create databases": True, - "can create roles": True, - "connections": None, - "replication": None, - "expiry time": datetime.datetime( - 2017, 8, 16, 8, 57, 46 - ), - "can login": True, - "can update system catalogs": True, - "groups": [], - "inherits privileges": True, - } - }, - ) - - def test_user_remove(self): - with patch( - "salt.modules.postgres._run_psql", Mock(return_value={"retcode": 0}) - ): - with patch("salt.modules.postgres.version", Mock(return_value="9.1")): - with patch( - "salt.modules.postgres.user_exists", Mock(return_value=True) - ): - postgres.user_remove( - "testuser", - user="testuser", - host="testhost", - port="testport", - maintenance_db="maint_db", - password="testpassword", - runas="foo", - ) - postgres._run_psql.assert_called_once_with( - [ - "/usr/bin/pgsql", - "--no-align", - "--no-readline", - "--no-psqlrc", - "--no-password", - "--username", - "testuser", - "--host", - "testhost", - "--port", - "testport", - "--dbname", - "maint_db", - "-c", - 'DROP ROLE "testuser"', - ], - host="testhost", - port="testport", - user="testuser", - password="testpassword", - runas="foo", - ) - - def test_user_update(self): - with patch( - "salt.modules.postgres._run_psql", Mock(return_value={"retcode": 0}) - ): - with patch( - "salt.modules.postgres.role_get", - Mock(return_value={"superuser": False}), - ): - postgres.user_update( - "test_username", - user="test_user", - host="test_host", - port="test_port", - maintenance_db="test_maint", - password="test_pass", - createdb=False, - createroles=False, - encrypted=False, - inherit=True, - login=True, - replication=False, - rolepassword="test_role_pass", - valid_until="2017-07-01", - groups="test_groups", - runas="foo", - ) - # postgres._run_psql.call_args[0][0] will contain the list of CLI args. - # The first 14 elements of this list are initial args used in all (or - # virtually all) commands run through _run_psql(), so the actual SQL - # query will be in the 15th argument. - self.assertTrue( - re.match( - 'ALTER ROLE "test_username" WITH INHERIT NOCREATEDB ' - "NOCREATEROLE NOREPLICATION LOGIN " - "UNENCRYPTED PASSWORD ['\"]{0,5}test_role_pass['\"]{0,5} " - "VALID UNTIL '2017-07-01';" - ' GRANT "test_groups" TO "test_username"', - postgres._run_psql.call_args[0][0][14], - ) - ) - - def test_user_update2(self): - with patch( - "salt.modules.postgres._run_psql", Mock(return_value={"retcode": 0}) - ): - with patch( - "salt.modules.postgres.role_get", - Mock(return_value={"superuser": False}), - ): - postgres.user_update( - "test_username", - user="test_user", - host="test_host", - port="test_port", - maintenance_db="test_maint", - password="test_pass", - createdb=False, - createroles=True, - encrypted=False, - inherit=True, - login=True, - replication=False, - groups="test_groups", - runas="foo", - ) - # postgres._run_psql.call_args[0][0] will contain the list of CLI args. - # The first 14 elements of this list are initial args used in all (or - # virtually all) commands run through _run_psql(), so the actual SQL - # query will be in the 15th argument. - self.assertTrue( - re.match( - 'ALTER ROLE "test_username" WITH INHERIT NOCREATEDB ' - "CREATEROLE NOREPLICATION LOGIN;" - ' GRANT "test_groups" TO "test_username"', - postgres._run_psql.call_args[0][0][14], - ) - ) - - def test_user_update3(self): - with patch( - "salt.modules.postgres._run_psql", Mock(return_value={"retcode": 0}) - ): - with patch( - "salt.modules.postgres.role_get", - Mock(return_value={"superuser": False}), - ): - postgres.user_update( - "test_username", - user="test_user", - host="test_host", - port="test_port", - maintenance_db="test_maint", - password="test_pass", - createdb=False, - createroles=True, - encrypted=False, - inherit=True, - login=True, - rolepassword=False, - replication=False, - groups="test_groups", - runas="foo", - ) - # postgres._run_psql.call_args[0][0] will contain the list of CLI args. - # The first 14 elements of this list are initial args used in all (or - # virtually all) commands run through _run_psql(), so the actual SQL - # query will be in the 15th argument. - self.assertTrue( - re.match( - 'ALTER ROLE "test_username" WITH INHERIT NOCREATEDB ' - "CREATEROLE NOREPLICATION LOGIN NOPASSWORD;" - ' GRANT "test_groups" TO "test_username"', - postgres._run_psql.call_args[0][0][14], - ) - ) - - def test_user_update_encrypted_passwd(self): - with patch( - "salt.modules.postgres._run_psql", Mock(return_value={"retcode": 0}) - ): - with patch( - "salt.modules.postgres.role_get", - Mock(return_value={"superuser": False}), - ): - postgres.user_update( - "test_username", - user="test_user", - host="test_host", - port="test_port", - maintenance_db="test_maint", - password="test_pass", - createdb=False, - createroles=True, - encrypted=True, - inherit=True, - login=True, - rolepassword="foobar", - replication=False, - groups="test_groups", - runas="foo", - ) - # postgres._run_psql.call_args[0][0] will contain the list of CLI args. - # The first 14 elements of this list are initial args used in all (or - # virtually all) commands run through _run_psql(), so the actual SQL - # query will be in the 15th argument. - self.assertTrue( - re.match( - 'ALTER ROLE "test_username" WITH INHERIT NOCREATEDB ' - "CREATEROLE NOREPLICATION LOGIN " - "ENCRYPTED PASSWORD " - "['\"]{0,5}md531c27e68d3771c392b52102c01be1da1['\"]{0,5}" - '; GRANT "test_groups" TO "test_username"', - postgres._run_psql.call_args[0][0][14], - ) - ) - - def test_version(self): - with patch( - "salt.modules.postgres._run_psql", - Mock(return_value={"retcode": 0, "stdout": "9.1.9"}), - ): - postgres.version( - user="test_user", - host="test_host", - port="test_port", - maintenance_db="test_maint", - password="test_pass", - runas="foo", - ) - # postgres._run_psql.call_args[0][0] will contain the list of CLI args. - # The first 14 elements of this list are initial args used in all (or - # virtually all) commands run through _run_psql(), so the actual SQL - # query will be in the 15th argument. - self.assertTrue( - re.match( - "SELECT setting FROM pg_catalog.pg_settings", - postgres._run_psql.call_args[0][0][14], - ) - ) - - def test_installed_extensions(self): - with patch( - "salt.modules.postgres.psql_query", - Mock(return_value=[{"extname": "foo", "extversion": "1"}]), - ): - exts = postgres.installed_extensions() - self.assertEqual(exts, {"foo": {"extversion": "1", "extname": "foo"}}) - - def test_available_extensions(self): - with patch( - "salt.modules.postgres.psql_query", - Mock(return_value=[{"name": "foo", "default_version": "1"}]), - ): - exts = postgres.available_extensions() - self.assertEqual(exts, {"foo": {"default_version": "1", "name": "foo"}}) - - def test_drop_extension2(self): - with patch( - "salt.modules.postgres.installed_extensions", Mock(side_effect=[{}, {}]) - ): - with patch( - "salt.modules.postgres._psql_prepare_and_run", Mock(return_value=None) - ): - with patch( - "salt.modules.postgres.available_extensions", - Mock(return_value={"foo": {"default_version": "1", "name": "foo"}}), - ): - self.assertEqual(postgres.drop_extension("foo"), True) - - def test_drop_extension3(self): - with patch( - "salt.modules.postgres.installed_extensions", - Mock(side_effect=[{"foo": {"extversion": "1", "extname": "foo"}}, {}]), - ): - with patch( - "salt.modules.postgres._psql_prepare_and_run", Mock(return_value=None) - ): - with patch( - "salt.modules.postgres.available_extensions", - Mock(return_value={"foo": {"default_version": "1", "name": "foo"}}), - ): - self.assertEqual(postgres.drop_extension("foo"), True) - - def test_drop_extension1(self): - with patch( - "salt.modules.postgres.installed_extensions", - Mock( - side_effect=[ - {"foo": {"extversion": "1", "extname": "foo"}}, - {"foo": {"extversion": "1", "extname": "foo"}}, - ] - ), - ): - with patch( - "salt.modules.postgres._psql_prepare_and_run", Mock(return_value=None) - ): - with patch( - "salt.modules.postgres.available_extensions", - Mock(return_value={"foo": {"default_version": "1", "name": "foo"}}), - ): - self.assertEqual(postgres.drop_extension("foo"), False) - - def test_create_mtdata(self): - with patch( - "salt.modules.postgres.installed_extensions", - Mock( - return_value={ - "foo": { - "extversion": "0.8", - "extrelocatable": "t", - "schema_name": "foo", - "extname": "foo", - } - }, - ), - ): - with patch( - "salt.modules.postgres.available_extensions", - Mock(return_value={"foo": {"default_version": "1.4", "name": "foo"}}), - ): - ret = postgres.create_metadata("foo", schema="bar", ext_version="1.4") - self.assertTrue(postgres._EXTENSION_INSTALLED in ret) - self.assertTrue(postgres._EXTENSION_TO_UPGRADE in ret) - self.assertTrue(postgres._EXTENSION_TO_MOVE in ret) - ret = postgres.create_metadata("foo", schema="foo", ext_version="0.4") - self.assertTrue(postgres._EXTENSION_INSTALLED in ret) - self.assertFalse(postgres._EXTENSION_TO_UPGRADE in ret) - self.assertFalse(postgres._EXTENSION_TO_MOVE in ret) - ret = postgres.create_metadata("foo") - self.assertTrue(postgres._EXTENSION_INSTALLED in ret) - self.assertFalse(postgres._EXTENSION_TO_UPGRADE in ret) - self.assertFalse(postgres._EXTENSION_TO_MOVE in ret) - ret = postgres.create_metadata("foobar") - self.assertTrue(postgres._EXTENSION_NOT_INSTALLED in ret) - self.assertFalse(postgres._EXTENSION_INSTALLED in ret) - self.assertFalse(postgres._EXTENSION_TO_UPGRADE in ret) - self.assertFalse(postgres._EXTENSION_TO_MOVE in ret) - - def test_create_extension_newerthan(self): - """ - scenario of creating upgrading extensions with possible schema and - version specifications - """ - with patch( - "salt.modules.postgres.create_metadata", - Mock( - side_effect=[ - # create succeeded - [postgres._EXTENSION_NOT_INSTALLED], - [postgres._EXTENSION_INSTALLED], - [postgres._EXTENSION_NOT_INSTALLED], - [postgres._EXTENSION_INSTALLED], - # create failed - [postgres._EXTENSION_NOT_INSTALLED], - [postgres._EXTENSION_NOT_INSTALLED], - # move+upgrade succeeded - [ - postgres._EXTENSION_TO_MOVE, - postgres._EXTENSION_TO_UPGRADE, - postgres._EXTENSION_INSTALLED, - ], - [postgres._EXTENSION_INSTALLED], - # move succeeded - [postgres._EXTENSION_TO_MOVE, postgres._EXTENSION_INSTALLED], - [postgres._EXTENSION_INSTALLED], - # upgrade succeeded - [postgres._EXTENSION_TO_UPGRADE, postgres._EXTENSION_INSTALLED], - [postgres._EXTENSION_INSTALLED], - # upgrade failed - [postgres._EXTENSION_TO_UPGRADE, postgres._EXTENSION_INSTALLED], - [postgres._EXTENSION_TO_UPGRADE, postgres._EXTENSION_INSTALLED], - # move failed - [postgres._EXTENSION_TO_MOVE, postgres._EXTENSION_INSTALLED], - [postgres._EXTENSION_TO_MOVE, postgres._EXTENSION_INSTALLED], - ] - ), - ): - with patch( - "salt.modules.postgres._psql_prepare_and_run", Mock(return_value=None) - ): - with patch( - "salt.modules.postgres.available_extensions", - Mock( - return_value={"foo": {"default_version": "1.4", "name": "foo"}} - ), - ): - self.assertTrue(postgres.create_extension("foo")) - self.assertTrue( - re.match( - 'CREATE EXTENSION IF NOT EXISTS "foo" ;', - postgres._psql_prepare_and_run.call_args[0][0][1], - ) - ) - self.assertTrue( - postgres.create_extension( - "foo", schema="a", ext_version="b", from_version="c" - ) - ) - self.assertTrue( - re.match( - 'CREATE EXTENSION IF NOT EXISTS "foo" ' - 'WITH SCHEMA "a" VERSION b FROM c ;', - postgres._psql_prepare_and_run.call_args[0][0][1], - ) - ) - self.assertFalse(postgres.create_extension("foo")) - ret = postgres.create_extension("foo", ext_version="a", schema="b") - self.assertTrue(ret) - self.assertTrue( - re.match( - 'ALTER EXTENSION "foo" SET SCHEMA "b";' - ' ALTER EXTENSION "foo" UPDATE TO a;', - postgres._psql_prepare_and_run.call_args[0][0][1], - ) - ) - ret = postgres.create_extension("foo", ext_version="a", schema="b") - self.assertTrue(ret) - self.assertTrue( - re.match( - 'ALTER EXTENSION "foo" SET SCHEMA "b";', - postgres._psql_prepare_and_run.call_args[0][0][1], - ) - ) - ret = postgres.create_extension("foo", ext_version="a", schema="b") - self.assertTrue(ret) - self.assertTrue( - re.match( - 'ALTER EXTENSION "foo" UPDATE TO a;', - postgres._psql_prepare_and_run.call_args[0][0][1], - ) - ) - self.assertFalse( - postgres.create_extension("foo", ext_version="a", schema="b") - ) - self.assertFalse( - postgres.create_extension("foo", ext_version="a", schema="b") - ) - - def test_encrypt_passwords(self): - self.assertEqual(postgres._maybe_encrypt_password("foo", "bar", False), "bar") - self.assertEqual( - postgres._maybe_encrypt_password("foo", "bar", True), - "md596948aad3fcae80c08a35c9b5958cd89", - ) - - def test_schema_list(self): - with patch( - "salt.modules.postgres._run_psql", - Mock(return_value={"retcode": 0, "stdout": test_list_schema_csv}), - ): - ret = postgres.schema_list( - "maint_db", - db_user="testuser", - db_host="testhost", - db_port="testport", - db_password="foo", - ) - self.assertDictEqual( - ret, - { - "public": { - "acl": "{postgres=UC/postgres,=UC/postgres}", - "owner": "postgres", - }, - "pg_toast": {"acl": "", "owner": "postgres"}, - }, - ) - - def test_schema_exists(self): - with patch( - "salt.modules.postgres._run_psql", Mock(return_value={"retcode": 0}) - ): - with patch( - "salt.modules.postgres.psql_query", - Mock( - return_value=[ - { - "name": "public", - "acl": "{postgres=UC/postgres,=UC/postgres}", - "owner": "postgres", - } - ] - ), - ): - ret = postgres.schema_exists("template1", "public") - self.assertTrue(ret) - - def test_schema_get(self): - with patch( - "salt.modules.postgres._run_psql", Mock(return_value={"retcode": 0}) - ): - with patch( - "salt.modules.postgres.psql_query", - Mock( - return_value=[ - { - "name": "public", - "acl": "{postgres=UC/postgres,=UC/postgres}", - "owner": "postgres", - } - ] - ), - ): - ret = postgres.schema_get("template1", "public") - self.assertTrue(ret) - - def test_schema_get_again(self): - with patch( - "salt.modules.postgres._run_psql", Mock(return_value={"retcode": 0}) - ): - with patch( - "salt.modules.postgres.psql_query", - Mock( - return_value=[ - { - "name": "public", - "acl": "{postgres=UC/postgres,=UC/postgres}", - "owner": "postgres", - } - ] - ), - ): - ret = postgres.schema_get("template1", "pg_toast") - self.assertFalse(ret) - - def test_schema_create(self): - with patch( - "salt.modules.postgres._run_psql", Mock(return_value={"retcode": 0}) - ): - with patch("salt.modules.postgres.schema_exists", Mock(return_value=False)): - postgres.schema_create( - "maint_db", - "testschema", - user="user", - db_host="testhost", - db_port="testport", - db_user="testuser", - db_password="testpassword", - ) - postgres._run_psql.assert_called_once_with( - [ - "/usr/bin/pgsql", - "--no-align", - "--no-readline", - "--no-psqlrc", - "--no-password", - "--username", - "testuser", - "--host", - "testhost", - "--port", - "testport", - "--dbname", - "maint_db", - "-c", - 'CREATE SCHEMA "testschema"', - ], - host="testhost", - port="testport", - password="testpassword", - user="testuser", - runas="user", - ) - - def test_schema_create2(self): - with patch("salt.modules.postgres.schema_exists", Mock(return_value=True)): - ret = postgres.schema_create( - "test_db", - "test_schema", - user="user", - db_host="test_host", - db_port="test_port", - db_user="test_user", - db_password="test_password", - ) - self.assertFalse(ret) - - def test_schema_remove(self): - with patch( - "salt.modules.postgres._run_psql", Mock(return_value={"retcode": 0}) - ): - with patch("salt.modules.postgres.schema_exists", Mock(return_value=True)): - postgres.schema_remove( - "maint_db", - "testschema", - user="user", - db_host="testhost", - db_port="testport", - db_user="testuser", - db_password="testpassword", - ) - postgres._run_psql.assert_called_once_with( - [ - "/usr/bin/pgsql", - "--no-align", - "--no-readline", - "--no-psqlrc", - "--no-password", - "--username", - "testuser", - "--host", - "testhost", - "--port", - "testport", - "--dbname", - "maint_db", - "-c", - 'DROP SCHEMA "testschema"', - ], - host="testhost", - port="testport", - password="testpassword", - user="testuser", - runas="user", - ) - - def test_schema_remove2(self): - with patch("salt.modules.postgres.schema_exists", Mock(return_value=False)): - ret = postgres.schema_remove( - "test_db", - "test_schema", - user="user", - db_host="test_host", - db_port="test_port", - db_user="test_user", - db_password="test_password", - ) - self.assertFalse(ret) - - def test_language_list(self): - """ - Test language listing - """ - with patch( - "salt.modules.postgres._run_psql", - Mock(return_value={"retcode": 0, "stdout": test_list_language_csv}), - ): - ret = postgres.language_list( - "testdb", - user="testuser", - host="testhost", - port="testport", - password="foo", - ) - self.assertDictEqual( - ret, - {"c": "c", "internal": "internal", "plpgsql": "plpgsql", "sql": "sql"}, - ) - - def test_language_exists(self): - """ - Test language existence check - """ - with patch( - "salt.modules.postgres._run_psql", Mock(return_value={"retcode": 0}) - ): - with patch( - "salt.modules.postgres.psql_query", - Mock( - return_value=[ - {"Name": "internal"}, - {"Name": "c"}, - {"Name": "sql"}, - {"Name": "plpgsql"}, - ] - ), - ): - with patch( - "salt.modules.postgres.language_exists", Mock(return_value=True) - ): - ret = postgres.language_exists("sql", "testdb") - self.assertTrue(ret) - - def test_language_create(self): - """ - Test language creation - does not exist in db - """ - with patch( - "salt.modules.postgres._run_psql", Mock(return_value={"retcode": 0}) - ): - with patch( - "salt.modules.postgres.language_exists", Mock(return_value=False) - ): - postgres.language_create( - "plpythonu", - "testdb", - runas="user", - host="testhost", - port="testport", - user="testuser", - password="testpassword", - ) - postgres._run_psql.assert_called_once_with( - [ - "/usr/bin/pgsql", - "--no-align", - "--no-readline", - "--no-psqlrc", - "--no-password", - "--username", - "testuser", - "--host", - "testhost", - "--port", - "testport", - "--dbname", - "testdb", - "-c", - "CREATE LANGUAGE plpythonu", - ], - host="testhost", - port="testport", - password="testpassword", - user="testuser", - runas="user", - ) - - def test_language_create_exists(self): - """ - Test language creation - already exists in db - """ - with patch("salt.modules.postgres.language_exists", Mock(return_value=True)): - ret = postgres.language_create( - "plpythonu", - "testdb", - runas="user", - host="testhost", - port="testport", - user="testuser", - password="testpassword", - ) - self.assertFalse(ret) - - def test_language_remove(self): - """ - Test language removal - exists in db - """ - with patch( - "salt.modules.postgres._run_psql", Mock(return_value={"retcode": 0}) - ): - with patch( - "salt.modules.postgres.language_exists", Mock(return_value=True) - ): - postgres.language_remove( - "plpgsql", - "testdb", - runas="user", - host="testhost", - port="testport", - user="testuser", - password="testpassword", - ) - postgres._run_psql.assert_called_once_with( - [ - "/usr/bin/pgsql", - "--no-align", - "--no-readline", - "--no-psqlrc", - "--no-password", - "--username", - "testuser", - "--host", - "testhost", - "--port", - "testport", - "--dbname", - "testdb", - "-c", - "DROP LANGUAGE plpgsql", - ], - host="testhost", - port="testport", - password="testpassword", - user="testuser", - runas="user", - ) - - def test_language_remove_non_exist(self): - """ - Test language removal - does not exist in db - """ - with patch("salt.modules.postgres.language_exists", Mock(return_value=False)): - ret = postgres.language_remove( - "plpgsql", - "testdb", - runas="user", - host="testhost", - port="testport", - user="testuser", - password="testpassword", - ) - self.assertFalse(ret) - - def test_privileges_list_table(self): - """ - Test privilege listing on a table - """ - with patch( - "salt.modules.postgres._run_psql", - Mock(return_value={"retcode": 0, "stdout": test_privileges_list_table_csv}), - ): - ret = postgres.privileges_list( - "awl", - "table", - maintenance_db="db_name", - runas="user", - host="testhost", - port="testport", - user="testuser", - password="testpassword", - ) - expected = { - "bayestest": { - "INSERT": False, - "UPDATE": False, - "SELECT": False, - "DELETE": False, - }, - "baruwa": { - "INSERT": True, - "TRUNCATE": True, - "UPDATE": True, - "TRIGGER": True, - "REFERENCES": True, - "SELECT": True, - "DELETE": True, - }, - "baruwatest": { - "INSERT": False, - "TRUNCATE": False, - "UPDATE": False, - "TRIGGER": False, - "REFERENCES": False, - "SELECT": False, - "DELETE": False, - }, - } - - self.assertDictEqual(ret, expected) - - query = ( - "COPY (SELECT relacl AS name FROM pg_catalog.pg_class c " - "JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace " - "WHERE nspname = 'public' AND relname = 'awl' AND relkind in ('r', 'v') " - "ORDER BY relname) TO STDOUT WITH CSV HEADER" - ) - - postgres._run_psql.assert_called_once_with( - [ - "/usr/bin/pgsql", - "--no-align", - "--no-readline", - "--no-psqlrc", - "--no-password", - "--username", - "testuser", - "--host", - "testhost", - "--port", - "testport", - "--dbname", - "db_name", - "-v", - "datestyle=ISO,MDY", - "-c", - query, - ], - host="testhost", - port="testport", - password="testpassword", - user="testuser", - runas="user", - ) - - def test_privileges_list_group(self): - """ - Test privilege listing on a group - """ - with patch( - "salt.modules.postgres._run_psql", - Mock(return_value={"retcode": 0, "stdout": test_privileges_list_group_csv}), - ): - ret = postgres.privileges_list( - "admin", - "group", - maintenance_db="db_name", - runas="user", - host="testhost", - port="testport", - user="testuser", - password="testpassword", - ) - expected = { - "baruwa": False, - "baruwatest": False, - "baruwatest2": True, - } - - self.assertDictEqual(ret, expected) - - query = ( - "COPY (SELECT rolname, admin_option " - "FROM pg_catalog.pg_auth_members m JOIN pg_catalog.pg_roles r " - "ON m.member=r.oid WHERE m.roleid IN (SELECT oid FROM " - "pg_catalog.pg_roles WHERE rolname='admin') ORDER BY rolname) " - "TO STDOUT WITH CSV HEADER" - ) - - postgres._run_psql.assert_called_once_with( - [ - "/usr/bin/pgsql", - "--no-align", - "--no-readline", - "--no-psqlrc", - "--no-password", - "--username", - "testuser", - "--host", - "testhost", - "--port", - "testport", - "--dbname", - "db_name", - "-v", - "datestyle=ISO,MDY", - "-c", - query, - ], - host="testhost", - port="testport", - password="testpassword", - user="testuser", - runas="user", - ) - - def test_has_privileges_on_table(self): - """ - Test privilege checks on table - """ - with patch( - "salt.modules.postgres._run_psql", - Mock(return_value={"retcode": 0, "stdout": test_privileges_list_table_csv}), - ): - ret = postgres.has_privileges( - "baruwa", - "awl", - "table", - "SELECT,INSERT", - grant_option=True, - maintenance_db="db_name", - runas="user", - host="testhost", - port="testport", - user="testuser", - password="testpassword", - ) - - self.assertTrue(ret) - - ret = postgres.has_privileges( - "baruwa", - "awl", - "table", - "ALL", - grant_option=True, - maintenance_db="db_name", - runas="user", - host="testhost", - port="testport", - user="testuser", - password="testpassword", - ) - - self.assertTrue(ret) - - ret = postgres.has_privileges( - "baruwa", - "awl", - "table", - "ALL", - grant_option=False, - maintenance_db="db_name", - runas="user", - host="testhost", - port="testport", - user="testuser", - password="testpassword", - ) - - self.assertTrue(ret) - - ret = postgres.has_privileges( - "bayestest", - "awl", - "table", - "SELECT,INSERT,TRUNCATE", - maintenance_db="db_name", - runas="user", - host="testhost", - port="testport", - user="testuser", - password="testpassword", - ) - - self.assertFalse(ret) - - ret = postgres.has_privileges( - "bayestest", - "awl", - "table", - "SELECT,INSERT", - maintenance_db="db_name", - runas="user", - host="testhost", - port="testport", - user="testuser", - password="testpassword", - ) - - self.assertTrue(ret) - - def test_has_privileges_on_group(self): - """ - Test privilege checks on group - """ - with patch( - "salt.modules.postgres._run_psql", - Mock(return_value={"retcode": 0, "stdout": test_privileges_list_group_csv}), - ): - ret = postgres.has_privileges( - "baruwa", - "admin", - "group", - maintenance_db="db_name", - runas="user", - host="testhost", - port="testport", - user="testuser", - password="testpassword", - ) - - self.assertTrue(ret) - - ret = postgres.has_privileges( - "baruwa", - "admin", - "group", - grant_option=True, - maintenance_db="db_name", - runas="user", - host="testhost", - port="testport", - user="testuser", - password="testpassword", - ) - - self.assertFalse(ret) - - ret = postgres.has_privileges( - "tony", - "admin", - "group", - maintenance_db="db_name", - runas="user", - host="testhost", - port="testport", - user="testuser", - password="testpassword", - ) - - self.assertFalse(ret) - - def test_privileges_grant_table(self): - """ - Test granting privileges on table - """ - with patch( - "salt.modules.postgres._run_psql", Mock(return_value={"retcode": 0}) - ): - with patch( - "salt.modules.postgres.has_privileges", Mock(return_value=False) - ): - ret = postgres.privileges_grant( - "baruwa", - "awl", - "table", - "ALL", - grant_option=True, - maintenance_db="db_name", - runas="user", - host="testhost", - port="testport", - user="testuser", - password="testpassword", - ) - - query = 'GRANT ALL ON TABLE public."awl" TO "baruwa" WITH GRANT OPTION' - - postgres._run_psql.assert_called_once_with( - [ - "/usr/bin/pgsql", - "--no-align", - "--no-readline", - "--no-psqlrc", - "--no-password", - "--username", - "testuser", - "--host", - "testhost", - "--port", - "testport", - "--dbname", - "db_name", - "-c", - query, - ], - host="testhost", - port="testport", - password="testpassword", - user="testuser", - runas="user", - ) - - with patch( - "salt.modules.postgres._run_psql", Mock(return_value={"retcode": 0}) - ): - with patch( - "salt.modules.postgres.has_privileges", Mock(return_value=False) - ): - ret = postgres.privileges_grant( - "baruwa", - "awl", - "table", - "ALL", - maintenance_db="db_name", - runas="user", - host="testhost", - port="testport", - user="testuser", - password="testpassword", - ) - - query = 'GRANT ALL ON TABLE public."awl" TO "baruwa"' - - postgres._run_psql.assert_called_once_with( - [ - "/usr/bin/pgsql", - "--no-align", - "--no-readline", - "--no-psqlrc", - "--no-password", - "--username", - "testuser", - "--host", - "testhost", - "--port", - "testport", - "--dbname", - "db_name", - "-c", - query, - ], - host="testhost", - port="testport", - password="testpassword", - user="testuser", - runas="user", - ) - - # Test grant on all tables - with patch( - "salt.modules.postgres._run_psql", Mock(return_value={"retcode": 0}) - ): - with patch( - "salt.modules.postgres.has_privileges", Mock(return_value=False) - ): - ret = postgres.privileges_grant( - "baruwa", - "ALL", - "table", - "SELECT", - maintenance_db="db_name", - runas="user", - host="testhost", - port="testport", - user="testuser", - password="testpassword", - ) - - query = 'GRANT SELECT ON ALL TABLES IN SCHEMA public TO "baruwa"' - - postgres._run_psql.assert_called_once_with( - [ - "/usr/bin/pgsql", - "--no-align", - "--no-readline", - "--no-psqlrc", - "--no-password", - "--username", - "testuser", - "--host", - "testhost", - "--port", - "testport", - "--dbname", - "db_name", - "-c", - query, - ], - host="testhost", - port="testport", - password="testpassword", - user="testuser", - runas="user", - ) - - def test_privileges_grant_group(self): - """ - Test granting privileges on group - """ - with patch( - "salt.modules.postgres._run_psql", Mock(return_value={"retcode": 0}) - ): - with patch( - "salt.modules.postgres.has_privileges", Mock(return_value=False) - ): - ret = postgres.privileges_grant( - "baruwa", - "admins", - "group", - grant_option=True, - maintenance_db="db_name", - runas="user", - host="testhost", - port="testport", - user="testuser", - password="testpassword", - ) - - query = 'GRANT admins TO "baruwa" WITH ADMIN OPTION' - - postgres._run_psql.assert_called_once_with( - [ - "/usr/bin/pgsql", - "--no-align", - "--no-readline", - "--no-psqlrc", - "--no-password", - "--username", - "testuser", - "--host", - "testhost", - "--port", - "testport", - "--dbname", - "db_name", - "-c", - query, - ], - host="testhost", - port="testport", - password="testpassword", - user="testuser", - runas="user", - ) - - with patch( - "salt.modules.postgres._run_psql", Mock(return_value={"retcode": 0}) - ): - with patch( - "salt.modules.postgres.has_privileges", Mock(return_value=False) - ): - ret = postgres.privileges_grant( - "baruwa", - "admins", - "group", - maintenance_db="db_name", - runas="user", - host="testhost", - port="testport", - user="testuser", - password="testpassword", - ) - - query = 'GRANT admins TO "baruwa"' - - postgres._run_psql.assert_called_once_with( - [ - "/usr/bin/pgsql", - "--no-align", - "--no-readline", - "--no-psqlrc", - "--no-password", - "--username", - "testuser", - "--host", - "testhost", - "--port", - "testport", - "--dbname", - "db_name", - "-c", - query, - ], - host="testhost", - port="testport", - password="testpassword", - user="testuser", - runas="user", - ) - - def test_privileges_revoke_table(self): - """ - Test revoking privileges on table - """ - with patch( - "salt.modules.postgres._run_psql", Mock(return_value={"retcode": 0}) - ): - with patch("salt.modules.postgres.has_privileges", Mock(return_value=True)): - ret = postgres.privileges_revoke( - "baruwa", - "awl", - "table", - "ALL", - maintenance_db="db_name", - runas="user", - host="testhost", - port="testport", - user="testuser", - password="testpassword", - ) - - query = "REVOKE ALL ON TABLE public.awl FROM baruwa" - - postgres._run_psql.assert_called_once_with( - [ - "/usr/bin/pgsql", - "--no-align", - "--no-readline", - "--no-psqlrc", - "--no-password", - "--username", - "testuser", - "--host", - "testhost", - "--port", - "testport", - "--dbname", - "db_name", - "-c", - query, - ], - host="testhost", - port="testport", - password="testpassword", - user="testuser", - runas="user", - ) - - def test_privileges_revoke_group(self): - """ - Test revoking privileges on group - """ - with patch( - "salt.modules.postgres._run_psql", Mock(return_value={"retcode": 0}) - ): - with patch("salt.modules.postgres.has_privileges", Mock(return_value=True)): - ret = postgres.privileges_revoke( - "baruwa", - "admins", - "group", - maintenance_db="db_name", - runas="user", - host="testhost", - port="testport", - user="testuser", - password="testpassword", - ) - - query = "REVOKE admins FROM baruwa" - - postgres._run_psql.assert_called_once_with( - [ - "/usr/bin/pgsql", - "--no-align", - "--no-readline", - "--no-psqlrc", - "--no-password", - "--username", - "testuser", - "--host", - "testhost", - "--port", - "testport", - "--dbname", - "db_name", - "-c", - query, - ], - host="testhost", - port="testport", - password="testpassword", - user="testuser", - runas="user", - ) - - def test_datadir_init(self): - """ - Test Initializing a postgres data directory - """ - with patch( - "salt.modules.postgres._run_initdb", Mock(return_value={"retcode": 0}) - ): - with patch( - "salt.modules.postgres.datadir_exists", Mock(return_value=False) - ): - name = "/var/lib/pgsql/data" - ret = postgres.datadir_init( - name, user="postgres", password="test", runas="postgres" - ) - postgres._run_initdb.assert_called_once_with( - name, - auth="password", - encoding="UTF8", - locale=None, - password="test", - runas="postgres", - checksums=False, - waldir=None, - user="postgres", - ) - self.assertTrue(ret) - - def test_datadir_exists(self): - """ - Test Checks if postgres data directory has been initialized - """ - with patch("os.path.isfile", Mock(return_value=True)): - name = "/var/lib/pgsql/data" - ret = postgres.datadir_exists(name) - self.assertTrue(ret) - - def test_pg_is_older_ext_ver(self): - """ - Test Checks if postgres extension version string is older - """ - self.assertTrue(postgres._pg_is_older_ext_ver("8.5", "9.5")) - self.assertTrue(postgres._pg_is_older_ext_ver("8.5", "8.6")) - self.assertTrue(postgres._pg_is_older_ext_ver("8.5.2", "8.5.3")) - self.assertFalse(postgres._pg_is_older_ext_ver("9.5", "8.5")) - self.assertTrue(postgres._pg_is_older_ext_ver("9.5", "9.6")) - self.assertTrue(postgres._pg_is_older_ext_ver("9.5.0", "9.5.1")) - self.assertTrue(postgres._pg_is_older_ext_ver("9.5", "9.5.1")) - self.assertFalse(postgres._pg_is_older_ext_ver("9.5.1", "9.5")) - self.assertFalse(postgres._pg_is_older_ext_ver("9.5b", "9.5a")) - self.assertTrue(postgres._pg_is_older_ext_ver("10a", "10b")) - self.assertTrue(postgres._pg_is_older_ext_ver("1.2.3.4", "1.2.3.5")) - self.assertTrue(postgres._pg_is_older_ext_ver("10dev", "10next")) - self.assertFalse(postgres._pg_is_older_ext_ver("10next", "10dev")) From 452f6bdf855ae4484145f48d3a433dc949e2a775 Mon Sep 17 00:00:00 2001 From: David Murphy < dmurphy@saltstack.com> Date: Fri, 13 Oct 2023 16:26:21 -0600 Subject: [PATCH 071/153] Added tablespace_create test --- tests/pytests/unit/modules/test_postgres.py | 78 ++++++++++++++++----- 1 file changed, 60 insertions(+), 18 deletions(-) diff --git a/tests/pytests/unit/modules/test_postgres.py b/tests/pytests/unit/modules/test_postgres.py index ee3d907b901..608eaf57f35 100644 --- a/tests/pytests/unit/modules/test_postgres.py +++ b/tests/pytests/unit/modules/test_postgres.py @@ -238,7 +238,7 @@ def test_db_alter(): owner="otheruser", runas="foo", ) - log.warning(f"DGM test_db_alter ret '{ret}'") + assert ret postgres._run_psql.assert_has_calls( [ @@ -1431,23 +1431,23 @@ def test_language_exists(): """ Test language existence check """ - with patch("salt.modules.postgres._run_psql", Mock(return_value={"retcode": 0})): - with patch( - "salt.modules.postgres.psql_query", - Mock( - return_value=[ - {"Name": "internal"}, - {"Name": "c"}, - {"Name": "sql"}, - {"Name": "plpgsql"}, - ] - ), - ): - with patch( - "salt.modules.postgres.language_exists", Mock(return_value=True) - ): - ret = postgres.language_exists("sql", "testdb") - assert ret + with patch( + "salt.modules.postgres._run_psql", Mock(return_value={"retcode": 0}) + ), patch( + "salt.modules.postgres.psql_query", + Mock( + return_value=[ + {"Name": "internal"}, + {"Name": "c"}, + {"Name": "sql"}, + {"Name": "plpgsql"}, + ] + ), + ), patch( + "salt.modules.postgres.language_exists", Mock(return_value=True) + ): + ret = postgres.language_exists("sql", "testdb") + assert ret def test_language_create(): @@ -2228,3 +2228,45 @@ def test_pg_is_older_ext_ver(): assert postgres._pg_is_older_ext_ver("1.2.3.4", "1.2.3.5") assert postgres._pg_is_older_ext_ver("10dev", "10next") assert not postgres._pg_is_older_ext_ver("10next", "10dev") + + +def test_tablespace_create(): + with patch( + "salt.modules.postgres._run_psql", Mock(return_value={"retcode": 0}) + ), patch("salt.utils.path.which", MagicMock(return_value="/usr/bin/pgsql")): + postgres.tablespace_create( + "test_tablespace", + "/tmp/postgres_test_tablespace", + user="testuser", + host="testhost", + port="testport", + maintenance_db="maint_db", + password="foo", + owner="otheruser", + runas="foo", + ) + + postgres._run_psql.assert_called_once_with( + [ + "/usr/bin/pgsql", + "--no-align", + "--no-readline", + "--no-psqlrc", + "--no-password", + "--username", + "testuser", + "--host", + "testhost", + "--port", + "testport", + "--dbname", + "maint_db", + "-c", + 'CREATE TABLESPACE "test_tablespace" OWNER "otheruser" LOCATION \'/tmp/postgres_test_tablespace\' ', + ], + runas="foo", + password="foo", + host="testhost", + port="testport", + user="testuser", + ) From d2481582f4879ab0ddc52a9c0415b3e5dbf55326 Mon Sep 17 00:00:00 2001 From: David Murphy < dmurphy@saltstack.com> Date: Mon, 16 Oct 2023 09:45:08 -0600 Subject: [PATCH 072/153] Updated test per reviewer suggestion --- tests/pytests/unit/modules/test_postgres.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/pytests/unit/modules/test_postgres.py b/tests/pytests/unit/modules/test_postgres.py index 608eaf57f35..5f82fe560cc 100644 --- a/tests/pytests/unit/modules/test_postgres.py +++ b/tests/pytests/unit/modules/test_postgres.py @@ -220,7 +220,7 @@ def test__run_initdb_with_timeout(): def test_run_psql(): postgres._run_psql('echo "hi"') cmd = postgres.__salt__["cmd.run_all"] - assert "postgres" == cmd.call_args[1]["runas"] + assert cmd.call_args[1]["runas"] == "postgres" def test_db_alter(): From 4dbd8caec2bfd2bbaf4526320ad9583b8e17e6bc Mon Sep 17 00:00:00 2001 From: David Murphy < dmurphy@saltstack.com> Date: Mon, 16 Oct 2023 10:00:45 -0600 Subject: [PATCH 073/153] Further update to test per reviewer comment --- tests/pytests/unit/modules/test_postgres.py | 34 ++++++++++++--------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/tests/pytests/unit/modules/test_postgres.py b/tests/pytests/unit/modules/test_postgres.py index 5f82fe560cc..7bfdb4a7f6c 100644 --- a/tests/pytests/unit/modules/test_postgres.py +++ b/tests/pytests/unit/modules/test_postgres.py @@ -2211,23 +2211,29 @@ def test_datadir_exists(): assert ret -def test_pg_is_older_ext_ver(): +@pytest.mark.parametrize( + "v1,v2,result", + ( + ("8.5", "9.5", True), + ("8.5", "8.6", True), + ("8.5.2", "8.5.3", True), + ("9.5", "8.5", False), + ("9.5", "9.6", True), + ("9.5.0", "9.5.1", True), + ("9.5", "9.5.1", True), + ("9.5.1", "9.5", False), + ("9.5b", "9.5a", False), + ("10a", "10b", True), + ("1.2.3.4", "1.2.3.5", True), + ("10dev", "10next", True), + ("10next", "10dev", False), + ), +) +def test_pg_is_older_ext_ver(v1, v2, result): """ Test Checks if postgres extension version string is older """ - assert postgres._pg_is_older_ext_ver("8.5", "9.5") - assert postgres._pg_is_older_ext_ver("8.5", "8.6") - assert postgres._pg_is_older_ext_ver("8.5.2", "8.5.3") - assert not postgres._pg_is_older_ext_ver("9.5", "8.5") - assert postgres._pg_is_older_ext_ver("9.5", "9.6") - assert postgres._pg_is_older_ext_ver("9.5.0", "9.5.1") - assert postgres._pg_is_older_ext_ver("9.5", "9.5.1") - assert not postgres._pg_is_older_ext_ver("9.5.1", "9.5") - assert not postgres._pg_is_older_ext_ver("9.5b", "9.5a") - assert postgres._pg_is_older_ext_ver("10a", "10b") - assert postgres._pg_is_older_ext_ver("1.2.3.4", "1.2.3.5") - assert postgres._pg_is_older_ext_ver("10dev", "10next") - assert not postgres._pg_is_older_ext_ver("10next", "10dev") + assert postgres._pg_is_older_ext_ver(v1, v2) is result def test_tablespace_create(): From 0963209cc3e20ba6dfa3abdd5d716f400dafa910 Mon Sep 17 00:00:00 2001 From: David Murphy < dmurphy@saltstack.com> Date: Mon, 16 Oct 2023 13:07:02 -0600 Subject: [PATCH 074/153] Migrated test_deb_postgre.py to pytests --- .../pytests/unit/modules/test_deb_postgres.py | 159 +++++++++++++++ tests/unit/modules/test_deb_postgres.py | 184 ------------------ 2 files changed, 159 insertions(+), 184 deletions(-) create mode 100644 tests/pytests/unit/modules/test_deb_postgres.py delete mode 100644 tests/unit/modules/test_deb_postgres.py diff --git a/tests/pytests/unit/modules/test_deb_postgres.py b/tests/pytests/unit/modules/test_deb_postgres.py new file mode 100644 index 00000000000..f50d4642016 --- /dev/null +++ b/tests/pytests/unit/modules/test_deb_postgres.py @@ -0,0 +1,159 @@ +import logging + +import pytest + +import salt.modules.deb_postgres as deb_postgres +from tests.support.mock import Mock, patch + +log = logging.getLogger(__name__) + + +LSCLUSTER = """\ +8.4 main 5432 online postgres /srv/8.4/main \ + /var/log/postgresql/postgresql-8.4-main.log +9.1 main 5433 online postgres /srv/9.1/main \ + /var/log/postgresql/postgresql-9.1-main.log +""" + + +@pytest.fixture +def configure_loader_modules(): + return { + deb_postgres: { + "__salt__": { + "config.option": Mock(), + "cmd.run_all": Mock(return_value={"stdout": LSCLUSTER}), + "file.chown": Mock(), + "file.remove": Mock(), + } + } + } + + +def test_cluster_create(): + with patch("salt.utils.path.which", Mock(return_value="/usr/bin/pg_createcluster")): + expected_cmdstr = ( + "/usr/bin/pg_createcluster " + "--port 5432 --locale fr_FR --encoding UTF-8 " + "--datadir /opt/postgresql " + "9.3 main" + ) + + deb_postgres.cluster_create( + "9.3", + "main", + port="5432", + locale="fr_FR", + encoding="UTF-8", + datadir="/opt/postgresql", + ) + assert deb_postgres.__salt__["cmd.run_all"].call_args[0][0] == expected_cmdstr + + +def test_cluster_create_with_initdb_options(): + with patch("salt.utils.path.which", Mock(return_value="/usr/bin/pg_createcluster")): + expected_cmdstr = ( + "/usr/bin/pg_createcluster " + "--port 5432 --locale fr_FR --encoding UTF-8 " + "--datadir /opt/postgresql " + "11 main " + "-- " + "--allow-group-access " + "--data-checksums " + "--wal-segsize 32" + ) + + deb_postgres.cluster_create( + "11", + "main", + port="5432", + locale="fr_FR", + encoding="UTF-8", + datadir="/opt/postgresql", + allow_group_access=True, + data_checksums=True, + wal_segsize="32", + ) + assert deb_postgres.__salt__["cmd.run_all"].call_args[0][0] == expected_cmdstr + + +def test_cluster_create_with_float(): + with patch("salt.utils.path.which", Mock(return_value="/usr/bin/pg_createcluster")): + expected_cmdstr = ( + "/usr/bin/pg_createcluster " + "--port 5432 --locale fr_FR --encoding UTF-8 " + "--datadir /opt/postgresql " + "9.3 main" + ) + + deb_postgres.cluster_create( + 9.3, + "main", + port="5432", + locale="fr_FR", + encoding="UTF-8", + datadir="/opt/postgresql", + ) + assert deb_postgres.__salt__["cmd.run_all"].call_args[0][0] == expected_cmdstr + + +def test_parse_pg_lsclusters(): + with patch("salt.utils.path.which", Mock(return_value="/usr/bin/pg_lsclusters")): + stdout = LSCLUSTER + maxDiff = None + expected = { + "8.4/main": { + "port": 5432, + "status": "online", + "user": "postgres", + "datadir": "/srv/8.4/main", + "log": "/var/log/postgresql/postgresql-8.4-main.log", + }, + "9.1/main": { + "port": 5433, + "status": "online", + "user": "postgres", + "datadir": "/srv/9.1/main", + "log": "/var/log/postgresql/postgresql-9.1-main.log", + }, + } + assert deb_postgres._parse_pg_lscluster(stdout) == expected + + +def test_cluster_list(): + with patch("salt.utils.path.which", Mock(return_value="/usr/bin/pg_lsclusters")): + return_list = deb_postgres.cluster_list() + assert ( + deb_postgres.__salt__["cmd.run_all"].call_args[0][0] + == "/usr/bin/pg_lsclusters --no-header" + ) + + return_dict = deb_postgres.cluster_list(verbose=True) + assert isinstance(return_dict, dict) + + +def test_cluster_exists(): + assert deb_postgres.cluster_exists("8.4") + assert deb_postgres.cluster_exists("8.4", "main") + assert not deb_postgres.cluster_exists("3.4", "main") + + +def test_cluster_delete(): + with patch("salt.utils.path.which", Mock(return_value="/usr/bin/pg_dropcluster")): + deb_postgres.cluster_remove("9.3", "main") + assert ( + deb_postgres.__salt__["cmd.run_all"].call_args[0][0] + == "/usr/bin/pg_dropcluster 9.3 main" + ) + + deb_postgres.cluster_remove("9.3", "main", stop=True) + assert ( + deb_postgres.__salt__["cmd.run_all"].call_args[0][0] + == "/usr/bin/pg_dropcluster --stop 9.3 main" + ) + + deb_postgres.cluster_remove(9.3, "main", stop=True) + assert ( + deb_postgres.__salt__["cmd.run_all"].call_args[0][0] + == "/usr/bin/pg_dropcluster --stop 9.3 main" + ) diff --git a/tests/unit/modules/test_deb_postgres.py b/tests/unit/modules/test_deb_postgres.py deleted file mode 100644 index 37e276fdffd..00000000000 --- a/tests/unit/modules/test_deb_postgres.py +++ /dev/null @@ -1,184 +0,0 @@ -import salt.modules.deb_postgres as deb_postgres -from tests.support.mixins import LoaderModuleMockMixin -from tests.support.mock import Mock, patch -from tests.support.unit import TestCase - -LSCLUSTER = """\ -8.4 main 5432 online postgres /srv/8.4/main \ - /var/log/postgresql/postgresql-8.4-main.log -9.1 main 5433 online postgres /srv/9.1/main \ - /var/log/postgresql/postgresql-9.1-main.log -""" - - -class PostgresClusterTestCase(TestCase, LoaderModuleMockMixin): - def setup_loader_modules(self): - self.cmd_run_all_mock = Mock(return_value={"stdout": LSCLUSTER}) - self.addCleanup(delattr, self, "cmd_run_all_mock") - patcher = patch( - "salt.utils.path.which", Mock(return_value="/usr/bin/pg_createcluster") - ) - patcher.start() - self.addCleanup(patcher.stop) - return { - deb_postgres: { - "__salt__": { - "config.option": Mock(), - "cmd.run_all": self.cmd_run_all_mock, - "file.chown": Mock(), - "file.remove": Mock(), - } - } - } - - def test_cluster_create(self): - deb_postgres.cluster_create( - "9.3", - "main", - port="5432", - locale="fr_FR", - encoding="UTF-8", - datadir="/opt/postgresql", - ) - cmdstr = ( - "/usr/bin/pg_createcluster " - "--port 5432 --locale fr_FR --encoding UTF-8 " - "--datadir /opt/postgresql " - "9.3 main" - ) - self.assertEqual(cmdstr, self.cmd_run_all_mock.call_args[0][0]) - - def test_cluster_create_with_initdb_options(self): - deb_postgres.cluster_create( - "11", - "main", - port="5432", - locale="fr_FR", - encoding="UTF-8", - datadir="/opt/postgresql", - allow_group_access=True, - data_checksums=True, - wal_segsize="32", - ) - cmdstr = ( - "/usr/bin/pg_createcluster " - "--port 5432 --locale fr_FR --encoding UTF-8 " - "--datadir /opt/postgresql " - "11 main " - "-- " - "--allow-group-access " - "--data-checksums " - "--wal-segsize 32" - ) - self.assertEqual(cmdstr, self.cmd_run_all_mock.call_args[0][0]) - - def test_cluster_create_with_float(self): - deb_postgres.cluster_create( - 9.3, - "main", - port="5432", - locale="fr_FR", - encoding="UTF-8", - datadir="/opt/postgresql", - ) - cmdstr = ( - "/usr/bin/pg_createcluster " - "--port 5432 --locale fr_FR --encoding UTF-8 " - "--datadir /opt/postgresql " - "9.3 main" - ) - self.assertEqual(cmdstr, self.cmd_run_all_mock.call_args[0][0]) - - -class PostgresLsClusterTestCase(TestCase, LoaderModuleMockMixin): - def setup_loader_modules(self): - self.cmd_run_all_mock = Mock(return_value={"stdout": LSCLUSTER}) - self.addCleanup(delattr, self, "cmd_run_all_mock") - patcher = patch( - "salt.utils.path.which", Mock(return_value="/usr/bin/pg_lsclusters") - ) - patcher.start() - self.addCleanup(patcher.stop) - return { - deb_postgres: { - "__salt__": { - "config.option": Mock(), - "cmd.run_all": self.cmd_run_all_mock, - "file.chown": Mock(), - "file.remove": Mock(), - } - } - } - - def test_parse_pg_lsclusters(self): - stdout = LSCLUSTER - self.maxDiff = None - self.assertDictEqual( - { - "8.4/main": { - "port": 5432, - "status": "online", - "user": "postgres", - "datadir": "/srv/8.4/main", - "log": "/var/log/postgresql/postgresql-8.4-main.log", - }, - "9.1/main": { - "port": 5433, - "status": "online", - "user": "postgres", - "datadir": "/srv/9.1/main", - "log": "/var/log/postgresql/postgresql-9.1-main.log", - }, - }, - deb_postgres._parse_pg_lscluster(stdout), - ) - - def test_cluster_list(self): - return_list = deb_postgres.cluster_list() - self.assertEqual( - "/usr/bin/pg_lsclusters --no-header", self.cmd_run_all_mock.call_args[0][0] - ) - return_dict = deb_postgres.cluster_list(verbose=True) - self.assertIsInstance(return_dict, dict) - - def test_cluster_exists(self): - self.assertTrue(deb_postgres.cluster_exists("8.4") is True) - self.assertTrue(deb_postgres.cluster_exists("8.4", "main") is True) - self.assertFalse(deb_postgres.cluster_exists("3.4", "main")) - - -class PostgresDeleteClusterTestCase(TestCase, LoaderModuleMockMixin): - def setup_loader_modules(self): - self.cmd_run_all_mock = Mock(return_value={"stdout": LSCLUSTER}) - self.addCleanup(delattr, self, "cmd_run_all_mock") - patcher = patch( - "salt.utils.path.which", Mock(return_value="/usr/bin/pg_dropcluster") - ) - patcher.start() - self.addCleanup(patcher.stop) - return { - deb_postgres: { - "__salt__": { - "config.option": Mock(), - "cmd.run_all": self.cmd_run_all_mock, - "file.chown": Mock(), - "file.remove": Mock(), - } - } - } - - def test_cluster_delete(self): - deb_postgres.cluster_remove("9.3", "main") - self.assertEqual( - "/usr/bin/pg_dropcluster 9.3 main", self.cmd_run_all_mock.call_args[0][0] - ) - deb_postgres.cluster_remove("9.3", "main", stop=True) - self.assertEqual( - "/usr/bin/pg_dropcluster --stop 9.3 main", - self.cmd_run_all_mock.call_args[0][0], - ) - deb_postgres.cluster_remove(9.3, "main", stop=True) - self.assertEqual( - "/usr/bin/pg_dropcluster --stop 9.3 main", - self.cmd_run_all_mock.call_args[0][0], - ) From 7714b22f075b81150deb87cd7c2bed9b49f55d74 Mon Sep 17 00:00:00 2001 From: David Murphy < dmurphy@saltstack.com> Date: Tue, 17 Oct 2023 16:22:21 -0600 Subject: [PATCH 075/153] Updates tests for tablespace_list, tablespace_exists and tablespace_remove --- tests/pytests/unit/modules/test_postgres.py | 195 ++++++++++++++++++++ 1 file changed, 195 insertions(+) diff --git a/tests/pytests/unit/modules/test_postgres.py b/tests/pytests/unit/modules/test_postgres.py index 7bfdb4a7f6c..5571f9b6b06 100644 --- a/tests/pytests/unit/modules/test_postgres.py +++ b/tests/pytests/unit/modules/test_postgres.py @@ -2276,3 +2276,198 @@ def test_tablespace_create(): port="testport", user="testuser", ) + + +def test_tablespace_list(): + with patch( + "salt.modules.postgres._run_psql", Mock(return_value={"retcode": 0}) + ), patch( + "salt.utils.path.which", MagicMock(return_value="/usr/bin/pgsql") + ), patch.dict( + postgres.__salt__, + { + "postgres.psql_query": MagicMock( + return_value=[ + { + "Name": "pg_global", + "Owner": "postgres", + "ACL": "", + "Opts": "", + "Location": "", + }, + { + "Name": "pg_default", + "Owner": "postgres", + "ACL": "", + "Opts": "", + "Location": "", + }, + { + "Name": "test_tablespace", + "Owner": "testuser", + "ACL": "", + "Opts": "", + "Location": "/tmp/posgrest_test_tablespace", + }, + ] + ), + }, + ): + ret = postgres.tablespace_list( + user="testuser", + host="testhost", + port="testport", + maintenance_db="maint_db", + password="foo", + runas="foo", + ) + + log.warning(f"DGM test_tablespace_list ret '{ret}'") + + expected_data = { + "pg_global": {"Owner": "postgres", "ACL": "", "Opts": "", "Location": ""}, + "pg_default": {"Owner": "postgres", "ACL": "", "Opts": "", "Location": ""}, + "test_tablespace": { + "Owner": "testuser", + "ACL": "", + "Opts": "", + "Location": "/tmp/posgrest_test_tablespace", + }, + } + assert ret == expected_data + + +def test_tablespace_exists_true(): + with patch( + "salt.modules.postgres._run_psql", Mock(return_value={"retcode": 0}) + ), patch( + "salt.utils.path.which", MagicMock(return_value="/usr/bin/pgsql") + ), patch.dict( + postgres.__salt__, + { + "postgres.psql_query": MagicMock( + return_value=[ + { + "Name": "pg_global", + "Owner": "postgres", + "ACL": "", + "Opts": "", + "Location": "", + }, + { + "Name": "pg_default", + "Owner": "postgres", + "ACL": "", + "Opts": "", + "Location": "", + }, + { + "Name": "test_tablespace", + "Owner": "testuser", + "ACL": "", + "Opts": "", + "Location": "/tmp/posgrest_test_tablespace", + }, + ] + ), + }, + ): + ret = postgres.tablespace_exists( + "test_tablespace", + user="testuser", + host="testhost", + port="testport", + maintenance_db="maint_db", + password="foo", + runas="foo", + ) + + assert ret + + +def test_tablespace_exists_false(): + with patch( + "salt.modules.postgres._run_psql", Mock(return_value={"retcode": 0}) + ), patch( + "salt.utils.path.which", MagicMock(return_value="/usr/bin/pgsql") + ), patch.dict( + postgres.__salt__, + { + "postgres.psql_query": MagicMock( + return_value=[ + { + "Name": "pg_global", + "Owner": "postgres", + "ACL": "", + "Opts": "", + "Location": "", + }, + { + "Name": "pg_default", + "Owner": "postgres", + "ACL": "", + "Opts": "", + "Location": "", + }, + { + "Name": "test_tablespace", + "Owner": "testuser", + "ACL": "", + "Opts": "", + "Location": "/tmp/posgrest_test_tablespace", + }, + ] + ), + }, + ): + ret = postgres.tablespace_exists( + "bad_test_tablespace", + user="testuser", + host="testhost", + port="testport", + maintenance_db="maint_db", + password="foo", + runas="foo", + ) + + assert not ret + + +def test_tablespace_remove(): + with patch( + "salt.modules.postgres._run_psql", Mock(return_value={"retcode": 0}) + ), patch("salt.utils.path.which", MagicMock(return_value="/usr/bin/pgsql")): + postgres.tablespace_remove( + "test_tablespace", + user="testuser", + host="testhost", + port="testport", + maintenance_db="maint_db", + password="foo", + runas="foo", + ) + + postgres._run_psql.assert_called_once_with( + [ + "/usr/bin/pgsql", + "--no-align", + "--no-readline", + "--no-psqlrc", + "--no-password", + "--username", + "testuser", + "--host", + "testhost", + "--port", + "testport", + "--dbname", + "maint_db", + "-c", + 'DROP TABLESPACE "test_tablespace"', + ], + runas="foo", + password="foo", + host="testhost", + port="testport", + user="testuser", + ) From 3c4aa715ba8bb8f8533e3e1ff081e57db746d1f4 Mon Sep 17 00:00:00 2001 From: David Murphy < dmurphy@saltstack.com> Date: Tue, 17 Oct 2023 16:30:37 -0600 Subject: [PATCH 076/153] Updated tests with tablespace alter tests --- tests/pytests/unit/modules/test_postgres.py | 87 +++++++++++++++++++-- 1 file changed, 82 insertions(+), 5 deletions(-) diff --git a/tests/pytests/unit/modules/test_postgres.py b/tests/pytests/unit/modules/test_postgres.py index 5571f9b6b06..4c3870ed0a0 100644 --- a/tests/pytests/unit/modules/test_postgres.py +++ b/tests/pytests/unit/modules/test_postgres.py @@ -1,5 +1,4 @@ import datetime -import logging import re import pytest @@ -9,8 +8,6 @@ import salt.modules.postgres as postgres from salt.exceptions import SaltInvocationError from tests.support.mock import MagicMock, Mock, call, patch -log = logging.getLogger(__name__) - # 'md5' + md5('password' + 'username') md5_pw = "md55a231fcdb710d73268c4f44283487ba2" @@ -2322,8 +2319,6 @@ def test_tablespace_list(): runas="foo", ) - log.warning(f"DGM test_tablespace_list ret '{ret}'") - expected_data = { "pg_global": {"Owner": "postgres", "ACL": "", "Opts": "", "Location": ""}, "pg_default": {"Owner": "postgres", "ACL": "", "Opts": "", "Location": ""}, @@ -2433,6 +2428,88 @@ def test_tablespace_exists_false(): assert not ret +def test_tablespace_alter_new_owner(): + with patch( + "salt.modules.postgres._run_psql", Mock(return_value={"retcode": 0}) + ), patch("salt.utils.path.which", MagicMock(return_value="/usr/bin/pgsql")): + postgres.tablespace_alter( + "test_tablespace", + user="testuser", + host="testhost", + port="testport", + maintenance_db="maint_db", + password="foo", + runas="foo", + new_owner="testuser", + ) + + postgres._run_psql.assert_called_once_with( + [ + "/usr/bin/pgsql", + "--no-align", + "--no-readline", + "--no-psqlrc", + "--no-password", + "--username", + "testuser", + "--host", + "testhost", + "--port", + "testport", + "--dbname", + "maint_db", + "-c", + 'ALTER TABLESPACE "test_tablespace" OWNER TO "testuser"', + ], + runas="foo", + password="foo", + host="testhost", + port="testport", + user="testuser", + ) + + +def test_tablespace_alter_new_name(): + with patch( + "salt.modules.postgres._run_psql", Mock(return_value={"retcode": 0}) + ), patch("salt.utils.path.which", MagicMock(return_value="/usr/bin/pgsql")): + postgres.tablespace_alter( + "test_tablespace", + user="testuser", + host="testhost", + port="testport", + maintenance_db="maint_db", + password="foo", + runas="foo", + new_name="test_tablespace2", + ) + + postgres._run_psql.assert_called_once_with( + [ + "/usr/bin/pgsql", + "--no-align", + "--no-readline", + "--no-psqlrc", + "--no-password", + "--username", + "testuser", + "--host", + "testhost", + "--port", + "testport", + "--dbname", + "maint_db", + "-c", + 'ALTER TABLESPACE "test_tablespace" RENAME TO "test_tablespace2"', + ], + runas="foo", + password="foo", + host="testhost", + port="testport", + user="testuser", + ) + + def test_tablespace_remove(): with patch( "salt.modules.postgres._run_psql", Mock(return_value={"retcode": 0}) From e919e8f63e0b2e72a531cfce0b3bbc052f14ca69 Mon Sep 17 00:00:00 2001 From: David Murphy < dmurphy@saltstack.com> Date: Wed, 25 Oct 2023 10:55:24 -0600 Subject: [PATCH 077/153] Updated asserts and limit testing to Linux only --- .../pytests/unit/modules/test_deb_postgres.py | 3 + tests/pytests/unit/modules/test_postgres.py | 58 ++++++++++--------- 2 files changed, 33 insertions(+), 28 deletions(-) diff --git a/tests/pytests/unit/modules/test_deb_postgres.py b/tests/pytests/unit/modules/test_deb_postgres.py index f50d4642016..cd944e10f0e 100644 --- a/tests/pytests/unit/modules/test_deb_postgres.py +++ b/tests/pytests/unit/modules/test_deb_postgres.py @@ -7,6 +7,9 @@ from tests.support.mock import Mock, patch log = logging.getLogger(__name__) +pytestmark = [ + pytest.mark.skip_unless_on_linux(reason="Only supported on Linux family"), +] LSCLUSTER = """\ 8.4 main 5432 online postgres /srv/8.4/main \ diff --git a/tests/pytests/unit/modules/test_postgres.py b/tests/pytests/unit/modules/test_postgres.py index 4c3870ed0a0..6acdc97f413 100644 --- a/tests/pytests/unit/modules/test_postgres.py +++ b/tests/pytests/unit/modules/test_postgres.py @@ -8,6 +8,10 @@ import salt.modules.postgres as postgres from salt.exceptions import SaltInvocationError from tests.support.mock import MagicMock, Mock, call, patch +pytestmark = [ + pytest.mark.skip_unless_on_linux(reason="Only supported on Linux family"), +] + # 'md5' + md5('password' + 'username') md5_pw = "md55a231fcdb710d73268c4f44283487ba2" @@ -235,7 +239,7 @@ def test_db_alter(): owner="otheruser", runas="foo", ) - assert ret + assert ret is True postgres._run_psql.assert_has_calls( [ @@ -428,7 +432,7 @@ def test_db_exists(): password="foo", runas="foo", ) - assert ret + assert ret is True def test_db_list(): @@ -749,7 +753,7 @@ def test_user_exists(): password="test_password", runas="foo", ) - assert ret + assert ret is True def test_user_list(): @@ -1186,7 +1190,7 @@ def test_create_extension_newerthan(): assert not postgres.create_extension("foo") ret = postgres.create_extension("foo", ext_version="a", schema="b") - assert ret + assert ret is True assert re.match( 'ALTER EXTENSION "foo" SET SCHEMA "b";' ' ALTER EXTENSION "foo" UPDATE TO a;', @@ -1194,14 +1198,14 @@ def test_create_extension_newerthan(): ) ret = postgres.create_extension("foo", ext_version="a", schema="b") - assert ret + assert ret is True assert re.match( 'ALTER EXTENSION "foo" SET SCHEMA "b";', postgres._psql_prepare_and_run.call_args[0][0][1], ) ret = postgres.create_extension("foo", ext_version="a", schema="b") - assert ret + assert ret is True assert re.match( 'ALTER EXTENSION "foo" UPDATE TO a;', postgres._psql_prepare_and_run.call_args[0][0][1], @@ -1254,7 +1258,7 @@ def test_schema_exists(): ), ): ret = postgres.schema_exists("template1", "public") - assert ret + assert ret is True def test_schema_get(): @@ -1272,7 +1276,7 @@ def test_schema_get(): ), ): ret = postgres.schema_get("template1", "public") - assert ret + assert ret is True def test_schema_get_again(): @@ -1290,7 +1294,7 @@ def test_schema_get_again(): ), ): ret = postgres.schema_get("template1", "pg_toast") - assert not ret + assert ret is False def test_schema_create(): @@ -1344,7 +1348,7 @@ def test_schema_create2(): db_user="test_user", db_password="test_password", ) - assert not ret + assert ret is False def test_schema_remove(): @@ -1398,7 +1402,7 @@ def test_schema_remove2(): db_user="test_user", db_password="test_password", ) - assert not ret + assert ret is False def test_language_list(): @@ -1444,7 +1448,7 @@ def test_language_exists(): "salt.modules.postgres.language_exists", Mock(return_value=True) ): ret = postgres.language_exists("sql", "testdb") - assert ret + assert ret is True def test_language_create(): @@ -1504,7 +1508,7 @@ def test_language_create_exists(): user="testuser", password="testpassword", ) - assert not ret + assert ret is False def test_language_remove(): @@ -1564,7 +1568,7 @@ def test_language_remove_non_exist(): user="testuser", password="testpassword", ) - assert not ret + assert ret is False def test_privileges_list_table(): @@ -1730,7 +1734,7 @@ def test_has_privileges_on_table(): user="testuser", password="testpassword", ) - assert ret + assert ret is True ret = postgres.has_privileges( "baruwa", @@ -1745,7 +1749,7 @@ def test_has_privileges_on_table(): user="testuser", password="testpassword", ) - assert ret + assert ret is True ret = postgres.has_privileges( "baruwa", @@ -1760,7 +1764,7 @@ def test_has_privileges_on_table(): user="testuser", password="testpassword", ) - assert ret + assert ret is True ret = postgres.has_privileges( "bayestest", @@ -1774,7 +1778,7 @@ def test_has_privileges_on_table(): user="testuser", password="testpassword", ) - assert not ret + assert ret is False ret = postgres.has_privileges( "bayestest", @@ -1788,7 +1792,7 @@ def test_has_privileges_on_table(): user="testuser", password="testpassword", ) - assert ret + assert ret is True def test_has_privileges_on_group(): @@ -1810,7 +1814,7 @@ def test_has_privileges_on_group(): user="testuser", password="testpassword", ) - assert ret + assert ret is True ret = postgres.has_privileges( "baruwa", @@ -1824,7 +1828,7 @@ def test_has_privileges_on_group(): user="testuser", password="testpassword", ) - assert not ret + assert ret is False ret = postgres.has_privileges( "tony", @@ -1837,7 +1841,7 @@ def test_has_privileges_on_group(): user="testuser", password="testpassword", ) - assert not ret + assert ret is False def test_privileges_grant_table(): @@ -2195,7 +2199,7 @@ def test_datadir_init(): waldir=None, user="postgres", ) - assert ret + assert ret is True def test_datadir_exists(): @@ -2205,7 +2209,7 @@ def test_datadir_exists(): with patch("os.path.isfile", Mock(return_value=True)): name = "/var/lib/pgsql/data" ret = postgres.datadir_exists(name) - assert ret + assert ret is True @pytest.mark.parametrize( @@ -2376,8 +2380,7 @@ def test_tablespace_exists_true(): password="foo", runas="foo", ) - - assert ret + assert ret is True def test_tablespace_exists_false(): @@ -2424,8 +2427,7 @@ def test_tablespace_exists_false(): password="foo", runas="foo", ) - - assert not ret + assert ret is False def test_tablespace_alter_new_owner(): From c6e8fa3b1781c997bc9e1c83e28d3950c7507ad5 Mon Sep 17 00:00:00 2001 From: David Murphy < dmurphy@saltstack.com> Date: Thu, 26 Oct 2023 14:49:25 -0600 Subject: [PATCH 078/153] Converted global constants to pytest fixtures per reviewer comments --- .../pytests/unit/modules/test_deb_postgres.py | 13 ++- tests/pytests/unit/modules/test_postgres.py | 105 ++++++++++-------- 2 files changed, 68 insertions(+), 50 deletions(-) diff --git a/tests/pytests/unit/modules/test_deb_postgres.py b/tests/pytests/unit/modules/test_deb_postgres.py index cd944e10f0e..f125f96707a 100644 --- a/tests/pytests/unit/modules/test_deb_postgres.py +++ b/tests/pytests/unit/modules/test_deb_postgres.py @@ -11,7 +11,10 @@ pytestmark = [ pytest.mark.skip_unless_on_linux(reason="Only supported on Linux family"), ] -LSCLUSTER = """\ + +@pytest.fixture +def get_lscuster(): + return """\ 8.4 main 5432 online postgres /srv/8.4/main \ /var/log/postgresql/postgresql-8.4-main.log 9.1 main 5433 online postgres /srv/9.1/main \ @@ -20,12 +23,12 @@ LSCLUSTER = """\ @pytest.fixture -def configure_loader_modules(): +def configure_loader_modules(get_lscuster): return { deb_postgres: { "__salt__": { "config.option": Mock(), - "cmd.run_all": Mock(return_value={"stdout": LSCLUSTER}), + "cmd.run_all": Mock(return_value={"stdout": get_lscuster}), "file.chown": Mock(), "file.remove": Mock(), } @@ -100,9 +103,9 @@ def test_cluster_create_with_float(): assert deb_postgres.__salt__["cmd.run_all"].call_args[0][0] == expected_cmdstr -def test_parse_pg_lsclusters(): +def test_parse_pg_lsclusters(get_lscuster): with patch("salt.utils.path.which", Mock(return_value="/usr/bin/pg_lsclusters")): - stdout = LSCLUSTER + stdout = get_lscuster maxDiff = None expected = { "8.4/main": { diff --git a/tests/pytests/unit/modules/test_postgres.py b/tests/pytests/unit/modules/test_postgres.py index 6acdc97f413..b9178fa038e 100644 --- a/tests/pytests/unit/modules/test_postgres.py +++ b/tests/pytests/unit/modules/test_postgres.py @@ -12,6 +12,7 @@ pytestmark = [ pytest.mark.skip_unless_on_linux(reason="Only supported on Linux family"), ] + # 'md5' + md5('password' + 'username') md5_pw = "md55a231fcdb710d73268c4f44283487ba2" @@ -21,36 +22,47 @@ scram_pw = ( "LzAh/MGUdjYkdbDzcOKpfGwa3WwPUsyGcY+TEnSpcto=" ) -test_privileges_list_function_csv = ( - 'name\n"{baruwatest=X/baruwatest,bayestest=r/baruwatest,baruwa=X*/baruwatest}"\n' -) -test_list_db_csv = ( - "Name,Owner,Encoding,Collate,Ctype,Access privileges,Tablespace\n" - "template1,postgres,LATIN1,en_US,en_US" - ',"{=c/postgres,postgres=CTc/postgres}",pg_default\n' - "template0,postgres,LATIN1,en_US,en_US" - ',"{=c/postgres,postgres=CTc/postgres}",pg_default\n' - "postgres,postgres,LATIN1,en_US,en_US,,pg_default\n" - "test_db,postgres,LATIN1,en_US,en_US,,pg_default" -) +@pytest.fixture +def get_test_privileges_list_function_csv(): + return """name +"{baruwatest=X/baruwatest,bayestest=r/baruwatest,baruwa=X*/baruwatest}" +""" -test_list_schema_csv = ( - "name,owner,acl\n" - 'public,postgres,"{postgres=UC/postgres,=UC/postgres}"\n' - 'pg_toast,postgres,""' -) -test_list_language_csv = "Name\ninternal\nc\nsql\nplpgsql\n" +@pytest.fixture +def get_test_list_db_csv(): + return """Name,Owner,Encoding,Collate,Ctype,Access privileges,Tablespace +template1,postgres,LATIN1,en_US,en_US,"{=c/postgres,postgres=CTc/postgres}",pg_default +template0,postgres,LATIN1,en_US,en_US,"{=c/postgres,postgres=CTc/postgres}",pg_default +postgres,postgres,LATIN1,en_US,en_US,,pg_default +test_db,postgres,LATIN1,en_US,en_US,,pg_default +""" -test_privileges_list_table_csv = ( - "name\n" - '"{baruwatest=arwdDxt/baruwatest,bayestest=arwd/baruwatest,baruwa=a*r*w*d*D*x*t*/baruwatest}"\n' -) -test_privileges_list_group_csv = ( - "rolname,admin_option\nbaruwa,f\nbaruwatest2,t\nbaruwatest,f\n" -) +@pytest.fixture +def get_test_list_schema_csv(): + return """name,owner,acl +public,postgres,"{postgres=UC/postgres,=UC/postgres}" +pg_toast,postgres,"" +""" + + +@pytest.fixture +def get_test_list_language_csv(): + return "Name\ninternal\nc\nsql\nplpgsql\n" + + +@pytest.fixture +def get_test_privileges_list_table_csv(): + return """name +"{baruwatest=arwdDxt/baruwatest,bayestest=arwd/baruwatest,baruwa=a*r*w*d*D*x*t*/baruwatest}" +""" + + +@pytest.fixture +def get_test_privileges_list_group_csv(): + return "rolname,admin_option\nbaruwa,f\nbaruwatest2,t\nbaruwatest,f\n" @pytest.fixture @@ -108,11 +120,11 @@ def test_verify_password(role, password, verifier, method, result): assert postgres._verify_password(role, password, verifier, method) == result -def test_has_privileges_with_function(): +def test_has_privileges_with_function(get_test_privileges_list_function_csv): with patch( "salt.modules.postgres._run_psql", MagicMock( - return_value={"retcode": 0, "stdout": test_privileges_list_function_csv} + return_value={"retcode": 0, "stdout": get_test_privileges_list_function_csv} ), ), patch("salt.utils.path.which", MagicMock(return_value="/usr/bin/pgsql")): ret = postgres.has_privileges( @@ -418,10 +430,10 @@ def test_db_create_with_trivial_sql_injection(): ) -def test_db_exists(): +def test_db_exists(get_test_list_db_csv): with patch( "salt.modules.postgres._run_psql", - Mock(return_value={"retcode": 0, "stdout": test_list_db_csv}), + Mock(return_value={"retcode": 0, "stdout": get_test_list_db_csv}), ), patch("salt.utils.path.which", MagicMock(return_value="/usr/bin/pgsql")): ret = postgres.db_exists( "test_db", @@ -435,10 +447,10 @@ def test_db_exists(): assert ret is True -def test_db_list(): +def test_db_list(get_test_list_db_csv): with patch( "salt.modules.postgres._run_psql", - Mock(return_value={"retcode": 0, "stdout": test_list_db_csv}), + Mock(return_value={"retcode": 0, "stdout": get_test_list_db_csv}), ), patch("salt.utils.path.which", MagicMock(return_value="/usr/bin/pgsql")): ret = postgres.db_list( user="testuser", @@ -1222,10 +1234,10 @@ def test_encrypt_passwords(): ) -def test_schema_list(): +def test_schema_list(get_test_list_schema_csv): with patch( "salt.modules.postgres._run_psql", - Mock(return_value={"retcode": 0, "stdout": test_list_schema_csv}), + Mock(return_value={"retcode": 0, "stdout": get_test_list_schema_csv}), ): ret = postgres.schema_list( "maint_db", @@ -1276,7 +1288,10 @@ def test_schema_get(): ), ): ret = postgres.schema_get("template1", "public") - assert ret is True + assert ret == { + "acl": "{postgres=UC/postgres,=UC/postgres}", + "owner": "postgres", + } def test_schema_get_again(): @@ -1294,7 +1309,7 @@ def test_schema_get_again(): ), ): ret = postgres.schema_get("template1", "pg_toast") - assert ret is False + assert ret is None def test_schema_create(): @@ -1405,13 +1420,13 @@ def test_schema_remove2(): assert ret is False -def test_language_list(): +def test_language_list(get_test_list_language_csv): """ Test language listing """ with patch( "salt.modules.postgres._run_psql", - Mock(return_value={"retcode": 0, "stdout": test_list_language_csv}), + Mock(return_value={"retcode": 0, "stdout": get_test_list_language_csv}), ): ret = postgres.language_list( "testdb", @@ -1571,13 +1586,13 @@ def test_language_remove_non_exist(): assert ret is False -def test_privileges_list_table(): +def test_privileges_list_table(get_test_privileges_list_table_csv): """ Test privilege listing on a table """ with patch( "salt.modules.postgres._run_psql", - Mock(return_value={"retcode": 0, "stdout": test_privileges_list_table_csv}), + Mock(return_value={"retcode": 0, "stdout": get_test_privileges_list_table_csv}), ), patch("salt.utils.path.which", MagicMock(return_value="/usr/bin/pgsql")): ret = postgres.privileges_list( "awl", @@ -1652,13 +1667,13 @@ def test_privileges_list_table(): ) -def test_privileges_list_group(): +def test_privileges_list_group(get_test_privileges_list_group_csv): """ Test privilege listing on a group """ with patch( "salt.modules.postgres._run_psql", - Mock(return_value={"retcode": 0, "stdout": test_privileges_list_group_csv}), + Mock(return_value={"retcode": 0, "stdout": get_test_privileges_list_group_csv}), ), patch("salt.utils.path.which", MagicMock(return_value="/usr/bin/pgsql")): ret = postgres.privileges_list( "admin", @@ -1713,13 +1728,13 @@ def test_privileges_list_group(): ) -def test_has_privileges_on_table(): +def test_has_privileges_on_table(get_test_privileges_list_table_csv): """ Test privilege checks on table """ with patch( "salt.modules.postgres._run_psql", - Mock(return_value={"retcode": 0, "stdout": test_privileges_list_table_csv}), + Mock(return_value={"retcode": 0, "stdout": get_test_privileges_list_table_csv}), ): ret = postgres.has_privileges( "baruwa", @@ -1795,13 +1810,13 @@ def test_has_privileges_on_table(): assert ret is True -def test_has_privileges_on_group(): +def test_has_privileges_on_group(get_test_privileges_list_group_csv): """ Test privilege checks on group """ with patch( "salt.modules.postgres._run_psql", - Mock(return_value={"retcode": 0, "stdout": test_privileges_list_group_csv}), + Mock(return_value={"retcode": 0, "stdout": get_test_privileges_list_group_csv}), ): ret = postgres.has_privileges( "baruwa", From 1941ebe28ec9dd002abc543fc379d5ec1b78e8d8 Mon Sep 17 00:00:00 2001 From: David Murphy < dmurphy@saltstack.com> Date: Tue, 19 Sep 2023 11:22:34 -0600 Subject: [PATCH 079/153] Move salt.ufw to correct location /etc/ufw/applications.d/ --- changelog/64572.fixed.md | 1 + pkg/debian/salt-master.dirs | 1 - pkg/debian/salt-master.install | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) create mode 100644 changelog/64572.fixed.md diff --git a/changelog/64572.fixed.md b/changelog/64572.fixed.md new file mode 100644 index 00000000000..d9916bb29fa --- /dev/null +++ b/changelog/64572.fixed.md @@ -0,0 +1 @@ +Move salt.ufw to correct location /etc/ufw/applications.d/ diff --git a/pkg/debian/salt-master.dirs b/pkg/debian/salt-master.dirs index 542db04259f..aba501b4379 100644 --- a/pkg/debian/salt-master.dirs +++ b/pkg/debian/salt-master.dirs @@ -1,5 +1,4 @@ /etc/salt/master.d -/etc/ufw/applications.d/salt-master /etc/salt/pki/master/minions /etc/salt/pki/master/minions_autosign /etc/salt/pki/master/minions_denied diff --git a/pkg/debian/salt-master.install b/pkg/debian/salt-master.install index aad95813286..809b5141b1d 100644 --- a/pkg/debian/salt-master.install +++ b/pkg/debian/salt-master.install @@ -1,2 +1,2 @@ pkg/common/salt-master.service /lib/systemd/system -pkg/common/salt.ufw /etc/ufw/applications.d/salt-master +pkg/common/salt.ufw /etc/ufw/applications.d From 51a4a3ba5b919efed7cc6f003f13770e4f2857a8 Mon Sep 17 00:00:00 2001 From: David Murphy < dmurphy@saltstack.com> Date: Wed, 20 Sep 2023 13:33:33 -0600 Subject: [PATCH 080/153] WIP packaging test for salt.ufw --- pkg/debian/salt-master.install | 2 +- pkg/tests/integration/test_salt_ufw.py | 30 ++++++++++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 pkg/tests/integration/test_salt_ufw.py diff --git a/pkg/debian/salt-master.install b/pkg/debian/salt-master.install index 809b5141b1d..aad95813286 100644 --- a/pkg/debian/salt-master.install +++ b/pkg/debian/salt-master.install @@ -1,2 +1,2 @@ pkg/common/salt-master.service /lib/systemd/system -pkg/common/salt.ufw /etc/ufw/applications.d +pkg/common/salt.ufw /etc/ufw/applications.d/salt-master diff --git a/pkg/tests/integration/test_salt_ufw.py b/pkg/tests/integration/test_salt_ufw.py new file mode 100644 index 00000000000..bf0317794f9 --- /dev/null +++ b/pkg/tests/integration/test_salt_ufw.py @@ -0,0 +1,30 @@ +import logging +import os.path +import pathlib +import subprocess + +import pytest +from pytestskipmarkers.utils import platform + +log = logging.getLogger(__name__) + + +@pytest.mark.skip_on_windows() +def test_salt_ufw(salt_master, install_salt): + """ + Test salt.ufw for Debian/Ubuntu salt-master + """ + log.warning(f"DGM test_salt_ufw install_salt '{install_salt}'") + + if install_salt.distro_id not in ("debian", "ubuntu"): + pytest.skip("Only tests Debian / Ubuntu packages") + + pkg = [x for x in install_salt.pkgs if "deb" in x] + if not pkg: + pytest.skip("Not testing deb packages") + pkg = pkg[0].split("/")[-1] + if "rc" not in pkg: + pytest.skip("Not testing an RC package") + + ufw_master_path = Path("/etc/ufw/applications.d/salt-master") + assert ufw_master_path.is_file() From ea30d46e4aabb3ecb894976bcd67098dfcaf6086 Mon Sep 17 00:00:00 2001 From: David Murphy < dmurphy@saltstack.com> Date: Fri, 22 Sep 2023 17:52:50 -0600 Subject: [PATCH 081/153] Updated package test --- pkg/tests/integration/test_salt_ufw.py | 40 +++++++++++++++++++++----- 1 file changed, 33 insertions(+), 7 deletions(-) diff --git a/pkg/tests/integration/test_salt_ufw.py b/pkg/tests/integration/test_salt_ufw.py index bf0317794f9..f922cdc3257 100644 --- a/pkg/tests/integration/test_salt_ufw.py +++ b/pkg/tests/integration/test_salt_ufw.py @@ -10,7 +10,7 @@ log = logging.getLogger(__name__) @pytest.mark.skip_on_windows() -def test_salt_ufw(salt_master, install_salt): +def test_salt_ufw(salt_master, salt_call_cli, install_salt): """ Test salt.ufw for Debian/Ubuntu salt-master """ @@ -19,12 +19,38 @@ def test_salt_ufw(salt_master, install_salt): if install_salt.distro_id not in ("debian", "ubuntu"): pytest.skip("Only tests Debian / Ubuntu packages") - pkg = [x for x in install_salt.pkgs if "deb" in x] + pkg = [x for x in install_salt.pkgs if "deb" in x and "master" in x] if not pkg: pytest.skip("Not testing deb packages") - pkg = pkg[0].split("/")[-1] - if "rc" not in pkg: - pytest.skip("Not testing an RC package") + pkg_master = pkg[0] - ufw_master_path = Path("/etc/ufw/applications.d/salt-master") - assert ufw_master_path.is_file() + pkg = [x for x in install_salt.pkgs if "deb" in x and "common" in x] + if not pkg: + pytest.skip("Not testing deb packages") + pkg_common = pkg[0] + log.warning(f"DGM test_salt_ufw pkg_common '{pkg_common}'") + + pkg_mngr = install_salt.pkg_mngr + log.warning( + f"DGM test_salt_ufw pkg_mngr '{pkg_mngr}', pkg_common '{pkg_common}', pkg_master '{pkg_master}'" + ) + + install_common_cmd = f"{pkg_mngr} -y install {pkg_common}" + install_master_cmd = f"{pkg_mngr} -y install {pkg_master}" + ## ret = salt_call_cli.run("--local", "cmd.run", pkg_mngr, "-y", "install", pkg_to_install) + ret = salt_call_cli.run("--local", "cmd.run", install_common_cmd) + log.warning(f"DGM test_salt_ufw salt_common post install '{ret}'") + assert ret.returncode == 0 + + ret = salt_call_cli.run("--local", "cmd.run", install_master_cmd) + log.warning(f"DGM test_salt_ufw salt_master post install '{ret}'") + assert ret.returncode == 0 + + ufw_master_path = pathlib.Path("/etc/ufw/applications.d/salt-master") + assert ufw_master_path.exists() + + # cleanup + remove_cmd = f"{pkg_mngr} -y remove salt-common" + ret = salt_call_cli.run("--local", "cmd.run", remove_cmd) + log.warning(f"DGM test_salt_ufw salt_master post remove '{ret}'") + assert ret.returncode == 0 From 5232ddfbbe30a3145b4a3f7937648b1ee1ae4e63 Mon Sep 17 00:00:00 2001 From: David Murphy < dmurphy@saltstack.com> Date: Tue, 3 Oct 2023 13:45:56 -0600 Subject: [PATCH 082/153] Revised the salt ufw test --- pkg/tests/integration/test_salt_ufw.py | 37 +++++--------------------- 1 file changed, 7 insertions(+), 30 deletions(-) diff --git a/pkg/tests/integration/test_salt_ufw.py b/pkg/tests/integration/test_salt_ufw.py index f922cdc3257..630324413b4 100644 --- a/pkg/tests/integration/test_salt_ufw.py +++ b/pkg/tests/integration/test_salt_ufw.py @@ -19,38 +19,15 @@ def test_salt_ufw(salt_master, salt_call_cli, install_salt): if install_salt.distro_id not in ("debian", "ubuntu"): pytest.skip("Only tests Debian / Ubuntu packages") - pkg = [x for x in install_salt.pkgs if "deb" in x and "master" in x] - if not pkg: - pytest.skip("Not testing deb packages") - pkg_master = pkg[0] - - pkg = [x for x in install_salt.pkgs if "deb" in x and "common" in x] - if not pkg: - pytest.skip("Not testing deb packages") - pkg_common = pkg[0] - log.warning(f"DGM test_salt_ufw pkg_common '{pkg_common}'") - - pkg_mngr = install_salt.pkg_mngr - log.warning( - f"DGM test_salt_ufw pkg_mngr '{pkg_mngr}', pkg_common '{pkg_common}', pkg_master '{pkg_master}'" - ) - - install_common_cmd = f"{pkg_mngr} -y install {pkg_common}" - install_master_cmd = f"{pkg_mngr} -y install {pkg_master}" - ## ret = salt_call_cli.run("--local", "cmd.run", pkg_mngr, "-y", "install", pkg_to_install) - ret = salt_call_cli.run("--local", "cmd.run", install_common_cmd) - log.warning(f"DGM test_salt_ufw salt_common post install '{ret}'") - assert ret.returncode == 0 - - ret = salt_call_cli.run("--local", "cmd.run", install_master_cmd) - log.warning(f"DGM test_salt_ufw salt_master post install '{ret}'") - assert ret.returncode == 0 + # check that the salt_master is running + assert salt_master.is_running() ufw_master_path = pathlib.Path("/etc/ufw/applications.d/salt-master") assert ufw_master_path.exists() - # cleanup - remove_cmd = f"{pkg_mngr} -y remove salt-common" - ret = salt_call_cli.run("--local", "cmd.run", remove_cmd) - log.warning(f"DGM test_salt_ufw salt_master post remove '{ret}'") + etc_ufw_path = pathlib.Path("/etc/ufw/applications.d") + str_etc_ufw_path = str(etc_ufw_path) + log.warning(f"DGM test_salt_ufw etc ufw contents '{etc_ufw_path}'") + ret = salt_call_cli.run("--local", "cmd.run", f"ls -alh {etc_ufw_path}/") + log.warning(f"DGM test_salt_ufw etc ufw contents, ls -alh file, returned '{ret}'") assert ret.returncode == 0 From 81d6e422db8858987e223a0ab9254d9e9b4abbef Mon Sep 17 00:00:00 2001 From: David Murphy < dmurphy@saltstack.com> Date: Thu, 5 Oct 2023 15:56:31 -0600 Subject: [PATCH 083/153] Removed missed debug statements --- pkg/tests/integration/test_salt_ufw.py | 9 --------- 1 file changed, 9 deletions(-) diff --git a/pkg/tests/integration/test_salt_ufw.py b/pkg/tests/integration/test_salt_ufw.py index 630324413b4..be0328ad41b 100644 --- a/pkg/tests/integration/test_salt_ufw.py +++ b/pkg/tests/integration/test_salt_ufw.py @@ -14,8 +14,6 @@ def test_salt_ufw(salt_master, salt_call_cli, install_salt): """ Test salt.ufw for Debian/Ubuntu salt-master """ - log.warning(f"DGM test_salt_ufw install_salt '{install_salt}'") - if install_salt.distro_id not in ("debian", "ubuntu"): pytest.skip("Only tests Debian / Ubuntu packages") @@ -24,10 +22,3 @@ def test_salt_ufw(salt_master, salt_call_cli, install_salt): ufw_master_path = pathlib.Path("/etc/ufw/applications.d/salt-master") assert ufw_master_path.exists() - - etc_ufw_path = pathlib.Path("/etc/ufw/applications.d") - str_etc_ufw_path = str(etc_ufw_path) - log.warning(f"DGM test_salt_ufw etc ufw contents '{etc_ufw_path}'") - ret = salt_call_cli.run("--local", "cmd.run", f"ls -alh {etc_ufw_path}/") - log.warning(f"DGM test_salt_ufw etc ufw contents, ls -alh file, returned '{ret}'") - assert ret.returncode == 0 From d683fade3905b698dbb36047d992e51881957097 Mon Sep 17 00:00:00 2001 From: David Murphy < dmurphy@saltstack.com> Date: Wed, 11 Oct 2023 14:19:40 -0600 Subject: [PATCH 084/153] Updated salt-master install and test for ufw --- pkg/debian/salt-master.install | 2 +- pkg/tests/integration/test_salt_ufw.py | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/pkg/debian/salt-master.install b/pkg/debian/salt-master.install index aad95813286..809b5141b1d 100644 --- a/pkg/debian/salt-master.install +++ b/pkg/debian/salt-master.install @@ -1,2 +1,2 @@ pkg/common/salt-master.service /lib/systemd/system -pkg/common/salt.ufw /etc/ufw/applications.d/salt-master +pkg/common/salt.ufw /etc/ufw/applications.d diff --git a/pkg/tests/integration/test_salt_ufw.py b/pkg/tests/integration/test_salt_ufw.py index be0328ad41b..4469c12bdbe 100644 --- a/pkg/tests/integration/test_salt_ufw.py +++ b/pkg/tests/integration/test_salt_ufw.py @@ -22,3 +22,23 @@ def test_salt_ufw(salt_master, salt_call_cli, install_salt): ufw_master_path = pathlib.Path("/etc/ufw/applications.d/salt-master") assert ufw_master_path.exists() + assert ufw_master_path.is_file() + + ls_cmd = "ls -alhrt /etc/ufw/applications.d/" + ret = salt_call_cli.run("--local", "cmd.run", ls_cmd) + log.warning(f"DGM test_salt_ufw ls cmd ret '{ret}'") + + cat_cmd = "cat /etc/ufw/applications.d/salt-master" + ret = salt_call_cli.run("--local", "cmd.run", cat_cmd) + log.warning(f"DGM test_salt_ufw cat cmd ret '{ret}'") + + ufw_list_cmd = "/usr/sbin/ufw app list" + ret = salt_call_cli.run("--local", "cmd.run", ufw_list_cmd) + log.warning(f"DGM test_salt_ufw list ret '{ret}'") + + ufw_upd_cmd = "/usr/sbin/ufw app update Salt" + ret = salt_call_cli.run("--local", "cmd.run", ufw_upd_cmd) + log.warning(f"DGM test_salt_ufw update ret '{ret}'") + + ufw_info_cmd = "/usr/sbin/ufw app info Salt" + ret = salt_call_cli.run("--local", "cmd.run", ufw_info_cmd) From 11d5c5c168b6f35efed276c9b3763267bd6062d6 Mon Sep 17 00:00:00 2001 From: David Murphy < dmurphy@saltstack.com> Date: Wed, 11 Oct 2023 14:23:32 -0600 Subject: [PATCH 085/153] Updated test --- pkg/tests/integration/test_salt_ufw.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pkg/tests/integration/test_salt_ufw.py b/pkg/tests/integration/test_salt_ufw.py index 4469c12bdbe..3f5faa3f357 100644 --- a/pkg/tests/integration/test_salt_ufw.py +++ b/pkg/tests/integration/test_salt_ufw.py @@ -20,7 +20,8 @@ def test_salt_ufw(salt_master, salt_call_cli, install_salt): # check that the salt_master is running assert salt_master.is_running() - ufw_master_path = pathlib.Path("/etc/ufw/applications.d/salt-master") + ## ufw_master_path = pathlib.Path("/etc/ufw/applications.d/salt-master") + ufw_master_path = pathlib.Path("/etc/ufw/applications.d/salt.ufw") assert ufw_master_path.exists() assert ufw_master_path.is_file() From 831f982f6f023e6ea4f1c9d3102ef78202e43b5e Mon Sep 17 00:00:00 2001 From: David Murphy < dmurphy@saltstack.com> Date: Mon, 16 Oct 2023 19:58:50 -0600 Subject: [PATCH 086/153] Updated ufw tests to check for Salt --- pkg/tests/integration/test_salt_ufw.py | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/pkg/tests/integration/test_salt_ufw.py b/pkg/tests/integration/test_salt_ufw.py index 3f5faa3f357..eb4e974a30a 100644 --- a/pkg/tests/integration/test_salt_ufw.py +++ b/pkg/tests/integration/test_salt_ufw.py @@ -1,4 +1,3 @@ -import logging import os.path import pathlib import subprocess @@ -6,8 +5,6 @@ import subprocess import pytest from pytestskipmarkers.utils import platform -log = logging.getLogger(__name__) - @pytest.mark.skip_on_windows() def test_salt_ufw(salt_master, salt_call_cli, install_salt): @@ -25,21 +22,23 @@ def test_salt_ufw(salt_master, salt_call_cli, install_salt): assert ufw_master_path.exists() assert ufw_master_path.is_file() - ls_cmd = "ls -alhrt /etc/ufw/applications.d/" - ret = salt_call_cli.run("--local", "cmd.run", ls_cmd) - log.warning(f"DGM test_salt_ufw ls cmd ret '{ret}'") - - cat_cmd = "cat /etc/ufw/applications.d/salt-master" - ret = salt_call_cli.run("--local", "cmd.run", cat_cmd) - log.warning(f"DGM test_salt_ufw cat cmd ret '{ret}'") - ufw_list_cmd = "/usr/sbin/ufw app list" ret = salt_call_cli.run("--local", "cmd.run", ufw_list_cmd) - log.warning(f"DGM test_salt_ufw list ret '{ret}'") + assert "Available applications" in ret.stdout + assert "Salt" in ret.stdout ufw_upd_cmd = "/usr/sbin/ufw app update Salt" ret = salt_call_cli.run("--local", "cmd.run", ufw_upd_cmd) - log.warning(f"DGM test_salt_ufw update ret '{ret}'") + assert ret.returncode == 0 + + expected_info = """Profile: Salt +Title: salt +Description: fast and powerful configuration management and remote +execution + +Ports: + 4505,4506/tcp""" ufw_info_cmd = "/usr/sbin/ufw app info Salt" ret = salt_call_cli.run("--local", "cmd.run", ufw_info_cmd) + assert ret.data == expected_info From b90db6c9494fcd660089550df9f2eb62fe7739b0 Mon Sep 17 00:00:00 2001 From: David Murphy < dmurphy@saltstack.com> Date: Tue, 17 Oct 2023 17:04:15 -0600 Subject: [PATCH 087/153] Updated test to check ufw executable is installed before running the test --- pkg/tests/integration/test_salt_ufw.py | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/pkg/tests/integration/test_salt_ufw.py b/pkg/tests/integration/test_salt_ufw.py index eb4e974a30a..0485ae4735b 100644 --- a/pkg/tests/integration/test_salt_ufw.py +++ b/pkg/tests/integration/test_salt_ufw.py @@ -22,16 +22,18 @@ def test_salt_ufw(salt_master, salt_call_cli, install_salt): assert ufw_master_path.exists() assert ufw_master_path.is_file() - ufw_list_cmd = "/usr/sbin/ufw app list" - ret = salt_call_cli.run("--local", "cmd.run", ufw_list_cmd) - assert "Available applications" in ret.stdout - assert "Salt" in ret.stdout + ufw_cmd_path = pathlib.Path("/usr/sbin/ufw") + if ufw_cmd_path.exists(): + ufw_list_cmd = "/usr/sbin/ufw app list" + ret = salt_call_cli.run("--local", "cmd.run", ufw_list_cmd) + assert "Available applications" in ret.stdout + assert "Salt" in ret.stdout - ufw_upd_cmd = "/usr/sbin/ufw app update Salt" - ret = salt_call_cli.run("--local", "cmd.run", ufw_upd_cmd) - assert ret.returncode == 0 + ufw_upd_cmd = "/usr/sbin/ufw app update Salt" + ret = salt_call_cli.run("--local", "cmd.run", ufw_upd_cmd) + assert ret.returncode == 0 - expected_info = """Profile: Salt + expected_info = """Profile: Salt Title: salt Description: fast and powerful configuration management and remote execution @@ -39,6 +41,6 @@ execution Ports: 4505,4506/tcp""" - ufw_info_cmd = "/usr/sbin/ufw app info Salt" - ret = salt_call_cli.run("--local", "cmd.run", ufw_info_cmd) - assert ret.data == expected_info + ufw_info_cmd = "/usr/sbin/ufw app info Salt" + ret = salt_call_cli.run("--local", "cmd.run", ufw_info_cmd) + assert ret.data == expected_info From 8395346ab5fbd362257398c64ca2970d5291c9bb Mon Sep 17 00:00:00 2001 From: David Murphy < dmurphy@saltstack.com> Date: Wed, 18 Oct 2023 11:48:48 -0600 Subject: [PATCH 088/153] Altered test --- pkg/tests/integration/test_salt_ufw.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/tests/integration/test_salt_ufw.py b/pkg/tests/integration/test_salt_ufw.py index 0485ae4735b..09ab091b56e 100644 --- a/pkg/tests/integration/test_salt_ufw.py +++ b/pkg/tests/integration/test_salt_ufw.py @@ -43,4 +43,4 @@ Ports: ufw_info_cmd = "/usr/sbin/ufw app info Salt" ret = salt_call_cli.run("--local", "cmd.run", ufw_info_cmd) - assert ret.data == expected_info + assert expected_info in ret.data From b58ee63a15e628f2237f4de98e1641f204c096ce Mon Sep 17 00:00:00 2001 From: David Murphy < dmurphy@saltstack.com> Date: Mon, 23 Oct 2023 12:09:49 -0600 Subject: [PATCH 089/153] Updated test per reviewer comments --- pkg/tests/integration/test_salt_ufw.py | 32 +++++++++++--------------- 1 file changed, 13 insertions(+), 19 deletions(-) diff --git a/pkg/tests/integration/test_salt_ufw.py b/pkg/tests/integration/test_salt_ufw.py index 09ab091b56e..478ece6c6a1 100644 --- a/pkg/tests/integration/test_salt_ufw.py +++ b/pkg/tests/integration/test_salt_ufw.py @@ -6,7 +6,8 @@ import pytest from pytestskipmarkers.utils import platform -@pytest.mark.skip_on_windows() +@pytest.mark.skip_on_windows +@pytest.mark.skip_if_binaries_missing("ufw") def test_salt_ufw(salt_master, salt_call_cli, install_salt): """ Test salt.ufw for Debian/Ubuntu salt-master @@ -17,30 +18,23 @@ def test_salt_ufw(salt_master, salt_call_cli, install_salt): # check that the salt_master is running assert salt_master.is_running() - ## ufw_master_path = pathlib.Path("/etc/ufw/applications.d/salt-master") ufw_master_path = pathlib.Path("/etc/ufw/applications.d/salt.ufw") assert ufw_master_path.exists() assert ufw_master_path.is_file() - ufw_cmd_path = pathlib.Path("/usr/sbin/ufw") - if ufw_cmd_path.exists(): - ufw_list_cmd = "/usr/sbin/ufw app list" - ret = salt_call_cli.run("--local", "cmd.run", ufw_list_cmd) - assert "Available applications" in ret.stdout - assert "Salt" in ret.stdout - - ufw_upd_cmd = "/usr/sbin/ufw app update Salt" - ret = salt_call_cli.run("--local", "cmd.run", ufw_upd_cmd) - assert ret.returncode == 0 - - expected_info = """Profile: Salt + ufw_list_cmd = "/usr/sbin/ufw app list" + ret = salt_call_cli.run("--local", "cmd.run", ufw_list_cmd) + assert "Available applications" in ret.stdout + assert "Salt" in ret.stdout + ufw_upd_cmd = "/usr/sbin/ufw app update Salt" + ret = salt_call_cli.run("--local", "cmd.run", ufw_upd_cmd) + assert ret.returncode == 0 + expected_info = """Profile: Salt Title: salt Description: fast and powerful configuration management and remote execution - Ports: 4505,4506/tcp""" - - ufw_info_cmd = "/usr/sbin/ufw app info Salt" - ret = salt_call_cli.run("--local", "cmd.run", ufw_info_cmd) - assert expected_info in ret.data + ufw_info_cmd = "/usr/sbin/ufw app info Salt" + ret = salt_call_cli.run("--local", "cmd.run", ufw_info_cmd) + assert expected_info in ret.data From cb1ca7ca46de3df74825a066e58926c1282ff83b Mon Sep 17 00:00:00 2001 From: David Murphy < dmurphy@saltstack.com> Date: Mon, 23 Oct 2023 13:10:49 -0600 Subject: [PATCH 090/153] Updated test --- pkg/tests/integration/test_salt_ufw.py | 1 + 1 file changed, 1 insertion(+) diff --git a/pkg/tests/integration/test_salt_ufw.py b/pkg/tests/integration/test_salt_ufw.py index 478ece6c6a1..6db78d66154 100644 --- a/pkg/tests/integration/test_salt_ufw.py +++ b/pkg/tests/integration/test_salt_ufw.py @@ -33,6 +33,7 @@ def test_salt_ufw(salt_master, salt_call_cli, install_salt): Title: salt Description: fast and powerful configuration management and remote execution + Ports: 4505,4506/tcp""" ufw_info_cmd = "/usr/sbin/ufw app info Salt" From 66d9c33db7f5491c24293faa3200966b67b776dc Mon Sep 17 00:00:00 2001 From: David Murphy < dmurphy@saltstack.com> Date: Thu, 26 Oct 2023 09:45:48 -0600 Subject: [PATCH 091/153] Fixed up imports as per reviewer comments --- pkg/tests/integration/test_salt_ufw.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/pkg/tests/integration/test_salt_ufw.py b/pkg/tests/integration/test_salt_ufw.py index 6db78d66154..2164de85c57 100644 --- a/pkg/tests/integration/test_salt_ufw.py +++ b/pkg/tests/integration/test_salt_ufw.py @@ -1,9 +1,6 @@ -import os.path import pathlib -import subprocess import pytest -from pytestskipmarkers.utils import platform @pytest.mark.skip_on_windows From 9194800ddbce2b599374523b6c2a26d469b90dd4 Mon Sep 17 00:00:00 2001 From: David Murphy < dmurphy@saltstack.com> Date: Wed, 25 Oct 2023 16:21:08 -0600 Subject: [PATCH 092/153] Added pytests for logging --- .../integration/_logging/test_logging.py | 106 ++++++++++++++++++ 1 file changed, 106 insertions(+) create mode 100644 tests/pytests/integration/_logging/test_logging.py diff --git a/tests/pytests/integration/_logging/test_logging.py b/tests/pytests/integration/_logging/test_logging.py new file mode 100644 index 00000000000..a0fa779308b --- /dev/null +++ b/tests/pytests/integration/_logging/test_logging.py @@ -0,0 +1,106 @@ +import logging +import os + +import pytest + +import salt._logging.impl as log_impl +from tests.support.mock import MagicMock, patch + +pytestmark = [ + pytest.mark.skip_on_windows(reason="Temporarily skipped on the newer golden images") +] + + +log = logging.getLogger(__name__) + + +@pytest.fixture +def configure_loader_modules(): + return {log_impl: {}} + + +def log_nameToLevel(name): + """ + Return the numeric representation of textual logging level + """ + # log level values + CRITICAL = 50 + FATAL = CRITICAL + ERROR = 40 + WARNING = 30 + WARN = WARNING + INFO = 20 + DEBUG = 10 + NOTSET = 0 + + _nameToLevel = { + "CRITICAL": CRITICAL, + "FATAL": FATAL, + "ERROR": ERROR, + "WARN": WARNING, + "WARNING": WARNING, + "INFO": INFO, + "DEBUG": DEBUG, + "NOTSET": NOTSET, + } + return _nameToLevel.get(name, None) + + +def test_lowest_log_level(): + ret = log_impl.get_lowest_log_level() + assert ret is None + + log_impl.set_lowest_log_level(log_nameToLevel("DEBUG")) + ret = log_impl.get_lowest_log_level() + assert ret is log_nameToLevel("DEBUG") + + log_impl.set_lowest_log_level(log_nameToLevel("WARNING")) + ret = log_impl.get_lowest_log_level() + assert ret is log_nameToLevel("WARNING") + + opts = {"log_level": "ERROR", "log_level_logfile": "INFO"} + log_impl.set_lowest_log_level_by_opts(opts) + ret = log_impl.get_lowest_log_level() + assert ret is log_nameToLevel("INFO") + + +def test_get_logging_level_from_string(caplog): + ret = log_impl.get_logging_level_from_string(None) + assert ret is log_nameToLevel("WARNING") + + ret = log_impl.get_logging_level_from_string(log_nameToLevel("DEBUG")) + assert ret is log_nameToLevel("DEBUG") + + ret = log_impl.get_logging_level_from_string("CRITICAL") + assert ret is log_nameToLevel("CRITICAL") + + caplog.clear() + with caplog.at_level(logging.WARNING): + msg = "Could not translate the logging level string 'BADLEVEL' into an actual logging level integer. Returning 'logging.ERROR'." + ret = log_impl.get_logging_level_from_string("BADLEVEL") + assert ret is log_nameToLevel("ERROR") + assert msg in caplog.text + + +def test_logfile_handler(caplog): + caplog.clear() + with caplog.at_level(logging.WARNING): + ret = log_impl.is_logfile_handler_configured() + assert ret is False + + msg = "log_path setting is set to `None`. Nothing else to do" + log_path = None + assert log_impl.setup_logfile_handler(log_path) is None + assert msg in caplog.text + + +def test_in_mainprocess(): + ret = log_impl.in_mainprocess() + assert ret is True + + curr_pid = os.getpid() + with patch( + "os.getpid", MagicMock(side_effect=[AttributeError, curr_pid, curr_pid]) + ): + ret = log_impl.in_mainprocess() + assert ret is True From be3d892fc94e04fabbd4ffd4618346f3cfdbb795 Mon Sep 17 00:00:00 2001 From: Pedro Algarvio Date: Sun, 29 Oct 2023 11:00:57 +0000 Subject: [PATCH 093/153] Remove `docker` from `requirements/static/ci/common.in` It was wrongly added whew resolving conflicts while merging forward Signed-off-by: Pedro Algarvio --- requirements/static/ci/common.in | 1 - requirements/static/ci/py3.10/cloud.txt | 1 - requirements/static/ci/py3.10/darwin.txt | 4 +--- requirements/static/ci/py3.10/freebsd.txt | 4 +--- requirements/static/ci/py3.10/lint.txt | 1 - requirements/static/ci/py3.10/linux.txt | 4 +--- requirements/static/ci/py3.10/windows.txt | 4 +--- requirements/static/ci/py3.7/cloud.txt | 1 - requirements/static/ci/py3.7/freebsd.txt | 4 +--- requirements/static/ci/py3.7/lint.txt | 1 - requirements/static/ci/py3.7/linux.txt | 4 +--- requirements/static/ci/py3.7/windows.txt | 4 +--- requirements/static/ci/py3.8/cloud.txt | 1 - requirements/static/ci/py3.8/freebsd.txt | 4 +--- requirements/static/ci/py3.8/lint.txt | 1 - requirements/static/ci/py3.8/linux.txt | 4 +--- requirements/static/ci/py3.8/windows.txt | 4 +--- requirements/static/ci/py3.9/cloud.txt | 1 - requirements/static/ci/py3.9/darwin.txt | 4 +--- requirements/static/ci/py3.9/freebsd.txt | 4 +--- requirements/static/ci/py3.9/lint.txt | 1 - requirements/static/ci/py3.9/linux.txt | 4 +--- requirements/static/ci/py3.9/windows.txt | 4 +--- 23 files changed, 14 insertions(+), 51 deletions(-) diff --git a/requirements/static/ci/common.in b/requirements/static/ci/common.in index c79319c9c9d..baaa7fc0da6 100644 --- a/requirements/static/ci/common.in +++ b/requirements/static/ci/common.in @@ -14,7 +14,6 @@ cherrypy>=17.4.1 clustershell croniter>=0.3.0,!=0.3.22"; sys_platform != 'win32' dnspython -docker etcd3-py==0.1.6 gitpython>=3.1.37 jmespath diff --git a/requirements/static/ci/py3.10/cloud.txt b/requirements/static/ci/py3.10/cloud.txt index a265fd28680..bff0998ec0d 100644 --- a/requirements/static/ci/py3.10/cloud.txt +++ b/requirements/static/ci/py3.10/cloud.txt @@ -630,7 +630,6 @@ docker==6.1.3 # via # -c requirements/static/ci/py3.10/linux.txt # -r requirements/pytest.txt - # -r requirements/static/ci/common.in etcd3-py==0.1.6 # via # -c requirements/static/ci/py3.10/linux.txt diff --git a/requirements/static/ci/py3.10/darwin.txt b/requirements/static/ci/py3.10/darwin.txt index 3327dc775cd..ab71f7987bf 100644 --- a/requirements/static/ci/py3.10/darwin.txt +++ b/requirements/static/ci/py3.10/darwin.txt @@ -420,9 +420,7 @@ dnspython==1.16.0 # -r requirements/static/ci/common.in # python-etcd docker==6.1.3 - # via - # -r requirements/pytest.txt - # -r requirements/static/ci/common.in + # via -r requirements/pytest.txt etcd3-py==0.1.6 # via -r requirements/static/ci/common.in exceptiongroup==1.0.4 diff --git a/requirements/static/ci/py3.10/freebsd.txt b/requirements/static/ci/py3.10/freebsd.txt index 1656ffb2976..ab3910913c4 100644 --- a/requirements/static/ci/py3.10/freebsd.txt +++ b/requirements/static/ci/py3.10/freebsd.txt @@ -418,9 +418,7 @@ dnspython==1.16.0 # -r requirements/static/ci/common.in # python-etcd docker==6.1.3 - # via - # -r requirements/pytest.txt - # -r requirements/static/ci/common.in + # via -r requirements/pytest.txt etcd3-py==0.1.6 # via -r requirements/static/ci/common.in exceptiongroup==1.0.4 diff --git a/requirements/static/ci/py3.10/lint.txt b/requirements/static/ci/py3.10/lint.txt index 911b90f64e6..a0eb57db663 100644 --- a/requirements/static/ci/py3.10/lint.txt +++ b/requirements/static/ci/py3.10/lint.txt @@ -637,7 +637,6 @@ dnspython==1.16.0 docker==6.1.3 # via # -c requirements/static/ci/py3.10/linux.txt - # -r requirements/static/ci/common.in # -r requirements/static/ci/lint.in etcd3-py==0.1.6 # via diff --git a/requirements/static/ci/py3.10/linux.txt b/requirements/static/ci/py3.10/linux.txt index 4259b04c100..2a267e08d2f 100644 --- a/requirements/static/ci/py3.10/linux.txt +++ b/requirements/static/ci/py3.10/linux.txt @@ -432,9 +432,7 @@ dnspython==1.16.0 # -r requirements/static/ci/common.in # python-etcd docker==6.1.3 - # via - # -r requirements/pytest.txt - # -r requirements/static/ci/common.in + # via -r requirements/pytest.txt etcd3-py==0.1.6 # via -r requirements/static/ci/common.in exceptiongroup==1.0.4 diff --git a/requirements/static/ci/py3.10/windows.txt b/requirements/static/ci/py3.10/windows.txt index dfb0a245335..aa68c670856 100644 --- a/requirements/static/ci/py3.10/windows.txt +++ b/requirements/static/ci/py3.10/windows.txt @@ -104,9 +104,7 @@ dnspython==1.16.0 # -r requirements/static/ci/common.in # python-etcd docker==6.1.3 - # via - # -r requirements/pytest.txt - # -r requirements/static/ci/common.in + # via -r requirements/pytest.txt etcd3-py==0.1.6 # via -r requirements/static/ci/common.in exceptiongroup==1.0.4 diff --git a/requirements/static/ci/py3.7/cloud.txt b/requirements/static/ci/py3.7/cloud.txt index 885a65f3de2..482fe4a0179 100644 --- a/requirements/static/ci/py3.7/cloud.txt +++ b/requirements/static/ci/py3.7/cloud.txt @@ -644,7 +644,6 @@ docker==6.1.3 # via # -c requirements/static/ci/py3.7/linux.txt # -r requirements/pytest.txt - # -r requirements/static/ci/common.in etcd3-py==0.1.6 # via # -c requirements/static/ci/py3.7/linux.txt diff --git a/requirements/static/ci/py3.7/freebsd.txt b/requirements/static/ci/py3.7/freebsd.txt index bda1f9b87d2..281969ebf98 100644 --- a/requirements/static/ci/py3.7/freebsd.txt +++ b/requirements/static/ci/py3.7/freebsd.txt @@ -426,9 +426,7 @@ dnspython==1.16.0 # ciscoconfparse # python-etcd docker==6.1.3 - # via - # -r requirements/pytest.txt - # -r requirements/static/ci/common.in + # via -r requirements/pytest.txt etcd3-py==0.1.6 # via -r requirements/static/ci/common.in exceptiongroup==1.0.4 diff --git a/requirements/static/ci/py3.7/lint.txt b/requirements/static/ci/py3.7/lint.txt index f360be3e4ee..2e9f5f55d0b 100644 --- a/requirements/static/ci/py3.7/lint.txt +++ b/requirements/static/ci/py3.7/lint.txt @@ -655,7 +655,6 @@ dnspython==1.16.0 docker==6.1.3 # via # -c requirements/static/ci/py3.7/linux.txt - # -r requirements/static/ci/common.in # -r requirements/static/ci/lint.in etcd3-py==0.1.6 # via diff --git a/requirements/static/ci/py3.7/linux.txt b/requirements/static/ci/py3.7/linux.txt index f2c689845a2..c66aae87b32 100644 --- a/requirements/static/ci/py3.7/linux.txt +++ b/requirements/static/ci/py3.7/linux.txt @@ -442,9 +442,7 @@ dnspython==1.16.0 # ciscoconfparse # python-etcd docker==6.1.3 - # via - # -r requirements/pytest.txt - # -r requirements/static/ci/common.in + # via -r requirements/pytest.txt etcd3-py==0.1.6 # via -r requirements/static/ci/common.in exceptiongroup==1.0.4 diff --git a/requirements/static/ci/py3.7/windows.txt b/requirements/static/ci/py3.7/windows.txt index 3b4170cf379..358a269c22d 100644 --- a/requirements/static/ci/py3.7/windows.txt +++ b/requirements/static/ci/py3.7/windows.txt @@ -110,9 +110,7 @@ dnspython==1.16.0 # -r requirements/static/ci/common.in # python-etcd docker==6.1.3 - # via - # -r requirements/pytest.txt - # -r requirements/static/ci/common.in + # via -r requirements/pytest.txt etcd3-py==0.1.6 # via -r requirements/static/ci/common.in exceptiongroup==1.0.4 diff --git a/requirements/static/ci/py3.8/cloud.txt b/requirements/static/ci/py3.8/cloud.txt index c975392c71d..f509db70725 100644 --- a/requirements/static/ci/py3.8/cloud.txt +++ b/requirements/static/ci/py3.8/cloud.txt @@ -640,7 +640,6 @@ docker==6.1.3 # via # -c requirements/static/ci/py3.8/linux.txt # -r requirements/pytest.txt - # -r requirements/static/ci/common.in etcd3-py==0.1.6 # via # -c requirements/static/ci/py3.8/linux.txt diff --git a/requirements/static/ci/py3.8/freebsd.txt b/requirements/static/ci/py3.8/freebsd.txt index 4c9a48d36f1..ed7fe4bf658 100644 --- a/requirements/static/ci/py3.8/freebsd.txt +++ b/requirements/static/ci/py3.8/freebsd.txt @@ -424,9 +424,7 @@ dnspython==1.16.0 # ciscoconfparse # python-etcd docker==6.1.3 - # via - # -r requirements/pytest.txt - # -r requirements/static/ci/common.in + # via -r requirements/pytest.txt etcd3-py==0.1.6 # via -r requirements/static/ci/common.in exceptiongroup==1.0.4 diff --git a/requirements/static/ci/py3.8/lint.txt b/requirements/static/ci/py3.8/lint.txt index f2a0155f83b..3ff68e1d3a6 100644 --- a/requirements/static/ci/py3.8/lint.txt +++ b/requirements/static/ci/py3.8/lint.txt @@ -651,7 +651,6 @@ dnspython==1.16.0 docker==6.1.3 # via # -c requirements/static/ci/py3.8/linux.txt - # -r requirements/static/ci/common.in # -r requirements/static/ci/lint.in etcd3-py==0.1.6 # via diff --git a/requirements/static/ci/py3.8/linux.txt b/requirements/static/ci/py3.8/linux.txt index 881d9de7870..5269b54d76f 100644 --- a/requirements/static/ci/py3.8/linux.txt +++ b/requirements/static/ci/py3.8/linux.txt @@ -440,9 +440,7 @@ dnspython==1.16.0 # ciscoconfparse # python-etcd docker==6.1.3 - # via - # -r requirements/pytest.txt - # -r requirements/static/ci/common.in + # via -r requirements/pytest.txt etcd3-py==0.1.6 # via -r requirements/static/ci/common.in exceptiongroup==1.0.4 diff --git a/requirements/static/ci/py3.8/windows.txt b/requirements/static/ci/py3.8/windows.txt index 4931960ab95..12557cc1db2 100644 --- a/requirements/static/ci/py3.8/windows.txt +++ b/requirements/static/ci/py3.8/windows.txt @@ -106,9 +106,7 @@ dnspython==1.16.0 # -r requirements/static/ci/common.in # python-etcd docker==6.1.3 - # via - # -r requirements/pytest.txt - # -r requirements/static/ci/common.in + # via -r requirements/pytest.txt etcd3-py==0.1.6 # via -r requirements/static/ci/common.in exceptiongroup==1.0.4 diff --git a/requirements/static/ci/py3.9/cloud.txt b/requirements/static/ci/py3.9/cloud.txt index 20c45885888..27ff498e697 100644 --- a/requirements/static/ci/py3.9/cloud.txt +++ b/requirements/static/ci/py3.9/cloud.txt @@ -640,7 +640,6 @@ docker==6.1.3 # via # -c requirements/static/ci/py3.9/linux.txt # -r requirements/pytest.txt - # -r requirements/static/ci/common.in etcd3-py==0.1.6 # via # -c requirements/static/ci/py3.9/linux.txt diff --git a/requirements/static/ci/py3.9/darwin.txt b/requirements/static/ci/py3.9/darwin.txt index 8c71bb47fcb..4d427fc1921 100644 --- a/requirements/static/ci/py3.9/darwin.txt +++ b/requirements/static/ci/py3.9/darwin.txt @@ -426,9 +426,7 @@ dnspython==1.16.0 # ciscoconfparse # python-etcd docker==6.1.3 - # via - # -r requirements/pytest.txt - # -r requirements/static/ci/common.in + # via -r requirements/pytest.txt etcd3-py==0.1.6 # via -r requirements/static/ci/common.in exceptiongroup==1.0.4 diff --git a/requirements/static/ci/py3.9/freebsd.txt b/requirements/static/ci/py3.9/freebsd.txt index 86e0cc67ce6..1986be0a083 100644 --- a/requirements/static/ci/py3.9/freebsd.txt +++ b/requirements/static/ci/py3.9/freebsd.txt @@ -424,9 +424,7 @@ dnspython==1.16.0 # ciscoconfparse # python-etcd docker==6.1.3 - # via - # -r requirements/pytest.txt - # -r requirements/static/ci/common.in + # via -r requirements/pytest.txt etcd3-py==0.1.6 # via -r requirements/static/ci/common.in exceptiongroup==1.0.4 diff --git a/requirements/static/ci/py3.9/lint.txt b/requirements/static/ci/py3.9/lint.txt index 10b50ac2860..8f065ba5811 100644 --- a/requirements/static/ci/py3.9/lint.txt +++ b/requirements/static/ci/py3.9/lint.txt @@ -651,7 +651,6 @@ dnspython==1.16.0 docker==6.1.3 # via # -c requirements/static/ci/py3.9/linux.txt - # -r requirements/static/ci/common.in # -r requirements/static/ci/lint.in etcd3-py==0.1.6 # via diff --git a/requirements/static/ci/py3.9/linux.txt b/requirements/static/ci/py3.9/linux.txt index d76be45ad3d..0c5f49494bf 100644 --- a/requirements/static/ci/py3.9/linux.txt +++ b/requirements/static/ci/py3.9/linux.txt @@ -440,9 +440,7 @@ dnspython==1.16.0 # ciscoconfparse # python-etcd docker==6.1.3 - # via - # -r requirements/pytest.txt - # -r requirements/static/ci/common.in + # via -r requirements/pytest.txt etcd3-py==0.1.6 # via -r requirements/static/ci/common.in exceptiongroup==1.0.4 diff --git a/requirements/static/ci/py3.9/windows.txt b/requirements/static/ci/py3.9/windows.txt index ba3ae172329..fbac0ca855d 100644 --- a/requirements/static/ci/py3.9/windows.txt +++ b/requirements/static/ci/py3.9/windows.txt @@ -106,9 +106,7 @@ dnspython==1.16.0 # -r requirements/static/ci/common.in # python-etcd docker==6.1.3 - # via - # -r requirements/pytest.txt - # -r requirements/static/ci/common.in + # via -r requirements/pytest.txt etcd3-py==0.1.6 # via -r requirements/static/ci/common.in exceptiongroup==1.0.4 From e46e33ab9d0e8c9d3d64629d13bf9e94ef4484cb Mon Sep 17 00:00:00 2001 From: Pedro Algarvio Date: Sun, 29 Oct 2023 11:03:09 +0000 Subject: [PATCH 094/153] Remove unused variable Added while resolving conflicts from merge forward Signed-off-by: Pedro Algarvio --- tests/pytests/unit/fileclient/test_fileclient.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/tests/pytests/unit/fileclient/test_fileclient.py b/tests/pytests/unit/fileclient/test_fileclient.py index 3dfc0ed0cbf..0e072e5c36f 100644 --- a/tests/pytests/unit/fileclient/test_fileclient.py +++ b/tests/pytests/unit/fileclient/test_fileclient.py @@ -116,9 +116,6 @@ def test_fileclient_timeout(minion_opts, master_opts): "request_channel_tries": 1, } ) - master_uri = "tcp://{master_ip}:{master_port}".format( - master_ip="localhost", master_port=minion_opts["master_port"] - ) def mock_dumps(*args): return b"meh" From 8edd383c0ee1fdbc92232f344c339a76fd18cec2 Mon Sep 17 00:00:00 2001 From: Pedro Algarvio Date: Sun, 29 Oct 2023 22:29:28 +0000 Subject: [PATCH 095/153] Run `pyupgrade` against modified files in the merge-forward Signed-off-by: Pedro Algarvio --- tests/pytests/unit/client/ssh/test_single.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/pytests/unit/client/ssh/test_single.py b/tests/pytests/unit/client/ssh/test_single.py index c88a1c2127f..3f5459a0842 100644 --- a/tests/pytests/unit/client/ssh/test_single.py +++ b/tests/pytests/unit/client/ssh/test_single.py @@ -302,8 +302,8 @@ def test_execute_script(opts, target, tmp_path): assert ret == exp_ret assert mock_cmd.call_count == 2 assert [ - call("/bin/sh '{}'".format(script)), - call("rm '{}'".format(script)), + call(f"/bin/sh '{script}'"), + call(f"rm '{script}'"), ] == mock_cmd.call_args_list From 3843bdab93be328498d02bdc88a37d26e67b8058 Mon Sep 17 00:00:00 2001 From: Pedro Algarvio Date: Sun, 29 Oct 2023 22:44:56 +0000 Subject: [PATCH 096/153] Upgrade some dependencies which got downgraded on the merge-forward Signed-off-by: Pedro Algarvio --- requirements/static/ci/py3.10/darwin.txt | 4 ++-- requirements/static/ci/py3.10/docs.txt | 2 +- requirements/static/ci/py3.10/freebsd.txt | 4 ++-- requirements/static/ci/py3.10/linux.txt | 4 ++-- requirements/static/ci/py3.10/tools.txt | 2 +- requirements/static/ci/py3.10/windows.txt | 4 ++-- requirements/static/ci/py3.11/darwin.txt | 2 +- requirements/static/ci/py3.11/windows.txt | 4 ++-- requirements/static/ci/py3.8/docs.txt | 2 +- requirements/static/ci/py3.8/freebsd.txt | 4 ++-- requirements/static/ci/py3.8/linux.txt | 4 ++-- requirements/static/ci/py3.8/windows.txt | 4 ++-- requirements/static/ci/py3.9/darwin.txt | 4 ++-- requirements/static/ci/py3.9/docs.txt | 2 +- requirements/static/ci/py3.9/freebsd.txt | 4 ++-- requirements/static/ci/py3.9/linux.txt | 4 ++-- requirements/static/ci/py3.9/tools.txt | 2 +- requirements/static/ci/py3.9/windows.txt | 4 ++-- requirements/static/pkg/py3.10/darwin.txt | 4 ++-- requirements/static/pkg/py3.10/freebsd.txt | 2 +- requirements/static/pkg/py3.10/linux.txt | 2 +- requirements/static/pkg/py3.10/windows.txt | 4 ++-- requirements/static/pkg/py3.11/darwin.txt | 2 +- requirements/static/pkg/py3.11/windows.txt | 4 ++-- requirements/static/pkg/py3.8/freebsd.txt | 2 +- requirements/static/pkg/py3.8/linux.txt | 2 +- requirements/static/pkg/py3.8/windows.txt | 4 ++-- requirements/static/pkg/py3.9/darwin.txt | 4 ++-- requirements/static/pkg/py3.9/freebsd.txt | 2 +- requirements/static/pkg/py3.9/linux.txt | 2 +- requirements/static/pkg/py3.9/windows.txt | 4 ++-- 31 files changed, 49 insertions(+), 49 deletions(-) diff --git a/requirements/static/ci/py3.10/darwin.txt b/requirements/static/ci/py3.10/darwin.txt index a1890dd7121..5eaceba5c11 100644 --- a/requirements/static/ci/py3.10/darwin.txt +++ b/requirements/static/ci/py3.10/darwin.txt @@ -140,7 +140,7 @@ gitdb==4.0.10 # via # -c requirements/static/ci/../pkg/py3.10/darwin.txt # gitpython -gitpython==3.1.37 +gitpython==3.1.40 # via # -c requirements/static/ci/../pkg/py3.10/darwin.txt # -r requirements/darwin.txt @@ -519,7 +519,7 @@ ttp==0.9.5 # ttp-templates types-pyyaml==6.0.1 # via responses -typing-extensions==4.6.3 +typing-extensions==4.8.0 # via # -c requirements/static/ci/../pkg/py3.10/darwin.txt # napalm diff --git a/requirements/static/ci/py3.10/docs.txt b/requirements/static/ci/py3.10/docs.txt index 64aca86bcee..6b259aeacac 100644 --- a/requirements/static/ci/py3.10/docs.txt +++ b/requirements/static/ci/py3.10/docs.txt @@ -146,7 +146,7 @@ tempora==5.3.0 # via # -c requirements/static/ci/py3.10/linux.txt # portend -typing-extensions==4.6.3 +typing-extensions==4.8.0 # via # -c requirements/static/ci/py3.10/linux.txt # pydantic diff --git a/requirements/static/ci/py3.10/freebsd.txt b/requirements/static/ci/py3.10/freebsd.txt index d6ebeb5c78a..1e82d9cc718 100644 --- a/requirements/static/ci/py3.10/freebsd.txt +++ b/requirements/static/ci/py3.10/freebsd.txt @@ -135,7 +135,7 @@ geomet==0.2.1.post1 # via cassandra-driver gitdb==4.0.10 # via gitpython -gitpython==3.1.37 +gitpython==3.1.40 # via -r requirements/static/ci/common.in google-auth==2.19.1 # via kubernetes @@ -509,7 +509,7 @@ ttp==0.9.5 # ttp-templates types-pyyaml==6.0.1 # via responses -typing-extensions==4.6.3 +typing-extensions==4.8.0 # via # -c requirements/static/ci/../pkg/py3.10/freebsd.txt # napalm diff --git a/requirements/static/ci/py3.10/linux.txt b/requirements/static/ci/py3.10/linux.txt index e26e0acf3bc..e135bf843ce 100644 --- a/requirements/static/ci/py3.10/linux.txt +++ b/requirements/static/ci/py3.10/linux.txt @@ -151,7 +151,7 @@ geomet==0.2.1.post1 # via cassandra-driver gitdb==4.0.10 # via gitpython -gitpython==3.1.37 +gitpython==3.1.40 # via -r requirements/static/ci/common.in google-auth==2.19.1 # via kubernetes @@ -573,7 +573,7 @@ twilio==8.2.2 # via -r requirements/static/ci/linux.in types-pyyaml==6.0.1 # via responses -typing-extensions==4.6.3 +typing-extensions==4.8.0 # via # -c requirements/static/ci/../pkg/py3.10/linux.txt # napalm diff --git a/requirements/static/ci/py3.10/tools.txt b/requirements/static/ci/py3.10/tools.txt index b7f87aa92ce..6eb18846050 100644 --- a/requirements/static/ci/py3.10/tools.txt +++ b/requirements/static/ci/py3.10/tools.txt @@ -52,7 +52,7 @@ s3transfer==0.6.1 # via boto3 six==1.16.0 # via python-dateutil -typing-extensions==4.6.3 +typing-extensions==4.8.0 # via python-tools-scripts urllib3==1.26.18 # via diff --git a/requirements/static/ci/py3.10/windows.txt b/requirements/static/ci/py3.10/windows.txt index 8159a37c43a..50ccbe99a82 100644 --- a/requirements/static/ci/py3.10/windows.txt +++ b/requirements/static/ci/py3.10/windows.txt @@ -133,7 +133,7 @@ gitdb==4.0.10 # via # -c requirements/static/ci/../pkg/py3.10/windows.txt # gitpython -gitpython==3.1.37 +gitpython==3.1.40 # via # -c requirements/static/ci/../pkg/py3.10/windows.txt # -r requirements/static/ci/common.in @@ -460,7 +460,7 @@ tornado==6.3.3 # -r requirements/base.txt types-pyyaml==6.0.1 # via responses -typing-extensions==4.6.3 +typing-extensions==4.8.0 # via # -c requirements/static/ci/../pkg/py3.10/windows.txt # pydantic diff --git a/requirements/static/ci/py3.11/darwin.txt b/requirements/static/ci/py3.11/darwin.txt index b5e34b50de4..1da2293b513 100644 --- a/requirements/static/ci/py3.11/darwin.txt +++ b/requirements/static/ci/py3.11/darwin.txt @@ -513,7 +513,7 @@ ttp==0.9.5 # ttp-templates types-pyyaml==6.0.1 # via responses -typing-extensions==4.6.3 +typing-extensions==4.8.0 # via # -c requirements/static/ci/../pkg/py3.11/darwin.txt # napalm diff --git a/requirements/static/ci/py3.11/windows.txt b/requirements/static/ci/py3.11/windows.txt index 5477d51ef56..5829b45296c 100644 --- a/requirements/static/ci/py3.11/windows.txt +++ b/requirements/static/ci/py3.11/windows.txt @@ -131,7 +131,7 @@ gitdb==4.0.10 # via # -c requirements/static/ci/../pkg/py3.11/windows.txt # gitpython -gitpython==3.1.37 +gitpython==3.1.40 # via # -c requirements/static/ci/../pkg/py3.11/windows.txt # -r requirements/static/ci/common.in @@ -456,7 +456,7 @@ tornado==6.3.3 # -r requirements/base.txt types-pyyaml==6.0.1 # via responses -typing-extensions==4.4.0 +typing-extensions==4.8.0 # via # -c requirements/static/ci/../pkg/py3.11/windows.txt # pydantic diff --git a/requirements/static/ci/py3.8/docs.txt b/requirements/static/ci/py3.8/docs.txt index 5cea03dc785..56d0e0df50e 100644 --- a/requirements/static/ci/py3.8/docs.txt +++ b/requirements/static/ci/py3.8/docs.txt @@ -155,7 +155,7 @@ tempora==5.3.0 # via # -c requirements/static/ci/py3.8/linux.txt # portend -typing-extensions==4.6.3 +typing-extensions==4.8.0 # via # -c requirements/static/ci/py3.8/linux.txt # pydantic diff --git a/requirements/static/ci/py3.8/freebsd.txt b/requirements/static/ci/py3.8/freebsd.txt index e252093c771..dd2ea129e1d 100644 --- a/requirements/static/ci/py3.8/freebsd.txt +++ b/requirements/static/ci/py3.8/freebsd.txt @@ -135,7 +135,7 @@ geomet==0.2.1.post1 # via cassandra-driver gitdb==4.0.10 # via gitpython -gitpython==3.1.37 +gitpython==3.1.40 # via -r requirements/static/ci/common.in google-auth==2.19.1 # via kubernetes @@ -513,7 +513,7 @@ ttp==0.9.5 # ttp-templates types-pyyaml==6.0.1 # via responses -typing-extensions==4.6.3 +typing-extensions==4.8.0 # via # -c requirements/static/ci/../pkg/py3.8/freebsd.txt # napalm diff --git a/requirements/static/ci/py3.8/linux.txt b/requirements/static/ci/py3.8/linux.txt index 1d1a34462b7..bf777549034 100644 --- a/requirements/static/ci/py3.8/linux.txt +++ b/requirements/static/ci/py3.8/linux.txt @@ -151,7 +151,7 @@ geomet==0.2.1.post1 # via cassandra-driver gitdb==4.0.10 # via gitpython -gitpython==3.1.37 +gitpython==3.1.40 # via -r requirements/static/ci/common.in google-auth==2.19.1 # via kubernetes @@ -577,7 +577,7 @@ twilio==8.2.2 # via -r requirements/static/ci/linux.in types-pyyaml==6.0.1 # via responses -typing-extensions==4.6.3 +typing-extensions==4.8.0 # via # -c requirements/static/ci/../pkg/py3.8/linux.txt # napalm diff --git a/requirements/static/ci/py3.8/windows.txt b/requirements/static/ci/py3.8/windows.txt index 2e5edcb866f..c2833806897 100644 --- a/requirements/static/ci/py3.8/windows.txt +++ b/requirements/static/ci/py3.8/windows.txt @@ -133,7 +133,7 @@ gitdb==4.0.10 # via # -c requirements/static/ci/../pkg/py3.8/windows.txt # gitpython -gitpython==3.1.37 +gitpython==3.1.40 # via # -c requirements/static/ci/../pkg/py3.8/windows.txt # -r requirements/static/ci/common.in @@ -465,7 +465,7 @@ tornado==6.3.3 # -r requirements/base.txt types-pyyaml==6.0.1 # via responses -typing-extensions==4.6.3 +typing-extensions==4.8.0 # via # -c requirements/static/ci/../pkg/py3.8/windows.txt # pydantic diff --git a/requirements/static/ci/py3.9/darwin.txt b/requirements/static/ci/py3.9/darwin.txt index 312aa4a8975..98c588d360c 100644 --- a/requirements/static/ci/py3.9/darwin.txt +++ b/requirements/static/ci/py3.9/darwin.txt @@ -140,7 +140,7 @@ gitdb==4.0.10 # via # -c requirements/static/ci/../pkg/py3.9/darwin.txt # gitpython -gitpython==3.1.37 +gitpython==3.1.40 # via # -c requirements/static/ci/../pkg/py3.9/darwin.txt # -r requirements/darwin.txt @@ -519,7 +519,7 @@ ttp==0.9.5 # ttp-templates types-pyyaml==6.0.1 # via responses -typing-extensions==4.6.3 +typing-extensions==4.8.0 # via # -c requirements/static/ci/../pkg/py3.9/darwin.txt # napalm diff --git a/requirements/static/ci/py3.9/docs.txt b/requirements/static/ci/py3.9/docs.txt index c2cb759c5fa..286e6b441d4 100644 --- a/requirements/static/ci/py3.9/docs.txt +++ b/requirements/static/ci/py3.9/docs.txt @@ -150,7 +150,7 @@ tempora==5.3.0 # via # -c requirements/static/ci/py3.9/linux.txt # portend -typing-extensions==4.6.3 +typing-extensions==4.8.0 # via # -c requirements/static/ci/py3.9/linux.txt # pydantic diff --git a/requirements/static/ci/py3.9/freebsd.txt b/requirements/static/ci/py3.9/freebsd.txt index 098ec985e25..e0aa21e0a9c 100644 --- a/requirements/static/ci/py3.9/freebsd.txt +++ b/requirements/static/ci/py3.9/freebsd.txt @@ -135,7 +135,7 @@ geomet==0.2.1.post1 # via cassandra-driver gitdb==4.0.10 # via gitpython -gitpython==3.1.37 +gitpython==3.1.40 # via -r requirements/static/ci/common.in google-auth==2.19.1 # via kubernetes @@ -509,7 +509,7 @@ ttp==0.9.5 # ttp-templates types-pyyaml==6.0.1 # via responses -typing-extensions==4.6.3 +typing-extensions==4.8.0 # via # -c requirements/static/ci/../pkg/py3.9/freebsd.txt # napalm diff --git a/requirements/static/ci/py3.9/linux.txt b/requirements/static/ci/py3.9/linux.txt index 06abf173042..90e455216b7 100644 --- a/requirements/static/ci/py3.9/linux.txt +++ b/requirements/static/ci/py3.9/linux.txt @@ -151,7 +151,7 @@ geomet==0.2.1.post1 # via cassandra-driver gitdb==4.0.10 # via gitpython -gitpython==3.1.37 +gitpython==3.1.40 # via -r requirements/static/ci/common.in google-auth==2.19.1 # via kubernetes @@ -575,7 +575,7 @@ twilio==8.2.2 # via -r requirements/static/ci/linux.in types-pyyaml==6.0.1 # via responses -typing-extensions==4.6.3 +typing-extensions==4.8.0 # via # -c requirements/static/ci/../pkg/py3.9/linux.txt # napalm diff --git a/requirements/static/ci/py3.9/tools.txt b/requirements/static/ci/py3.9/tools.txt index 3582727b4f4..f5ce6c7954d 100644 --- a/requirements/static/ci/py3.9/tools.txt +++ b/requirements/static/ci/py3.9/tools.txt @@ -52,7 +52,7 @@ s3transfer==0.6.1 # via boto3 six==1.16.0 # via python-dateutil -typing-extensions==4.6.3 +typing-extensions==4.8.0 # via python-tools-scripts urllib3==1.26.18 # via diff --git a/requirements/static/ci/py3.9/windows.txt b/requirements/static/ci/py3.9/windows.txt index f1b40938f23..ff156b3285e 100644 --- a/requirements/static/ci/py3.9/windows.txt +++ b/requirements/static/ci/py3.9/windows.txt @@ -133,7 +133,7 @@ gitdb==4.0.10 # via # -c requirements/static/ci/../pkg/py3.9/windows.txt # gitpython -gitpython==3.1.37 +gitpython==3.1.40 # via # -c requirements/static/ci/../pkg/py3.9/windows.txt # -r requirements/static/ci/common.in @@ -461,7 +461,7 @@ tornado==6.3.3 # -r requirements/base.txt types-pyyaml==6.0.1 # via responses -typing-extensions==4.6.3 +typing-extensions==4.8.0 # via # -c requirements/static/ci/../pkg/py3.9/windows.txt # pydantic diff --git a/requirements/static/pkg/py3.10/darwin.txt b/requirements/static/pkg/py3.10/darwin.txt index ab10059fd6f..729320f336c 100644 --- a/requirements/static/pkg/py3.10/darwin.txt +++ b/requirements/static/pkg/py3.10/darwin.txt @@ -29,7 +29,7 @@ distro==1.8.0 # via -r requirements/base.txt gitdb==4.0.10 # via gitpython -gitpython==3.1.37 +gitpython==3.1.40 # via -r requirements/darwin.txt idna==3.4 # via @@ -113,7 +113,7 @@ timelib==0.3.0 # via -r requirements/darwin.txt tornado==6.3.3 # via -r requirements/base.txt -typing-extensions==4.6.3 +typing-extensions==4.8.0 # via pydantic urllib3==1.26.18 # via requests diff --git a/requirements/static/pkg/py3.10/freebsd.txt b/requirements/static/pkg/py3.10/freebsd.txt index 94d49237860..650b425e99e 100644 --- a/requirements/static/pkg/py3.10/freebsd.txt +++ b/requirements/static/pkg/py3.10/freebsd.txt @@ -100,7 +100,7 @@ timelib==0.3.0 # via -r requirements/static/pkg/freebsd.in tornado==6.3.3 # via -r requirements/base.txt -typing-extensions==4.6.3 +typing-extensions==4.8.0 # via pydantic urllib3==1.26.18 # via requests diff --git a/requirements/static/pkg/py3.10/linux.txt b/requirements/static/pkg/py3.10/linux.txt index 3aa58523720..995f431042e 100644 --- a/requirements/static/pkg/py3.10/linux.txt +++ b/requirements/static/pkg/py3.10/linux.txt @@ -100,7 +100,7 @@ timelib==0.3.0 # via -r requirements/static/pkg/linux.in tornado==6.3.3 # via -r requirements/base.txt -typing-extensions==4.6.3 +typing-extensions==4.8.0 # via pydantic urllib3==1.26.18 # via requests diff --git a/requirements/static/pkg/py3.10/windows.txt b/requirements/static/pkg/py3.10/windows.txt index 4c13faf7616..3340f378829 100644 --- a/requirements/static/pkg/py3.10/windows.txt +++ b/requirements/static/pkg/py3.10/windows.txt @@ -34,7 +34,7 @@ distro==1.8.0 # via -r requirements/base.txt gitdb==4.0.10 # via gitpython -gitpython==3.1.37 +gitpython==3.1.40 # via -r requirements/windows.txt idna==3.4 # via requests @@ -127,7 +127,7 @@ timelib==0.3.0 # via -r requirements/windows.txt tornado==6.3.3 # via -r requirements/base.txt -typing-extensions==4.6.3 +typing-extensions==4.8.0 # via pydantic urllib3==1.26.18 # via diff --git a/requirements/static/pkg/py3.11/darwin.txt b/requirements/static/pkg/py3.11/darwin.txt index 18198a6e6a4..a896f3ce266 100644 --- a/requirements/static/pkg/py3.11/darwin.txt +++ b/requirements/static/pkg/py3.11/darwin.txt @@ -113,7 +113,7 @@ timelib==0.3.0 # via -r requirements/darwin.txt tornado==6.3.3 # via -r requirements/base.txt -typing-extensions==4.6.3 +typing-extensions==4.8.0 # via pydantic urllib3==1.26.14 # via requests diff --git a/requirements/static/pkg/py3.11/windows.txt b/requirements/static/pkg/py3.11/windows.txt index d24f9c184ba..b559416e682 100644 --- a/requirements/static/pkg/py3.11/windows.txt +++ b/requirements/static/pkg/py3.11/windows.txt @@ -34,7 +34,7 @@ distro==1.8.0 # via -r requirements/base.txt gitdb==4.0.10 # via gitpython -gitpython==3.1.37 +gitpython==3.1.40 # via -r requirements/windows.txt idna==3.4 # via requests @@ -127,7 +127,7 @@ timelib==0.3.0 # via -r requirements/windows.txt tornado==6.3.3 # via -r requirements/base.txt -typing-extensions==4.4.0 +typing-extensions==4.8.0 # via pydantic urllib3==1.26.18 # via diff --git a/requirements/static/pkg/py3.8/freebsd.txt b/requirements/static/pkg/py3.8/freebsd.txt index 3ac6550c495..b172891671a 100644 --- a/requirements/static/pkg/py3.8/freebsd.txt +++ b/requirements/static/pkg/py3.8/freebsd.txt @@ -102,7 +102,7 @@ timelib==0.3.0 # via -r requirements/static/pkg/freebsd.in tornado==6.3.3 # via -r requirements/base.txt -typing-extensions==4.6.3 +typing-extensions==4.8.0 # via pydantic urllib3==1.26.18 # via requests diff --git a/requirements/static/pkg/py3.8/linux.txt b/requirements/static/pkg/py3.8/linux.txt index af858a5d271..e06b76dbf74 100644 --- a/requirements/static/pkg/py3.8/linux.txt +++ b/requirements/static/pkg/py3.8/linux.txt @@ -102,7 +102,7 @@ timelib==0.3.0 # via -r requirements/static/pkg/linux.in tornado==6.3.3 # via -r requirements/base.txt -typing-extensions==4.6.3 +typing-extensions==4.8.0 # via pydantic urllib3==1.26.18 # via requests diff --git a/requirements/static/pkg/py3.8/windows.txt b/requirements/static/pkg/py3.8/windows.txt index 5583e9f8aef..e8fe4ea58c4 100644 --- a/requirements/static/pkg/py3.8/windows.txt +++ b/requirements/static/pkg/py3.8/windows.txt @@ -34,7 +34,7 @@ distro==1.8.0 # via -r requirements/base.txt gitdb==4.0.10 # via gitpython -gitpython==3.1.37 +gitpython==3.1.40 # via -r requirements/windows.txt idna==3.4 # via requests @@ -130,7 +130,7 @@ timelib==0.3.0 # via -r requirements/windows.txt tornado==6.3.3 # via -r requirements/base.txt -typing-extensions==4.6.3 +typing-extensions==4.8.0 # via pydantic urllib3==1.26.18 # via diff --git a/requirements/static/pkg/py3.9/darwin.txt b/requirements/static/pkg/py3.9/darwin.txt index cd25085e232..70e390c7e51 100644 --- a/requirements/static/pkg/py3.9/darwin.txt +++ b/requirements/static/pkg/py3.9/darwin.txt @@ -29,7 +29,7 @@ distro==1.8.0 # via -r requirements/base.txt gitdb==4.0.10 # via gitpython -gitpython==3.1.37 +gitpython==3.1.40 # via -r requirements/darwin.txt idna==3.4 # via @@ -113,7 +113,7 @@ timelib==0.3.0 # via -r requirements/darwin.txt tornado==6.3.3 # via -r requirements/base.txt -typing-extensions==4.6.3 +typing-extensions==4.8.0 # via pydantic urllib3==1.26.18 # via requests diff --git a/requirements/static/pkg/py3.9/freebsd.txt b/requirements/static/pkg/py3.9/freebsd.txt index 5a3717f3fe3..8e080c520a2 100644 --- a/requirements/static/pkg/py3.9/freebsd.txt +++ b/requirements/static/pkg/py3.9/freebsd.txt @@ -100,7 +100,7 @@ timelib==0.3.0 # via -r requirements/static/pkg/freebsd.in tornado==6.3.3 # via -r requirements/base.txt -typing-extensions==4.6.3 +typing-extensions==4.8.0 # via pydantic urllib3==1.26.18 # via requests diff --git a/requirements/static/pkg/py3.9/linux.txt b/requirements/static/pkg/py3.9/linux.txt index aaa99487ab1..13c10e9459d 100644 --- a/requirements/static/pkg/py3.9/linux.txt +++ b/requirements/static/pkg/py3.9/linux.txt @@ -100,7 +100,7 @@ timelib==0.3.0 # via -r requirements/static/pkg/linux.in tornado==6.3.3 # via -r requirements/base.txt -typing-extensions==4.6.3 +typing-extensions==4.8.0 # via pydantic urllib3==1.26.18 # via requests diff --git a/requirements/static/pkg/py3.9/windows.txt b/requirements/static/pkg/py3.9/windows.txt index ea3a0c2b780..8db61f1ea89 100644 --- a/requirements/static/pkg/py3.9/windows.txt +++ b/requirements/static/pkg/py3.9/windows.txt @@ -34,7 +34,7 @@ distro==1.8.0 # via -r requirements/base.txt gitdb==4.0.10 # via gitpython -gitpython==3.1.37 +gitpython==3.1.40 # via -r requirements/windows.txt idna==3.4 # via requests @@ -128,7 +128,7 @@ timelib==0.3.0 # via -r requirements/windows.txt tornado==6.3.3 # via -r requirements/base.txt -typing-extensions==4.6.3 +typing-extensions==4.8.0 # via pydantic urllib3==1.26.18 # via From 84d58f717b9e8fb71360ee4d4427f3ff35fe6389 Mon Sep 17 00:00:00 2001 From: "Daniel A. Wozniak" Date: Wed, 20 Sep 2023 14:33:32 -0700 Subject: [PATCH 097/153] Do not allow duplicate message ids --- salt/transport/tcp.py | 17 ++--------------- 1 file changed, 2 insertions(+), 15 deletions(-) diff --git a/salt/transport/tcp.py b/salt/transport/tcp.py index ddde882e764..fb2967201e2 100644 --- a/salt/transport/tcp.py +++ b/salt/transport/tcp.py @@ -15,6 +15,7 @@ import queue import socket import threading import urllib +import uuid import salt.ext.tornado import salt.ext.tornado.concurrent @@ -569,10 +570,7 @@ class MessageClient: self.io_loop = io_loop or salt.ext.tornado.ioloop.IOLoop.current() with salt.utils.asynchronous.current_ioloop(self.io_loop): self._tcp_client = TCPClientKeepAlive(opts, resolver=resolver) - self._mid = 1 - self._max_messages = int((1 << 31) - 2) # number of IDs before we wrap # TODO: max queue size - self.send_queue = [] # queue of messages to be sent self.send_future_map = {} # mapping of request_id -> Future self._read_until_future = None @@ -722,18 +720,7 @@ class MessageClient: self._stream_return_running = False def _message_id(self): - wrap = False - while self._mid in self.send_future_map: - if self._mid >= self._max_messages: - if wrap: - # this shouldn't ever happen, but just in case - raise Exception("Unable to find available messageid") - self._mid = 1 - wrap = True - else: - self._mid += 1 - - return self._mid + return str(uuid.uuid4()) # TODO: return a message object which takes care of multiplexing? def on_recv(self, callback): From 529d27061e9b80dfd1b18dbb794d5511e3d4be13 Mon Sep 17 00:00:00 2001 From: "Daniel A. Wozniak" Date: Wed, 20 Sep 2023 14:57:14 -0700 Subject: [PATCH 098/153] Use closure to preserve message future --- salt/transport/zeromq.py | 33 +++++++++++++-------------------- 1 file changed, 13 insertions(+), 20 deletions(-) diff --git a/salt/transport/zeromq.py b/salt/transport/zeromq.py index ad7c66f49fb..dc67d3aca6b 100644 --- a/salt/transport/zeromq.py +++ b/salt/transport/zeromq.py @@ -519,6 +519,7 @@ class AsyncReqMessageClient: self._closing = False self._future = None + self._send_future_map = {} self.lock = salt.ext.tornado.locks.Lock() def connect(self): @@ -577,18 +578,6 @@ class AsyncReqMessageClient: self.stream = zmq.eventloop.zmqstream.ZMQStream( self.socket, io_loop=self.io_loop ) - self.stream.on_recv(self.handle_reply) - - def timeout_message(self, future): - """ - Handle a message timeout by removing it from the sending queue - and informing the caller - - :raises: SaltReqTimeoutError - """ - if self._future == future: - self._future = None - future.set_exception(SaltReqTimeoutError("Message timed out")) @salt.ext.tornado.gen.coroutine def send(self, message, timeout=None, callback=None): @@ -610,22 +599,26 @@ class AsyncReqMessageClient: if self.opts.get("detect_mode") is True: timeout = 1 + def timeout_message(future): + if not future.done(): + future.set_exception(SaltReqTimeoutError("Message timed out")) + if timeout is not None: send_timeout = self.io_loop.call_later( - timeout, self.timeout_message, future + timeout, timeout_message, future ) + def mark_future(msg): + if not future.done(): + data = salt.payload.loads(msg[0]) + future.set_result(data) + with (yield self.lock.acquire()): - self._future = future + self.stream.on_recv(mark_future) yield self.stream.send(message) recv = yield future - raise salt.ext.tornado.gen.Return(recv) - def handle_reply(self, msg): - data = salt.payload.loads(msg[0]) - future = self._future - self._future = None - future.set_result(data) + raise salt.ext.tornado.gen.Return(recv) class ZeroMQSocketMonitor: From f6ad1a5f9476cf07c7369a14477f6ee2ced6418c Mon Sep 17 00:00:00 2001 From: "Daniel A. Wozniak" Date: Thu, 21 Sep 2023 13:56:48 -0700 Subject: [PATCH 099/153] Fix timeout test --- tests/pytests/unit/transport/test_zeromq.py | 23 ++++++--------------- 1 file changed, 6 insertions(+), 17 deletions(-) diff --git a/tests/pytests/unit/transport/test_zeromq.py b/tests/pytests/unit/transport/test_zeromq.py index e9149d5d546..04b0577b916 100644 --- a/tests/pytests/unit/transport/test_zeromq.py +++ b/tests/pytests/unit/transport/test_zeromq.py @@ -1480,20 +1480,9 @@ async def test_client_timeout_msg(minion_opts): client = salt.transport.zeromq.AsyncReqMessageClient( minion_opts, "tcp://127.0.0.1:4506" ) - assert hasattr(client, "_future") - assert client._future is None - future = salt.ext.tornado.concurrent.Future() - client._future = future - client.timeout_message(future) - with pytest.raises(salt.exceptions.SaltReqTimeoutError): - await future - assert client._future is None - - future_a = salt.ext.tornado.concurrent.Future() - future_b = salt.ext.tornado.concurrent.Future() - future_b.set_exception = MagicMock() - client._future = future_a - client.timeout_message(future_b) - - assert client._future == future_a - future_b.set_exception.assert_not_called() + client.connect() + try: + with pytest.raises(salt.exceptions.SaltReqTimeoutError): + await client.send({"meh": "bah"}, 1) + finally: + client.close() From 8a872eff085a7d6fed21e6a18e5c07382ced7698 Mon Sep 17 00:00:00 2001 From: "Daniel A. Wozniak" Date: Wed, 27 Sep 2023 18:00:41 -0700 Subject: [PATCH 100/153] Preserve futures with messages This also make the message client behave more like it does after having been refactored to use native asyncio coroutines. --- salt/transport/zeromq.py | 61 ++++++++++++++++------------------------ 1 file changed, 24 insertions(+), 37 deletions(-) diff --git a/salt/transport/zeromq.py b/salt/transport/zeromq.py index dc67d3aca6b..1a99627310c 100644 --- a/salt/transport/zeromq.py +++ b/salt/transport/zeromq.py @@ -12,6 +12,7 @@ from random import randint import zmq.error import zmq.eventloop.zmqstream +import zmq.eventloop.future import salt.ext.tornado import salt.ext.tornado.concurrent @@ -513,17 +514,17 @@ class AsyncReqMessageClient: else: self.io_loop = io_loop - self.context = zmq.Context() + self.context = zmq.eventloop.future.Context() self.send_queue = [] self._closing = False - self._future = None self._send_future_map = {} self.lock = salt.ext.tornado.locks.Lock() + self.ident = threading.get_ident() def connect(self): - if hasattr(self, "stream"): + if hasattr(self, "socket") and self.socket: return # wire up sockets self._init_socket() @@ -539,24 +540,10 @@ class AsyncReqMessageClient: return else: self._closing = True - if hasattr(self, "stream") and self.stream is not None: - if ZMQ_VERSION_INFO < (14, 3, 0): - # stream.close() doesn't work properly on pyzmq < 14.3.0 - if self.stream.socket: - self.stream.socket.close() - self.stream.io_loop.remove_handler(self.stream.socket) - # set this to None, more hacks for messed up pyzmq - self.stream.socket = None - self.socket.close() - else: - self.stream.close(1) - self.socket = None - self.stream = None - if self._future: - self._future.set_exception(SaltException("Closing connection")) - self._future = None + if hasattr(self, "socket") and self.socket is not None: + self.socket.close(0) + self.socket = None if self.context.closed is False: - # This hangs if closing the stream causes an import error self.context.term() def _init_socket(self): @@ -573,11 +560,8 @@ class AsyncReqMessageClient: self.socket.setsockopt(zmq.IPV6, 1) elif hasattr(zmq, "IPV4ONLY"): self.socket.setsockopt(zmq.IPV4ONLY, 0) - self.socket.linger = self.linger + self.socket.setsockopt(zmq.LINGER, self.linger) self.socket.connect(self.addr) - self.stream = zmq.eventloop.zmqstream.ZMQStream( - self.socket, io_loop=self.io_loop - ) @salt.ext.tornado.gen.coroutine def send(self, message, timeout=None, callback=None): @@ -599,27 +583,30 @@ class AsyncReqMessageClient: if self.opts.get("detect_mode") is True: timeout = 1 - def timeout_message(future): - if not future.done(): - future.set_exception(SaltReqTimeoutError("Message timed out")) - if timeout is not None: send_timeout = self.io_loop.call_later( - timeout, timeout_message, future + timeout, self._timeout_message, future ) - def mark_future(msg): - if not future.done(): - data = salt.payload.loads(msg[0]) - future.set_result(data) + self.io_loop.spawn_callback(self._send_recv, message, future) - with (yield self.lock.acquire()): - self.stream.on_recv(mark_future) - yield self.stream.send(message) - recv = yield future + recv = yield future raise salt.ext.tornado.gen.Return(recv) + def _timeout_message(self, future): + if not future.done(): + future.set_exception(SaltReqTimeoutError("Message timed out")) + + @salt.ext.tornado.gen.coroutine + def _send_recv(self, message, future): + with (yield self.lock.acquire()): + yield self.socket.send(message) + recv = yield self.socket.recv() + if not future.done(): + data = salt.payload.loads(recv) + future.set_result(data) + class ZeroMQSocketMonitor: __EVENT_MAP = None From ae1bf35ce803998eed9583d4fb69b9caa78420e2 Mon Sep 17 00:00:00 2001 From: "Daniel A. Wozniak" Date: Wed, 11 Oct 2023 00:10:22 -0700 Subject: [PATCH 101/153] Add test coverage --- salt/transport/tcp.py | 182 ++++++++--------- salt/transport/zeromq.py | 2 +- .../pytests/functional/channel/test_server.py | 1 + .../tcp/test_load_balanced_server.py | 55 ++++++ .../transport/tcp/test_pub_server.py | 58 ++++++ .../zeromq/test_pub_server_channel.py | 86 ++++++++ .../transport/zeromq/test_request_client.py | 6 +- tests/pytests/unit/transport/test_tcp.py | 185 +++++++++++++++++- tests/pytests/unit/transport/test_zeromq.py | 12 ++ 9 files changed, 486 insertions(+), 101 deletions(-) create mode 100644 tests/pytests/functional/transport/tcp/test_load_balanced_server.py create mode 100644 tests/pytests/functional/transport/tcp/test_pub_server.py diff --git a/salt/transport/tcp.py b/salt/transport/tcp.py index fb2967201e2..81454d0eab5 100644 --- a/salt/transport/tcp.py +++ b/salt/transport/tcp.py @@ -35,6 +35,7 @@ import salt.utils.platform import salt.utils.versions from salt.exceptions import SaltClientError, SaltReqTimeoutError from salt.utils.network import ip_bracket +from salt.utils.process import SignalHandlingProcess if salt.utils.platform.is_windows(): USE_LOAD_BALANCER = True @@ -43,7 +44,6 @@ else: if USE_LOAD_BALANCER: import salt.ext.tornado.util - from salt.utils.process import SignalHandlingProcess log = logging.getLogger(__name__) @@ -128,69 +128,64 @@ def _set_tcp_keepalive(sock, opts): sock.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 0) -if USE_LOAD_BALANCER: +class LoadBalancerServer(SignalHandlingProcess): + """ + Raw TCP server which runs in its own process and will listen + for incoming connections. Each incoming connection will be + sent via multiprocessing queue to the workers. + Since the queue is shared amongst workers, only one worker will + handle a given connection. + """ - class LoadBalancerServer(SignalHandlingProcess): - """ - Raw TCP server which runs in its own process and will listen - for incoming connections. Each incoming connection will be - sent via multiprocessing queue to the workers. - Since the queue is shared amongst workers, only one worker will - handle a given connection. - """ + # TODO: opts! + # Based on default used in salt.ext.tornado.netutil.bind_sockets() + backlog = 128 - # TODO: opts! - # Based on default used in salt.ext.tornado.netutil.bind_sockets() - backlog = 128 + def __init__(self, opts, socket_queue, **kwargs): + super().__init__(**kwargs) + self.opts = opts + self.socket_queue = socket_queue + self._socket = None - def __init__(self, opts, socket_queue, **kwargs): - super().__init__(**kwargs) - self.opts = opts - self.socket_queue = socket_queue + def close(self): + if self._socket is not None: + self._socket.shutdown(socket.SHUT_RDWR) + self._socket.close() self._socket = None - def close(self): - if self._socket is not None: - self._socket.shutdown(socket.SHUT_RDWR) - self._socket.close() - self._socket = None + # pylint: disable=W1701 + def __del__(self): + self.close() - # pylint: disable=W1701 - def __del__(self): - self.close() + # pylint: enable=W1701 - # pylint: enable=W1701 + def run(self): + """ + Start the load balancer + """ + self._socket = _get_socket(self.opts) + self._socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) + _set_tcp_keepalive(self._socket, self.opts) + self._socket.setblocking(1) + self._socket.bind(_get_bind_addr(self.opts, "ret_port")) + self._socket.listen(self.backlog) - def run(self): - """ - Start the load balancer - """ - self._socket = _get_socket(self.opts) - self._socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) - _set_tcp_keepalive(self._socket, self.opts) - self._socket.setblocking(1) - self._socket.bind(_get_bind_addr(self.opts, "ret_port")) - self._socket.listen(self.backlog) - - while True: - try: - # Wait for a connection to occur since the socket is - # blocking. - connection, address = self._socket.accept() - # Wait for a free slot to be available to put - # the connection into. - # Sockets are picklable on Windows in Python 3. - self.socket_queue.put((connection, address), True, None) - except OSError as e: - # ECONNABORTED indicates that there was a connection - # but it was closed while still in the accept queue. - # (observed on FreeBSD). - if ( - salt.ext.tornado.util.errno_from_exception(e) - == errno.ECONNABORTED - ): - continue - raise + while True: + try: + # Wait for a connection to occur since the socket is + # blocking. + connection, address = self._socket.accept() + # Wait for a free slot to be available to put + # the connection into. + # Sockets are picklable on Windows in Python 3. + self.socket_queue.put((connection, address), True, None) + except OSError as e: + # ECONNABORTED indicates that there was a connection + # but it was closed while still in the accept queue. + # (observed on FreeBSD). + if salt.ext.tornado.util.errno_from_exception(e) == errno.ECONNABORTED: + continue + raise class Resolver: @@ -468,45 +463,43 @@ class SaltMessageServer(salt.ext.tornado.tcpserver.TCPServer): raise -if USE_LOAD_BALANCER: +class LoadBalancerWorker(SaltMessageServer): + """ + This will receive TCP connections from 'LoadBalancerServer' via + a multiprocessing queue. + Since the queue is shared amongst workers, only one worker will handle + a given connection. + """ - class LoadBalancerWorker(SaltMessageServer): - """ - This will receive TCP connections from 'LoadBalancerServer' via - a multiprocessing queue. - Since the queue is shared amongst workers, only one worker will handle - a given connection. - """ + def __init__(self, socket_queue, message_handler, *args, **kwargs): + super().__init__(message_handler, *args, **kwargs) + self.socket_queue = socket_queue + self._stop = threading.Event() + self.thread = threading.Thread(target=self.socket_queue_thread) + self.thread.start() - def __init__(self, socket_queue, message_handler, *args, **kwargs): - super().__init__(message_handler, *args, **kwargs) - self.socket_queue = socket_queue - self._stop = threading.Event() - self.thread = threading.Thread(target=self.socket_queue_thread) - self.thread.start() + def close(self): + self._stop.set() + self.thread.join() + super().close() - def close(self): - self._stop.set() - self.thread.join() - super().close() - - def socket_queue_thread(self): - try: - while True: - try: - client_socket, address = self.socket_queue.get(True, 1) - except queue.Empty: - if self._stop.is_set(): - break - continue - # 'self.io_loop' initialized in super class - # 'salt.ext.tornado.tcpserver.TCPServer'. - # 'self._handle_connection' defined in same super class. - self.io_loop.spawn_callback( - self._handle_connection, client_socket, address - ) - except (KeyboardInterrupt, SystemExit): - pass + def socket_queue_thread(self): + try: + while True: + try: + client_socket, address = self.socket_queue.get(True, 1) + except queue.Empty: + if self._stop.is_set(): + break + continue + # 'self.io_loop' initialized in super class + # 'salt.ext.tornado.tcpserver.TCPServer'. + # 'self._handle_connection' defined in same super class. + self.io_loop.spawn_callback( + self._handle_connection, client_socket, address + ) + except (KeyboardInterrupt, SystemExit): + pass class TCPClientKeepAlive(salt.ext.tornado.tcpclient.TCPClient): @@ -583,10 +576,6 @@ class MessageClient: self.backoff = opts.get("tcp_reconnect_backoff", 1) - def _stop_io_loop(self): - if self.io_loop is not None: - self.io_loop.stop() - # TODO: timeout inflight sessions def close(self): if self._closing: @@ -962,6 +951,7 @@ class TCPPublishServer(salt.transport.base.DaemonizedPublishServer): """ io_loop = salt.ext.tornado.ioloop.IOLoop() io_loop.make_current() + self.io_loop = io_loop # Spin up the publisher self.pub_server = pub_server = PubServer( diff --git a/salt/transport/zeromq.py b/salt/transport/zeromq.py index 1a99627310c..54b8bf47ba7 100644 --- a/salt/transport/zeromq.py +++ b/salt/transport/zeromq.py @@ -11,8 +11,8 @@ import threading from random import randint import zmq.error -import zmq.eventloop.zmqstream import zmq.eventloop.future +import zmq.eventloop.zmqstream import salt.ext.tornado import salt.ext.tornado.concurrent diff --git a/tests/pytests/functional/channel/test_server.py b/tests/pytests/functional/channel/test_server.py index 82a9450450f..da6f9caa8c9 100644 --- a/tests/pytests/functional/channel/test_server.py +++ b/tests/pytests/functional/channel/test_server.py @@ -164,6 +164,7 @@ def test_pub_server_channel( log.info("TEST - Req Server handle payload %r", payload) req_server_channel.post_fork(handle_payload, io_loop=io_loop) + if master_config["transport"] == "zeromq": time.sleep(1) attempts = 5 diff --git a/tests/pytests/functional/transport/tcp/test_load_balanced_server.py b/tests/pytests/functional/transport/tcp/test_load_balanced_server.py new file mode 100644 index 00000000000..cfc25f917e5 --- /dev/null +++ b/tests/pytests/functional/transport/tcp/test_load_balanced_server.py @@ -0,0 +1,55 @@ +import multiprocessing +import socket +import threading +import time + +import pytest + +import salt.transport.tcp + +pytestmark = [ + pytest.mark.core_test, +] + + +def test_tcp_load_balancer_server(master_opts, io_loop): + + messages = [] + + def handler(stream, message, header): + messages.append(message) + + queue = multiprocessing.Queue() + server = salt.transport.tcp.LoadBalancerServer(master_opts, queue) + worker = salt.transport.tcp.LoadBalancerWorker(queue, handler, io_loop=io_loop) + + def run_loop(): + io_loop.start() + + loop_thread = threading.Thread(target=run_loop) + loop_thread.start() + + thread = threading.Thread(target=server.run) + thread.start() + + # Wait for bind to happen. + time.sleep(0.5) + + package = {"foo": "bar"} + payload = salt.transport.frame.frame_msg(package) + sock = socket.socket() + sock.connect(("127.0.0.1", master_opts["ret_port"])) + sock.send(payload) + + try: + start = time.monotonic() + while not messages: + time.sleep(0.3) + if time.monotonic() - start > 30: + assert False, "Took longer than 30 seconds to receive message" + assert [package] == messages + finally: + server.close() + thread.join() + io_loop.stop() + worker.close() diff --git a/tests/pytests/functional/transport/tcp/test_pub_server.py b/tests/pytests/functional/transport/tcp/test_pub_server.py new file mode 100644 index 00000000000..a25b5385138 --- /dev/null +++ b/tests/pytests/functional/transport/tcp/test_pub_server.py @@ -0,0 +1,58 @@ +import threading +import time + +import salt.ext.tornado.gen +import salt.transport.tcp + + +async def test_pub_channel(master_opts, minion_opts, io_loop): + def presence_callback(client): + pass + + def remove_presence_callback(client): + pass + + master_opts["transport"] = "tcp" + minion_opts.update(master_ip="127.0.0.1", transport="tcp") + + server = salt.transport.tcp.TCPPublishServer(master_opts) + + client = salt.transport.tcp.TCPPubClient(minion_opts, io_loop) + + payloads = [] + + publishes = [] + + def publish_payload(payload, callback): + server.publish_payload(payload) + payloads.append(payload) + + def on_recv(message): + print("ON RECV") + publishes.append(message) + + thread = threading.Thread( + target=server.publish_daemon, + args=(publish_payload, presence_callback, remove_presence_callback), + ) + thread.start() + + # Wait for socket to bind. + time.sleep(3) + + await client.connect(master_opts["publish_port"]) + client.on_recv(on_recv) + + print("Publish message") + server.publish({"meh": "bah"}) + + start = time.monotonic() + try: + while not publishes: + await salt.ext.tornado.gen.sleep(0.3) + if time.monotonic() - start > 30: + assert False, "Message not published after 30 seconds" + finally: + server.io_loop.stop() + thread.join() + server.io_loop.close(all_fds=True) diff --git a/tests/pytests/functional/transport/zeromq/test_pub_server_channel.py b/tests/pytests/functional/transport/zeromq/test_pub_server_channel.py index 3e46ab1b6a1..27a315fda91 100644 --- a/tests/pytests/functional/transport/zeromq/test_pub_server_channel.py +++ b/tests/pytests/functional/transport/zeromq/test_pub_server_channel.py @@ -1,7 +1,10 @@ import logging +import threading +import time import pytest +import salt.transport.zeromq from tests.support.mock import MagicMock, patch from tests.support.pytest.transport import PubServerChannelProcess @@ -51,3 +54,86 @@ def test_zeromq_filtering(salt_master, salt_minion): assert len(results) == send_num, "{} != {}, difference: {}".format( len(results), send_num, set(expect).difference(results) ) + + +def test_pub_channel(master_opts): + server = salt.transport.zeromq.PublishServer(master_opts) + + payloads = [] + + def publish_payload(payload): + server.publish_payload(payload) + payloads.append(payload) + + thread = threading.Thread(target=server.publish_daemon, args=(publish_payload,)) + thread.start() + + server.publish({"meh": "bah"}) + + start = time.monotonic() + try: + while not payloads: + time.sleep(0.3) + if time.monotonic() - start > 30: + assert False, "No message received after 30 seconds" + finally: + server.close() + server.io_loop.stop() + thread.join() + server.io_loop.close(all_fds=True) + + +def test_pub_channel_filtering(master_opts): + master_opts["zmq_filtering"] = True + server = salt.transport.zeromq.PublishServer(master_opts) + + payloads = [] + + def publish_payload(payload): + server.publish_payload(payload) + payloads.append(payload) + + thread = threading.Thread(target=server.publish_daemon, args=(publish_payload,)) + thread.start() + + server.publish({"meh": "bah"}) + + start = time.monotonic() + try: + while not payloads: + time.sleep(0.3) + if time.monotonic() - start > 30: + assert False, "No message received after 30 seconds" + finally: + server.close() + server.io_loop.stop() + thread.join() + server.io_loop.close(all_fds=True) + + +def test_pub_channel_filtering_topic(master_opts): + master_opts["zmq_filtering"] = True + server = salt.transport.zeromq.PublishServer(master_opts) + + payloads = [] + + def publish_payload(payload): + server.publish_payload(payload, topic_list=["meh"]) + payloads.append(payload) + + thread = threading.Thread(target=server.publish_daemon, args=(publish_payload,)) + thread.start() + + server.publish({"meh": "bah"}) + + start = time.monotonic() + try: + while not payloads: + time.sleep(0.3) + if time.monotonic() - start > 30: + assert False, "No message received after 30 seconds" + finally: + server.close() + server.io_loop.stop() + thread.join() + server.io_loop.close(all_fds=True) diff --git a/tests/pytests/functional/transport/zeromq/test_request_client.py b/tests/pytests/functional/transport/zeromq/test_request_client.py index 7ab2295baaf..4ee99f49aa3 100644 --- a/tests/pytests/functional/transport/zeromq/test_request_client.py +++ b/tests/pytests/functional/transport/zeromq/test_request_client.py @@ -32,8 +32,8 @@ async def test_request_channel_issue_64627(io_loop, minion_opts, port): request_client = salt.transport.zeromq.RequestClient(minion_opts, io_loop) rep = await request_client.send(b"foo") - req_socket = request_client.message_client.stream.socket + req_socket = request_client.message_client.socket rep = await request_client.send(b"foo") - assert req_socket is request_client.message_client.stream.socket + assert req_socket is request_client.message_client.socket request_client.close() - assert request_client.message_client.stream is None + assert request_client.message_client.socket is None diff --git a/tests/pytests/unit/transport/test_tcp.py b/tests/pytests/unit/transport/test_tcp.py index bcfb71f5590..17c7e072749 100644 --- a/tests/pytests/unit/transport/test_tcp.py +++ b/tests/pytests/unit/transport/test_tcp.py @@ -9,10 +9,11 @@ from pytestshellutils.utils import ports import salt.channel.server import salt.exceptions import salt.ext.tornado +import salt.ext.tornado.concurrent import salt.transport.tcp from tests.support.mock import MagicMock, PropertyMock, patch -pytestmark = [ +tpytestmark = [ pytest.mark.core_test, ] @@ -483,3 +484,185 @@ def test_presence_removed_on_stream_closed(): io_loop.run_sync(functools.partial(server.publish_payload, package, None)) server.remove_presence_callback.assert_called_with(client) + + +async def test_tcp_pub_client_decode_dict(minion_opts, io_loop): + dmsg = {"meh": "bah"} + client = salt.transport.tcp.TCPPubClient(minion_opts, io_loop) + assert dmsg == await client._decode_messages(dmsg) + + +async def test_tcp_pub_client_decode_msgpack(minion_opts, io_loop): + dmsg = {"meh": "bah"} + msg = salt.payload.dumps(dmsg) + client = salt.transport.tcp.TCPPubClient(minion_opts, io_loop) + assert dmsg == await client._decode_messages(msg) + + +def test_tcp_pub_client_close(minion_opts, io_loop): + client = salt.transport.tcp.TCPPubClient(minion_opts, io_loop) + + message_client = MagicMock() + + client.message_client = message_client + client.close() + assert client._closing is True + assert client.message_client is None + client.close() + message_client.close.assert_called_once_with() + + +async def test_pub_server__stream_read(master_opts, io_loop): + + messages = [salt.transport.frame.frame_msg({"foo": "bar"})] + + class Stream: + def __init__(self, messages): + self.messages = messages + + def read_bytes(self, *args, **kwargs): + if self.messages: + msg = self.messages.pop(0) + future = salt.ext.tornado.concurrent.Future() + future.set_result(msg) + return future + raise salt.ext.tornado.iostream.StreamClosedError() + + client = MagicMock() + client.stream = Stream(messages) + client.address = "client address" + server = salt.transport.tcp.PubServer(master_opts, io_loop) + await server._stream_read(client) + client.close.assert_called_once() + + +async def test_pub_server__stream_read_exception(master_opts, io_loop): + client = MagicMock() + client.stream = MagicMock() + client.stream.read_bytes = MagicMock( + side_effect=[ + Exception("Something went wrong"), + salt.ext.tornado.iostream.StreamClosedError(), + ] + ) + client.address = "client address" + server = salt.transport.tcp.PubServer(master_opts, io_loop) + await server._stream_read(client) + client.close.assert_called_once() + + +async def test_salt_message_server(master_opts): + + received = [] + + def handler(stream, body, header): + + received.append(body) + + server = salt.transport.tcp.SaltMessageServer(handler) + msg = {"foo": "bar"} + messages = [salt.transport.frame.frame_msg(msg)] + + class Stream: + def __init__(self, messages): + self.messages = messages + + def read_bytes(self, *args, **kwargs): + if self.messages: + msg = self.messages.pop(0) + future = salt.ext.tornado.concurrent.Future() + future.set_result(msg) + return future + raise salt.ext.tornado.iostream.StreamClosedError() + + stream = Stream(messages) + address = "client address" + + await server.handle_stream(stream, address) + + # Let loop iterate so callback gets called + await salt.ext.tornado.gen.sleep(0.01) + + assert received + assert [msg] == received + + +async def test_salt_message_server_exception(master_opts, io_loop): + received = [] + + def handler(stream, body, header): + + received.append(body) + + stream = MagicMock() + stream.read_bytes = MagicMock( + side_effect=[ + Exception("Something went wrong"), + ] + ) + address = "client address" + server = salt.transport.tcp.SaltMessageServer(handler) + await server.handle_stream(stream, address) + stream.close.assert_called_once() + + +async def test_message_client_stream_return_exception(minion_opts, io_loop): + msg = {"foo": "bar"} + payload = salt.transport.frame.frame_msg(msg) + future = salt.ext.tornado.concurrent.Future() + future.set_result(payload) + client = salt.transport.tcp.MessageClient( + minion_opts, + "127.0.0.1", + 12345, + connect_callback=MagicMock(), + disconnect_callback=MagicMock(), + ) + client._stream = MagicMock() + client._stream.read_bytes.side_effect = [ + future, + ] + try: + io_loop.add_callback(client._stream_return) + await salt.ext.tornado.gen.sleep(0.01) + client.close() + await salt.ext.tornado.gen.sleep(0.01) + assert client._stream is None + finally: + client.close() + + +def test_tcp_pub_server_pre_fork(master_opts): + process_manager = MagicMock() + server = salt.transport.tcp.TCPPublishServer(master_opts) + server.pre_fork(process_manager) + + +async def test_pub_server_publish_payload(master_opts, io_loop): + server = salt.transport.tcp.PubServer(master_opts, io_loop=io_loop) + package = {"foo": "bar"} + topic_list = ["meh"] + future = salt.ext.tornado.concurrent.Future() + future.set_result(None) + client = MagicMock() + client.stream = MagicMock() + client.stream.write.side_effect = [future] + client.id_ = "meh" + server.clients = [client] + await server.publish_payload(package, topic_list) + client.stream.write.assert_called_once() + + +async def test_pub_server_publish_payload_closed_stream(master_opts, io_loop): + server = salt.transport.tcp.PubServer(master_opts, io_loop=io_loop) + package = {"foo": "bar"} + topic_list = ["meh"] + client = MagicMock() + client.stream = MagicMock() + client.stream.write.side_effect = [ + salt.ext.tornado.iostream.StreamClosedError("mock") + ] + client.id_ = "meh" + server.clients = {client} + await server.publish_payload(package, topic_list) + assert server.clients == set() diff --git a/tests/pytests/unit/transport/test_zeromq.py b/tests/pytests/unit/transport/test_zeromq.py index 04b0577b916..2bad5f9ae5f 100644 --- a/tests/pytests/unit/transport/test_zeromq.py +++ b/tests/pytests/unit/transport/test_zeromq.py @@ -1414,6 +1414,7 @@ async def test_req_server_garbage_request(io_loop): RequestServers's message handler. """ opts = salt.config.master_config("") + opts["zmq_monitor"] = True request_server = salt.transport.zeromq.RequestServer(opts) def message_handler(payload): @@ -1486,3 +1487,14 @@ async def test_client_timeout_msg(minion_opts): await client.send({"meh": "bah"}, 1) finally: client.close() + + +def test_pub_client_init(minion_opts, io_loop): + minion_opts["id"] = "minion" + minion_opts["__role"] = "syndic" + minion_opts["master_ip"] = "127.0.0.1" + minion_opts["zmq_filtering"] = True + minion_opts["zmq_monitor"] = True + client = salt.transport.zeromq.PublishClient(minion_opts, io_loop) + client.send(b"asf") + client.close() From 096314341f92fba9ece44aa3835cd817aa8bd26f Mon Sep 17 00:00:00 2001 From: "Daniel A. Wozniak" Date: Wed, 25 Oct 2023 15:36:07 -0700 Subject: [PATCH 102/153] Add changelog --- changelog/65114.fixed.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 changelog/65114.fixed.md diff --git a/changelog/65114.fixed.md b/changelog/65114.fixed.md new file mode 100644 index 00000000000..fb4f2ab1536 --- /dev/null +++ b/changelog/65114.fixed.md @@ -0,0 +1 @@ +Fix nonce verification, request server replies do not stomp on eachother. From 7df5e0a4d5afef18bebc8390162970434fc3d48e Mon Sep 17 00:00:00 2001 From: Pedro Algarvio Date: Fri, 27 Oct 2023 18:16:33 +0100 Subject: [PATCH 103/153] Always download the onedir artifact. Otherwise the publish repositories step won't happen if we skip the package download tests. Signed-off-by: Pedro Algarvio --- .github/workflows/release.yml | 1 - .github/workflows/templates/release.yml.jinja | 1 - 2 files changed, 2 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 71dfb5dc50e..0a31e7601e2 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -116,7 +116,6 @@ jobs: download-onedir-artifact: name: Download Staging Onedir Artifact - if: ${{ inputs.skip-salt-pkg-download-test-suite == false }} runs-on: - self-hosted - linux diff --git a/.github/workflows/templates/release.yml.jinja b/.github/workflows/templates/release.yml.jinja index c79fa26d02f..7c5c28af059 100644 --- a/.github/workflows/templates/release.yml.jinja +++ b/.github/workflows/templates/release.yml.jinja @@ -150,7 +150,6 @@ permissions: download-onedir-artifact: name: Download Staging Onedir Artifact - if: ${{ inputs.skip-salt-pkg-download-test-suite == false }} runs-on: - self-hosted - linux From 68bca1ee8dabe2a57c09786522989f949dac42dd Mon Sep 17 00:00:00 2001 From: Pedro Algarvio Date: Mon, 30 Oct 2023 21:51:00 +0000 Subject: [PATCH 104/153] On nightly and scheduled builds, don't run split tests. GH is not coping. Signed-off-by: Pedro Algarvio --- .github/workflows/ci.yml | 29 +++++++++++++++++ .github/workflows/nightly.yml | 31 ++++++++++++++++++- .github/workflows/scheduled.yml | 29 +++++++++++++++++ .github/workflows/staging.yml | 29 +++++++++++++++++ .github/workflows/templates/nightly.yml.jinja | 2 +- .../workflows/templates/test-salt.yml.jinja | 3 ++ .github/workflows/test-action-macos.yml | 7 ++++- .github/workflows/test-action.yml | 7 ++++- tools/ci.py | 10 +++++- 9 files changed, 142 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 450f9936681..92cb24cd349 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1847,6 +1847,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} skip-junit-reports: ${{ github.event_name == 'pull_request' }} + workflow-slug: ci windows-2019: name: Windows 2019 Test @@ -1867,6 +1868,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} skip-junit-reports: ${{ github.event_name == 'pull_request' }} + workflow-slug: ci windows-2022: name: Windows 2022 Test @@ -1887,6 +1889,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} skip-junit-reports: ${{ github.event_name == 'pull_request' }} + workflow-slug: ci macos-12: name: macOS 12 Test @@ -1907,6 +1910,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} skip-junit-reports: ${{ github.event_name == 'pull_request' }} + workflow-slug: ci almalinux-8: name: Alma Linux 8 Test @@ -1927,6 +1931,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} skip-junit-reports: ${{ github.event_name == 'pull_request' }} + workflow-slug: ci almalinux-9: name: Alma Linux 9 Test @@ -1947,6 +1952,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} skip-junit-reports: ${{ github.event_name == 'pull_request' }} + workflow-slug: ci amazonlinux-2: name: Amazon Linux 2 Test @@ -1967,6 +1973,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} skip-junit-reports: ${{ github.event_name == 'pull_request' }} + workflow-slug: ci archlinux-lts: name: Arch Linux LTS Test @@ -1987,6 +1994,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} skip-junit-reports: ${{ github.event_name == 'pull_request' }} + workflow-slug: ci centos-7: name: CentOS 7 Test @@ -2007,6 +2015,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} skip-junit-reports: ${{ github.event_name == 'pull_request' }} + workflow-slug: ci centosstream-8: name: CentOS Stream 8 Test @@ -2027,6 +2036,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} skip-junit-reports: ${{ github.event_name == 'pull_request' }} + workflow-slug: ci centosstream-9: name: CentOS Stream 9 Test @@ -2047,6 +2057,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} skip-junit-reports: ${{ github.event_name == 'pull_request' }} + workflow-slug: ci debian-10: name: Debian 10 Test @@ -2067,6 +2078,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} skip-junit-reports: ${{ github.event_name == 'pull_request' }} + workflow-slug: ci debian-11: name: Debian 11 Test @@ -2087,6 +2099,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} skip-junit-reports: ${{ github.event_name == 'pull_request' }} + workflow-slug: ci debian-11-arm64: name: Debian 11 Arm64 Test @@ -2107,6 +2120,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} skip-junit-reports: ${{ github.event_name == 'pull_request' }} + workflow-slug: ci debian-12: name: Debian 12 Test @@ -2127,6 +2141,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} skip-junit-reports: ${{ github.event_name == 'pull_request' }} + workflow-slug: ci debian-12-arm64: name: Debian 12 Arm64 Test @@ -2147,6 +2162,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} skip-junit-reports: ${{ github.event_name == 'pull_request' }} + workflow-slug: ci fedora-37: name: Fedora 37 Test @@ -2167,6 +2183,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} skip-junit-reports: ${{ github.event_name == 'pull_request' }} + workflow-slug: ci fedora-38: name: Fedora 38 Test @@ -2187,6 +2204,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} skip-junit-reports: ${{ github.event_name == 'pull_request' }} + workflow-slug: ci opensuse-15: name: Opensuse 15 Test @@ -2207,6 +2225,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} skip-junit-reports: ${{ github.event_name == 'pull_request' }} + workflow-slug: ci photonos-3: name: Photon OS 3 Test @@ -2227,6 +2246,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} skip-junit-reports: ${{ github.event_name == 'pull_request' }} + workflow-slug: ci photonos-3-arm64: name: Photon OS 3 Arm64 Test @@ -2247,6 +2267,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} skip-junit-reports: ${{ github.event_name == 'pull_request' }} + workflow-slug: ci photonos-4: name: Photon OS 4 Test @@ -2267,6 +2288,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} skip-junit-reports: ${{ github.event_name == 'pull_request' }} + workflow-slug: ci photonos-4-arm64: name: Photon OS 4 Arm64 Test @@ -2287,6 +2309,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} skip-junit-reports: ${{ github.event_name == 'pull_request' }} + workflow-slug: ci photonos-5: name: Photon OS 5 Test @@ -2307,6 +2330,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} skip-junit-reports: ${{ github.event_name == 'pull_request' }} + workflow-slug: ci photonos-5-arm64: name: Photon OS 5 Arm64 Test @@ -2327,6 +2351,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} skip-junit-reports: ${{ github.event_name == 'pull_request' }} + workflow-slug: ci ubuntu-2004: name: Ubuntu 20.04 Test @@ -2347,6 +2372,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} skip-junit-reports: ${{ github.event_name == 'pull_request' }} + workflow-slug: ci ubuntu-2004-arm64: name: Ubuntu 20.04 Arm64 Test @@ -2367,6 +2393,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} skip-junit-reports: ${{ github.event_name == 'pull_request' }} + workflow-slug: ci ubuntu-2204: name: Ubuntu 22.04 Test @@ -2387,6 +2414,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} skip-junit-reports: ${{ github.event_name == 'pull_request' }} + workflow-slug: ci ubuntu-2204-arm64: name: Ubuntu 22.04 Arm64 Test @@ -2407,6 +2435,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} skip-junit-reports: ${{ github.event_name == 'pull_request' }} + workflow-slug: ci combine-all-code-coverage: name: Combine Code Coverage diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index 26e1f54df40..e15743ed459 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -18,7 +18,7 @@ on: description: Skip running the Salt packages test suite. schedule: # https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#onschedule - - cron: '0 1 * * *' # Every day at 1AM + - cron: '0 0 * * *' # Every day at 0AM env: COLUMNS: 190 @@ -1908,6 +1908,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: false skip-junit-reports: false + workflow-slug: nightly windows-2019: name: Windows 2019 Test @@ -1928,6 +1929,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: false skip-junit-reports: false + workflow-slug: nightly windows-2022: name: Windows 2022 Test @@ -1948,6 +1950,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: false skip-junit-reports: false + workflow-slug: nightly macos-12: name: macOS 12 Test @@ -1968,6 +1971,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: false skip-junit-reports: false + workflow-slug: nightly almalinux-8: name: Alma Linux 8 Test @@ -1988,6 +1992,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: false skip-junit-reports: false + workflow-slug: nightly almalinux-9: name: Alma Linux 9 Test @@ -2008,6 +2013,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: false skip-junit-reports: false + workflow-slug: nightly amazonlinux-2: name: Amazon Linux 2 Test @@ -2028,6 +2034,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: false skip-junit-reports: false + workflow-slug: nightly archlinux-lts: name: Arch Linux LTS Test @@ -2048,6 +2055,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: false skip-junit-reports: false + workflow-slug: nightly centos-7: name: CentOS 7 Test @@ -2068,6 +2076,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: false skip-junit-reports: false + workflow-slug: nightly centosstream-8: name: CentOS Stream 8 Test @@ -2088,6 +2097,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: false skip-junit-reports: false + workflow-slug: nightly centosstream-9: name: CentOS Stream 9 Test @@ -2108,6 +2118,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: false skip-junit-reports: false + workflow-slug: nightly debian-10: name: Debian 10 Test @@ -2128,6 +2139,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: false skip-junit-reports: false + workflow-slug: nightly debian-11: name: Debian 11 Test @@ -2148,6 +2160,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: false skip-junit-reports: false + workflow-slug: nightly debian-11-arm64: name: Debian 11 Arm64 Test @@ -2168,6 +2181,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: false skip-junit-reports: false + workflow-slug: nightly debian-12: name: Debian 12 Test @@ -2188,6 +2202,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: false skip-junit-reports: false + workflow-slug: nightly debian-12-arm64: name: Debian 12 Arm64 Test @@ -2208,6 +2223,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: false skip-junit-reports: false + workflow-slug: nightly fedora-37: name: Fedora 37 Test @@ -2228,6 +2244,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: false skip-junit-reports: false + workflow-slug: nightly fedora-38: name: Fedora 38 Test @@ -2248,6 +2265,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: false skip-junit-reports: false + workflow-slug: nightly opensuse-15: name: Opensuse 15 Test @@ -2268,6 +2286,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: false skip-junit-reports: false + workflow-slug: nightly photonos-3: name: Photon OS 3 Test @@ -2288,6 +2307,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: false skip-junit-reports: false + workflow-slug: nightly photonos-3-arm64: name: Photon OS 3 Arm64 Test @@ -2308,6 +2328,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: false skip-junit-reports: false + workflow-slug: nightly photonos-4: name: Photon OS 4 Test @@ -2328,6 +2349,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: false skip-junit-reports: false + workflow-slug: nightly photonos-4-arm64: name: Photon OS 4 Arm64 Test @@ -2348,6 +2370,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: false skip-junit-reports: false + workflow-slug: nightly photonos-5: name: Photon OS 5 Test @@ -2368,6 +2391,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: false skip-junit-reports: false + workflow-slug: nightly photonos-5-arm64: name: Photon OS 5 Arm64 Test @@ -2388,6 +2412,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: false skip-junit-reports: false + workflow-slug: nightly ubuntu-2004: name: Ubuntu 20.04 Test @@ -2408,6 +2433,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: false skip-junit-reports: false + workflow-slug: nightly ubuntu-2004-arm64: name: Ubuntu 20.04 Arm64 Test @@ -2428,6 +2454,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: false skip-junit-reports: false + workflow-slug: nightly ubuntu-2204: name: Ubuntu 22.04 Test @@ -2448,6 +2475,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: false skip-junit-reports: false + workflow-slug: nightly ubuntu-2204-arm64: name: Ubuntu 22.04 Arm64 Test @@ -2468,6 +2496,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: false skip-junit-reports: false + workflow-slug: nightly combine-all-code-coverage: name: Combine Code Coverage diff --git a/.github/workflows/scheduled.yml b/.github/workflows/scheduled.yml index 3a53d2d87b3..d8a80b2790b 100644 --- a/.github/workflows/scheduled.yml +++ b/.github/workflows/scheduled.yml @@ -1881,6 +1881,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: false skip-junit-reports: false + workflow-slug: scheduled windows-2019: name: Windows 2019 Test @@ -1901,6 +1902,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: false skip-junit-reports: false + workflow-slug: scheduled windows-2022: name: Windows 2022 Test @@ -1921,6 +1923,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: false skip-junit-reports: false + workflow-slug: scheduled macos-12: name: macOS 12 Test @@ -1941,6 +1944,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: false skip-junit-reports: false + workflow-slug: scheduled almalinux-8: name: Alma Linux 8 Test @@ -1961,6 +1965,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: false skip-junit-reports: false + workflow-slug: scheduled almalinux-9: name: Alma Linux 9 Test @@ -1981,6 +1986,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: false skip-junit-reports: false + workflow-slug: scheduled amazonlinux-2: name: Amazon Linux 2 Test @@ -2001,6 +2007,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: false skip-junit-reports: false + workflow-slug: scheduled archlinux-lts: name: Arch Linux LTS Test @@ -2021,6 +2028,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: false skip-junit-reports: false + workflow-slug: scheduled centos-7: name: CentOS 7 Test @@ -2041,6 +2049,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: false skip-junit-reports: false + workflow-slug: scheduled centosstream-8: name: CentOS Stream 8 Test @@ -2061,6 +2070,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: false skip-junit-reports: false + workflow-slug: scheduled centosstream-9: name: CentOS Stream 9 Test @@ -2081,6 +2091,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: false skip-junit-reports: false + workflow-slug: scheduled debian-10: name: Debian 10 Test @@ -2101,6 +2112,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: false skip-junit-reports: false + workflow-slug: scheduled debian-11: name: Debian 11 Test @@ -2121,6 +2133,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: false skip-junit-reports: false + workflow-slug: scheduled debian-11-arm64: name: Debian 11 Arm64 Test @@ -2141,6 +2154,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: false skip-junit-reports: false + workflow-slug: scheduled debian-12: name: Debian 12 Test @@ -2161,6 +2175,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: false skip-junit-reports: false + workflow-slug: scheduled debian-12-arm64: name: Debian 12 Arm64 Test @@ -2181,6 +2196,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: false skip-junit-reports: false + workflow-slug: scheduled fedora-37: name: Fedora 37 Test @@ -2201,6 +2217,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: false skip-junit-reports: false + workflow-slug: scheduled fedora-38: name: Fedora 38 Test @@ -2221,6 +2238,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: false skip-junit-reports: false + workflow-slug: scheduled opensuse-15: name: Opensuse 15 Test @@ -2241,6 +2259,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: false skip-junit-reports: false + workflow-slug: scheduled photonos-3: name: Photon OS 3 Test @@ -2261,6 +2280,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: false skip-junit-reports: false + workflow-slug: scheduled photonos-3-arm64: name: Photon OS 3 Arm64 Test @@ -2281,6 +2301,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: false skip-junit-reports: false + workflow-slug: scheduled photonos-4: name: Photon OS 4 Test @@ -2301,6 +2322,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: false skip-junit-reports: false + workflow-slug: scheduled photonos-4-arm64: name: Photon OS 4 Arm64 Test @@ -2321,6 +2343,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: false skip-junit-reports: false + workflow-slug: scheduled photonos-5: name: Photon OS 5 Test @@ -2341,6 +2364,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: false skip-junit-reports: false + workflow-slug: scheduled photonos-5-arm64: name: Photon OS 5 Arm64 Test @@ -2361,6 +2385,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: false skip-junit-reports: false + workflow-slug: scheduled ubuntu-2004: name: Ubuntu 20.04 Test @@ -2381,6 +2406,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: false skip-junit-reports: false + workflow-slug: scheduled ubuntu-2004-arm64: name: Ubuntu 20.04 Arm64 Test @@ -2401,6 +2427,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: false skip-junit-reports: false + workflow-slug: scheduled ubuntu-2204: name: Ubuntu 22.04 Test @@ -2421,6 +2448,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: false skip-junit-reports: false + workflow-slug: scheduled ubuntu-2204-arm64: name: Ubuntu 22.04 Arm64 Test @@ -2441,6 +2469,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: false skip-junit-reports: false + workflow-slug: scheduled combine-all-code-coverage: name: Combine Code Coverage diff --git a/.github/workflows/staging.yml b/.github/workflows/staging.yml index ed50f98cb22..4962220fe5a 100644 --- a/.github/workflows/staging.yml +++ b/.github/workflows/staging.yml @@ -1903,6 +1903,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: true skip-junit-reports: true + workflow-slug: staging windows-2019: name: Windows 2019 Test @@ -1923,6 +1924,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: true skip-junit-reports: true + workflow-slug: staging windows-2022: name: Windows 2022 Test @@ -1943,6 +1945,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: true skip-junit-reports: true + workflow-slug: staging macos-12: name: macOS 12 Test @@ -1963,6 +1966,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: true skip-junit-reports: true + workflow-slug: staging almalinux-8: name: Alma Linux 8 Test @@ -1983,6 +1987,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: true skip-junit-reports: true + workflow-slug: staging almalinux-9: name: Alma Linux 9 Test @@ -2003,6 +2008,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: true skip-junit-reports: true + workflow-slug: staging amazonlinux-2: name: Amazon Linux 2 Test @@ -2023,6 +2029,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: true skip-junit-reports: true + workflow-slug: staging archlinux-lts: name: Arch Linux LTS Test @@ -2043,6 +2050,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: true skip-junit-reports: true + workflow-slug: staging centos-7: name: CentOS 7 Test @@ -2063,6 +2071,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: true skip-junit-reports: true + workflow-slug: staging centosstream-8: name: CentOS Stream 8 Test @@ -2083,6 +2092,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: true skip-junit-reports: true + workflow-slug: staging centosstream-9: name: CentOS Stream 9 Test @@ -2103,6 +2113,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: true skip-junit-reports: true + workflow-slug: staging debian-10: name: Debian 10 Test @@ -2123,6 +2134,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: true skip-junit-reports: true + workflow-slug: staging debian-11: name: Debian 11 Test @@ -2143,6 +2155,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: true skip-junit-reports: true + workflow-slug: staging debian-11-arm64: name: Debian 11 Arm64 Test @@ -2163,6 +2176,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: true skip-junit-reports: true + workflow-slug: staging debian-12: name: Debian 12 Test @@ -2183,6 +2197,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: true skip-junit-reports: true + workflow-slug: staging debian-12-arm64: name: Debian 12 Arm64 Test @@ -2203,6 +2218,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: true skip-junit-reports: true + workflow-slug: staging fedora-37: name: Fedora 37 Test @@ -2223,6 +2239,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: true skip-junit-reports: true + workflow-slug: staging fedora-38: name: Fedora 38 Test @@ -2243,6 +2260,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: true skip-junit-reports: true + workflow-slug: staging opensuse-15: name: Opensuse 15 Test @@ -2263,6 +2281,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: true skip-junit-reports: true + workflow-slug: staging photonos-3: name: Photon OS 3 Test @@ -2283,6 +2302,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: true skip-junit-reports: true + workflow-slug: staging photonos-3-arm64: name: Photon OS 3 Arm64 Test @@ -2303,6 +2323,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: true skip-junit-reports: true + workflow-slug: staging photonos-4: name: Photon OS 4 Test @@ -2323,6 +2344,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: true skip-junit-reports: true + workflow-slug: staging photonos-4-arm64: name: Photon OS 4 Arm64 Test @@ -2343,6 +2365,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: true skip-junit-reports: true + workflow-slug: staging photonos-5: name: Photon OS 5 Test @@ -2363,6 +2386,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: true skip-junit-reports: true + workflow-slug: staging photonos-5-arm64: name: Photon OS 5 Arm64 Test @@ -2383,6 +2407,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: true skip-junit-reports: true + workflow-slug: staging ubuntu-2004: name: Ubuntu 20.04 Test @@ -2403,6 +2428,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: true skip-junit-reports: true + workflow-slug: staging ubuntu-2004-arm64: name: Ubuntu 20.04 Arm64 Test @@ -2423,6 +2449,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: true skip-junit-reports: true + workflow-slug: staging ubuntu-2204: name: Ubuntu 22.04 Test @@ -2443,6 +2470,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: true skip-junit-reports: true + workflow-slug: staging ubuntu-2204-arm64: name: Ubuntu 22.04 Arm64 Test @@ -2463,6 +2491,7 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 skip-code-coverage: true skip-junit-reports: true + workflow-slug: staging build-src-repo: name: Build Repository diff --git a/.github/workflows/templates/nightly.yml.jinja b/.github/workflows/templates/nightly.yml.jinja index 67b07ad5ffa..e4f6bb8439e 100644 --- a/.github/workflows/templates/nightly.yml.jinja +++ b/.github/workflows/templates/nightly.yml.jinja @@ -28,7 +28,7 @@ on: description: Skip running the Salt packages test suite. schedule: # https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#onschedule - - cron: '0 1 * * *' # Every day at 1AM + - cron: '0 0 * * *' # Every day at 0AM <%- endblock on %> diff --git a/.github/workflows/templates/test-salt.yml.jinja b/.github/workflows/templates/test-salt.yml.jinja index 63834ee10dc..c135207601f 100644 --- a/.github/workflows/templates/test-salt.yml.jinja +++ b/.github/workflows/templates/test-salt.yml.jinja @@ -21,6 +21,7 @@ cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|<{ python_version }> skip-code-coverage: <{ skip_test_coverage_check }> skip-junit-reports: <{ skip_junit_reports_check }> + workflow-slug: <{ workflow_slug }> <%- endfor %> @@ -47,6 +48,7 @@ cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|<{ python_version }> skip-code-coverage: <{ skip_test_coverage_check }> skip-junit-reports: <{ skip_junit_reports_check }> + workflow-slug: <{ workflow_slug }> <%- endfor %> @@ -73,5 +75,6 @@ cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|<{ python_version }> skip-code-coverage: <{ skip_test_coverage_check }> skip-junit-reports: <{ skip_junit_reports_check }> + workflow-slug: <{ workflow_slug }> <%- endfor %> diff --git a/.github/workflows/test-action-macos.yml b/.github/workflows/test-action-macos.yml index a0dac7bdeef..a7fc8526bf2 100644 --- a/.github/workflows/test-action-macos.yml +++ b/.github/workflows/test-action-macos.yml @@ -56,6 +56,11 @@ on: type: boolean description: Skip Publishing JUnit Reports default: false + workflow-slug: + required: false + type: string + description: Which workflow is running. + default: ci env: COLUMNS: 190 @@ -85,7 +90,7 @@ jobs: - name: Generate Test Matrix id: generate-matrix run: | - tools ci matrix ${{ inputs.distro-slug }} + tools ci matrix --workflow=${{ inputs.workflow-slug }} ${{ inputs.distro-slug }} test: name: Test diff --git a/.github/workflows/test-action.yml b/.github/workflows/test-action.yml index cb9b1366dc3..79e1ec4a7fa 100644 --- a/.github/workflows/test-action.yml +++ b/.github/workflows/test-action.yml @@ -56,6 +56,11 @@ on: type: boolean description: Skip Publishing JUnit Reports default: false + workflow-slug: + required: false + type: string + description: Which workflow is running. + default: ci env: COLUMNS: 190 @@ -90,7 +95,7 @@ jobs: - name: Generate Test Matrix id: generate-matrix run: | - tools ci matrix ${{ fromJSON(inputs.testrun)['type'] == 'full' && '--full ' || '' }}${{ inputs.distro-slug }} + tools ci matrix --workflow=${{ inputs.workflow-slug }} ${{ fromJSON(inputs.testrun)['type'] == 'full' && '--full ' || '' }}${{ inputs.distro-slug }} test: name: Test diff --git a/tools/ci.py b/tools/ci.py index c026166ba7a..e09659bf513 100644 --- a/tools/ci.py +++ b/tools/ci.py @@ -621,9 +621,12 @@ def define_testrun(ctx: Context, event_name: str, changed_files: pathlib.Path): "full": { "help": "Full test run", }, + "workflow": { + "help": "Which workflow is running", + }, }, ) -def matrix(ctx: Context, distro_slug: str, full: bool = False): +def matrix(ctx: Context, distro_slug: str, full: bool = False, workflow: str = "ci"): """ Generate the test matrix. """ @@ -634,6 +637,11 @@ def matrix(ctx: Context, distro_slug: str, full: bool = False): "scenarios": 1, "unit": 2, } + # On nightly and scheduled builds we don't want splits at all + if workflow.lower() in ("nightly", "scheduled"): + ctx.info(f"Clearning splits definition since workflow is '{workflow}'") + _splits.clear() + for transport in ("zeromq", "tcp"): if transport == "tcp": if distro_slug not in ( From 0d5a6bf7f7c03b160e344e1eca8ecb7ffb20ad56 Mon Sep 17 00:00:00 2001 From: Pedro Algarvio Date: Sat, 28 Oct 2023 09:38:42 +0100 Subject: [PATCH 105/153] Switch to `tools.utils.gh.get_github_token` Signed-off-by: Pedro Algarvio --- tools/ci.py | 6 ++++-- tools/utils/__init__.py | 8 ++++++-- tools/utils/gh.py | 19 ++++++++++++++----- 3 files changed, 24 insertions(+), 9 deletions(-) diff --git a/tools/ci.py b/tools/ci.py index e09659bf513..ddcf66c15b4 100644 --- a/tools/ci.py +++ b/tools/ci.py @@ -17,6 +17,7 @@ from typing import TYPE_CHECKING, Any from ptscripts import Context, command_group import tools.utils +import tools.utils.gh if sys.version_info < (3, 11): from typing_extensions import NotRequired, TypedDict @@ -914,8 +915,9 @@ def _get_pr_test_labels_from_api( headers = { "Accept": "application/vnd.github+json", } - if "GITHUB_TOKEN" in os.environ: - headers["Authorization"] = f"Bearer {os.environ['GITHUB_TOKEN']}" + github_token = tools.utils.gh.get_github_token(ctx) + if github_token is not None: + headers["Authorization"] = f"Bearer {github_token}" web.headers.update(headers) ret = web.get(f"https://api.github.com/repos/{repository}/pulls/{pr}") if ret.status_code != 200: diff --git a/tools/utils/__init__.py b/tools/utils/__init__.py index f89633a668d..7ecca29992c 100644 --- a/tools/utils/__init__.py +++ b/tools/utils/__init__.py @@ -134,13 +134,17 @@ def get_salt_releases(ctx: Context, repository: str) -> list[Version]: """ Return a list of salt versions """ + # Deferred import + import tools.utils.gh + versions = set() with ctx.web as web: headers = { "Accept": "application/vnd.github+json", } - if "GITHUB_TOKEN" in os.environ: - headers["Authorization"] = f"Bearer {os.environ['GITHUB_TOKEN']}" + github_token = tools.utils.gh.get_github_token(ctx) + if github_token is not None: + headers["Authorization"] = f"Bearer {github_token}" web.headers.update(headers) ret = web.get(f"https://api.github.com/repos/{repository}/tags") if ret.status_code != 200: diff --git a/tools/utils/gh.py b/tools/utils/gh.py index a0895b132e0..34008936e4a 100644 --- a/tools/utils/gh.py +++ b/tools/utils/gh.py @@ -218,11 +218,20 @@ def get_github_token(ctx: Context) -> str | None: Get the GITHUB_TOKEN to be able to authenticate to the API. """ github_token = os.environ.get("GITHUB_TOKEN") - if github_token is None: - gh = shutil.which("gh") - ret = ctx.run(gh, "auth", "token", check=False, capture=True) - if ret.returncode == 0: - github_token = ret.stdout.decode().strip() or None + if github_token is not None: + ctx.info("$GITHUB_TOKEN was found on the environ") + return github_token + + gh = shutil.which("gh") + if gh is None: + ctx.info("The 'gh' CLI tool is not available. Can't get a token using it.") + return github_token + + ret = ctx.run(gh, "auth", "token", check=False, capture=True) + if ret.returncode == 0: + ctx.info("Got the GitHub token from the 'gh' CLI tool") + return ret.stdout.decode().strip() or None + ctx.info("Failed to get the GitHub token from the 'gh' CLI tool") return github_token From f0c3a19037961387d671a59ca94ae7b6cc7a402d Mon Sep 17 00:00:00 2001 From: Pedro Algarvio Date: Mon, 30 Oct 2023 22:06:13 +0000 Subject: [PATCH 106/153] When getting salt releases, on failure, try the main repository Signed-off-by: Pedro Algarvio --- tools/pkg/repo/publish.py | 7 ++++++- tools/utils/__init__.py | 2 ++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/tools/pkg/repo/publish.py b/tools/pkg/repo/publish.py index 56155b94a59..3ad0ec9e428 100644 --- a/tools/pkg/repo/publish.py +++ b/tools/pkg/repo/publish.py @@ -467,7 +467,12 @@ def github( with open(github_output, "a", encoding="utf-8") as wfh: wfh.write(f"release-messsage-file={release_message_path.resolve()}\n") - releases = get_salt_releases(ctx, repository) + try: + releases = get_salt_releases(ctx, repository) + except SystemExit: + ctx.warn(f"Failed to get salt releases from repository '{repository}'") + releases = get_salt_releases(ctx, "saltstack/salt") + if Version(salt_version) >= releases[-1]: make_latest = True else: diff --git a/tools/utils/__init__.py b/tools/utils/__init__.py index 7ecca29992c..b5dda0ddcb3 100644 --- a/tools/utils/__init__.py +++ b/tools/utils/__init__.py @@ -137,6 +137,8 @@ def get_salt_releases(ctx: Context, repository: str) -> list[Version]: # Deferred import import tools.utils.gh + ctx.info(f"Collecting salt releases from repository '{repository}'") + versions = set() with ctx.web as web: headers = { From 94a74fc3f363675c76c278b0f37fbf6a19dd93ed Mon Sep 17 00:00:00 2001 From: Pedro Algarvio Date: Wed, 1 Nov 2023 18:41:38 +0000 Subject: [PATCH 107/153] The default timeout values are now passed as inputs Signed-off-by: Pedro Algarvio --- .github/workflows/ci.yml | 29 +++++++++++++++++++ .github/workflows/nightly.yml | 29 +++++++++++++++++++ .github/workflows/scheduled.yml | 29 +++++++++++++++++++ .github/workflows/staging.yml | 29 +++++++++++++++++++ .../workflows/templates/test-salt.yml.jinja | 8 +++++ .github/workflows/test-action-macos.yml | 7 ++++- .github/workflows/test-action.yml | 7 ++++- 7 files changed, 136 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 92cb24cd349..a105e974f8a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1848,6 +1848,7 @@ jobs: skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} skip-junit-reports: ${{ github.event_name == 'pull_request' }} workflow-slug: ci + default-timeout: 120 windows-2019: name: Windows 2019 Test @@ -1869,6 +1870,7 @@ jobs: skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} skip-junit-reports: ${{ github.event_name == 'pull_request' }} workflow-slug: ci + default-timeout: 120 windows-2022: name: Windows 2022 Test @@ -1890,6 +1892,7 @@ jobs: skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} skip-junit-reports: ${{ github.event_name == 'pull_request' }} workflow-slug: ci + default-timeout: 120 macos-12: name: macOS 12 Test @@ -1911,6 +1914,7 @@ jobs: skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} skip-junit-reports: ${{ github.event_name == 'pull_request' }} workflow-slug: ci + default-timeout: 120 almalinux-8: name: Alma Linux 8 Test @@ -1932,6 +1936,7 @@ jobs: skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} skip-junit-reports: ${{ github.event_name == 'pull_request' }} workflow-slug: ci + default-timeout: 120 almalinux-9: name: Alma Linux 9 Test @@ -1953,6 +1958,7 @@ jobs: skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} skip-junit-reports: ${{ github.event_name == 'pull_request' }} workflow-slug: ci + default-timeout: 120 amazonlinux-2: name: Amazon Linux 2 Test @@ -1974,6 +1980,7 @@ jobs: skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} skip-junit-reports: ${{ github.event_name == 'pull_request' }} workflow-slug: ci + default-timeout: 120 archlinux-lts: name: Arch Linux LTS Test @@ -1995,6 +2002,7 @@ jobs: skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} skip-junit-reports: ${{ github.event_name == 'pull_request' }} workflow-slug: ci + default-timeout: 120 centos-7: name: CentOS 7 Test @@ -2016,6 +2024,7 @@ jobs: skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} skip-junit-reports: ${{ github.event_name == 'pull_request' }} workflow-slug: ci + default-timeout: 120 centosstream-8: name: CentOS Stream 8 Test @@ -2037,6 +2046,7 @@ jobs: skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} skip-junit-reports: ${{ github.event_name == 'pull_request' }} workflow-slug: ci + default-timeout: 120 centosstream-9: name: CentOS Stream 9 Test @@ -2058,6 +2068,7 @@ jobs: skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} skip-junit-reports: ${{ github.event_name == 'pull_request' }} workflow-slug: ci + default-timeout: 120 debian-10: name: Debian 10 Test @@ -2079,6 +2090,7 @@ jobs: skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} skip-junit-reports: ${{ github.event_name == 'pull_request' }} workflow-slug: ci + default-timeout: 120 debian-11: name: Debian 11 Test @@ -2100,6 +2112,7 @@ jobs: skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} skip-junit-reports: ${{ github.event_name == 'pull_request' }} workflow-slug: ci + default-timeout: 120 debian-11-arm64: name: Debian 11 Arm64 Test @@ -2121,6 +2134,7 @@ jobs: skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} skip-junit-reports: ${{ github.event_name == 'pull_request' }} workflow-slug: ci + default-timeout: 120 debian-12: name: Debian 12 Test @@ -2142,6 +2156,7 @@ jobs: skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} skip-junit-reports: ${{ github.event_name == 'pull_request' }} workflow-slug: ci + default-timeout: 120 debian-12-arm64: name: Debian 12 Arm64 Test @@ -2163,6 +2178,7 @@ jobs: skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} skip-junit-reports: ${{ github.event_name == 'pull_request' }} workflow-slug: ci + default-timeout: 120 fedora-37: name: Fedora 37 Test @@ -2184,6 +2200,7 @@ jobs: skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} skip-junit-reports: ${{ github.event_name == 'pull_request' }} workflow-slug: ci + default-timeout: 120 fedora-38: name: Fedora 38 Test @@ -2205,6 +2222,7 @@ jobs: skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} skip-junit-reports: ${{ github.event_name == 'pull_request' }} workflow-slug: ci + default-timeout: 120 opensuse-15: name: Opensuse 15 Test @@ -2226,6 +2244,7 @@ jobs: skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} skip-junit-reports: ${{ github.event_name == 'pull_request' }} workflow-slug: ci + default-timeout: 120 photonos-3: name: Photon OS 3 Test @@ -2247,6 +2266,7 @@ jobs: skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} skip-junit-reports: ${{ github.event_name == 'pull_request' }} workflow-slug: ci + default-timeout: 120 photonos-3-arm64: name: Photon OS 3 Arm64 Test @@ -2268,6 +2288,7 @@ jobs: skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} skip-junit-reports: ${{ github.event_name == 'pull_request' }} workflow-slug: ci + default-timeout: 120 photonos-4: name: Photon OS 4 Test @@ -2289,6 +2310,7 @@ jobs: skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} skip-junit-reports: ${{ github.event_name == 'pull_request' }} workflow-slug: ci + default-timeout: 120 photonos-4-arm64: name: Photon OS 4 Arm64 Test @@ -2310,6 +2332,7 @@ jobs: skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} skip-junit-reports: ${{ github.event_name == 'pull_request' }} workflow-slug: ci + default-timeout: 120 photonos-5: name: Photon OS 5 Test @@ -2331,6 +2354,7 @@ jobs: skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} skip-junit-reports: ${{ github.event_name == 'pull_request' }} workflow-slug: ci + default-timeout: 120 photonos-5-arm64: name: Photon OS 5 Arm64 Test @@ -2352,6 +2376,7 @@ jobs: skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} skip-junit-reports: ${{ github.event_name == 'pull_request' }} workflow-slug: ci + default-timeout: 120 ubuntu-2004: name: Ubuntu 20.04 Test @@ -2373,6 +2398,7 @@ jobs: skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} skip-junit-reports: ${{ github.event_name == 'pull_request' }} workflow-slug: ci + default-timeout: 120 ubuntu-2004-arm64: name: Ubuntu 20.04 Arm64 Test @@ -2394,6 +2420,7 @@ jobs: skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} skip-junit-reports: ${{ github.event_name == 'pull_request' }} workflow-slug: ci + default-timeout: 120 ubuntu-2204: name: Ubuntu 22.04 Test @@ -2415,6 +2442,7 @@ jobs: skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} skip-junit-reports: ${{ github.event_name == 'pull_request' }} workflow-slug: ci + default-timeout: 120 ubuntu-2204-arm64: name: Ubuntu 22.04 Arm64 Test @@ -2436,6 +2464,7 @@ jobs: skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} skip-junit-reports: ${{ github.event_name == 'pull_request' }} workflow-slug: ci + default-timeout: 120 combine-all-code-coverage: name: Combine Code Coverage diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index e15743ed459..9224c915223 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -1909,6 +1909,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: nightly + default-timeout: 300 windows-2019: name: Windows 2019 Test @@ -1930,6 +1931,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: nightly + default-timeout: 300 windows-2022: name: Windows 2022 Test @@ -1951,6 +1953,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: nightly + default-timeout: 300 macos-12: name: macOS 12 Test @@ -1972,6 +1975,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: nightly + default-timeout: 300 almalinux-8: name: Alma Linux 8 Test @@ -1993,6 +1997,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: nightly + default-timeout: 300 almalinux-9: name: Alma Linux 9 Test @@ -2014,6 +2019,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: nightly + default-timeout: 300 amazonlinux-2: name: Amazon Linux 2 Test @@ -2035,6 +2041,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: nightly + default-timeout: 300 archlinux-lts: name: Arch Linux LTS Test @@ -2056,6 +2063,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: nightly + default-timeout: 300 centos-7: name: CentOS 7 Test @@ -2077,6 +2085,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: nightly + default-timeout: 300 centosstream-8: name: CentOS Stream 8 Test @@ -2098,6 +2107,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: nightly + default-timeout: 300 centosstream-9: name: CentOS Stream 9 Test @@ -2119,6 +2129,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: nightly + default-timeout: 300 debian-10: name: Debian 10 Test @@ -2140,6 +2151,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: nightly + default-timeout: 300 debian-11: name: Debian 11 Test @@ -2161,6 +2173,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: nightly + default-timeout: 300 debian-11-arm64: name: Debian 11 Arm64 Test @@ -2182,6 +2195,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: nightly + default-timeout: 300 debian-12: name: Debian 12 Test @@ -2203,6 +2217,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: nightly + default-timeout: 300 debian-12-arm64: name: Debian 12 Arm64 Test @@ -2224,6 +2239,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: nightly + default-timeout: 300 fedora-37: name: Fedora 37 Test @@ -2245,6 +2261,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: nightly + default-timeout: 300 fedora-38: name: Fedora 38 Test @@ -2266,6 +2283,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: nightly + default-timeout: 300 opensuse-15: name: Opensuse 15 Test @@ -2287,6 +2305,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: nightly + default-timeout: 300 photonos-3: name: Photon OS 3 Test @@ -2308,6 +2327,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: nightly + default-timeout: 300 photonos-3-arm64: name: Photon OS 3 Arm64 Test @@ -2329,6 +2349,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: nightly + default-timeout: 300 photonos-4: name: Photon OS 4 Test @@ -2350,6 +2371,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: nightly + default-timeout: 300 photonos-4-arm64: name: Photon OS 4 Arm64 Test @@ -2371,6 +2393,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: nightly + default-timeout: 300 photonos-5: name: Photon OS 5 Test @@ -2392,6 +2415,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: nightly + default-timeout: 300 photonos-5-arm64: name: Photon OS 5 Arm64 Test @@ -2413,6 +2437,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: nightly + default-timeout: 300 ubuntu-2004: name: Ubuntu 20.04 Test @@ -2434,6 +2459,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: nightly + default-timeout: 300 ubuntu-2004-arm64: name: Ubuntu 20.04 Arm64 Test @@ -2455,6 +2481,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: nightly + default-timeout: 300 ubuntu-2204: name: Ubuntu 22.04 Test @@ -2476,6 +2503,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: nightly + default-timeout: 300 ubuntu-2204-arm64: name: Ubuntu 22.04 Arm64 Test @@ -2497,6 +2525,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: nightly + default-timeout: 300 combine-all-code-coverage: name: Combine Code Coverage diff --git a/.github/workflows/scheduled.yml b/.github/workflows/scheduled.yml index d8a80b2790b..287dd7fa7a8 100644 --- a/.github/workflows/scheduled.yml +++ b/.github/workflows/scheduled.yml @@ -1882,6 +1882,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: scheduled + default-timeout: 300 windows-2019: name: Windows 2019 Test @@ -1903,6 +1904,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: scheduled + default-timeout: 300 windows-2022: name: Windows 2022 Test @@ -1924,6 +1926,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: scheduled + default-timeout: 300 macos-12: name: macOS 12 Test @@ -1945,6 +1948,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: scheduled + default-timeout: 300 almalinux-8: name: Alma Linux 8 Test @@ -1966,6 +1970,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: scheduled + default-timeout: 300 almalinux-9: name: Alma Linux 9 Test @@ -1987,6 +1992,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: scheduled + default-timeout: 300 amazonlinux-2: name: Amazon Linux 2 Test @@ -2008,6 +2014,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: scheduled + default-timeout: 300 archlinux-lts: name: Arch Linux LTS Test @@ -2029,6 +2036,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: scheduled + default-timeout: 300 centos-7: name: CentOS 7 Test @@ -2050,6 +2058,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: scheduled + default-timeout: 300 centosstream-8: name: CentOS Stream 8 Test @@ -2071,6 +2080,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: scheduled + default-timeout: 300 centosstream-9: name: CentOS Stream 9 Test @@ -2092,6 +2102,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: scheduled + default-timeout: 300 debian-10: name: Debian 10 Test @@ -2113,6 +2124,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: scheduled + default-timeout: 300 debian-11: name: Debian 11 Test @@ -2134,6 +2146,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: scheduled + default-timeout: 300 debian-11-arm64: name: Debian 11 Arm64 Test @@ -2155,6 +2168,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: scheduled + default-timeout: 300 debian-12: name: Debian 12 Test @@ -2176,6 +2190,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: scheduled + default-timeout: 300 debian-12-arm64: name: Debian 12 Arm64 Test @@ -2197,6 +2212,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: scheduled + default-timeout: 300 fedora-37: name: Fedora 37 Test @@ -2218,6 +2234,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: scheduled + default-timeout: 300 fedora-38: name: Fedora 38 Test @@ -2239,6 +2256,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: scheduled + default-timeout: 300 opensuse-15: name: Opensuse 15 Test @@ -2260,6 +2278,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: scheduled + default-timeout: 300 photonos-3: name: Photon OS 3 Test @@ -2281,6 +2300,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: scheduled + default-timeout: 300 photonos-3-arm64: name: Photon OS 3 Arm64 Test @@ -2302,6 +2322,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: scheduled + default-timeout: 300 photonos-4: name: Photon OS 4 Test @@ -2323,6 +2344,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: scheduled + default-timeout: 300 photonos-4-arm64: name: Photon OS 4 Arm64 Test @@ -2344,6 +2366,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: scheduled + default-timeout: 300 photonos-5: name: Photon OS 5 Test @@ -2365,6 +2388,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: scheduled + default-timeout: 300 photonos-5-arm64: name: Photon OS 5 Arm64 Test @@ -2386,6 +2410,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: scheduled + default-timeout: 300 ubuntu-2004: name: Ubuntu 20.04 Test @@ -2407,6 +2432,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: scheduled + default-timeout: 300 ubuntu-2004-arm64: name: Ubuntu 20.04 Arm64 Test @@ -2428,6 +2454,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: scheduled + default-timeout: 300 ubuntu-2204: name: Ubuntu 22.04 Test @@ -2449,6 +2476,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: scheduled + default-timeout: 300 ubuntu-2204-arm64: name: Ubuntu 22.04 Arm64 Test @@ -2470,6 +2498,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: scheduled + default-timeout: 300 combine-all-code-coverage: name: Combine Code Coverage diff --git a/.github/workflows/staging.yml b/.github/workflows/staging.yml index 4962220fe5a..afdae3bd2f1 100644 --- a/.github/workflows/staging.yml +++ b/.github/workflows/staging.yml @@ -1904,6 +1904,7 @@ jobs: skip-code-coverage: true skip-junit-reports: true workflow-slug: staging + default-timeout: 120 windows-2019: name: Windows 2019 Test @@ -1925,6 +1926,7 @@ jobs: skip-code-coverage: true skip-junit-reports: true workflow-slug: staging + default-timeout: 120 windows-2022: name: Windows 2022 Test @@ -1946,6 +1948,7 @@ jobs: skip-code-coverage: true skip-junit-reports: true workflow-slug: staging + default-timeout: 120 macos-12: name: macOS 12 Test @@ -1967,6 +1970,7 @@ jobs: skip-code-coverage: true skip-junit-reports: true workflow-slug: staging + default-timeout: 120 almalinux-8: name: Alma Linux 8 Test @@ -1988,6 +1992,7 @@ jobs: skip-code-coverage: true skip-junit-reports: true workflow-slug: staging + default-timeout: 120 almalinux-9: name: Alma Linux 9 Test @@ -2009,6 +2014,7 @@ jobs: skip-code-coverage: true skip-junit-reports: true workflow-slug: staging + default-timeout: 120 amazonlinux-2: name: Amazon Linux 2 Test @@ -2030,6 +2036,7 @@ jobs: skip-code-coverage: true skip-junit-reports: true workflow-slug: staging + default-timeout: 120 archlinux-lts: name: Arch Linux LTS Test @@ -2051,6 +2058,7 @@ jobs: skip-code-coverage: true skip-junit-reports: true workflow-slug: staging + default-timeout: 120 centos-7: name: CentOS 7 Test @@ -2072,6 +2080,7 @@ jobs: skip-code-coverage: true skip-junit-reports: true workflow-slug: staging + default-timeout: 120 centosstream-8: name: CentOS Stream 8 Test @@ -2093,6 +2102,7 @@ jobs: skip-code-coverage: true skip-junit-reports: true workflow-slug: staging + default-timeout: 120 centosstream-9: name: CentOS Stream 9 Test @@ -2114,6 +2124,7 @@ jobs: skip-code-coverage: true skip-junit-reports: true workflow-slug: staging + default-timeout: 120 debian-10: name: Debian 10 Test @@ -2135,6 +2146,7 @@ jobs: skip-code-coverage: true skip-junit-reports: true workflow-slug: staging + default-timeout: 120 debian-11: name: Debian 11 Test @@ -2156,6 +2168,7 @@ jobs: skip-code-coverage: true skip-junit-reports: true workflow-slug: staging + default-timeout: 120 debian-11-arm64: name: Debian 11 Arm64 Test @@ -2177,6 +2190,7 @@ jobs: skip-code-coverage: true skip-junit-reports: true workflow-slug: staging + default-timeout: 120 debian-12: name: Debian 12 Test @@ -2198,6 +2212,7 @@ jobs: skip-code-coverage: true skip-junit-reports: true workflow-slug: staging + default-timeout: 120 debian-12-arm64: name: Debian 12 Arm64 Test @@ -2219,6 +2234,7 @@ jobs: skip-code-coverage: true skip-junit-reports: true workflow-slug: staging + default-timeout: 120 fedora-37: name: Fedora 37 Test @@ -2240,6 +2256,7 @@ jobs: skip-code-coverage: true skip-junit-reports: true workflow-slug: staging + default-timeout: 120 fedora-38: name: Fedora 38 Test @@ -2261,6 +2278,7 @@ jobs: skip-code-coverage: true skip-junit-reports: true workflow-slug: staging + default-timeout: 120 opensuse-15: name: Opensuse 15 Test @@ -2282,6 +2300,7 @@ jobs: skip-code-coverage: true skip-junit-reports: true workflow-slug: staging + default-timeout: 120 photonos-3: name: Photon OS 3 Test @@ -2303,6 +2322,7 @@ jobs: skip-code-coverage: true skip-junit-reports: true workflow-slug: staging + default-timeout: 120 photonos-3-arm64: name: Photon OS 3 Arm64 Test @@ -2324,6 +2344,7 @@ jobs: skip-code-coverage: true skip-junit-reports: true workflow-slug: staging + default-timeout: 120 photonos-4: name: Photon OS 4 Test @@ -2345,6 +2366,7 @@ jobs: skip-code-coverage: true skip-junit-reports: true workflow-slug: staging + default-timeout: 120 photonos-4-arm64: name: Photon OS 4 Arm64 Test @@ -2366,6 +2388,7 @@ jobs: skip-code-coverage: true skip-junit-reports: true workflow-slug: staging + default-timeout: 120 photonos-5: name: Photon OS 5 Test @@ -2387,6 +2410,7 @@ jobs: skip-code-coverage: true skip-junit-reports: true workflow-slug: staging + default-timeout: 120 photonos-5-arm64: name: Photon OS 5 Arm64 Test @@ -2408,6 +2432,7 @@ jobs: skip-code-coverage: true skip-junit-reports: true workflow-slug: staging + default-timeout: 120 ubuntu-2004: name: Ubuntu 20.04 Test @@ -2429,6 +2454,7 @@ jobs: skip-code-coverage: true skip-junit-reports: true workflow-slug: staging + default-timeout: 120 ubuntu-2004-arm64: name: Ubuntu 20.04 Arm64 Test @@ -2450,6 +2476,7 @@ jobs: skip-code-coverage: true skip-junit-reports: true workflow-slug: staging + default-timeout: 120 ubuntu-2204: name: Ubuntu 22.04 Test @@ -2471,6 +2498,7 @@ jobs: skip-code-coverage: true skip-junit-reports: true workflow-slug: staging + default-timeout: 120 ubuntu-2204-arm64: name: Ubuntu 22.04 Arm64 Test @@ -2492,6 +2520,7 @@ jobs: skip-code-coverage: true skip-junit-reports: true workflow-slug: staging + default-timeout: 120 build-src-repo: name: Build Repository diff --git a/.github/workflows/templates/test-salt.yml.jinja b/.github/workflows/templates/test-salt.yml.jinja index c135207601f..ce00a6efd1f 100644 --- a/.github/workflows/templates/test-salt.yml.jinja +++ b/.github/workflows/templates/test-salt.yml.jinja @@ -1,3 +1,8 @@ +<%- if workflow_slug in ("nightly", "scheduled") %> + <%- set timeout_value = 300 %> +<%- else %> + <%- set timeout_value = 120 %> +<%- endif %> <%- for slug, display_name, arch in test_salt_listing["windows"] %> @@ -22,6 +27,7 @@ skip-code-coverage: <{ skip_test_coverage_check }> skip-junit-reports: <{ skip_junit_reports_check }> workflow-slug: <{ workflow_slug }> + default-timeout: <{ timeout_value }> <%- endfor %> @@ -49,6 +55,7 @@ skip-code-coverage: <{ skip_test_coverage_check }> skip-junit-reports: <{ skip_junit_reports_check }> workflow-slug: <{ workflow_slug }> + default-timeout: <{ timeout_value }> <%- endfor %> @@ -76,5 +83,6 @@ skip-code-coverage: <{ skip_test_coverage_check }> skip-junit-reports: <{ skip_junit_reports_check }> workflow-slug: <{ workflow_slug }> + default-timeout: <{ timeout_value }> <%- endfor %> diff --git a/.github/workflows/test-action-macos.yml b/.github/workflows/test-action-macos.yml index a7fc8526bf2..ec84dec71c2 100644 --- a/.github/workflows/test-action-macos.yml +++ b/.github/workflows/test-action-macos.yml @@ -61,6 +61,11 @@ on: type: string description: Which workflow is running. default: ci + default-timeout: + required: false + type: number + description: Timeout, in minutes, for the test job(Default 300, 5 hours). + default: 300 env: COLUMNS: 190 @@ -97,7 +102,7 @@ jobs: runs-on: ${{ inputs.distro-slug }} # Full test runs. Each chunk should never take more than 2 hours. # Partial test runs(no chunk parallelization), 5 Hours - timeout-minutes: ${{ fromJSON(inputs.testrun)['type'] == 'full' && 120 || 300 }} + timeout-minutes: ${{ fromJSON(inputs.testrun)['type'] == 'full' && inputs.default-timeout || 300 }} needs: - generate-matrix strategy: diff --git a/.github/workflows/test-action.yml b/.github/workflows/test-action.yml index 79e1ec4a7fa..0f9fdf2b1e2 100644 --- a/.github/workflows/test-action.yml +++ b/.github/workflows/test-action.yml @@ -61,6 +61,11 @@ on: type: string description: Which workflow is running. default: ci + default-timeout: + required: false + type: number + description: Timeout, in minutes, for the test job(Default 300, 5 hours). + default: 300 env: COLUMNS: 190 @@ -105,7 +110,7 @@ jobs: - bastion # Full test runs. Each chunk should never take more than 2 hours. # Partial test runs(no chunk parallelization), 5 Hours - timeout-minutes: ${{ fromJSON(inputs.testrun)['type'] == 'full' && 120 || 300 }} + timeout-minutes: ${{ fromJSON(inputs.testrun)['type'] == 'full' && inputs.default-timeout || 300 }} needs: - generate-matrix strategy: From 42a2149621a2eedb631828d0214c3c3cb1486197 Mon Sep 17 00:00:00 2001 From: David Murphy < dmurphy@saltstack.com> Date: Tue, 31 Oct 2023 14:41:15 -0600 Subject: [PATCH 108/153] Ported tesT_listdiff.py from unittest to pytest and additional code-coverage tests --- tests/pytests/unit/utils/test_listdiffer.py | 186 ++++++++++++++++++++ tests/unit/utils/test_listdiffer.py | 109 ------------ 2 files changed, 186 insertions(+), 109 deletions(-) create mode 100644 tests/pytests/unit/utils/test_listdiffer.py delete mode 100644 tests/unit/utils/test_listdiffer.py diff --git a/tests/pytests/unit/utils/test_listdiffer.py b/tests/pytests/unit/utils/test_listdiffer.py new file mode 100644 index 00000000000..6ebf07103e1 --- /dev/null +++ b/tests/pytests/unit/utils/test_listdiffer.py @@ -0,0 +1,186 @@ +import pytest + +from salt.utils import dictdiffer +from salt.utils.listdiffer import list_diff + + +@pytest.fixture +def get_NONE_value(): + return dictdiffer.RecursiveDictDiffer.NONE_VALUE + + +@pytest.fixture +def get_old_list(): + return [ + {"key": 1, "value": "foo1", "int_value": 101}, + {"key": 2, "value": "foo2", "int_value": 102}, + {"key": 3, "value": "foo3", "int_value": 103}, + ] + + +@pytest.fixture +def get_new_list(): + return [ + {"key": 1, "value": "foo1", "int_value": 101}, + {"key": 2, "value": "foo2", "int_value": 112}, + {"key": 5, "value": "foo5", "int_value": 105}, + ] + + +@pytest.fixture +def test_list_diff(get_old_list, get_new_list): + test_list_diff = list_diff(get_old_list, get_new_list, key="key") + return test_list_diff + + +def test_added(test_list_diff): + assert len(test_list_diff.added) == 1 + assert test_list_diff.added[0] == {"key": 5, "value": "foo5", "int_value": 105} + + +def test_removed(test_list_diff): + assert len(test_list_diff.removed) == 1 + assert test_list_diff.removed[0] == {"key": 3, "value": "foo3", "int_value": 103} + + +def test_diffs(test_list_diff, get_NONE_value): + assert len(test_list_diff.diffs) == 3 + assert test_list_diff.diffs[0] == {2: {"int_value": {"new": 112, "old": 102}}} + + # Added items + assert test_list_diff.diffs[1] == { + 5: { + "int_value": {"new": 105, "old": get_NONE_value}, + "key": {"new": 5, "old": get_NONE_value}, + "value": {"new": "foo5", "old": get_NONE_value}, + } + } + + # Removed items + assert test_list_diff.diffs[2] == { + 3: { + "int_value": {"new": get_NONE_value, "old": 103}, + "key": {"new": get_NONE_value, "old": 3}, + "value": {"new": get_NONE_value, "old": "foo3"}, + } + } + + +def test_new_values(test_list_diff): + assert len(test_list_diff.new_values) == 2 + assert test_list_diff.new_values[0] == {"key": 2, "int_value": 112} + assert test_list_diff.new_values[1] == {"key": 5, "value": "foo5", "int_value": 105} + + +def test_old_values(test_list_diff): + assert len(test_list_diff.old_values) == 2 + assert test_list_diff.old_values[0] == {"key": 2, "int_value": 102} + assert test_list_diff.old_values[1] == {"key": 3, "value": "foo3", "int_value": 103} + + +def test_changed_all(test_list_diff): + assert test_list_diff.changed(selection="all") == [ + "key.2.int_value", + "key.5.int_value", + "key.5.value", + "key.3.int_value", + "key.3.value", + ] + + +def test_changed_intersect(test_list_diff): + assert test_list_diff.changed(selection="intersect") == ["key.2.int_value"] + + +def test_changes_str(test_list_diff): + expected = """\tidentified by key 2: +\tint_value from 102 to 112 +\tidentified by key 3: +\twill be removed +\tidentified by key 5: +\twill be added +""" + assert test_list_diff.changes_str == expected + + +def test_intersect(test_list_diff): + expected = [ + { + "key": 1, + "old": {"key": 1, "value": "foo1", "int_value": 101}, + "new": {"key": 1, "value": "foo1", "int_value": 101}, + }, + { + "key": 2, + "old": {"key": 2, "value": "foo2", "int_value": 102}, + "new": {"key": 2, "value": "foo2", "int_value": 112}, + }, + ] + test_isect = test_list_diff.intersect + assert test_isect == expected + + +def test_remove_diff_intersect(test_list_diff): + expected = [ + { + "key": 1, + "old": {"key": 1, "int_value": 101}, + "new": {"key": 1, "int_value": 101}, + }, + { + "key": 2, + "old": {"key": 2, "int_value": 102}, + "new": {"key": 2, "int_value": 112}, + }, + ] + + test_list_diff.remove_diff(diff_key="value") + test_isect = test_list_diff.intersect + assert test_isect == expected + + +def test_remove_diff_removed(test_list_diff): + expected = [ + { + "key": 1, + "old": {"key": 1, "value": "foo1", "int_value": 101}, + "new": {"key": 1, "value": "foo1", "int_value": 101}, + }, + { + "key": 2, + "old": {"key": 2, "value": "foo2", "int_value": 102}, + "new": {"key": 2, "value": "foo2", "int_value": 112}, + }, + ] + test_list_diff.remove_diff(diff_key="value", diff_list="removed") + test_isect = test_list_diff.intersect + assert test_isect == expected + + +def test_changes_str2(test_list_diff): + expected = """ key=2 (updated): + int_value from 102 to 112 + key=3 (removed) + key=5 (added): {'key': 5, 'value': 'foo5', 'int_value': 105}""" + test_changes = test_list_diff.changes_str2 + assert test_changes == expected + + +def test_current_list(test_list_diff): + expected = [ + {"key": 1, "value": "foo1", "int_value": 101}, + {"key": 2, "value": "foo2", "int_value": 102}, + {"key": 3, "value": "foo3", "int_value": 103}, + ] + test_curr_list = test_list_diff.current_list + assert test_curr_list == expected + + +def test_new_list(test_list_diff): + expected = [ + {"key": 1, "value": "foo1", "int_value": 101}, + {"key": 2, "value": "foo2", "int_value": 112}, + {"key": 5, "value": "foo5", "int_value": 105}, + ] + test_new_list = test_list_diff.new_list + assert test_new_list == expected diff --git a/tests/unit/utils/test_listdiffer.py b/tests/unit/utils/test_listdiffer.py deleted file mode 100644 index cd1922a5f6e..00000000000 --- a/tests/unit/utils/test_listdiffer.py +++ /dev/null @@ -1,109 +0,0 @@ -from salt.utils import dictdiffer -from salt.utils.listdiffer import list_diff -from tests.support.unit import TestCase - -NONE = dictdiffer.RecursiveDictDiffer.NONE_VALUE - - -class ListDictDifferTestCase(TestCase): - def setUp(self): - old_list = [ - {"key": 1, "value": "foo1", "int_value": 101}, - {"key": 2, "value": "foo2", "int_value": 102}, - {"key": 3, "value": "foo3", "int_value": 103}, - ] - new_list = [ - {"key": 1, "value": "foo1", "int_value": 101}, - {"key": 2, "value": "foo2", "int_value": 112}, - {"key": 5, "value": "foo5", "int_value": 105}, - ] - self.list_diff = list_diff(old_list, new_list, key="key") - - def tearDown(self): - for attrname in ("list_diff",): - try: - delattr(self, attrname) - except AttributeError: - continue - - def test_added(self): - self.assertEqual(len(self.list_diff.added), 1) - self.assertDictEqual( - self.list_diff.added[0], {"key": 5, "value": "foo5", "int_value": 105} - ) - - def test_removed(self): - self.assertEqual(len(self.list_diff.removed), 1) - self.assertDictEqual( - self.list_diff.removed[0], {"key": 3, "value": "foo3", "int_value": 103} - ) - - def test_diffs(self): - self.assertEqual(len(self.list_diff.diffs), 3) - self.assertDictEqual( - self.list_diff.diffs[0], {2: {"int_value": {"new": 112, "old": 102}}} - ) - self.assertDictEqual( - self.list_diff.diffs[1], - # Added items - { - 5: { - "int_value": {"new": 105, "old": NONE}, - "key": {"new": 5, "old": NONE}, - "value": {"new": "foo5", "old": NONE}, - } - }, - ) - self.assertDictEqual( - self.list_diff.diffs[2], - # Removed items - { - 3: { - "int_value": {"new": NONE, "old": 103}, - "key": {"new": NONE, "old": 3}, - "value": {"new": NONE, "old": "foo3"}, - } - }, - ) - - def test_new_values(self): - self.assertEqual(len(self.list_diff.new_values), 2) - self.assertDictEqual(self.list_diff.new_values[0], {"key": 2, "int_value": 112}) - self.assertDictEqual( - self.list_diff.new_values[1], {"key": 5, "value": "foo5", "int_value": 105} - ) - - def test_old_values(self): - self.assertEqual(len(self.list_diff.old_values), 2) - self.assertDictEqual(self.list_diff.old_values[0], {"key": 2, "int_value": 102}) - self.assertDictEqual( - self.list_diff.old_values[1], {"key": 3, "value": "foo3", "int_value": 103} - ) - - def test_changed_all(self): - self.assertEqual( - self.list_diff.changed(selection="all"), - [ - "key.2.int_value", - "key.5.int_value", - "key.5.value", - "key.3.int_value", - "key.3.value", - ], - ) - - def test_changed_intersect(self): - self.assertEqual( - self.list_diff.changed(selection="intersect"), ["key.2.int_value"] - ) - - def test_changes_str(self): - self.assertEqual( - self.list_diff.changes_str, - "\tidentified by key 2:\n" - "\tint_value from 102 to 112\n" - "\tidentified by key 3:\n" - "\twill be removed\n" - "\tidentified by key 5:\n" - "\twill be added\n", - ) From 29a6202f96663b2bfb2ee264d9caf2be3c9380da Mon Sep 17 00:00:00 2001 From: David Murphy < dmurphy@saltstack.com> Date: Wed, 1 Nov 2023 11:22:14 -0600 Subject: [PATCH 109/153] Updatd test per reviewer comments --- tests/pytests/unit/utils/test_listdiffer.py | 102 +++++++++----------- 1 file changed, 48 insertions(+), 54 deletions(-) diff --git a/tests/pytests/unit/utils/test_listdiffer.py b/tests/pytests/unit/utils/test_listdiffer.py index 6ebf07103e1..dfc42a4fe9f 100644 --- a/tests/pytests/unit/utils/test_listdiffer.py +++ b/tests/pytests/unit/utils/test_listdiffer.py @@ -1,14 +1,9 @@ import pytest -from salt.utils import dictdiffer +from salt.utils.dictdiffer import RecursiveDictDiffer from salt.utils.listdiffer import list_diff -@pytest.fixture -def get_NONE_value(): - return dictdiffer.RecursiveDictDiffer.NONE_VALUE - - @pytest.fixture def get_old_list(): return [ @@ -28,58 +23,57 @@ def get_new_list(): @pytest.fixture -def test_list_diff(get_old_list, get_new_list): - test_list_diff = list_diff(get_old_list, get_new_list, key="key") - return test_list_diff +def get_list_diff(get_old_list, get_new_list): + return list_diff(get_old_list, get_new_list, key="key") -def test_added(test_list_diff): - assert len(test_list_diff.added) == 1 - assert test_list_diff.added[0] == {"key": 5, "value": "foo5", "int_value": 105} +def test_added(get_list_diff): + assert len(get_list_diff.added) == 1 + assert get_list_diff.added[0] == {"key": 5, "value": "foo5", "int_value": 105} -def test_removed(test_list_diff): - assert len(test_list_diff.removed) == 1 - assert test_list_diff.removed[0] == {"key": 3, "value": "foo3", "int_value": 103} +def test_removed(get_list_diff): + assert len(get_list_diff.removed) == 1 + assert get_list_diff.removed[0] == {"key": 3, "value": "foo3", "int_value": 103} -def test_diffs(test_list_diff, get_NONE_value): - assert len(test_list_diff.diffs) == 3 - assert test_list_diff.diffs[0] == {2: {"int_value": {"new": 112, "old": 102}}} +def test_diffs(get_list_diff): + assert len(get_list_diff.diffs) == 3 + assert get_list_diff.diffs[0] == {2: {"int_value": {"new": 112, "old": 102}}} # Added items - assert test_list_diff.diffs[1] == { + assert get_list_diff.diffs[1] == { 5: { - "int_value": {"new": 105, "old": get_NONE_value}, - "key": {"new": 5, "old": get_NONE_value}, - "value": {"new": "foo5", "old": get_NONE_value}, + "int_value": {"new": 105, "old": RecursiveDictDiffer.NONE_VALUE}, + "key": {"new": 5, "old": RecursiveDictDiffer.NONE_VALUE}, + "value": {"new": "foo5", "old": RecursiveDictDiffer.NONE_VALUE}, } } # Removed items - assert test_list_diff.diffs[2] == { + assert get_list_diff.diffs[2] == { 3: { - "int_value": {"new": get_NONE_value, "old": 103}, - "key": {"new": get_NONE_value, "old": 3}, - "value": {"new": get_NONE_value, "old": "foo3"}, + "int_value": {"new": RecursiveDictDiffer.NONE_VALUE, "old": 103}, + "key": {"new": RecursiveDictDiffer.NONE_VALUE, "old": 3}, + "value": {"new": RecursiveDictDiffer.NONE_VALUE, "old": "foo3"}, } } -def test_new_values(test_list_diff): - assert len(test_list_diff.new_values) == 2 - assert test_list_diff.new_values[0] == {"key": 2, "int_value": 112} - assert test_list_diff.new_values[1] == {"key": 5, "value": "foo5", "int_value": 105} +def test_new_values(get_list_diff): + assert len(get_list_diff.new_values) == 2 + assert get_list_diff.new_values[0] == {"key": 2, "int_value": 112} + assert get_list_diff.new_values[1] == {"key": 5, "value": "foo5", "int_value": 105} -def test_old_values(test_list_diff): - assert len(test_list_diff.old_values) == 2 - assert test_list_diff.old_values[0] == {"key": 2, "int_value": 102} - assert test_list_diff.old_values[1] == {"key": 3, "value": "foo3", "int_value": 103} +def test_old_values(get_list_diff): + assert len(get_list_diff.old_values) == 2 + assert get_list_diff.old_values[0] == {"key": 2, "int_value": 102} + assert get_list_diff.old_values[1] == {"key": 3, "value": "foo3", "int_value": 103} -def test_changed_all(test_list_diff): - assert test_list_diff.changed(selection="all") == [ +def test_changed_all(get_list_diff): + assert get_list_diff.changed(selection="all") == [ "key.2.int_value", "key.5.int_value", "key.5.value", @@ -88,11 +82,11 @@ def test_changed_all(test_list_diff): ] -def test_changed_intersect(test_list_diff): - assert test_list_diff.changed(selection="intersect") == ["key.2.int_value"] +def test_changed_intersect(get_list_diff): + assert get_list_diff.changed(selection="intersect") == ["key.2.int_value"] -def test_changes_str(test_list_diff): +def test_changes_str(get_list_diff): expected = """\tidentified by key 2: \tint_value from 102 to 112 \tidentified by key 3: @@ -100,10 +94,10 @@ def test_changes_str(test_list_diff): \tidentified by key 5: \twill be added """ - assert test_list_diff.changes_str == expected + assert get_list_diff.changes_str == expected -def test_intersect(test_list_diff): +def test_intersect(get_list_diff): expected = [ { "key": 1, @@ -116,11 +110,11 @@ def test_intersect(test_list_diff): "new": {"key": 2, "value": "foo2", "int_value": 112}, }, ] - test_isect = test_list_diff.intersect + test_isect = get_list_diff.intersect assert test_isect == expected -def test_remove_diff_intersect(test_list_diff): +def test_remove_diff_intersect(get_list_diff): expected = [ { "key": 1, @@ -134,12 +128,12 @@ def test_remove_diff_intersect(test_list_diff): }, ] - test_list_diff.remove_diff(diff_key="value") - test_isect = test_list_diff.intersect + get_list_diff.remove_diff(diff_key="value") + test_isect = get_list_diff.intersect assert test_isect == expected -def test_remove_diff_removed(test_list_diff): +def test_remove_diff_removed(get_list_diff): expected = [ { "key": 1, @@ -152,35 +146,35 @@ def test_remove_diff_removed(test_list_diff): "new": {"key": 2, "value": "foo2", "int_value": 112}, }, ] - test_list_diff.remove_diff(diff_key="value", diff_list="removed") - test_isect = test_list_diff.intersect + get_list_diff.remove_diff(diff_key="value", diff_list="removed") + test_isect = get_list_diff.intersect assert test_isect == expected -def test_changes_str2(test_list_diff): +def test_changes_str2(get_list_diff): expected = """ key=2 (updated): int_value from 102 to 112 key=3 (removed) key=5 (added): {'key': 5, 'value': 'foo5', 'int_value': 105}""" - test_changes = test_list_diff.changes_str2 + test_changes = get_list_diff.changes_str2 assert test_changes == expected -def test_current_list(test_list_diff): +def test_current_list(get_list_diff): expected = [ {"key": 1, "value": "foo1", "int_value": 101}, {"key": 2, "value": "foo2", "int_value": 102}, {"key": 3, "value": "foo3", "int_value": 103}, ] - test_curr_list = test_list_diff.current_list + test_curr_list = get_list_diff.current_list assert test_curr_list == expected -def test_new_list(test_list_diff): +def test_new_list(get_list_diff): expected = [ {"key": 1, "value": "foo1", "int_value": 101}, {"key": 2, "value": "foo2", "int_value": 112}, {"key": 5, "value": "foo5", "int_value": 105}, ] - test_new_list = test_list_diff.new_list + test_new_list = get_list_diff.new_list assert test_new_list == expected From a73e655513f687e6f7094c76e54744196eb0d880 Mon Sep 17 00:00:00 2001 From: Renato Caldas Date: Fri, 27 Oct 2023 00:07:04 +0100 Subject: [PATCH 110/153] Fix duplicated initialization --- salt/modules/pacmanpkg.py | 1 - 1 file changed, 1 deletion(-) diff --git a/salt/modules/pacmanpkg.py b/salt/modules/pacmanpkg.py index 88336f6957a..21e639fa901 100644 --- a/salt/modules/pacmanpkg.py +++ b/salt/modules/pacmanpkg.py @@ -542,7 +542,6 @@ def install( cmd.extend(["systemd-run", "--scope"]) cmd.append("pacman") - targets = [] errors = [] targets = [] if pkg_type == "file": From da7fbf8c0ca58e272045988f41cfc40ff93f6637 Mon Sep 17 00:00:00 2001 From: Renato Caldas Date: Fri, 27 Oct 2023 10:00:14 +0100 Subject: [PATCH 111/153] Fix pre-commit checks --- salt/modules/pacmanpkg.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/salt/modules/pacmanpkg.py b/salt/modules/pacmanpkg.py index 21e639fa901..298b3e7313a 100644 --- a/salt/modules/pacmanpkg.py +++ b/salt/modules/pacmanpkg.py @@ -566,11 +566,9 @@ def install( if prefix == "=": wildcards.append((param, verstr)) else: - errors.append( - "Invalid wildcard for {}{}{}".format(param, prefix, verstr) - ) + errors.append(f"Invalid wildcard for {param}{prefix}{verstr}") continue - targets.append("{}{}{}".format(param, prefix, verstr)) + targets.append(f"{param}{prefix}{verstr}") if wildcards: # Resolve wildcard matches From 4fd5072dbd5dc941990de4543b37c9e2a7a9d5bc Mon Sep 17 00:00:00 2001 From: cmcmarrow Date: Thu, 19 Oct 2023 12:43:07 -0500 Subject: [PATCH 112/153] bumpy pygit2 --- requirements/static/ci/darwin.in | 2 +- requirements/static/ci/freebsd.in | 2 +- requirements/static/ci/linux.in | 4 +--- requirements/static/ci/py3.10/darwin.txt | 2 +- requirements/static/ci/py3.10/freebsd.txt | 2 +- requirements/static/ci/py3.10/lint.txt | 2 +- requirements/static/ci/py3.10/linux.txt | 2 +- requirements/static/ci/py3.10/windows.txt | 2 +- requirements/static/ci/py3.7/freebsd.txt | 4 +++- requirements/static/ci/py3.7/lint.txt | 6 +++++- requirements/static/ci/py3.7/linux.txt | 4 +++- requirements/static/ci/py3.7/windows.txt | 2 +- requirements/static/ci/py3.8/freebsd.txt | 2 +- requirements/static/ci/py3.8/lint.txt | 2 +- requirements/static/ci/py3.8/linux.txt | 2 +- requirements/static/ci/py3.8/windows.txt | 2 +- requirements/static/ci/py3.9/darwin.txt | 2 +- requirements/static/ci/py3.9/freebsd.txt | 2 +- requirements/static/ci/py3.9/lint.txt | 6 +----- requirements/static/ci/py3.9/linux.txt | 4 +--- requirements/static/ci/py3.9/windows.txt | 2 +- requirements/static/ci/windows.in | 2 +- 22 files changed, 30 insertions(+), 30 deletions(-) diff --git a/requirements/static/ci/darwin.in b/requirements/static/ci/darwin.in index 49b95223e8b..bd95f1f41b7 100644 --- a/requirements/static/ci/darwin.in +++ b/requirements/static/ci/darwin.in @@ -5,7 +5,7 @@ --constraint=../pkg/py{py_version}/{platform}.txt yamlordereddictloader -pygit2>=1.2.0 +pygit2>=1.10.1 yamllint mercurial hglib diff --git a/requirements/static/ci/freebsd.in b/requirements/static/ci/freebsd.in index b628d6514a2..1fad585d0c9 100644 --- a/requirements/static/ci/freebsd.in +++ b/requirements/static/ci/freebsd.in @@ -1,7 +1,7 @@ # FreeBSD static CI requirements --constraint=../pkg/py{py_version}/{platform}.txt -pygit2==1.8.0 +pygit2>=1.10.1 yamllint mercurial hglib diff --git a/requirements/static/ci/linux.in b/requirements/static/ci/linux.in index 34c2c054a27..203d66ce71f 100644 --- a/requirements/static/ci/linux.in +++ b/requirements/static/ci/linux.in @@ -2,9 +2,7 @@ --constraint=../pkg/py{py_version}/{platform}.txt pyiface -pygit2<1.1.0; python_version <= '3.8' -pygit2>=1.4.0; python_version > '3.8' -pygit2==1.9.1; python_version >= '3.10' +pygit2>=1.10.1 pymysql>=1.0.2 ansible>=4.4.0; python_version < '3.9' ansible>=7.0.0; python_version >= '3.9' diff --git a/requirements/static/ci/py3.10/darwin.txt b/requirements/static/ci/py3.10/darwin.txt index ab71f7987bf..3da6a738ab8 100644 --- a/requirements/static/ci/py3.10/darwin.txt +++ b/requirements/static/ci/py3.10/darwin.txt @@ -707,7 +707,7 @@ pycryptodomex==3.9.8 # via # -c requirements/static/ci/../pkg/py3.10/darwin.txt # -r requirements/crypto.txt -pygit2==1.9.1 +pygit2==1.13.1 # via -r requirements/static/ci/darwin.in pyjwt==2.4.0 # via adal diff --git a/requirements/static/ci/py3.10/freebsd.txt b/requirements/static/ci/py3.10/freebsd.txt index ab3910913c4..6d379cac9c5 100644 --- a/requirements/static/ci/py3.10/freebsd.txt +++ b/requirements/static/ci/py3.10/freebsd.txt @@ -698,7 +698,7 @@ pycryptodomex==3.9.8 # via # -c requirements/static/ci/../pkg/py3.10/freebsd.txt # -r requirements/crypto.txt -pygit2==1.8.0 +pygit2==1.13.1 # via -r requirements/static/ci/freebsd.in pyinotify==0.9.6 ; sys_platform != "win32" and sys_platform != "darwin" and platform_system != "openbsd" # via -r requirements/static/ci/common.in diff --git a/requirements/static/ci/py3.10/lint.txt b/requirements/static/ci/py3.10/lint.txt index a0eb57db663..ec68133ad30 100644 --- a/requirements/static/ci/py3.10/lint.txt +++ b/requirements/static/ci/py3.10/lint.txt @@ -993,7 +993,7 @@ pycryptodomex==3.9.8 # -c requirements/static/ci/../pkg/py3.10/linux.txt # -c requirements/static/ci/py3.10/linux.txt # -r requirements/crypto.txt -pygit2==1.9.1 ; python_version >= "3.10" +pygit2==1.13.1 # via # -c requirements/static/ci/py3.10/linux.txt # -r requirements/static/ci/linux.in diff --git a/requirements/static/ci/py3.10/linux.txt b/requirements/static/ci/py3.10/linux.txt index 2a267e08d2f..b3c8aa5556e 100644 --- a/requirements/static/ci/py3.10/linux.txt +++ b/requirements/static/ci/py3.10/linux.txt @@ -711,7 +711,7 @@ pycryptodomex==3.9.8 # via # -c requirements/static/ci/../pkg/py3.10/linux.txt # -r requirements/crypto.txt -pygit2==1.9.1 ; python_version >= "3.10" +pygit2==1.13.1 # via -r requirements/static/ci/linux.in pyiface==0.0.11 # via -r requirements/static/ci/linux.in diff --git a/requirements/static/ci/py3.10/windows.txt b/requirements/static/ci/py3.10/windows.txt index aa68c670856..5646b9a2930 100644 --- a/requirements/static/ci/py3.10/windows.txt +++ b/requirements/static/ci/py3.10/windows.txt @@ -278,7 +278,7 @@ pycryptodomex==3.10.1 # via # -c requirements/static/ci/../pkg/py3.10/windows.txt # -r requirements/crypto.txt -pygit2==1.9.1 +pygit2==1.13.1 # via -r requirements/static/ci/windows.in pymssql==2.2.7 # via diff --git a/requirements/static/ci/py3.7/freebsd.txt b/requirements/static/ci/py3.7/freebsd.txt index 281969ebf98..838981a8aa1 100644 --- a/requirements/static/ci/py3.7/freebsd.txt +++ b/requirements/static/ci/py3.7/freebsd.txt @@ -346,6 +346,8 @@ botocore==1.24.46 # boto3 # moto # s3transfer +cached-property==1.5.2 + # via pygit2 cachetools==3.1.0 # via google-auth cassandra-driver==3.24.0 @@ -735,7 +737,7 @@ pycryptodomex==3.9.8 # -r requirements/crypto.txt pyeapi==0.8.3 # via napalm -pygit2==1.8.0 +pygit2==1.10.1 # via -r requirements/static/ci/freebsd.in pyinotify==0.9.6 ; sys_platform != "win32" and sys_platform != "darwin" and platform_system != "openbsd" # via -r requirements/static/ci/common.in diff --git a/requirements/static/ci/py3.7/lint.txt b/requirements/static/ci/py3.7/lint.txt index 2e9f5f55d0b..63ac0a28c01 100644 --- a/requirements/static/ci/py3.7/lint.txt +++ b/requirements/static/ci/py3.7/lint.txt @@ -543,6 +543,10 @@ botocore==1.24.46 # boto3 # moto # s3transfer +cached-property==1.5.2 + # via + # -c requirements/static/ci/py3.7/linux.txt + # pygit2 cachetools==4.2.2 # via # -c requirements/static/ci/py3.7/linux.txt @@ -1044,7 +1048,7 @@ pyeapi==0.8.3 # via # -c requirements/static/ci/py3.7/linux.txt # napalm -pygit2==1.0.3 ; python_version <= "3.8" +pygit2==1.10.1 # via # -c requirements/static/ci/py3.7/linux.txt # -r requirements/static/ci/linux.in diff --git a/requirements/static/ci/py3.7/linux.txt b/requirements/static/ci/py3.7/linux.txt index c66aae87b32..c077e6a3e72 100644 --- a/requirements/static/ci/py3.7/linux.txt +++ b/requirements/static/ci/py3.7/linux.txt @@ -359,6 +359,8 @@ botocore==1.24.46 # boto3 # moto # s3transfer +cached-property==1.5.2 + # via pygit2 cachetools==4.2.2 # via # google-auth @@ -750,7 +752,7 @@ pycryptodomex==3.9.8 # -r requirements/crypto.txt pyeapi==0.8.3 # via napalm -pygit2==1.0.3 ; python_version <= "3.8" +pygit2==1.10.1 # via -r requirements/static/ci/linux.in pyiface==0.0.11 # via -r requirements/static/ci/linux.in diff --git a/requirements/static/ci/py3.7/windows.txt b/requirements/static/ci/py3.7/windows.txt index 358a269c22d..dfa1ed14327 100644 --- a/requirements/static/ci/py3.7/windows.txt +++ b/requirements/static/ci/py3.7/windows.txt @@ -291,7 +291,7 @@ pycryptodomex==3.10.1 # via # -c requirements/static/ci/../pkg/py3.7/windows.txt # -r requirements/crypto.txt -pygit2==1.9.1 +pygit2==1.10.1 # via -r requirements/static/ci/windows.in pymssql==2.2.1 # via diff --git a/requirements/static/ci/py3.8/freebsd.txt b/requirements/static/ci/py3.8/freebsd.txt index ed7fe4bf658..7a136305dd4 100644 --- a/requirements/static/ci/py3.8/freebsd.txt +++ b/requirements/static/ci/py3.8/freebsd.txt @@ -725,7 +725,7 @@ pycryptodomex==3.9.8 # -r requirements/crypto.txt pyeapi==0.8.3 # via napalm -pygit2==1.8.0 +pygit2==1.13.1 # via -r requirements/static/ci/freebsd.in pyinotify==0.9.6 ; sys_platform != "win32" and sys_platform != "darwin" and platform_system != "openbsd" # via -r requirements/static/ci/common.in diff --git a/requirements/static/ci/py3.8/lint.txt b/requirements/static/ci/py3.8/lint.txt index 3ff68e1d3a6..cd61ff37d59 100644 --- a/requirements/static/ci/py3.8/lint.txt +++ b/requirements/static/ci/py3.8/lint.txt @@ -1034,7 +1034,7 @@ pyeapi==0.8.3 # via # -c requirements/static/ci/py3.8/linux.txt # napalm -pygit2==1.0.3 ; python_version <= "3.8" +pygit2==1.13.1 # via # -c requirements/static/ci/py3.8/linux.txt # -r requirements/static/ci/linux.in diff --git a/requirements/static/ci/py3.8/linux.txt b/requirements/static/ci/py3.8/linux.txt index 5269b54d76f..1d1bf99db88 100644 --- a/requirements/static/ci/py3.8/linux.txt +++ b/requirements/static/ci/py3.8/linux.txt @@ -740,7 +740,7 @@ pycryptodomex==3.9.8 # -r requirements/crypto.txt pyeapi==0.8.3 # via napalm -pygit2==1.0.3 ; python_version <= "3.8" +pygit2==1.13.1 # via -r requirements/static/ci/linux.in pyiface==0.0.11 # via -r requirements/static/ci/linux.in diff --git a/requirements/static/ci/py3.8/windows.txt b/requirements/static/ci/py3.8/windows.txt index 12557cc1db2..acd53a81525 100644 --- a/requirements/static/ci/py3.8/windows.txt +++ b/requirements/static/ci/py3.8/windows.txt @@ -279,7 +279,7 @@ pycryptodomex==3.10.1 # via # -c requirements/static/ci/../pkg/py3.8/windows.txt # -r requirements/crypto.txt -pygit2==1.9.1 +pygit2==1.13.1 # via -r requirements/static/ci/windows.in pymssql==2.2.1 # via diff --git a/requirements/static/ci/py3.9/darwin.txt b/requirements/static/ci/py3.9/darwin.txt index 4d427fc1921..b2141a34c4e 100644 --- a/requirements/static/ci/py3.9/darwin.txt +++ b/requirements/static/ci/py3.9/darwin.txt @@ -736,7 +736,7 @@ pycryptodomex==3.9.8 # -r requirements/crypto.txt pyeapi==0.8.3 # via napalm -pygit2==1.9.1 +pygit2==1.13.1 # via -r requirements/static/ci/darwin.in pyjwt==2.4.0 # via adal diff --git a/requirements/static/ci/py3.9/freebsd.txt b/requirements/static/ci/py3.9/freebsd.txt index 1986be0a083..8e5260f63e8 100644 --- a/requirements/static/ci/py3.9/freebsd.txt +++ b/requirements/static/ci/py3.9/freebsd.txt @@ -727,7 +727,7 @@ pycryptodomex==3.9.8 # -r requirements/crypto.txt pyeapi==0.8.3 # via napalm -pygit2==1.8.0 +pygit2==1.13.1 # via -r requirements/static/ci/freebsd.in pyinotify==0.9.6 ; sys_platform != "win32" and sys_platform != "darwin" and platform_system != "openbsd" # via -r requirements/static/ci/common.in diff --git a/requirements/static/ci/py3.9/lint.txt b/requirements/static/ci/py3.9/lint.txt index 8f065ba5811..c9321d59f3f 100644 --- a/requirements/static/ci/py3.9/lint.txt +++ b/requirements/static/ci/py3.9/lint.txt @@ -535,10 +535,6 @@ botocore==1.24.46 # boto3 # moto # s3transfer -cached-property==1.5.2 - # via - # -c requirements/static/ci/py3.9/linux.txt - # pygit2 cachetools==4.2.2 # via # -c requirements/static/ci/py3.9/linux.txt @@ -1036,7 +1032,7 @@ pyeapi==0.8.3 # via # -c requirements/static/ci/py3.9/linux.txt # napalm -pygit2==1.5.0 ; python_version > "3.8" +pygit2==1.13.1 # via # -c requirements/static/ci/py3.9/linux.txt # -r requirements/static/ci/linux.in diff --git a/requirements/static/ci/py3.9/linux.txt b/requirements/static/ci/py3.9/linux.txt index 0c5f49494bf..b11e15185cc 100644 --- a/requirements/static/ci/py3.9/linux.txt +++ b/requirements/static/ci/py3.9/linux.txt @@ -355,8 +355,6 @@ botocore==1.24.46 # boto3 # moto # s3transfer -cached-property==1.5.2 - # via pygit2 cachetools==4.2.2 # via # google-auth @@ -742,7 +740,7 @@ pycryptodomex==3.9.8 # -r requirements/crypto.txt pyeapi==0.8.3 # via napalm -pygit2==1.5.0 ; python_version > "3.8" +pygit2==1.13.1 # via -r requirements/static/ci/linux.in pyiface==0.0.11 # via -r requirements/static/ci/linux.in diff --git a/requirements/static/ci/py3.9/windows.txt b/requirements/static/ci/py3.9/windows.txt index fbac0ca855d..0fdf07ef814 100644 --- a/requirements/static/ci/py3.9/windows.txt +++ b/requirements/static/ci/py3.9/windows.txt @@ -280,7 +280,7 @@ pycryptodomex==3.10.1 # via # -c requirements/static/ci/../pkg/py3.9/windows.txt # -r requirements/crypto.txt -pygit2==1.9.1 +pygit2==1.13.1 # via -r requirements/static/ci/windows.in pymssql==2.2.1 # via diff --git a/requirements/static/ci/windows.in b/requirements/static/ci/windows.in index f17f2b738a6..52afea9a71e 100644 --- a/requirements/static/ci/windows.in +++ b/requirements/static/ci/windows.in @@ -3,7 +3,7 @@ dmidecode patch -pygit2>=1.2.0 +pygit2>=1.10.1 sed pywinrm>=0.4.1 yamllint From 1abcf81601b27938c231f04305a97fe08e639112 Mon Sep 17 00:00:00 2001 From: Barney Sowood Date: Fri, 29 Sep 2023 17:48:22 +0100 Subject: [PATCH 113/153] Fix install of logrotate config for debian pkg Fixes the install of logrotate config for the debian pkg by moving file to pkg/common/logrotate/salt-common. File is installed via salt-common.install file, which can't rename files, only copy them to a directory, so we need to rename the file and put it in a subdir of pkg/common. Adds /etc/logrotate.d/salt-common to salt.common.conffiles to ensure that dpkg will not overwrite configs modified by users. Also updates RPM spec file for new location of logrotate config. Config needs to be /etc/logrotate.d/salt-common as that is what is used by 3005.x packages. --- pkg/common/{salt-common.logrotate => logrotate/salt-common} | 0 pkg/debian/salt-common.conffiles | 1 + pkg/debian/salt-common.dirs | 1 + pkg/debian/salt-common.install | 2 +- pkg/debian/salt-common.preinst | 4 ++++ pkg/rpm/salt.spec | 2 +- 6 files changed, 8 insertions(+), 2 deletions(-) rename pkg/common/{salt-common.logrotate => logrotate/salt-common} (100%) create mode 100644 pkg/debian/salt-common.conffiles diff --git a/pkg/common/salt-common.logrotate b/pkg/common/logrotate/salt-common similarity index 100% rename from pkg/common/salt-common.logrotate rename to pkg/common/logrotate/salt-common diff --git a/pkg/debian/salt-common.conffiles b/pkg/debian/salt-common.conffiles new file mode 100644 index 00000000000..595731d1d02 --- /dev/null +++ b/pkg/debian/salt-common.conffiles @@ -0,0 +1 @@ +/etc/logrotate.d/salt-common diff --git a/pkg/debian/salt-common.dirs b/pkg/debian/salt-common.dirs index 5c6dd29e224..381ec1f48ce 100644 --- a/pkg/debian/salt-common.dirs +++ b/pkg/debian/salt-common.dirs @@ -4,3 +4,4 @@ /usr/share/fish/vendor_completions.d /opt/saltstack/salt /etc/salt +/etc/logrotate.d diff --git a/pkg/debian/salt-common.install b/pkg/debian/salt-common.install index 09bb9e28099..4f8dac552ec 100644 --- a/pkg/debian/salt-common.install +++ b/pkg/debian/salt-common.install @@ -1,4 +1,4 @@ -pkg/common/salt-common.logrotate /etc/logrotate.d/salt +pkg/common/logrotate/salt-common /etc/logrotate.d pkg/common/fish-completions/salt-cp.fish /usr/share/fish/vendor_completions.d pkg/common/fish-completions/salt-call.fish /usr/share/fish/vendor_completions.d pkg/common/fish-completions/salt-syndic.fish /usr/share/fish/vendor_completions.d diff --git a/pkg/debian/salt-common.preinst b/pkg/debian/salt-common.preinst index 0e4ce9c59f7..0e45d2399f6 100644 --- a/pkg/debian/salt-common.preinst +++ b/pkg/debian/salt-common.preinst @@ -31,5 +31,9 @@ case "$1" in -s $SALT_SHELL \ -g $SALT_GROUP \ $SALT_USER + + # Remove incorrectly installed logrotate config - issue 65231 + test -d /etc/logrotate.d/salt && rm -r /etc/logrotate.d/salt || /bin/true + ;; esac diff --git a/pkg/rpm/salt.spec b/pkg/rpm/salt.spec index 6cc4e85c23c..4659c9fd343 100644 --- a/pkg/rpm/salt.spec +++ b/pkg/rpm/salt.spec @@ -266,7 +266,7 @@ install -p -m 0644 %{_salt_src}/pkg/common/salt-proxy@.service %{buildroot}%{_un # Logrotate #install -p %{SOURCE10} . mkdir -p %{buildroot}%{_sysconfdir}/logrotate.d/ -install -p -m 0644 %{_salt_src}/pkg/common/salt-common.logrotate %{buildroot}%{_sysconfdir}/logrotate.d/salt +install -p -m 0644 %{_salt_src}/pkg/common/logrotate/salt-common %{buildroot}%{_sysconfdir}/logrotate.d/salt # Bash completion mkdir -p %{buildroot}%{_sysconfdir}/bash_completion.d/ From 59f731c94fb6db7bb2a16f5971b1c200a579d3ac Mon Sep 17 00:00:00 2001 From: Barney Sowood Date: Thu, 12 Oct 2023 19:04:51 +0100 Subject: [PATCH 114/153] Add initial tests for logrotate configs Adds initial tests for logrotate configs to ensure they are installed in the correct location. --- .../integration/test_logrotate_config.py | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 pkg/tests/integration/test_logrotate_config.py diff --git a/pkg/tests/integration/test_logrotate_config.py b/pkg/tests/integration/test_logrotate_config.py new file mode 100644 index 00000000000..9179ae631d6 --- /dev/null +++ b/pkg/tests/integration/test_logrotate_config.py @@ -0,0 +1,34 @@ +""" +Tests for logrotate config +""" + +from pathlib import Path + +import pytest + +pytestmark = [pytest.mark.skip_on_windows, pytest.mark.skip_on_darwin] + + +@pytest.fixture +def logrotate_config_file(salt_call_cli): + """ + Fixture for logrotate config file path + """ + logrotate_dir = Path("/etc/logrotate.d") + + os_family = salt_call_cli.run("grains.get", "os_family") + assert os_family.returncode == 0 + + if os_family.data == "RedHat": + return logrotate_dir / "salt" + elif os_family.data == "Debian": + return logrotate_dir / "salt-common" + + +def test_logrotate_config(logrotate_config_file): + """ + Test that logrotate config has been installed in correctly + """ + assert logrotate_config_file.is_file() + assert logrotate_config_file.owner() == "root" + assert logrotate_config_file.group() == "root" From 1dad8745de53575bcfa3a83bc28c21e82fd18715 Mon Sep 17 00:00:00 2001 From: Barney Sowood Date: Thu, 12 Oct 2023 19:52:43 +0100 Subject: [PATCH 115/153] Add test for issue 65231 --- pkg/tests/integration/test_logrotate_config.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/pkg/tests/integration/test_logrotate_config.py b/pkg/tests/integration/test_logrotate_config.py index 9179ae631d6..5581105f11f 100644 --- a/pkg/tests/integration/test_logrotate_config.py +++ b/pkg/tests/integration/test_logrotate_config.py @@ -32,3 +32,12 @@ def test_logrotate_config(logrotate_config_file): assert logrotate_config_file.is_file() assert logrotate_config_file.owner() == "root" assert logrotate_config_file.group() == "root" + + +def test_issue_65231_etc_logrotate_salt_dir_removed(): + """ + Test that /etc/logrotate.d/salt is not a directory + """ + path = Path("/etc/logrotate.d/salt") + if path.exists(): + assert path.is_dir() is False From ffb8e84f60089cf381485fc8f238a1eb8840f263 Mon Sep 17 00:00:00 2001 From: Barney Sowood Date: Thu, 12 Oct 2023 20:21:19 +0100 Subject: [PATCH 116/153] Add changelog --- changelog/65231.fixed.md | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 changelog/65231.fixed.md diff --git a/changelog/65231.fixed.md b/changelog/65231.fixed.md new file mode 100644 index 00000000000..50d225e7452 --- /dev/null +++ b/changelog/65231.fixed.md @@ -0,0 +1,2 @@ +Install logrotate config as /etc/logrotate.d/salt-common for Debian packages +Remove broken /etc/logrotate.d/salt directory from 3006.3 if it exists. From e5b94897310c2d1a240ad82fd1e59cd33bed8a6d Mon Sep 17 00:00:00 2001 From: Barney Sowood Date: Thu, 19 Oct 2023 21:50:41 +0100 Subject: [PATCH 117/153] Disable test for 65231 on downgrade to 3006.3 Disables the running of the test for 65231 when downgrading to 3006.3 as the issue that is fixed is in 3006.3 so test will fail when 3006.3 is installed. --- pkg/tests/integration/test_logrotate_config.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/pkg/tests/integration/test_logrotate_config.py b/pkg/tests/integration/test_logrotate_config.py index 5581105f11f..0ce9552546c 100644 --- a/pkg/tests/integration/test_logrotate_config.py +++ b/pkg/tests/integration/test_logrotate_config.py @@ -4,6 +4,7 @@ Tests for logrotate config from pathlib import Path +import packaging.version import pytest pytestmark = [pytest.mark.skip_on_windows, pytest.mark.skip_on_darwin] @@ -34,10 +35,15 @@ def test_logrotate_config(logrotate_config_file): assert logrotate_config_file.group() == "root" -def test_issue_65231_etc_logrotate_salt_dir_removed(): +def test_issue_65231_etc_logrotate_salt_dir_removed(install_salt): """ Test that /etc/logrotate.d/salt is not a directory """ + if install_salt.prev_version and packaging.version.parse( + install_salt.prev_version + ) == packaging.version.parse("3006.3"): + pytest.skip("Testing a downgrade to 3006.3, do not run") + path = Path("/etc/logrotate.d/salt") if path.exists(): assert path.is_dir() is False From b83ede52726793741fe4f80512e60fe7749a142f Mon Sep 17 00:00:00 2001 From: Pedro Algarvio Date: Thu, 2 Nov 2023 12:54:02 +0000 Subject: [PATCH 118/153] Address my own review comments Signed-off-by: Pedro Algarvio --- .../integration/test_logrotate_config.py | 23 ++++++++----------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/pkg/tests/integration/test_logrotate_config.py b/pkg/tests/integration/test_logrotate_config.py index 0ce9552546c..2a1cb7cd334 100644 --- a/pkg/tests/integration/test_logrotate_config.py +++ b/pkg/tests/integration/test_logrotate_config.py @@ -2,28 +2,25 @@ Tests for logrotate config """ -from pathlib import Path +import pathlib import packaging.version import pytest -pytestmark = [pytest.mark.skip_on_windows, pytest.mark.skip_on_darwin] +pytestmark = [ + pytest.mark.skip_unless_on_linux, +] @pytest.fixture -def logrotate_config_file(salt_call_cli): +def logrotate_config_file(grains): """ Fixture for logrotate config file path """ - logrotate_dir = Path("/etc/logrotate.d") - - os_family = salt_call_cli.run("grains.get", "os_family") - assert os_family.returncode == 0 - - if os_family.data == "RedHat": - return logrotate_dir / "salt" - elif os_family.data == "Debian": - return logrotate_dir / "salt-common" + if grains["os_family"] == "RedHat": + return pathlib.Path("/etc/logrotate.d", "salt") + elif grains["os_family"] == "Debian": + return pathlib.Path("/etc/logrotate.d", "salt-common") def test_logrotate_config(logrotate_config_file): @@ -44,6 +41,6 @@ def test_issue_65231_etc_logrotate_salt_dir_removed(install_salt): ) == packaging.version.parse("3006.3"): pytest.skip("Testing a downgrade to 3006.3, do not run") - path = Path("/etc/logrotate.d/salt") + path = pathlib.Path("/etc/logrotate.d/salt") if path.exists(): assert path.is_dir() is False From 2ba6543016d5e3f93e14171c55a8ff8769600731 Mon Sep 17 00:00:00 2001 From: Pedro Algarvio Date: Thu, 2 Nov 2023 16:22:14 +0000 Subject: [PATCH 119/153] The problem is still present in 3006.4, can't test downgrade Signed-off-by: Pedro Algarvio --- pkg/tests/integration/test_logrotate_config.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/tests/integration/test_logrotate_config.py b/pkg/tests/integration/test_logrotate_config.py index 2a1cb7cd334..fea0123b6eb 100644 --- a/pkg/tests/integration/test_logrotate_config.py +++ b/pkg/tests/integration/test_logrotate_config.py @@ -38,8 +38,8 @@ def test_issue_65231_etc_logrotate_salt_dir_removed(install_salt): """ if install_salt.prev_version and packaging.version.parse( install_salt.prev_version - ) == packaging.version.parse("3006.3"): - pytest.skip("Testing a downgrade to 3006.3, do not run") + ) <= packaging.version.parse("3006.4"): + pytest.skip("Testing a downgrade to 3006.4, do not run") path = pathlib.Path("/etc/logrotate.d/salt") if path.exists(): From 480a543db7a148cb2a89ca711537592ba0ca85e8 Mon Sep 17 00:00:00 2001 From: Pedro Algarvio Date: Fri, 3 Nov 2023 05:47:57 +0000 Subject: [PATCH 120/153] 5 hours is not enough to run the integration tests in a single chunk Signed-off-by: Pedro Algarvio --- .github/workflows/nightly.yml | 58 +++++++++---------- .github/workflows/scheduled.yml | 58 +++++++++---------- .../workflows/templates/test-salt.yml.jinja | 2 +- .github/workflows/test-action-macos.yml | 8 +-- .github/workflows/test-action.yml | 8 +-- 5 files changed, 67 insertions(+), 67 deletions(-) diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index 9224c915223..41108ef0e10 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -1909,7 +1909,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: nightly - default-timeout: 300 + default-timeout: 360 windows-2019: name: Windows 2019 Test @@ -1931,7 +1931,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: nightly - default-timeout: 300 + default-timeout: 360 windows-2022: name: Windows 2022 Test @@ -1953,7 +1953,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: nightly - default-timeout: 300 + default-timeout: 360 macos-12: name: macOS 12 Test @@ -1975,7 +1975,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: nightly - default-timeout: 300 + default-timeout: 360 almalinux-8: name: Alma Linux 8 Test @@ -1997,7 +1997,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: nightly - default-timeout: 300 + default-timeout: 360 almalinux-9: name: Alma Linux 9 Test @@ -2019,7 +2019,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: nightly - default-timeout: 300 + default-timeout: 360 amazonlinux-2: name: Amazon Linux 2 Test @@ -2041,7 +2041,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: nightly - default-timeout: 300 + default-timeout: 360 archlinux-lts: name: Arch Linux LTS Test @@ -2063,7 +2063,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: nightly - default-timeout: 300 + default-timeout: 360 centos-7: name: CentOS 7 Test @@ -2085,7 +2085,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: nightly - default-timeout: 300 + default-timeout: 360 centosstream-8: name: CentOS Stream 8 Test @@ -2107,7 +2107,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: nightly - default-timeout: 300 + default-timeout: 360 centosstream-9: name: CentOS Stream 9 Test @@ -2129,7 +2129,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: nightly - default-timeout: 300 + default-timeout: 360 debian-10: name: Debian 10 Test @@ -2151,7 +2151,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: nightly - default-timeout: 300 + default-timeout: 360 debian-11: name: Debian 11 Test @@ -2173,7 +2173,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: nightly - default-timeout: 300 + default-timeout: 360 debian-11-arm64: name: Debian 11 Arm64 Test @@ -2195,7 +2195,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: nightly - default-timeout: 300 + default-timeout: 360 debian-12: name: Debian 12 Test @@ -2217,7 +2217,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: nightly - default-timeout: 300 + default-timeout: 360 debian-12-arm64: name: Debian 12 Arm64 Test @@ -2239,7 +2239,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: nightly - default-timeout: 300 + default-timeout: 360 fedora-37: name: Fedora 37 Test @@ -2261,7 +2261,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: nightly - default-timeout: 300 + default-timeout: 360 fedora-38: name: Fedora 38 Test @@ -2283,7 +2283,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: nightly - default-timeout: 300 + default-timeout: 360 opensuse-15: name: Opensuse 15 Test @@ -2305,7 +2305,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: nightly - default-timeout: 300 + default-timeout: 360 photonos-3: name: Photon OS 3 Test @@ -2327,7 +2327,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: nightly - default-timeout: 300 + default-timeout: 360 photonos-3-arm64: name: Photon OS 3 Arm64 Test @@ -2349,7 +2349,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: nightly - default-timeout: 300 + default-timeout: 360 photonos-4: name: Photon OS 4 Test @@ -2371,7 +2371,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: nightly - default-timeout: 300 + default-timeout: 360 photonos-4-arm64: name: Photon OS 4 Arm64 Test @@ -2393,7 +2393,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: nightly - default-timeout: 300 + default-timeout: 360 photonos-5: name: Photon OS 5 Test @@ -2415,7 +2415,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: nightly - default-timeout: 300 + default-timeout: 360 photonos-5-arm64: name: Photon OS 5 Arm64 Test @@ -2437,7 +2437,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: nightly - default-timeout: 300 + default-timeout: 360 ubuntu-2004: name: Ubuntu 20.04 Test @@ -2459,7 +2459,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: nightly - default-timeout: 300 + default-timeout: 360 ubuntu-2004-arm64: name: Ubuntu 20.04 Arm64 Test @@ -2481,7 +2481,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: nightly - default-timeout: 300 + default-timeout: 360 ubuntu-2204: name: Ubuntu 22.04 Test @@ -2503,7 +2503,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: nightly - default-timeout: 300 + default-timeout: 360 ubuntu-2204-arm64: name: Ubuntu 22.04 Arm64 Test @@ -2525,7 +2525,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: nightly - default-timeout: 300 + default-timeout: 360 combine-all-code-coverage: name: Combine Code Coverage diff --git a/.github/workflows/scheduled.yml b/.github/workflows/scheduled.yml index 287dd7fa7a8..8feb2ec7870 100644 --- a/.github/workflows/scheduled.yml +++ b/.github/workflows/scheduled.yml @@ -1882,7 +1882,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: scheduled - default-timeout: 300 + default-timeout: 360 windows-2019: name: Windows 2019 Test @@ -1904,7 +1904,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: scheduled - default-timeout: 300 + default-timeout: 360 windows-2022: name: Windows 2022 Test @@ -1926,7 +1926,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: scheduled - default-timeout: 300 + default-timeout: 360 macos-12: name: macOS 12 Test @@ -1948,7 +1948,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: scheduled - default-timeout: 300 + default-timeout: 360 almalinux-8: name: Alma Linux 8 Test @@ -1970,7 +1970,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: scheduled - default-timeout: 300 + default-timeout: 360 almalinux-9: name: Alma Linux 9 Test @@ -1992,7 +1992,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: scheduled - default-timeout: 300 + default-timeout: 360 amazonlinux-2: name: Amazon Linux 2 Test @@ -2014,7 +2014,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: scheduled - default-timeout: 300 + default-timeout: 360 archlinux-lts: name: Arch Linux LTS Test @@ -2036,7 +2036,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: scheduled - default-timeout: 300 + default-timeout: 360 centos-7: name: CentOS 7 Test @@ -2058,7 +2058,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: scheduled - default-timeout: 300 + default-timeout: 360 centosstream-8: name: CentOS Stream 8 Test @@ -2080,7 +2080,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: scheduled - default-timeout: 300 + default-timeout: 360 centosstream-9: name: CentOS Stream 9 Test @@ -2102,7 +2102,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: scheduled - default-timeout: 300 + default-timeout: 360 debian-10: name: Debian 10 Test @@ -2124,7 +2124,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: scheduled - default-timeout: 300 + default-timeout: 360 debian-11: name: Debian 11 Test @@ -2146,7 +2146,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: scheduled - default-timeout: 300 + default-timeout: 360 debian-11-arm64: name: Debian 11 Arm64 Test @@ -2168,7 +2168,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: scheduled - default-timeout: 300 + default-timeout: 360 debian-12: name: Debian 12 Test @@ -2190,7 +2190,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: scheduled - default-timeout: 300 + default-timeout: 360 debian-12-arm64: name: Debian 12 Arm64 Test @@ -2212,7 +2212,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: scheduled - default-timeout: 300 + default-timeout: 360 fedora-37: name: Fedora 37 Test @@ -2234,7 +2234,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: scheduled - default-timeout: 300 + default-timeout: 360 fedora-38: name: Fedora 38 Test @@ -2256,7 +2256,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: scheduled - default-timeout: 300 + default-timeout: 360 opensuse-15: name: Opensuse 15 Test @@ -2278,7 +2278,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: scheduled - default-timeout: 300 + default-timeout: 360 photonos-3: name: Photon OS 3 Test @@ -2300,7 +2300,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: scheduled - default-timeout: 300 + default-timeout: 360 photonos-3-arm64: name: Photon OS 3 Arm64 Test @@ -2322,7 +2322,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: scheduled - default-timeout: 300 + default-timeout: 360 photonos-4: name: Photon OS 4 Test @@ -2344,7 +2344,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: scheduled - default-timeout: 300 + default-timeout: 360 photonos-4-arm64: name: Photon OS 4 Arm64 Test @@ -2366,7 +2366,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: scheduled - default-timeout: 300 + default-timeout: 360 photonos-5: name: Photon OS 5 Test @@ -2388,7 +2388,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: scheduled - default-timeout: 300 + default-timeout: 360 photonos-5-arm64: name: Photon OS 5 Arm64 Test @@ -2410,7 +2410,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: scheduled - default-timeout: 300 + default-timeout: 360 ubuntu-2004: name: Ubuntu 20.04 Test @@ -2432,7 +2432,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: scheduled - default-timeout: 300 + default-timeout: 360 ubuntu-2004-arm64: name: Ubuntu 20.04 Arm64 Test @@ -2454,7 +2454,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: scheduled - default-timeout: 300 + default-timeout: 360 ubuntu-2204: name: Ubuntu 22.04 Test @@ -2476,7 +2476,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: scheduled - default-timeout: 300 + default-timeout: 360 ubuntu-2204-arm64: name: Ubuntu 22.04 Arm64 Test @@ -2498,7 +2498,7 @@ jobs: skip-code-coverage: false skip-junit-reports: false workflow-slug: scheduled - default-timeout: 300 + default-timeout: 360 combine-all-code-coverage: name: Combine Code Coverage diff --git a/.github/workflows/templates/test-salt.yml.jinja b/.github/workflows/templates/test-salt.yml.jinja index ce00a6efd1f..cade2fe631c 100644 --- a/.github/workflows/templates/test-salt.yml.jinja +++ b/.github/workflows/templates/test-salt.yml.jinja @@ -1,5 +1,5 @@ <%- if workflow_slug in ("nightly", "scheduled") %> - <%- set timeout_value = 300 %> + <%- set timeout_value = 360 %> <%- else %> <%- set timeout_value = 120 %> <%- endif %> diff --git a/.github/workflows/test-action-macos.yml b/.github/workflows/test-action-macos.yml index ec84dec71c2..6eb610302c0 100644 --- a/.github/workflows/test-action-macos.yml +++ b/.github/workflows/test-action-macos.yml @@ -64,8 +64,8 @@ on: default-timeout: required: false type: number - description: Timeout, in minutes, for the test job(Default 300, 5 hours). - default: 300 + description: Timeout, in minutes, for the test job(Default 360, 6 hours). + default: 360 env: COLUMNS: 190 @@ -101,8 +101,8 @@ jobs: name: Test runs-on: ${{ inputs.distro-slug }} # Full test runs. Each chunk should never take more than 2 hours. - # Partial test runs(no chunk parallelization), 5 Hours - timeout-minutes: ${{ fromJSON(inputs.testrun)['type'] == 'full' && inputs.default-timeout || 300 }} + # Partial test runs(no chunk parallelization), 6 Hours + timeout-minutes: ${{ fromJSON(inputs.testrun)['type'] == 'full' && inputs.default-timeout || 360 }} needs: - generate-matrix strategy: diff --git a/.github/workflows/test-action.yml b/.github/workflows/test-action.yml index 0f9fdf2b1e2..53e7bbfa894 100644 --- a/.github/workflows/test-action.yml +++ b/.github/workflows/test-action.yml @@ -64,8 +64,8 @@ on: default-timeout: required: false type: number - description: Timeout, in minutes, for the test job(Default 300, 5 hours). - default: 300 + description: Timeout, in minutes, for the test job(Default 360, 6 hours). + default: 360 env: COLUMNS: 190 @@ -109,8 +109,8 @@ jobs: - linux - bastion # Full test runs. Each chunk should never take more than 2 hours. - # Partial test runs(no chunk parallelization), 5 Hours - timeout-minutes: ${{ fromJSON(inputs.testrun)['type'] == 'full' && inputs.default-timeout || 300 }} + # Partial test runs(no chunk parallelization), 6 Hours + timeout-minutes: ${{ fromJSON(inputs.testrun)['type'] == 'full' && inputs.default-timeout || 360 }} needs: - generate-matrix strategy: From bb1bc2a326c1f1dfcb3b4f7c1a8aacea22e18db4 Mon Sep 17 00:00:00 2001 From: Pedro Algarvio Date: Fri, 3 Nov 2023 05:51:55 +0000 Subject: [PATCH 121/153] And apparently 2 hours is not enough to run one of the integration test chunks Signed-off-by: Pedro Algarvio --- .github/workflows/ci.yml | 58 +++++++++---------- .github/workflows/staging.yml | 58 +++++++++---------- .../workflows/templates/test-salt.yml.jinja | 2 +- 3 files changed, 59 insertions(+), 59 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a105e974f8a..1c2ff7aa2da 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1848,7 +1848,7 @@ jobs: skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} skip-junit-reports: ${{ github.event_name == 'pull_request' }} workflow-slug: ci - default-timeout: 120 + default-timeout: 180 windows-2019: name: Windows 2019 Test @@ -1870,7 +1870,7 @@ jobs: skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} skip-junit-reports: ${{ github.event_name == 'pull_request' }} workflow-slug: ci - default-timeout: 120 + default-timeout: 180 windows-2022: name: Windows 2022 Test @@ -1892,7 +1892,7 @@ jobs: skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} skip-junit-reports: ${{ github.event_name == 'pull_request' }} workflow-slug: ci - default-timeout: 120 + default-timeout: 180 macos-12: name: macOS 12 Test @@ -1914,7 +1914,7 @@ jobs: skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} skip-junit-reports: ${{ github.event_name == 'pull_request' }} workflow-slug: ci - default-timeout: 120 + default-timeout: 180 almalinux-8: name: Alma Linux 8 Test @@ -1936,7 +1936,7 @@ jobs: skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} skip-junit-reports: ${{ github.event_name == 'pull_request' }} workflow-slug: ci - default-timeout: 120 + default-timeout: 180 almalinux-9: name: Alma Linux 9 Test @@ -1958,7 +1958,7 @@ jobs: skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} skip-junit-reports: ${{ github.event_name == 'pull_request' }} workflow-slug: ci - default-timeout: 120 + default-timeout: 180 amazonlinux-2: name: Amazon Linux 2 Test @@ -1980,7 +1980,7 @@ jobs: skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} skip-junit-reports: ${{ github.event_name == 'pull_request' }} workflow-slug: ci - default-timeout: 120 + default-timeout: 180 archlinux-lts: name: Arch Linux LTS Test @@ -2002,7 +2002,7 @@ jobs: skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} skip-junit-reports: ${{ github.event_name == 'pull_request' }} workflow-slug: ci - default-timeout: 120 + default-timeout: 180 centos-7: name: CentOS 7 Test @@ -2024,7 +2024,7 @@ jobs: skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} skip-junit-reports: ${{ github.event_name == 'pull_request' }} workflow-slug: ci - default-timeout: 120 + default-timeout: 180 centosstream-8: name: CentOS Stream 8 Test @@ -2046,7 +2046,7 @@ jobs: skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} skip-junit-reports: ${{ github.event_name == 'pull_request' }} workflow-slug: ci - default-timeout: 120 + default-timeout: 180 centosstream-9: name: CentOS Stream 9 Test @@ -2068,7 +2068,7 @@ jobs: skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} skip-junit-reports: ${{ github.event_name == 'pull_request' }} workflow-slug: ci - default-timeout: 120 + default-timeout: 180 debian-10: name: Debian 10 Test @@ -2090,7 +2090,7 @@ jobs: skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} skip-junit-reports: ${{ github.event_name == 'pull_request' }} workflow-slug: ci - default-timeout: 120 + default-timeout: 180 debian-11: name: Debian 11 Test @@ -2112,7 +2112,7 @@ jobs: skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} skip-junit-reports: ${{ github.event_name == 'pull_request' }} workflow-slug: ci - default-timeout: 120 + default-timeout: 180 debian-11-arm64: name: Debian 11 Arm64 Test @@ -2134,7 +2134,7 @@ jobs: skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} skip-junit-reports: ${{ github.event_name == 'pull_request' }} workflow-slug: ci - default-timeout: 120 + default-timeout: 180 debian-12: name: Debian 12 Test @@ -2156,7 +2156,7 @@ jobs: skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} skip-junit-reports: ${{ github.event_name == 'pull_request' }} workflow-slug: ci - default-timeout: 120 + default-timeout: 180 debian-12-arm64: name: Debian 12 Arm64 Test @@ -2178,7 +2178,7 @@ jobs: skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} skip-junit-reports: ${{ github.event_name == 'pull_request' }} workflow-slug: ci - default-timeout: 120 + default-timeout: 180 fedora-37: name: Fedora 37 Test @@ -2200,7 +2200,7 @@ jobs: skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} skip-junit-reports: ${{ github.event_name == 'pull_request' }} workflow-slug: ci - default-timeout: 120 + default-timeout: 180 fedora-38: name: Fedora 38 Test @@ -2222,7 +2222,7 @@ jobs: skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} skip-junit-reports: ${{ github.event_name == 'pull_request' }} workflow-slug: ci - default-timeout: 120 + default-timeout: 180 opensuse-15: name: Opensuse 15 Test @@ -2244,7 +2244,7 @@ jobs: skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} skip-junit-reports: ${{ github.event_name == 'pull_request' }} workflow-slug: ci - default-timeout: 120 + default-timeout: 180 photonos-3: name: Photon OS 3 Test @@ -2266,7 +2266,7 @@ jobs: skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} skip-junit-reports: ${{ github.event_name == 'pull_request' }} workflow-slug: ci - default-timeout: 120 + default-timeout: 180 photonos-3-arm64: name: Photon OS 3 Arm64 Test @@ -2288,7 +2288,7 @@ jobs: skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} skip-junit-reports: ${{ github.event_name == 'pull_request' }} workflow-slug: ci - default-timeout: 120 + default-timeout: 180 photonos-4: name: Photon OS 4 Test @@ -2310,7 +2310,7 @@ jobs: skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} skip-junit-reports: ${{ github.event_name == 'pull_request' }} workflow-slug: ci - default-timeout: 120 + default-timeout: 180 photonos-4-arm64: name: Photon OS 4 Arm64 Test @@ -2332,7 +2332,7 @@ jobs: skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} skip-junit-reports: ${{ github.event_name == 'pull_request' }} workflow-slug: ci - default-timeout: 120 + default-timeout: 180 photonos-5: name: Photon OS 5 Test @@ -2354,7 +2354,7 @@ jobs: skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} skip-junit-reports: ${{ github.event_name == 'pull_request' }} workflow-slug: ci - default-timeout: 120 + default-timeout: 180 photonos-5-arm64: name: Photon OS 5 Arm64 Test @@ -2376,7 +2376,7 @@ jobs: skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} skip-junit-reports: ${{ github.event_name == 'pull_request' }} workflow-slug: ci - default-timeout: 120 + default-timeout: 180 ubuntu-2004: name: Ubuntu 20.04 Test @@ -2398,7 +2398,7 @@ jobs: skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} skip-junit-reports: ${{ github.event_name == 'pull_request' }} workflow-slug: ci - default-timeout: 120 + default-timeout: 180 ubuntu-2004-arm64: name: Ubuntu 20.04 Arm64 Test @@ -2420,7 +2420,7 @@ jobs: skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} skip-junit-reports: ${{ github.event_name == 'pull_request' }} workflow-slug: ci - default-timeout: 120 + default-timeout: 180 ubuntu-2204: name: Ubuntu 22.04 Test @@ -2442,7 +2442,7 @@ jobs: skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} skip-junit-reports: ${{ github.event_name == 'pull_request' }} workflow-slug: ci - default-timeout: 120 + default-timeout: 180 ubuntu-2204-arm64: name: Ubuntu 22.04 Arm64 Test @@ -2464,7 +2464,7 @@ jobs: skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} skip-junit-reports: ${{ github.event_name == 'pull_request' }} workflow-slug: ci - default-timeout: 120 + default-timeout: 180 combine-all-code-coverage: name: Combine Code Coverage diff --git a/.github/workflows/staging.yml b/.github/workflows/staging.yml index afdae3bd2f1..fdad325bee2 100644 --- a/.github/workflows/staging.yml +++ b/.github/workflows/staging.yml @@ -1904,7 +1904,7 @@ jobs: skip-code-coverage: true skip-junit-reports: true workflow-slug: staging - default-timeout: 120 + default-timeout: 180 windows-2019: name: Windows 2019 Test @@ -1926,7 +1926,7 @@ jobs: skip-code-coverage: true skip-junit-reports: true workflow-slug: staging - default-timeout: 120 + default-timeout: 180 windows-2022: name: Windows 2022 Test @@ -1948,7 +1948,7 @@ jobs: skip-code-coverage: true skip-junit-reports: true workflow-slug: staging - default-timeout: 120 + default-timeout: 180 macos-12: name: macOS 12 Test @@ -1970,7 +1970,7 @@ jobs: skip-code-coverage: true skip-junit-reports: true workflow-slug: staging - default-timeout: 120 + default-timeout: 180 almalinux-8: name: Alma Linux 8 Test @@ -1992,7 +1992,7 @@ jobs: skip-code-coverage: true skip-junit-reports: true workflow-slug: staging - default-timeout: 120 + default-timeout: 180 almalinux-9: name: Alma Linux 9 Test @@ -2014,7 +2014,7 @@ jobs: skip-code-coverage: true skip-junit-reports: true workflow-slug: staging - default-timeout: 120 + default-timeout: 180 amazonlinux-2: name: Amazon Linux 2 Test @@ -2036,7 +2036,7 @@ jobs: skip-code-coverage: true skip-junit-reports: true workflow-slug: staging - default-timeout: 120 + default-timeout: 180 archlinux-lts: name: Arch Linux LTS Test @@ -2058,7 +2058,7 @@ jobs: skip-code-coverage: true skip-junit-reports: true workflow-slug: staging - default-timeout: 120 + default-timeout: 180 centos-7: name: CentOS 7 Test @@ -2080,7 +2080,7 @@ jobs: skip-code-coverage: true skip-junit-reports: true workflow-slug: staging - default-timeout: 120 + default-timeout: 180 centosstream-8: name: CentOS Stream 8 Test @@ -2102,7 +2102,7 @@ jobs: skip-code-coverage: true skip-junit-reports: true workflow-slug: staging - default-timeout: 120 + default-timeout: 180 centosstream-9: name: CentOS Stream 9 Test @@ -2124,7 +2124,7 @@ jobs: skip-code-coverage: true skip-junit-reports: true workflow-slug: staging - default-timeout: 120 + default-timeout: 180 debian-10: name: Debian 10 Test @@ -2146,7 +2146,7 @@ jobs: skip-code-coverage: true skip-junit-reports: true workflow-slug: staging - default-timeout: 120 + default-timeout: 180 debian-11: name: Debian 11 Test @@ -2168,7 +2168,7 @@ jobs: skip-code-coverage: true skip-junit-reports: true workflow-slug: staging - default-timeout: 120 + default-timeout: 180 debian-11-arm64: name: Debian 11 Arm64 Test @@ -2190,7 +2190,7 @@ jobs: skip-code-coverage: true skip-junit-reports: true workflow-slug: staging - default-timeout: 120 + default-timeout: 180 debian-12: name: Debian 12 Test @@ -2212,7 +2212,7 @@ jobs: skip-code-coverage: true skip-junit-reports: true workflow-slug: staging - default-timeout: 120 + default-timeout: 180 debian-12-arm64: name: Debian 12 Arm64 Test @@ -2234,7 +2234,7 @@ jobs: skip-code-coverage: true skip-junit-reports: true workflow-slug: staging - default-timeout: 120 + default-timeout: 180 fedora-37: name: Fedora 37 Test @@ -2256,7 +2256,7 @@ jobs: skip-code-coverage: true skip-junit-reports: true workflow-slug: staging - default-timeout: 120 + default-timeout: 180 fedora-38: name: Fedora 38 Test @@ -2278,7 +2278,7 @@ jobs: skip-code-coverage: true skip-junit-reports: true workflow-slug: staging - default-timeout: 120 + default-timeout: 180 opensuse-15: name: Opensuse 15 Test @@ -2300,7 +2300,7 @@ jobs: skip-code-coverage: true skip-junit-reports: true workflow-slug: staging - default-timeout: 120 + default-timeout: 180 photonos-3: name: Photon OS 3 Test @@ -2322,7 +2322,7 @@ jobs: skip-code-coverage: true skip-junit-reports: true workflow-slug: staging - default-timeout: 120 + default-timeout: 180 photonos-3-arm64: name: Photon OS 3 Arm64 Test @@ -2344,7 +2344,7 @@ jobs: skip-code-coverage: true skip-junit-reports: true workflow-slug: staging - default-timeout: 120 + default-timeout: 180 photonos-4: name: Photon OS 4 Test @@ -2366,7 +2366,7 @@ jobs: skip-code-coverage: true skip-junit-reports: true workflow-slug: staging - default-timeout: 120 + default-timeout: 180 photonos-4-arm64: name: Photon OS 4 Arm64 Test @@ -2388,7 +2388,7 @@ jobs: skip-code-coverage: true skip-junit-reports: true workflow-slug: staging - default-timeout: 120 + default-timeout: 180 photonos-5: name: Photon OS 5 Test @@ -2410,7 +2410,7 @@ jobs: skip-code-coverage: true skip-junit-reports: true workflow-slug: staging - default-timeout: 120 + default-timeout: 180 photonos-5-arm64: name: Photon OS 5 Arm64 Test @@ -2432,7 +2432,7 @@ jobs: skip-code-coverage: true skip-junit-reports: true workflow-slug: staging - default-timeout: 120 + default-timeout: 180 ubuntu-2004: name: Ubuntu 20.04 Test @@ -2454,7 +2454,7 @@ jobs: skip-code-coverage: true skip-junit-reports: true workflow-slug: staging - default-timeout: 120 + default-timeout: 180 ubuntu-2004-arm64: name: Ubuntu 20.04 Arm64 Test @@ -2476,7 +2476,7 @@ jobs: skip-code-coverage: true skip-junit-reports: true workflow-slug: staging - default-timeout: 120 + default-timeout: 180 ubuntu-2204: name: Ubuntu 22.04 Test @@ -2498,7 +2498,7 @@ jobs: skip-code-coverage: true skip-junit-reports: true workflow-slug: staging - default-timeout: 120 + default-timeout: 180 ubuntu-2204-arm64: name: Ubuntu 22.04 Arm64 Test @@ -2520,7 +2520,7 @@ jobs: skip-code-coverage: true skip-junit-reports: true workflow-slug: staging - default-timeout: 120 + default-timeout: 180 build-src-repo: name: Build Repository diff --git a/.github/workflows/templates/test-salt.yml.jinja b/.github/workflows/templates/test-salt.yml.jinja index cade2fe631c..be3e7fd5fa4 100644 --- a/.github/workflows/templates/test-salt.yml.jinja +++ b/.github/workflows/templates/test-salt.yml.jinja @@ -1,7 +1,7 @@ <%- if workflow_slug in ("nightly", "scheduled") %> <%- set timeout_value = 360 %> <%- else %> - <%- set timeout_value = 120 %> + <%- set timeout_value = 180 %> <%- endif %> <%- for slug, display_name, arch in test_salt_listing["windows"] %> From 45932d911288bb3212a6ffe2e093d7e1bd1f92b6 Mon Sep 17 00:00:00 2001 From: David Murphy < dmurphy@saltstack.com> Date: Wed, 1 Nov 2023 16:58:26 -0600 Subject: [PATCH 122/153] WIP Ported test_data.py from unittest to pytest and adding additional tests --- tests/pytests/unit/utils/test_data.py | 1536 ++++++++++++++++++++++++- tests/unit/utils/test_data.py | 1506 ------------------------ 2 files changed, 1473 insertions(+), 1569 deletions(-) delete mode 100644 tests/unit/utils/test_data.py diff --git a/tests/pytests/unit/utils/test_data.py b/tests/pytests/unit/utils/test_data.py index 61d834da7f1..01f9ae3cfe5 100644 --- a/tests/pytests/unit/utils/test_data.py +++ b/tests/pytests/unit/utils/test_data.py @@ -1,89 +1,1499 @@ +""" +Tests for salt.utils.data +""" +import builtins +import logging + import pytest import salt.utils.data +import salt.utils.stringutils +from salt.utils.odict import OrderedDict as SaltOrderedDict +from tests.support.mock import patch +from tests.support.unit import LOREM_IPSUM + +log = logging.getLogger(__name__) + +_b = lambda x: x.encode("utf-8") +_s = lambda x: salt.utils.stringutils.to_str(x, normalize=True) -def test_get_value_simple_path(): - data = {"a": {"b": {"c": "foo"}}} - assert [{"value": "foo"}] == salt.utils.data.get_value(data, "a:b:c") +@pytest.fixture +def get_BYTES(): + # Some randomized data that will not decode + return b"1\x814\x10" -def test_get_value_placeholder_dict(): - data = {"a": {"b": {"name": "foo"}, "c": {"name": "bar"}}} - assert [ - {"value": "foo", "id": "b"}, - {"value": "bar", "id": "c"}, - ] == salt.utils.data.get_value(data, "a:{id}:name") +@pytest.fixture +def get_EGGS(): + # This is an example of a unicode string with й constructed using two separate + # code points. Do not modify it. + return "\u044f\u0438\u0306\u0446\u0430" -def test_get_value_placeholder_list(): - data = {"a": [{"name": "foo"}, {"name": "bar"}]} - assert [ - {"value": "foo", "id": 0}, - {"value": "bar", "id": 1}, - ] == salt.utils.data.get_value(data, "a:{id}:name") +@pytest.fixture +def get_test_data(get_BYTES, get_EGGS): + return [ + "unicode_str", + _b("питон"), + 123, + 456.789, + True, + False, + None, + get_EGGS, + get_BYTES, + [123, 456.789, _b("спам"), True, False, None, get_EGGS, get_BYTES], + (987, 654.321, _b("яйца"), get_EGGS, None, (True, get_EGGS, get_BYTES)), + { + _b("str_key"): _b("str_val"), + None: True, + 123: 456.789, + get_EGGS: get_BYTES, + _b("subdict"): { + "unicode_key": get_EGGS, + _b("tuple"): (123, "hello", _b("world"), True, get_EGGS, get_BYTES), + _b("list"): [456, _b("спам"), False, get_EGGS, get_BYTES], + }, + }, + SaltOrderedDict([(_b("foo"), "bar"), (123, 456), (get_EGGS, get_BYTES)]), + ] -def test_get_value_nested_placeholder(): - data = { - "a": { - "b": {"b1": {"name": "foo1"}, "b2": {"name": "foo2"}}, - "c": {"c1": {"name": "bar"}}, +def test_sorted_ignorecase(): + test_list = ["foo", "Foo", "bar", "Bar"] + expected_list = ["bar", "Bar", "foo", "Foo"] + assert salt.utils.data.sorted_ignorecase(test_list) == expected_list + + +def test_mysql_to_dict(): + test_mysql_output = [ + "+----+------+-----------+------+---------+------+-------+------------------+", + "| Id | User | Host | db | Command | Time | State | Info " + " |", + "+----+------+-----------+------+---------+------+-------+------------------+", + "| 7 | root | localhost | NULL | Query | 0 | init | show" + " processlist |", + "+----+------+-----------+------+---------+------+-------+------------------+", + ] + + ret = salt.utils.data.mysql_to_dict(test_mysql_output, "Info") + expected_dict = { + "show processlist": { + "Info": "show processlist", + "db": "NULL", + "State": "init", + "Host": "localhost", + "Command": "Query", + "User": "root", + "Time": 0, + "Id": 7, } } - assert [ - {"value": "foo1", "id": "b", "sub": "b1"}, - {"value": "foo2", "id": "b", "sub": "b2"}, - {"value": "bar", "id": "c", "sub": "c1"}, - ] == salt.utils.data.get_value(data, "a:{id}:{sub}:name") + assert ret == expected_dict -def test_get_value_nested_notfound(): - data = {"a": {"b": {"c": "foo"}}} - assert [{"value": []}] == salt.utils.data.get_value(data, "a:b:d", []) +def test_subdict_match(): + test_two_level_dict = {"foo": {"bar": "baz"}} + test_two_level_comb_dict = {"foo": {"bar": "baz:woz"}} + test_two_level_dict_and_list = { + "abc": ["def", "ghi", {"lorem": {"ipsum": [{"dolor": "sit"}]}}], + } + test_three_level_dict = {"a": {"b": {"c": "v"}}} + + assert salt.utils.data.subdict_match(test_two_level_dict, "foo:bar:baz") + # In test_two_level_comb_dict, 'foo:bar' corresponds to 'baz:woz', not + # 'baz'. This match should return False. + assert not salt.utils.data.subdict_match(test_two_level_comb_dict, "foo:bar:baz") + # This tests matching with the delimiter in the value part (in other + # words, that the path 'foo:bar' corresponds to the string 'baz:woz'). + assert salt.utils.data.subdict_match(test_two_level_comb_dict, "foo:bar:baz:woz") + # This would match if test_two_level_comb_dict['foo']['bar'] was equal + # to 'baz:woz:wiz', or if there was more deep nesting. But it does not, + # so this should return False. + assert not salt.utils.data.subdict_match( + test_two_level_comb_dict, "foo:bar:baz:woz:wiz" + ) + # This tests for cases when a key path corresponds to a list. The + # value part 'ghi' should be successfully matched as it is a member of + # the list corresponding to key path 'abc'. It is somewhat a + # duplication of a test within test_traverse_dict_and_list, but + # salt.utils.data.subdict_match() does more than just invoke + # salt.utils.traverse_list_and_dict() so this particular assertion is a + # sanity check. + assert salt.utils.data.subdict_match(test_two_level_dict_and_list, "abc:ghi") + # This tests the use case of a dict embedded in a list, embedded in a + # list, embedded in a dict. This is a rather absurd case, but it + # confirms that match recursion works properly. + assert salt.utils.data.subdict_match( + test_two_level_dict_and_list, "abc:lorem:ipsum:dolor:sit" + ) + # Test four level dict match for reference + assert salt.utils.data.subdict_match(test_three_level_dict, "a:b:c:v") + # Test regression in 2015.8 where 'a:c:v' would match 'a:b:c:v' + assert not salt.utils.data.subdict_match(test_three_level_dict, "a:c:v") + # Test wildcard match + assert salt.utils.data.subdict_match(test_three_level_dict, "a:*:c:v") -def test_get_value_not_found(): - assert [{"value": []}] == salt.utils.data.get_value({}, "a", []) - - -def test_get_value_none(): - assert [{"value": None}] == salt.utils.data.get_value({"a": None}, "a") - - -def test_get_value_simple_type_path(): - assert [{"value": []}] == salt.utils.data.get_value({"a": 1024}, "a:b", []) - - -def test_get_value_None_path(): - assert [{"value": None}] == salt.utils.data.get_value({"a": None}, "a:b", []) - - -def test_flatten_recursion_error(): +@pytest.mark.parametrize( + "wildcard", + [ + ("*:*:*:*"), + ("a:*:*:*"), + ("a:b:*:*"), + ("a:b:ç:*"), + ("a:b:*:d"), + ("a:*:ç:d"), + ("*:b:ç:d"), + ("*:*:ç:d"), + ("*:*:*:d"), + ("a:*:*:d"), + ("a:b:*:ef*"), + ("a:b:*:g*"), + ("a:b:*:j:*"), + ("a:b:*:j:k"), + ("a:b:*:*:k"), + ("a:b:*:*:*"), + ], +) +def test_subdict_match_with_wildcards(wildcard): """ - Test the flatten function for reference cycle detection + Tests subdict matching when wildcards are used in the expression """ - data = [1, 2, 3, [4]] - data.append(data) - with pytest.raises(RecursionError) as err: - salt.utils.data.flatten(data) - assert str(err.value) == "Reference cycle detected. Check input list." + data = {"a": {"b": {"ç": "d", "é": ["eff", "gee", "8ch"], "ĩ": {"j": "k"}}}} + assert salt.utils.data.subdict_match(data, wildcard) -def test_sample(): - lst = ["one", "two", "three", "four"] - assert len(salt.utils.data.sample(lst, 0)) == 0 - assert len(salt.utils.data.sample(lst, 2)) == 2 - pytest.raises(ValueError, salt.utils.data.sample, lst, 5) - assert salt.utils.data.sample(lst, 2, seed="static") == ["four", "two"] +def test_traverse_dict(): + test_two_level_dict = {"foo": {"bar": "baz"}} + + assert {"not_found": "nope"} == salt.utils.data.traverse_dict( + test_two_level_dict, "foo:bar:baz", {"not_found": "nope"} + ) + assert "baz" == salt.utils.data.traverse_dict( + test_two_level_dict, "foo:bar", {"not_found": "not_found"} + ) -def test_shuffle(): - lst = ["one", "two", "three", "four"] - assert len(salt.utils.data.shuffle(lst)) == 4 - assert salt.utils.data.shuffle(lst, seed="static") == [ - "four", +def test_traverse_dict_and_list(): + test_two_level_dict = {"foo": {"bar": "baz"}} + test_two_level_dict_and_list = { + "foo": ["bar", "baz", {"lorem": {"ipsum": [{"dolor": "sit"}]}}] + } + + # Check traversing too far: salt.utils.data.traverse_dict_and_list() returns + # the value corresponding to a given key path, and baz is a value + # corresponding to the key path foo:bar. + assert {"not_found": "nope"} == salt.utils.data.traverse_dict_and_list( + test_two_level_dict, "foo:bar:baz", {"not_found": "nope"} + ) + # Now check to ensure that foo:bar corresponds to baz + assert "baz" == salt.utils.data.traverse_dict_and_list( + test_two_level_dict, "foo:bar", {"not_found": "not_found"} + ) + # Check traversing too far + assert {"not_found": "nope"} == salt.utils.data.traverse_dict_and_list( + test_two_level_dict_and_list, "foo:bar", {"not_found": "nope"} + ) + # Check index 1 (2nd element) of list corresponding to path 'foo' + assert "baz" == salt.utils.data.traverse_dict_and_list( + test_two_level_dict_and_list, "foo:1", {"not_found": "not_found"} + ) + # Traverse a couple times into dicts embedded in lists + assert "sit" == salt.utils.data.traverse_dict_and_list( + test_two_level_dict_and_list, + "foo:lorem:ipsum:dolor", + {"not_found": "not_found"}, + ) + + # Traverse and match integer key in a nested dict + # https://github.com/saltstack/salt/issues/56444 + assert "it worked" == salt.utils.data.traverse_dict_and_list( + {"foo": {1234: "it worked"}}, + "foo:1234", + "it didn't work", + ) + # Make sure that we properly return the default value when the initial + # attempt fails and YAML-loading the target key doesn't change its + # value. + assert "default" == salt.utils.data.traverse_dict_and_list( + {"foo": {"baz": "didn't work"}}, + "foo:bar", + "default", + ) + + +def test_issue_39709(): + test_two_level_dict_and_list = { + "foo": ["bar", "baz", {"lorem": {"ipsum": [{"dolor": "sit"}]}}] + } + + assert "sit" == salt.utils.data.traverse_dict_and_list( + test_two_level_dict_and_list, + ["foo", "lorem", "ipsum", "dolor"], + {"not_found": "not_found"}, + ) + + +def test_compare_dicts(): + ret = salt.utils.data.compare_dicts(old={"foo": "bar"}, new={"foo": "bar"}) + assert ret == {} + + ret = salt.utils.data.compare_dicts(old={"foo": "bar"}, new={"foo": "woz"}) + expected_ret = {"foo": {"new": "woz", "old": "bar"}} + assert ret == expected_ret + + +def test_compare_lists_no_change(): + ret = salt.utils.data.compare_lists( + old=[1, 2, 3, "a", "b", "c"], new=[1, 2, 3, "a", "b", "c"] + ) + expected = {} + assert ret == expected + + +def test_compare_lists_changes(): + ret = salt.utils.data.compare_lists( + old=[1, 2, 3, "a", "b", "c"], new=[1, 2, 4, "x", "y", "z"] + ) + expected = {"new": [4, "x", "y", "z"], "old": [3, "a", "b", "c"]} + assert ret == expected + + +def test_compare_lists_changes_new(): + ret = salt.utils.data.compare_lists(old=[1, 2, 3], new=[1, 2, 3, "x", "y", "z"]) + expected = {"new": ["x", "y", "z"]} + assert ret == expected + + +def test_compare_lists_changes_old(): + ret = salt.utils.data.compare_lists(old=[1, 2, 3, "a", "b", "c"], new=[1, 2, 3]) + expected = {"old": ["a", "b", "c"]} + assert ret == expected + + +def test_decode(get_test_data, get_BYTES, get_EGGS): + """ + Companion to test_decode_to_str, they should both be kept up-to-date + with one another. + + NOTE: This uses the lambda "_b" defined above in the global scope, + which encodes a string to a bytestring, assuming utf-8. + """ + expected = [ + "unicode_str", + "питон", + 123, + 456.789, + True, + False, + None, + "яйца", + get_BYTES, + [123, 456.789, "спам", True, False, None, "яйца", get_BYTES], + (987, 654.321, "яйца", "яйца", None, (True, "яйца", get_BYTES)), + { + "str_key": "str_val", + None: True, + 123: 456.789, + "яйца": get_BYTES, + "subdict": { + "unicode_key": "яйца", + "tuple": (123, "hello", "world", True, "яйца", get_BYTES), + "list": [456, "спам", False, "яйца", get_BYTES], + }, + }, + SaltOrderedDict([("foo", "bar"), (123, 456), ("яйца", get_BYTES)]), + ] + + ret = salt.utils.data.decode( + get_test_data, + keep=True, + normalize=True, + preserve_dict_class=True, + preserve_tuples=True, + ) + assert ret == expected + + # The binary data in the data structure should fail to decode, even + # using the fallback, and raise an exception. + pytest.raises( + UnicodeDecodeError, + salt.utils.data.decode, + get_test_data, + keep=False, + normalize=True, + preserve_dict_class=True, + preserve_tuples=True, + ) + + # Now munge the expected data so that we get what we would expect if we + # disable preservation of dict class and tuples + expected[10] = [987, 654.321, "яйца", "яйца", None, [True, "яйца", get_BYTES]] + expected[11]["subdict"]["tuple"] = [123, "hello", "world", True, "яйца", get_BYTES] + expected[12] = {"foo": "bar", 123: 456, "яйца": get_BYTES} + + ret = salt.utils.data.decode( + get_test_data, + keep=True, + normalize=True, + preserve_dict_class=False, + preserve_tuples=False, + ) + assert ret == expected + + # Now test single non-string, non-data-structure items, these should + # return the same value when passed to this function + for item in (123, 4.56, True, False, None): + log.debug("Testing decode of %s", item) + assert salt.utils.data.decode(item) == item + + # Test single strings (not in a data structure) + assert salt.utils.data.decode("foo") == "foo" + assert salt.utils.data.decode(_b("bar")) == "bar" + assert salt.utils.data.decode(get_EGGS, normalize=True) == "яйца" + assert salt.utils.data.decode(get_EGGS, normalize=False) == get_EGGS + + # Test binary blob + assert salt.utils.data.decode(get_BYTES, keep=True) == get_BYTES + pytest.raises(UnicodeDecodeError, salt.utils.data.decode, get_BYTES, keep=False) + + +def test_circular_refs_dicts(): + test_dict = {"key": "value", "type": "test1"} + test_dict["self"] = test_dict + ret = salt.utils.data._remove_circular_refs(ob=test_dict) + assert ret == {"key": "value", "type": "test1", "self": None} + + +def test_circular_refs_lists(): + test_list = { + "foo": [], + } + test_list["foo"].append((test_list,)) + ret = salt.utils.data._remove_circular_refs(ob=test_list) + assert ret == {"foo": [(None,)]} + + +def test_circular_refs_tuple(): + test_dup = {"foo": "string 1", "bar": "string 1", "ham": 1, "spam": 1} + ret = salt.utils.data._remove_circular_refs(ob=test_dup) + assert ret == {"foo": "string 1", "bar": "string 1", "ham": 1, "spam": 1} + + +def test_decode_to_str(get_test_data, get_BYTES): + """ + Companion to test_decode, they should both be kept up-to-date with one + another. + + NOTE: This uses the lambda "_s" defined above in the global scope, + which converts the string/bytestring to a str type. + """ + expected = [ + _s("unicode_str"), + _s("питон"), + 123, + 456.789, + True, + False, + None, + _s("яйца"), + get_BYTES, + [123, 456.789, _s("спам"), True, False, None, _s("яйца"), get_BYTES], + (987, 654.321, _s("яйца"), _s("яйца"), None, (True, _s("яйца"), get_BYTES)), + { + _s("str_key"): _s("str_val"), + None: True, + 123: 456.789, + _s("яйца"): get_BYTES, + _s("subdict"): { + _s("unicode_key"): _s("яйца"), + _s("tuple"): ( + 123, + _s("hello"), + _s("world"), + True, + _s("яйца"), + get_BYTES, + ), + _s("list"): [456, _s("спам"), False, _s("яйца"), get_BYTES], + }, + }, + SaltOrderedDict([(_s("foo"), _s("bar")), (123, 456), (_s("яйца"), get_BYTES)]), + ] + + ret = salt.utils.data.decode( + get_test_data, + keep=True, + normalize=True, + preserve_dict_class=True, + preserve_tuples=True, + to_str=True, + ) + assert ret == expected + + # The binary data in the data structure should fail to decode, even + # using the fallback, and raise an exception. + pytest.raises( + UnicodeDecodeError, + salt.utils.data.decode, + get_test_data, + keep=False, + normalize=True, + preserve_dict_class=True, + preserve_tuples=True, + to_str=True, + ) + + # Now munge the expected data so that we get what we would expect if we + # disable preservation of dict class and tuples + expected[10] = [ + 987, + 654.321, + _s("яйца"), + _s("яйца"), + None, + [True, _s("яйца"), get_BYTES], + ] + expected[11][_s("subdict")][_s("tuple")] = [ + 123, + _s("hello"), + _s("world"), + True, + _s("яйца"), + get_BYTES, + ] + expected[12] = {_s("foo"): _s("bar"), 123: 456, _s("яйца"): get_BYTES} + + ret = salt.utils.data.decode( + get_test_data, + keep=True, + normalize=True, + preserve_dict_class=False, + preserve_tuples=False, + to_str=True, + ) + assert ret == expected + + # Now test single non-string, non-data-structure items, these should + # return the same value when passed to this function + for item in (123, 4.56, True, False, None): + log.debug("Testing decode of %s", item) + assert salt.utils.data.decode(item, to_str=True) == item + + # Test single strings (not in a data structure) + assert salt.utils.data.decode("foo", to_str=True) == _s("foo") + assert salt.utils.data.decode(_b("bar"), to_str=True) == _s("bar") + + # Test binary blob + assert salt.utils.data.decode(get_BYTES, keep=True, to_str=True) == get_BYTES + pytest.raises( + UnicodeDecodeError, + salt.utils.data.decode, + get_BYTES, + keep=False, + to_str=True, + ) + + +def test_decode_fallback(): + """ + Test fallback to utf-8 + """ + with patch.object(builtins, "__salt_system_encoding__", "ascii"): + assert salt.utils.data.decode(_b("яйца")) == "яйца" + + +def test_encode(get_test_data, get_BYTES, get_EGGS): + """ + NOTE: This uses the lambda "_b" defined above in the global scope, + which encodes a string to a bytestring, assuming utf-8. + """ + expected = [ + _b("unicode_str"), + _b("питон"), + 123, + 456.789, + True, + False, + None, + _b(get_EGGS), + get_BYTES, + [123, 456.789, _b("спам"), True, False, None, _b(get_EGGS), get_BYTES], + (987, 654.321, _b("яйца"), _b(get_EGGS), None, (True, _b(get_EGGS), get_BYTES)), + { + _b("str_key"): _b("str_val"), + None: True, + 123: 456.789, + _b(get_EGGS): get_BYTES, + _b("subdict"): { + _b("unicode_key"): _b(get_EGGS), + _b("tuple"): ( + 123, + _b("hello"), + _b("world"), + True, + _b(get_EGGS), + get_BYTES, + ), + _b("list"): [456, _b("спам"), False, _b(get_EGGS), get_BYTES], + }, + }, + SaltOrderedDict( + [(_b("foo"), _b("bar")), (123, 456), (_b(get_EGGS), get_BYTES)] + ), + ] + + # Both keep=True and keep=False should work because the get_BYTES data is + # already bytes. + ret = salt.utils.data.encode( + get_test_data, keep=True, preserve_dict_class=True, preserve_tuples=True + ) + assert ret == expected + ret = salt.utils.data.encode( + get_test_data, keep=False, preserve_dict_class=True, preserve_tuples=True + ) + assert ret == expected + + # Now munge the expected data so that we get what we would expect if we + # disable preservation of dict class and tuples + expected[10] = [ + 987, + 654.321, + _b("яйца"), + _b(get_EGGS), + None, + [True, _b(get_EGGS), get_BYTES], + ] + expected[11][_b("subdict")][_b("tuple")] = [ + 123, + _b("hello"), + _b("world"), + True, + _b(get_EGGS), + get_BYTES, + ] + expected[12] = {_b("foo"): _b("bar"), 123: 456, _b(get_EGGS): get_BYTES} + + ret = salt.utils.data.encode( + get_test_data, keep=True, preserve_dict_class=False, preserve_tuples=False + ) + assert ret == expected + ret = salt.utils.data.encode( + get_test_data, keep=False, preserve_dict_class=False, preserve_tuples=False + ) + assert ret == expected + + # Now test single non-string, non-data-structure items, these should + # return the same value when passed to this function + for item in (123, 4.56, True, False, None): + log.debug("Testing encode of %s", item) + assert salt.utils.data.encode(item) == item + + # Test single strings (not in a data structure) + assert salt.utils.data.encode("foo") == _b("foo") + assert salt.utils.data.encode(_b("bar")) == _b("bar") + + # Test binary blob, nothing should happen even when keep=False since + # the data is already bytes + assert salt.utils.data.encode(get_BYTES, keep=True) == get_BYTES + assert salt.utils.data.encode(get_BYTES, keep=False) == get_BYTES + + +def test_encode_keep(): + """ + Whereas we tested the keep argument in test_decode, it is much easier + to do a more comprehensive test of keep in its own function where we + can force the encoding. + """ + unicode_str = "питон" + encoding = "ascii" + + # Test single string + assert salt.utils.data.encode(unicode_str, encoding, keep=True) == unicode_str + pytest.raises( + UnicodeEncodeError, + salt.utils.data.encode, + unicode_str, + encoding, + keep=False, + ) + + data = [ + unicode_str, + [b"foo", [unicode_str], {b"key": unicode_str}, (unicode_str,)], + { + b"list": [b"foo", unicode_str], + b"dict": {b"key": unicode_str}, + b"tuple": (b"foo", unicode_str), + }, + ([b"foo", unicode_str], {b"key": unicode_str}, (unicode_str,)), + ] + + # Since everything was a bytestring aside from the bogus data, the + # return data should be identical. We don't need to test recursive + # decoding, that has already been tested in test_encode. + assert ( + salt.utils.data.encode(data, encoding, keep=True, preserve_tuples=True) == data + ) + pytest.raises( + UnicodeEncodeError, + salt.utils.data.encode, + data, + encoding, + keep=False, + preserve_tuples=True, + ) + + for index, _ in enumerate(data): + assert ( + salt.utils.data.encode( + data[index], encoding, keep=True, preserve_tuples=True + ) + == data[index] + ) + pytest.raises( + UnicodeEncodeError, + salt.utils.data.encode, + data[index], + encoding, + keep=False, + preserve_tuples=True, + ) + + +def test_encode_fallback(): + """ + Test fallback to utf-8 + """ + with patch.object(builtins, "__salt_system_encoding__", "ascii"): + assert salt.utils.data.encode("яйца") == _b("яйца") + with patch.object(builtins, "__salt_system_encoding__", "CP1252"): + assert salt.utils.data.encode("Ψ") == _b("Ψ") + + +def test_repack_dict(): + list_of_one_element_dicts = [ + {"dict_key_1": "dict_val_1"}, + {"dict_key_2": "dict_val_2"}, + {"dict_key_3": "dict_val_3"}, + ] + expected_ret = { + "dict_key_1": "dict_val_1", + "dict_key_2": "dict_val_2", + "dict_key_3": "dict_val_3", + } + ret = salt.utils.data.repack_dictlist(list_of_one_element_dicts) + assert ret == expected_ret + + # Try with yaml + yaml_key_val_pair = "- key1: val1" + ret = salt.utils.data.repack_dictlist(yaml_key_val_pair) + assert ret == {"key1": "val1"} + + # Make sure we handle non-yaml junk data + ret = salt.utils.data.repack_dictlist(LOREM_IPSUM) + assert ret == {} + + +def test_stringify(): + pytest.raises(TypeError, salt.utils.data.stringify, 9) + assert salt.utils.data.stringify(["one", "two", "three", 4, 5]) == [ + "one", "two", "three", - "one", + "4", + "5", ] + + +def test_json_query(): + # Raises exception if jmespath module is not found + with patch("salt.utils.data.jmespath", None): + with pytest.raises(RuntimeError, match="requires jmespath"): + salt.utils.data.json_query({}, "@") + + # Test search + user_groups = { + "user1": {"groups": ["group1", "group2", "group3"]}, + "user2": {"groups": ["group1", "group2"]}, + "user3": {"groups": ["group3"]}, + } + expression = "*.groups[0]" + primary_groups = ["group1", "group1", "group3"] + assert sorted(salt.utils.data.json_query(user_groups, expression)) == primary_groups + + +def test_nop(): + """ + Test cases where nothing will be done. + """ + # Test with dictionary without recursion + old_dict = { + "foo": "bar", + "bar": {"baz": {"qux": "quux"}}, + "baz": ["qux", {"foo": "bar"}], + } + new_dict = salt.utils.data.filter_falsey(old_dict) + assert old_dict == new_dict + # Check returned type equality + assert type(old_dict) is type(new_dict) + # Test dictionary with recursion + new_dict = salt.utils.data.filter_falsey(old_dict, recurse_depth=3) + assert old_dict == new_dict + # Test with list + old_list = ["foo", "bar"] + new_list = salt.utils.data.filter_falsey(old_list) + assert old_list == new_list + # Check returned type equality + assert type(old_list) is type(new_list) + # Test with set + old_set = {"foo", "bar"} + new_set = salt.utils.data.filter_falsey(old_set) + assert old_set == new_set + # Check returned type equality + assert type(old_set) is type(new_set) + # Test with SaltOrderedDict + old_dict = SaltOrderedDict( + [ + ("foo", "bar"), + ("bar", SaltOrderedDict([("qux", "quux")])), + ("baz", ["qux", SaltOrderedDict([("foo", "bar")])]), + ] + ) + new_dict = salt.utils.data.filter_falsey(old_dict) + assert old_dict == new_dict + assert type(old_dict) is type(new_dict) + # Test excluding int + old_list = [0] + new_list = salt.utils.data.filter_falsey(old_list, ignore_types=[int]) + assert old_list == new_list + # Test excluding str (or unicode) (or both) + old_list = [""] + new_list = salt.utils.data.filter_falsey(old_list, ignore_types=[str]) + assert old_list == new_list + # Test excluding list + old_list = [[]] + new_list = salt.utils.data.filter_falsey(old_list, ignore_types=[type([])]) + assert old_list == new_list + # Test excluding dict + old_list = [{}] + new_list = salt.utils.data.filter_falsey(old_list, ignore_types=[type({})]) + assert old_list == new_list + + +def test_filter_dict_no_recurse(): + """ + Test filtering a dictionary without recursing. + This will only filter out key-values where the values are falsey. + """ + old_dict = { + "foo": None, + "bar": {"baz": {"qux": None, "quux": "", "foo": []}}, + "baz": ["qux"], + "qux": {}, + "quux": [], + } + new_dict = salt.utils.data.filter_falsey(old_dict) + expect_dict = { + "bar": {"baz": {"qux": None, "quux": "", "foo": []}}, + "baz": ["qux"], + } + assert expect_dict == new_dict + assert type(expect_dict) is type(new_dict) + + +def test_filter_dict_recurse(): + """ + Test filtering a dictionary with recursing. + This will filter out any key-values where the values are falsey or when + the values *become* falsey after filtering their contents (in case they + are lists or dicts). + """ + old_dict = { + "foo": None, + "bar": {"baz": {"qux": None, "quux": "", "foo": []}}, + "baz": ["qux"], + "qux": {}, + "quux": [], + } + new_dict = salt.utils.data.filter_falsey(old_dict, recurse_depth=3) + expect_dict = {"baz": ["qux"]} + assert expect_dict == new_dict + assert type(expect_dict) is type(new_dict) + + +def test_filter_list_no_recurse(): + """ + Test filtering a list without recursing. + This will only filter out items which are falsey. + """ + old_list = ["foo", None, [], {}, 0, ""] + new_list = salt.utils.data.filter_falsey(old_list) + expect_list = ["foo"] + assert expect_list == new_list + assert type(expect_list) is type(new_list) + # Ensure nested values are *not* filtered out. + old_list = [ + "foo", + ["foo"], + ["foo", None], + {"foo": 0}, + {"foo": "bar", "baz": []}, + [{"foo": ""}], + ] + new_list = salt.utils.data.filter_falsey(old_list) + assert old_list == new_list + assert type(old_list) is type(new_list) + + +def test_filter_list_recurse(): + """ + Test filtering a list with recursing. + This will filter out any items which are falsey, or which become falsey + after filtering their contents (in case they are lists or dicts). + """ + old_list = [ + "foo", + ["foo"], + ["foo", None], + {"foo": 0}, + {"foo": "bar", "baz": []}, + [{"foo": ""}], + ] + new_list = salt.utils.data.filter_falsey(old_list, recurse_depth=3) + expect_list = ["foo", ["foo"], ["foo"], {"foo": "bar"}] + assert expect_list == new_list + assert type(expect_list) is type(new_list) + + +def test_filter_set_no_recurse(): + """ + Test filtering a set without recursing. + Note that a set cannot contain unhashable types, so recursion is not possible. + """ + old_set = {"foo", None, 0, ""} + new_set = salt.utils.data.filter_falsey(old_set) + expect_set = {"foo"} + assert expect_set == new_set + assert type(expect_set) is type(new_set) + + +def test_filter_ordereddict_no_recurse(): + """ + Test filtering an SaltOrderedDict without recursing. + """ + old_dict = SaltOrderedDict( + [ + ("foo", None), + ( + "bar", + SaltOrderedDict( + [ + ( + "baz", + SaltOrderedDict([("qux", None), ("quux", ""), ("foo", [])]), + ) + ] + ), + ), + ("baz", ["qux"]), + ("qux", {}), + ("quux", []), + ] + ) + new_dict = salt.utils.data.filter_falsey(old_dict) + expect_dict = SaltOrderedDict( + [ + ( + "bar", + SaltOrderedDict( + [ + ( + "baz", + SaltOrderedDict([("qux", None), ("quux", ""), ("foo", [])]), + ) + ] + ), + ), + ("baz", ["qux"]), + ] + ) + assert expect_dict == new_dict + assert type(expect_dict) is type(new_dict) + + +def test_filter_ordereddict_recurse(): + """ + Test filtering an SaltOrderedDict with recursing. + """ + old_dict = SaltOrderedDict( + [ + ("foo", None), + ( + "bar", + SaltOrderedDict( + [ + ( + "baz", + SaltOrderedDict([("qux", None), ("quux", ""), ("foo", [])]), + ) + ] + ), + ), + ("baz", ["qux"]), + ("qux", {}), + ("quux", []), + ] + ) + new_dict = salt.utils.data.filter_falsey(old_dict, recurse_depth=3) + expect_dict = SaltOrderedDict([("baz", ["qux"])]) + assert expect_dict == new_dict + assert type(expect_dict) is type(new_dict) + + +def test_filter_list_recurse_limit(): + """ + Test filtering a list with recursing, but with a limited depth. + Note that the top-level is always processed, so a recursion depth of 2 + means that two *additional* levels are processed. + """ + old_list = [None, [None, [None, [None]]]] + new_list = salt.utils.data.filter_falsey(old_list, recurse_depth=2) + assert [[[[None]]]] == new_list + + +def test_filter_dict_recurse_limit(): + """ + Test filtering a dict with recursing, but with a limited depth. + Note that the top-level is always processed, so a recursion depth of 2 + means that two *additional* levels are processed. + """ + old_dict = { + "one": None, + "foo": {"two": None, "bar": {"three": None, "baz": {"four": None}}}, + } + new_dict = salt.utils.data.filter_falsey(old_dict, recurse_depth=2) + assert {"foo": {"bar": {"baz": {"four": None}}}} == new_dict + + +def test_filter_exclude_types(): + """ + Test filtering a list recursively, but also ignoring (i.e. not filtering) + out certain types that can be falsey. + """ + # Ignore int, unicode + old_list = [ + "foo", + ["foo"], + ["foo", None], + {"foo": 0}, + {"foo": "bar", "baz": []}, + [{"foo": ""}], + ] + new_list = salt.utils.data.filter_falsey( + old_list, recurse_depth=3, ignore_types=[int, str] + ) + assert [ + "foo", + ["foo"], + ["foo"], + {"foo": 0}, + {"foo": "bar"}, + [{"foo": ""}], + ] == new_list + # Ignore list + old_list = [ + "foo", + ["foo"], + ["foo", None], + {"foo": 0}, + {"foo": "bar", "baz": []}, + [{"foo": ""}], + ] + new_list = salt.utils.data.filter_falsey( + old_list, recurse_depth=3, ignore_types=[type([])] + ) + assert ["foo", ["foo"], ["foo"], {"foo": "bar", "baz": []}, []] == new_list + # Ignore dict + old_list = [ + "foo", + ["foo"], + ["foo", None], + {"foo": 0}, + {"foo": "bar", "baz": []}, + [{"foo": ""}], + ] + new_list = salt.utils.data.filter_falsey( + old_list, recurse_depth=3, ignore_types=[type({})] + ) + assert ["foo", ["foo"], ["foo"], {}, {"foo": "bar"}, [{}]] == new_list + # Ignore NoneType + old_list = [ + "foo", + ["foo"], + ["foo", None], + {"foo": 0}, + {"foo": "bar", "baz": []}, + [{"foo": ""}], + ] + new_list = salt.utils.data.filter_falsey( + old_list, recurse_depth=3, ignore_types=[type(None)] + ) + assert ["foo", ["foo"], ["foo", None], {"foo": "bar"}] == new_list + + +def test_list_equality(): + """ + Test cases where equal lists are compared. + """ + test_list = [0, 1, 2] + assert {} == salt.utils.data.recursive_diff(test_list, test_list) + + test_list = [[0], [1], [0, 1, 2]] + assert {} == salt.utils.data.recursive_diff(test_list, test_list) + + +def test_dict_equality(): + """ + Test cases where equal dicts are compared. + """ + test_dict = {"foo": "bar", "bar": {"baz": {"qux": "quux"}}, "frop": 0} + assert {} == salt.utils.data.recursive_diff(test_dict, test_dict) + + +def test_ordereddict_equality(): + """ + Test cases where equal SaltOrderedDicts are compared. + """ + test_dict = SaltOrderedDict( + [ + ("foo", "bar"), + ("bar", SaltOrderedDict([("baz", SaltOrderedDict([("qux", "quux")]))])), + ("frop", 0), + ] + ) + assert {} == salt.utils.data.recursive_diff(test_dict, test_dict) + + +def test_mixed_equality(): + """ + Test cases where mixed nested lists and dicts are compared. + """ + test_data = { + "foo": "bar", + "baz": [0, 1, 2], + "bar": {"baz": [{"qux": "quux"}, {"froop", 0}]}, + } + assert {} == salt.utils.data.recursive_diff(test_data, test_data) + + +def test_set_equality(): + """ + Test cases where equal sets are compared. + """ + test_set = {0, 1, 2, 3, "foo"} + assert {} == salt.utils.data.recursive_diff(test_set, test_set) + + # This is a bit of an oddity, as python seems to sort the sets in memory + # so both sets end up with the same ordering (0..3). + set_one = {0, 1, 2, 3} + set_two = {3, 2, 1, 0} + assert {} == salt.utils.data.recursive_diff(set_one, set_two) + + +def test_tuple_equality(): + """ + Test cases where equal tuples are compared. + """ + test_tuple = (0, 1, 2, 3, "foo") + assert {} == salt.utils.data.recursive_diff(test_tuple, test_tuple) + + +def test_list_inequality(): + """ + Test cases where two inequal lists are compared. + """ + list_one = [0, 1, 2] + list_two = ["foo", "bar", "baz"] + expected_result = {"old": list_one, "new": list_two} + assert expected_result == salt.utils.data.recursive_diff(list_one, list_two) + expected_result = {"new": list_one, "old": list_two} + assert expected_result == salt.utils.data.recursive_diff(list_two, list_one) + + list_one = [0, "foo", 1, "bar"] + list_two = [1, "foo", 1, "qux"] + expected_result = {"old": [0, "bar"], "new": [1, "qux"]} + assert expected_result == salt.utils.data.recursive_diff(list_one, list_two) + expected_result = {"new": [0, "bar"], "old": [1, "qux"]} + assert expected_result == salt.utils.data.recursive_diff(list_two, list_one) + + list_one = [0, 1, [2, 3]] + list_two = [0, 1, ["foo", "bar"]] + expected_result = {"old": [[2, 3]], "new": [["foo", "bar"]]} + assert expected_result == salt.utils.data.recursive_diff(list_one, list_two) + expected_result = {"new": [[2, 3]], "old": [["foo", "bar"]]} + assert expected_result == salt.utils.data.recursive_diff(list_two, list_one) + + +def test_dict_inequality(): + """ + Test cases where two inequal dicts are compared. + """ + dict_one = {"foo": 1, "bar": 2, "baz": 3} + dict_two = {"foo": 2, 1: "bar", "baz": 3} + expected_result = {"old": {"foo": 1, "bar": 2}, "new": {"foo": 2, 1: "bar"}} + assert expected_result == salt.utils.data.recursive_diff(dict_one, dict_two) + expected_result = {"new": {"foo": 1, "bar": 2}, "old": {"foo": 2, 1: "bar"}} + assert expected_result == salt.utils.data.recursive_diff(dict_two, dict_one) + + dict_one = {"foo": {"bar": {"baz": 1}}} + dict_two = {"foo": {"qux": {"baz": 1}}} + expected_result = {"old": dict_one, "new": dict_two} + assert expected_result == salt.utils.data.recursive_diff(dict_one, dict_two) + expected_result = {"new": dict_one, "old": dict_two} + assert expected_result == salt.utils.data.recursive_diff(dict_two, dict_one) + + +def test_ordereddict_inequality(): + """ + Test cases where two inequal SaltOrderedDicts are compared. + """ + odict_one = SaltOrderedDict([("foo", "bar"), ("bar", "baz")]) + odict_two = SaltOrderedDict([("bar", "baz"), ("foo", "bar")]) + expected_result = {"old": odict_one, "new": odict_two} + assert expected_result == salt.utils.data.recursive_diff(odict_one, odict_two) + + +def test_set_inequality(): + """ + Test cases where two inequal sets are compared. + Tricky as the sets are compared zipped, so shuffled sets of equal values + are considered different. + """ + set_one = {0, 1, 2, 4} + set_two = {0, 1, 3, 4} + expected_result = {"old": {2}, "new": {3}} + assert expected_result == salt.utils.data.recursive_diff(set_one, set_two) + expected_result = {"new": {2}, "old": {3}} + assert expected_result == salt.utils.data.recursive_diff(set_two, set_one) + + # It is unknown how different python versions will store sets in memory. + # Python 2.7 seems to sort it (i.e. set_one below becomes {0, 1, 'foo', 'bar'} + # However Python 3.6.8 stores it differently each run. + # So just test for "not equal" here. + set_one = {0, "foo", 1, "bar"} + set_two = {"foo", 1, "bar", 2} + expected_result = {} + assert expected_result != salt.utils.data.recursive_diff(set_one, set_two) + + +def test_mixed_inequality(): + """ + Test cases where two mixed dicts/iterables that are different are compared. + """ + dict_one = {"foo": [1, 2, 3]} + dict_two = {"foo": [3, 2, 1]} + expected_result = {"old": {"foo": [1, 3]}, "new": {"foo": [3, 1]}} + assert expected_result == salt.utils.data.recursive_diff(dict_one, dict_two) + expected_result = {"new": {"foo": [1, 3]}, "old": {"foo": [3, 1]}} + assert expected_result == salt.utils.data.recursive_diff(dict_two, dict_one) + + list_one = [1, 2, {"foo": ["bar", {"foo": 1, "bar": 2}]}] + list_two = [3, 4, {"foo": ["qux", {"foo": 1, "bar": 2}]}] + expected_result = { + "old": [1, 2, {"foo": ["bar"]}], + "new": [3, 4, {"foo": ["qux"]}], + } + assert expected_result == salt.utils.data.recursive_diff(list_one, list_two) + expected_result = { + "new": [1, 2, {"foo": ["bar"]}], + "old": [3, 4, {"foo": ["qux"]}], + } + assert expected_result == salt.utils.data.recursive_diff(list_two, list_one) + + mixed_one = {"foo": {0, 1, 2}, "bar": [0, 1, 2]} + mixed_two = {"foo": {1, 2, 3}, "bar": [1, 2, 3]} + expected_result = { + "old": {"foo": {0}, "bar": [0, 1, 2]}, + "new": {"foo": {3}, "bar": [1, 2, 3]}, + } + assert expected_result == salt.utils.data.recursive_diff(mixed_one, mixed_two) + expected_result = { + "new": {"foo": {0}, "bar": [0, 1, 2]}, + "old": {"foo": {3}, "bar": [1, 2, 3]}, + } + assert expected_result == salt.utils.data.recursive_diff(mixed_two, mixed_one) + + +def test_tuple_inequality(): + """ + Test cases where two tuples that are different are compared. + """ + tuple_one = (1, 2, 3) + tuple_two = (3, 2, 1) + expected_result = {"old": (1, 3), "new": (3, 1)} + assert expected_result == salt.utils.data.recursive_diff(tuple_one, tuple_two) + + +def test_list_vs_set(): + """ + Test case comparing a list with a set, will be compared unordered. + """ + mixed_one = [1, 2, 3] + mixed_two = {3, 2, 1} + expected_result = {} + assert expected_result == salt.utils.data.recursive_diff(mixed_one, mixed_two) + assert expected_result == salt.utils.data.recursive_diff(mixed_two, mixed_one) + + +def test_dict_vs_ordereddict(): + """ + Test case comparing a dict with an ordereddict, will be compared unordered. + """ + test_dict = {"foo": "bar", "bar": "baz"} + test_odict = SaltOrderedDict([("foo", "bar"), ("bar", "baz")]) + assert {} == salt.utils.data.recursive_diff(test_dict, test_odict) + assert {} == salt.utils.data.recursive_diff(test_odict, test_dict) + + test_odict2 = SaltOrderedDict([("bar", "baz"), ("foo", "bar")]) + assert {} == salt.utils.data.recursive_diff(test_dict, test_odict2) + assert {} == salt.utils.data.recursive_diff(test_odict2, test_dict) + + +def test_list_ignore_ignored(): + """ + Test case comparing two lists with ignore-list supplied (which is not used + when comparing lists). + """ + list_one = [1, 2, 3] + list_two = [3, 2, 1] + expected_result = {"old": [1, 3], "new": [3, 1]} + assert expected_result == salt.utils.data.recursive_diff( + list_one, list_two, ignore_keys=[1, 3] + ) + + +def test_dict_ignore(): + """ + Test case comparing two dicts with ignore-list supplied. + """ + dict_one = {"foo": 1, "bar": 2, "baz": 3} + dict_two = {"foo": 3, "bar": 2, "baz": 1} + expected_result = {"old": {"baz": 3}, "new": {"baz": 1}} + assert expected_result == salt.utils.data.recursive_diff( + dict_one, dict_two, ignore_keys=["foo"] + ) + + +def test_ordereddict_ignore(): + """ + Test case comparing two SaltOrderedDicts with ignore-list supplied. + """ + odict_one = SaltOrderedDict([("foo", 1), ("bar", 2), ("baz", 3)]) + odict_two = SaltOrderedDict([("baz", 1), ("bar", 2), ("foo", 3)]) + # The key 'foo' will be ignored, which means the key from the other SaltOrderedDict + # will always be considered "different" since SaltOrderedDicts are compared ordered. + expected_result = { + "old": SaltOrderedDict([("baz", 3)]), + "new": SaltOrderedDict([("baz", 1)]), + } + assert expected_result == salt.utils.data.recursive_diff( + odict_one, odict_two, ignore_keys=["foo"] + ) + + +def test_dict_vs_ordereddict_ignore(): + """ + Test case comparing a dict with an SaltOrderedDict with ignore-list supplied. + """ + dict_one = {"foo": 1, "bar": 2, "baz": 3} + odict_two = SaltOrderedDict([("foo", 3), ("bar", 2), ("baz", 1)]) + expected_result = {"old": {"baz": 3}, "new": SaltOrderedDict([("baz", 1)])} + assert expected_result == salt.utils.data.recursive_diff( + dict_one, odict_two, ignore_keys=["foo"] + ) + + +def test_mixed_nested_ignore(): + """ + Test case comparing mixed, nested items with ignore-list supplied. + """ + dict_one = {"foo": [1], "bar": {"foo": 1, "bar": 2}, "baz": 3} + dict_two = {"foo": [2], "bar": {"foo": 3, "bar": 2}, "baz": 1} + expected_result = {"old": {"baz": 3}, "new": {"baz": 1}} + assert expected_result == salt.utils.data.recursive_diff( + dict_one, dict_two, ignore_keys=["foo"] + ) + + +def test_ordered_dict_unequal_length(): + """ + Test case comparing two SaltOrderedDicts of unequal length. + """ + odict_one = SaltOrderedDict([("foo", 1), ("bar", 2), ("baz", 3)]) + odict_two = SaltOrderedDict([("foo", 1), ("bar", 2)]) + expected_result = {"old": SaltOrderedDict([("baz", 3)]), "new": {}} + assert expected_result == salt.utils.data.recursive_diff(odict_one, odict_two) + + +def test_list_unequal_length(): + """ + Test case comparing two lists of unequal length. + """ + list_one = [1, 2, 3] + list_two = [1, 2, 3, 4] + expected_result = {"old": [], "new": [4]} + assert expected_result == salt.utils.data.recursive_diff(list_one, list_two) + + +def test_set_unequal_length(): + """ + Test case comparing two sets of unequal length. + This does not do anything special, as it is unordered. + """ + set_one = {1, 2, 3} + set_two = {4, 3, 2, 1} + expected_result = {"old": set(), "new": {4}} + assert expected_result == salt.utils.data.recursive_diff(set_one, set_two) + + +def test_tuple_unequal_length(): + """ + Test case comparing two tuples of unequal length. + This should be the same as comparing two ordered lists. + """ + tuple_one = (1, 2, 3) + tuple_two = (1, 2, 3, 4) + expected_result = {"old": (), "new": (4,)} + assert expected_result == salt.utils.data.recursive_diff(tuple_one, tuple_two) + + +def test_list_unordered(): + """ + Test case comparing two lists unordered. + """ + list_one = [1, 2, 3, 4] + list_two = [4, 3, 2] + expected_result = {"old": [1], "new": []} + assert expected_result == salt.utils.data.recursive_diff( + list_one, list_two, ignore_order=True + ) + + +def test_mixed_nested_unordered(): + """ + Test case comparing nested dicts/lists unordered. + """ + dict_one = {"foo": {"bar": [1, 2, 3]}, "bar": [{"foo": 4}, 0]} + dict_two = {"foo": {"bar": [3, 2, 1]}, "bar": [0, {"foo": 4}]} + expected_result = {} + assert expected_result == salt.utils.data.recursive_diff( + dict_one, dict_two, ignore_order=True + ) + expected_result = { + "old": {"foo": {"bar": [1, 3]}, "bar": [{"foo": 4}, 0]}, + "new": {"foo": {"bar": [3, 1]}, "bar": [0, {"foo": 4}]}, + } + assert expected_result == salt.utils.data.recursive_diff(dict_one, dict_two) + + +def test_ordered_dict_unordered(): + """ + Test case comparing SaltOrderedDicts unordered. + """ + odict_one = SaltOrderedDict([("foo", 1), ("bar", 2), ("baz", 3)]) + odict_two = SaltOrderedDict([("baz", 3), ("bar", 2), ("foo", 1)]) + expected_result = {} + assert expected_result == salt.utils.data.recursive_diff( + odict_one, odict_two, ignore_order=True + ) + + +def test_ignore_missing_keys_dict(): + """ + Test case ignoring missing keys on a comparison of dicts. + """ + dict_one = {"foo": 1, "bar": 2, "baz": 3} + dict_two = {"bar": 3} + expected_result = {"old": {"bar": 2}, "new": {"bar": 3}} + assert expected_result == salt.utils.data.recursive_diff( + dict_one, dict_two, ignore_missing_keys=True + ) + + +def test_ignore_missing_keys_ordered_dict(): + """ + Test case not ignoring missing keys on a comparison of SaltOrderedDicts. + """ + odict_one = SaltOrderedDict([("foo", 1), ("bar", 2), ("baz", 3)]) + odict_two = SaltOrderedDict([("bar", 3)]) + expected_result = {"old": odict_one, "new": odict_two} + assert expected_result == salt.utils.data.recursive_diff( + odict_one, odict_two, ignore_missing_keys=True + ) + + +def test_ignore_missing_keys_recursive(): + """ + Test case ignoring missing keys on a comparison of nested dicts. + """ + dict_one = {"foo": {"bar": 2, "baz": 3}} + dict_two = {"foo": {"baz": 3}} + expected_result = {} + assert expected_result == salt.utils.data.recursive_diff( + dict_one, dict_two, ignore_missing_keys=True + ) + # Compare from dict-in-dict + dict_two = {} + assert expected_result == salt.utils.data.recursive_diff( + dict_one, dict_two, ignore_missing_keys=True + ) + # Compare from dict-in-list + dict_one = {"foo": ["bar", {"baz": 3}]} + dict_two = {"foo": ["bar", {}]} + assert expected_result == salt.utils.data.recursive_diff( + dict_one, dict_two, ignore_missing_keys=True + ) + + +def test_ordereddict_dict_items(): + """ + Test case for SaltOrderedDicts items. + """ + dict_one = {"foo": 1, "bar": 2, "baz": 3} + expected_items = 'odict_items([("foo", 1), ("bar", 2), ("baz", 3)])' + + odict_one = SaltOrderedDict(dict_one) + myodict = odict_one.items() + log.warning(f"DGM test_ordered_dict_items items '{str(myodict)}'") + ## assert odict_one.items() == expected_items + + myodict = odict_one.keys() + log.warning(f"DGM test_ordered_dict_items keys '{myodict}'") + ## assert odict_one.items() == expected + + myodict = odict_one.values() + log.warning(f"DGM test_ordered_dict_items values '{myodict}'") + ## assert odict_one.items() == expected + + myodict = odict_one.popitem() + log.warning(f"DGM test_ordered_dict_items popitem '{myodict}'") + ## assert odict_one.items() == expected + + odict_one.clear() + myodict = odict_one.popitem() + log.warning(f"DGM test_ordered_dict_items clear '{myodict}'") + ## assert odict_one.items() == expected + + dgm_dir = dir(odict_one) + log.warning(f"DGM test_ordered_dict_items dgm_dir iterkeys '{dgm_dir}'") + + for myodict in odict_one.iterkeys(): + log.warning(f"DGM test_ordered_dict_items iterkeys '{myodict}'") + ## assert odict_one.items() == expected + + for myodict in odict_one.itervalues(): + log.warning(f"DGM test_ordered_dict_items itervalues '{myodict}'") + ## assert odict_one.items() == expected diff --git a/tests/unit/utils/test_data.py b/tests/unit/utils/test_data.py deleted file mode 100644 index 6d16e198999..00000000000 --- a/tests/unit/utils/test_data.py +++ /dev/null @@ -1,1506 +0,0 @@ -""" -Tests for salt.utils.data -""" - -import builtins -import logging - -import salt.utils.data -import salt.utils.stringutils -from salt.utils.odict import OrderedDict -from tests.support.mock import patch -from tests.support.unit import LOREM_IPSUM, TestCase - -log = logging.getLogger(__name__) -_b = lambda x: x.encode("utf-8") -_s = lambda x: salt.utils.stringutils.to_str(x, normalize=True) -# Some randomized data that will not decode -BYTES = b"1\x814\x10" - -# This is an example of a unicode string with й constructed using two separate -# code points. Do not modify it. -EGGS = "\u044f\u0438\u0306\u0446\u0430" - - -class DataTestCase(TestCase): - test_data = [ - "unicode_str", - _b("питон"), - 123, - 456.789, - True, - False, - None, - EGGS, - BYTES, - [123, 456.789, _b("спам"), True, False, None, EGGS, BYTES], - (987, 654.321, _b("яйца"), EGGS, None, (True, EGGS, BYTES)), - { - _b("str_key"): _b("str_val"), - None: True, - 123: 456.789, - EGGS: BYTES, - _b("subdict"): { - "unicode_key": EGGS, - _b("tuple"): (123, "hello", _b("world"), True, EGGS, BYTES), - _b("list"): [456, _b("спам"), False, EGGS, BYTES], - }, - }, - OrderedDict([(_b("foo"), "bar"), (123, 456), (EGGS, BYTES)]), - ] - - def test_sorted_ignorecase(self): - test_list = ["foo", "Foo", "bar", "Bar"] - expected_list = ["bar", "Bar", "foo", "Foo"] - self.assertEqual(salt.utils.data.sorted_ignorecase(test_list), expected_list) - - def test_mysql_to_dict(self): - test_mysql_output = [ - "+----+------+-----------+------+---------+------+-------+------------------+", - "| Id | User | Host | db | Command | Time | State | Info " - " |", - "+----+------+-----------+------+---------+------+-------+------------------+", - "| 7 | root | localhost | NULL | Query | 0 | init | show" - " processlist |", - "+----+------+-----------+------+---------+------+-------+------------------+", - ] - - ret = salt.utils.data.mysql_to_dict(test_mysql_output, "Info") - expected_dict = { - "show processlist": { - "Info": "show processlist", - "db": "NULL", - "State": "init", - "Host": "localhost", - "Command": "Query", - "User": "root", - "Time": 0, - "Id": 7, - } - } - - self.assertDictEqual(ret, expected_dict) - - def test_subdict_match(self): - test_two_level_dict = {"foo": {"bar": "baz"}} - test_two_level_comb_dict = {"foo": {"bar": "baz:woz"}} - test_two_level_dict_and_list = { - "abc": ["def", "ghi", {"lorem": {"ipsum": [{"dolor": "sit"}]}}], - } - test_three_level_dict = {"a": {"b": {"c": "v"}}} - - self.assertTrue( - salt.utils.data.subdict_match(test_two_level_dict, "foo:bar:baz") - ) - # In test_two_level_comb_dict, 'foo:bar' corresponds to 'baz:woz', not - # 'baz'. This match should return False. - self.assertFalse( - salt.utils.data.subdict_match(test_two_level_comb_dict, "foo:bar:baz") - ) - # This tests matching with the delimiter in the value part (in other - # words, that the path 'foo:bar' corresponds to the string 'baz:woz'). - self.assertTrue( - salt.utils.data.subdict_match(test_two_level_comb_dict, "foo:bar:baz:woz") - ) - # This would match if test_two_level_comb_dict['foo']['bar'] was equal - # to 'baz:woz:wiz', or if there was more deep nesting. But it does not, - # so this should return False. - self.assertFalse( - salt.utils.data.subdict_match( - test_two_level_comb_dict, "foo:bar:baz:woz:wiz" - ) - ) - # This tests for cases when a key path corresponds to a list. The - # value part 'ghi' should be successfully matched as it is a member of - # the list corresponding to key path 'abc'. It is somewhat a - # duplication of a test within test_traverse_dict_and_list, but - # salt.utils.data.subdict_match() does more than just invoke - # salt.utils.traverse_list_and_dict() so this particular assertion is a - # sanity check. - self.assertTrue( - salt.utils.data.subdict_match(test_two_level_dict_and_list, "abc:ghi") - ) - # This tests the use case of a dict embedded in a list, embedded in a - # list, embedded in a dict. This is a rather absurd case, but it - # confirms that match recursion works properly. - self.assertTrue( - salt.utils.data.subdict_match( - test_two_level_dict_and_list, "abc:lorem:ipsum:dolor:sit" - ) - ) - # Test four level dict match for reference - self.assertTrue(salt.utils.data.subdict_match(test_three_level_dict, "a:b:c:v")) - # Test regression in 2015.8 where 'a:c:v' would match 'a:b:c:v' - self.assertFalse(salt.utils.data.subdict_match(test_three_level_dict, "a:c:v")) - # Test wildcard match - self.assertTrue(salt.utils.data.subdict_match(test_three_level_dict, "a:*:c:v")) - - def test_subdict_match_with_wildcards(self): - """ - Tests subdict matching when wildcards are used in the expression - """ - data = {"a": {"b": {"ç": "d", "é": ["eff", "gee", "8ch"], "ĩ": {"j": "k"}}}} - assert salt.utils.data.subdict_match(data, "*:*:*:*") - assert salt.utils.data.subdict_match(data, "a:*:*:*") - assert salt.utils.data.subdict_match(data, "a:b:*:*") - assert salt.utils.data.subdict_match(data, "a:b:ç:*") - assert salt.utils.data.subdict_match(data, "a:b:*:d") - assert salt.utils.data.subdict_match(data, "a:*:ç:d") - assert salt.utils.data.subdict_match(data, "*:b:ç:d") - assert salt.utils.data.subdict_match(data, "*:*:ç:d") - assert salt.utils.data.subdict_match(data, "*:*:*:d") - assert salt.utils.data.subdict_match(data, "a:*:*:d") - assert salt.utils.data.subdict_match(data, "a:b:*:ef*") - assert salt.utils.data.subdict_match(data, "a:b:*:g*") - assert salt.utils.data.subdict_match(data, "a:b:*:j:*") - assert salt.utils.data.subdict_match(data, "a:b:*:j:k") - assert salt.utils.data.subdict_match(data, "a:b:*:*:k") - assert salt.utils.data.subdict_match(data, "a:b:*:*:*") - - def test_traverse_dict(self): - test_two_level_dict = {"foo": {"bar": "baz"}} - - self.assertDictEqual( - {"not_found": "nope"}, - salt.utils.data.traverse_dict( - test_two_level_dict, "foo:bar:baz", {"not_found": "nope"} - ), - ) - self.assertEqual( - "baz", - salt.utils.data.traverse_dict( - test_two_level_dict, "foo:bar", {"not_found": "not_found"} - ), - ) - - def test_traverse_dict_and_list(self): - test_two_level_dict = {"foo": {"bar": "baz"}} - test_two_level_dict_and_list = { - "foo": ["bar", "baz", {"lorem": {"ipsum": [{"dolor": "sit"}]}}] - } - - # Check traversing too far: salt.utils.data.traverse_dict_and_list() returns - # the value corresponding to a given key path, and baz is a value - # corresponding to the key path foo:bar. - self.assertDictEqual( - {"not_found": "nope"}, - salt.utils.data.traverse_dict_and_list( - test_two_level_dict, "foo:bar:baz", {"not_found": "nope"} - ), - ) - # Now check to ensure that foo:bar corresponds to baz - self.assertEqual( - "baz", - salt.utils.data.traverse_dict_and_list( - test_two_level_dict, "foo:bar", {"not_found": "not_found"} - ), - ) - # Check traversing too far - self.assertDictEqual( - {"not_found": "nope"}, - salt.utils.data.traverse_dict_and_list( - test_two_level_dict_and_list, "foo:bar", {"not_found": "nope"} - ), - ) - # Check index 1 (2nd element) of list corresponding to path 'foo' - self.assertEqual( - "baz", - salt.utils.data.traverse_dict_and_list( - test_two_level_dict_and_list, "foo:1", {"not_found": "not_found"} - ), - ) - # Traverse a couple times into dicts embedded in lists - self.assertEqual( - "sit", - salt.utils.data.traverse_dict_and_list( - test_two_level_dict_and_list, - "foo:lorem:ipsum:dolor", - {"not_found": "not_found"}, - ), - ) - - # Traverse and match integer key in a nested dict - # https://github.com/saltstack/salt/issues/56444 - self.assertEqual( - "it worked", - salt.utils.data.traverse_dict_and_list( - {"foo": {1234: "it worked"}}, - "foo:1234", - "it didn't work", - ), - ) - # Make sure that we properly return the default value when the initial - # attempt fails and YAML-loading the target key doesn't change its - # value. - self.assertEqual( - "default", - salt.utils.data.traverse_dict_and_list( - {"foo": {"baz": "didn't work"}}, - "foo:bar", - "default", - ), - ) - - def test_issue_39709(self): - test_two_level_dict_and_list = { - "foo": ["bar", "baz", {"lorem": {"ipsum": [{"dolor": "sit"}]}}] - } - - self.assertEqual( - "sit", - salt.utils.data.traverse_dict_and_list( - test_two_level_dict_and_list, - ["foo", "lorem", "ipsum", "dolor"], - {"not_found": "not_found"}, - ), - ) - - def test_compare_dicts(self): - ret = salt.utils.data.compare_dicts(old={"foo": "bar"}, new={"foo": "bar"}) - self.assertEqual(ret, {}) - - ret = salt.utils.data.compare_dicts(old={"foo": "bar"}, new={"foo": "woz"}) - expected_ret = {"foo": {"new": "woz", "old": "bar"}} - self.assertDictEqual(ret, expected_ret) - - def test_compare_lists_no_change(self): - ret = salt.utils.data.compare_lists( - old=[1, 2, 3, "a", "b", "c"], new=[1, 2, 3, "a", "b", "c"] - ) - expected = {} - self.assertDictEqual(ret, expected) - - def test_compare_lists_changes(self): - ret = salt.utils.data.compare_lists( - old=[1, 2, 3, "a", "b", "c"], new=[1, 2, 4, "x", "y", "z"] - ) - expected = {"new": [4, "x", "y", "z"], "old": [3, "a", "b", "c"]} - self.assertDictEqual(ret, expected) - - def test_compare_lists_changes_new(self): - ret = salt.utils.data.compare_lists(old=[1, 2, 3], new=[1, 2, 3, "x", "y", "z"]) - expected = {"new": ["x", "y", "z"]} - self.assertDictEqual(ret, expected) - - def test_compare_lists_changes_old(self): - ret = salt.utils.data.compare_lists(old=[1, 2, 3, "a", "b", "c"], new=[1, 2, 3]) - expected = {"old": ["a", "b", "c"]} - self.assertDictEqual(ret, expected) - - def test_decode(self): - """ - Companion to test_decode_to_str, they should both be kept up-to-date - with one another. - - NOTE: This uses the lambda "_b" defined above in the global scope, - which encodes a string to a bytestring, assuming utf-8. - """ - expected = [ - "unicode_str", - "питон", - 123, - 456.789, - True, - False, - None, - "яйца", - BYTES, - [123, 456.789, "спам", True, False, None, "яйца", BYTES], - (987, 654.321, "яйца", "яйца", None, (True, "яйца", BYTES)), - { - "str_key": "str_val", - None: True, - 123: 456.789, - "яйца": BYTES, - "subdict": { - "unicode_key": "яйца", - "tuple": (123, "hello", "world", True, "яйца", BYTES), - "list": [456, "спам", False, "яйца", BYTES], - }, - }, - OrderedDict([("foo", "bar"), (123, 456), ("яйца", BYTES)]), - ] - - ret = salt.utils.data.decode( - self.test_data, - keep=True, - normalize=True, - preserve_dict_class=True, - preserve_tuples=True, - ) - self.assertEqual(ret, expected) - - # The binary data in the data structure should fail to decode, even - # using the fallback, and raise an exception. - self.assertRaises( - UnicodeDecodeError, - salt.utils.data.decode, - self.test_data, - keep=False, - normalize=True, - preserve_dict_class=True, - preserve_tuples=True, - ) - - # Now munge the expected data so that we get what we would expect if we - # disable preservation of dict class and tuples - expected[10] = [987, 654.321, "яйца", "яйца", None, [True, "яйца", BYTES]] - expected[11]["subdict"]["tuple"] = [123, "hello", "world", True, "яйца", BYTES] - expected[12] = {"foo": "bar", 123: 456, "яйца": BYTES} - - ret = salt.utils.data.decode( - self.test_data, - keep=True, - normalize=True, - preserve_dict_class=False, - preserve_tuples=False, - ) - self.assertEqual(ret, expected) - - # Now test single non-string, non-data-structure items, these should - # return the same value when passed to this function - for item in (123, 4.56, True, False, None): - log.debug("Testing decode of %s", item) - self.assertEqual(salt.utils.data.decode(item), item) - - # Test single strings (not in a data structure) - self.assertEqual(salt.utils.data.decode("foo"), "foo") - self.assertEqual(salt.utils.data.decode(_b("bar")), "bar") - self.assertEqual(salt.utils.data.decode(EGGS, normalize=True), "яйца") - self.assertEqual(salt.utils.data.decode(EGGS, normalize=False), EGGS) - - # Test binary blob - self.assertEqual(salt.utils.data.decode(BYTES, keep=True), BYTES) - self.assertRaises(UnicodeDecodeError, salt.utils.data.decode, BYTES, keep=False) - - def test_circular_refs_dicts(self): - test_dict = {"key": "value", "type": "test1"} - test_dict["self"] = test_dict - ret = salt.utils.data._remove_circular_refs(ob=test_dict) - self.assertDictEqual(ret, {"key": "value", "type": "test1", "self": None}) - - def test_circular_refs_lists(self): - test_list = { - "foo": [], - } - test_list["foo"].append((test_list,)) - ret = salt.utils.data._remove_circular_refs(ob=test_list) - self.assertDictEqual(ret, {"foo": [(None,)]}) - - def test_circular_refs_tuple(self): - test_dup = {"foo": "string 1", "bar": "string 1", "ham": 1, "spam": 1} - ret = salt.utils.data._remove_circular_refs(ob=test_dup) - self.assertDictEqual( - ret, {"foo": "string 1", "bar": "string 1", "ham": 1, "spam": 1} - ) - - def test_decode_to_str(self): - """ - Companion to test_decode, they should both be kept up-to-date with one - another. - - NOTE: This uses the lambda "_s" defined above in the global scope, - which converts the string/bytestring to a str type. - """ - expected = [ - _s("unicode_str"), - _s("питон"), - 123, - 456.789, - True, - False, - None, - _s("яйца"), - BYTES, - [123, 456.789, _s("спам"), True, False, None, _s("яйца"), BYTES], - (987, 654.321, _s("яйца"), _s("яйца"), None, (True, _s("яйца"), BYTES)), - { - _s("str_key"): _s("str_val"), - None: True, - 123: 456.789, - _s("яйца"): BYTES, - _s("subdict"): { - _s("unicode_key"): _s("яйца"), - _s("tuple"): ( - 123, - _s("hello"), - _s("world"), - True, - _s("яйца"), - BYTES, - ), - _s("list"): [456, _s("спам"), False, _s("яйца"), BYTES], - }, - }, - OrderedDict([(_s("foo"), _s("bar")), (123, 456), (_s("яйца"), BYTES)]), - ] - - ret = salt.utils.data.decode( - self.test_data, - keep=True, - normalize=True, - preserve_dict_class=True, - preserve_tuples=True, - to_str=True, - ) - self.assertEqual(ret, expected) - - # The binary data in the data structure should fail to decode, even - # using the fallback, and raise an exception. - self.assertRaises( - UnicodeDecodeError, - salt.utils.data.decode, - self.test_data, - keep=False, - normalize=True, - preserve_dict_class=True, - preserve_tuples=True, - to_str=True, - ) - - # Now munge the expected data so that we get what we would expect if we - # disable preservation of dict class and tuples - expected[10] = [ - 987, - 654.321, - _s("яйца"), - _s("яйца"), - None, - [True, _s("яйца"), BYTES], - ] - expected[11][_s("subdict")][_s("tuple")] = [ - 123, - _s("hello"), - _s("world"), - True, - _s("яйца"), - BYTES, - ] - expected[12] = {_s("foo"): _s("bar"), 123: 456, _s("яйца"): BYTES} - - ret = salt.utils.data.decode( - self.test_data, - keep=True, - normalize=True, - preserve_dict_class=False, - preserve_tuples=False, - to_str=True, - ) - self.assertEqual(ret, expected) - - # Now test single non-string, non-data-structure items, these should - # return the same value when passed to this function - for item in (123, 4.56, True, False, None): - log.debug("Testing decode of %s", item) - self.assertEqual(salt.utils.data.decode(item, to_str=True), item) - - # Test single strings (not in a data structure) - self.assertEqual(salt.utils.data.decode("foo", to_str=True), _s("foo")) - self.assertEqual(salt.utils.data.decode(_b("bar"), to_str=True), _s("bar")) - - # Test binary blob - self.assertEqual(salt.utils.data.decode(BYTES, keep=True, to_str=True), BYTES) - self.assertRaises( - UnicodeDecodeError, - salt.utils.data.decode, - BYTES, - keep=False, - to_str=True, - ) - - def test_decode_fallback(self): - """ - Test fallback to utf-8 - """ - with patch.object(builtins, "__salt_system_encoding__", "ascii"): - self.assertEqual(salt.utils.data.decode(_b("яйца")), "яйца") - - def test_encode(self): - """ - NOTE: This uses the lambda "_b" defined above in the global scope, - which encodes a string to a bytestring, assuming utf-8. - """ - expected = [ - _b("unicode_str"), - _b("питон"), - 123, - 456.789, - True, - False, - None, - _b(EGGS), - BYTES, - [123, 456.789, _b("спам"), True, False, None, _b(EGGS), BYTES], - (987, 654.321, _b("яйца"), _b(EGGS), None, (True, _b(EGGS), BYTES)), - { - _b("str_key"): _b("str_val"), - None: True, - 123: 456.789, - _b(EGGS): BYTES, - _b("subdict"): { - _b("unicode_key"): _b(EGGS), - _b("tuple"): (123, _b("hello"), _b("world"), True, _b(EGGS), BYTES), - _b("list"): [456, _b("спам"), False, _b(EGGS), BYTES], - }, - }, - OrderedDict([(_b("foo"), _b("bar")), (123, 456), (_b(EGGS), BYTES)]), - ] - - # Both keep=True and keep=False should work because the BYTES data is - # already bytes. - ret = salt.utils.data.encode( - self.test_data, keep=True, preserve_dict_class=True, preserve_tuples=True - ) - self.assertEqual(ret, expected) - ret = salt.utils.data.encode( - self.test_data, keep=False, preserve_dict_class=True, preserve_tuples=True - ) - self.assertEqual(ret, expected) - - # Now munge the expected data so that we get what we would expect if we - # disable preservation of dict class and tuples - expected[10] = [ - 987, - 654.321, - _b("яйца"), - _b(EGGS), - None, - [True, _b(EGGS), BYTES], - ] - expected[11][_b("subdict")][_b("tuple")] = [ - 123, - _b("hello"), - _b("world"), - True, - _b(EGGS), - BYTES, - ] - expected[12] = {_b("foo"): _b("bar"), 123: 456, _b(EGGS): BYTES} - - ret = salt.utils.data.encode( - self.test_data, keep=True, preserve_dict_class=False, preserve_tuples=False - ) - self.assertEqual(ret, expected) - ret = salt.utils.data.encode( - self.test_data, keep=False, preserve_dict_class=False, preserve_tuples=False - ) - self.assertEqual(ret, expected) - - # Now test single non-string, non-data-structure items, these should - # return the same value when passed to this function - for item in (123, 4.56, True, False, None): - log.debug("Testing encode of %s", item) - self.assertEqual(salt.utils.data.encode(item), item) - - # Test single strings (not in a data structure) - self.assertEqual(salt.utils.data.encode("foo"), _b("foo")) - self.assertEqual(salt.utils.data.encode(_b("bar")), _b("bar")) - - # Test binary blob, nothing should happen even when keep=False since - # the data is already bytes - self.assertEqual(salt.utils.data.encode(BYTES, keep=True), BYTES) - self.assertEqual(salt.utils.data.encode(BYTES, keep=False), BYTES) - - def test_encode_keep(self): - """ - Whereas we tested the keep argument in test_decode, it is much easier - to do a more comprehensive test of keep in its own function where we - can force the encoding. - """ - unicode_str = "питон" - encoding = "ascii" - - # Test single string - self.assertEqual( - salt.utils.data.encode(unicode_str, encoding, keep=True), unicode_str - ) - self.assertRaises( - UnicodeEncodeError, - salt.utils.data.encode, - unicode_str, - encoding, - keep=False, - ) - - data = [ - unicode_str, - [b"foo", [unicode_str], {b"key": unicode_str}, (unicode_str,)], - { - b"list": [b"foo", unicode_str], - b"dict": {b"key": unicode_str}, - b"tuple": (b"foo", unicode_str), - }, - ([b"foo", unicode_str], {b"key": unicode_str}, (unicode_str,)), - ] - - # Since everything was a bytestring aside from the bogus data, the - # return data should be identical. We don't need to test recursive - # decoding, that has already been tested in test_encode. - self.assertEqual( - salt.utils.data.encode(data, encoding, keep=True, preserve_tuples=True), - data, - ) - self.assertRaises( - UnicodeEncodeError, - salt.utils.data.encode, - data, - encoding, - keep=False, - preserve_tuples=True, - ) - - for index, _ in enumerate(data): - self.assertEqual( - salt.utils.data.encode( - data[index], encoding, keep=True, preserve_tuples=True - ), - data[index], - ) - self.assertRaises( - UnicodeEncodeError, - salt.utils.data.encode, - data[index], - encoding, - keep=False, - preserve_tuples=True, - ) - - def test_encode_fallback(self): - """ - Test fallback to utf-8 - """ - with patch.object(builtins, "__salt_system_encoding__", "ascii"): - self.assertEqual(salt.utils.data.encode("яйца"), _b("яйца")) - with patch.object(builtins, "__salt_system_encoding__", "CP1252"): - self.assertEqual(salt.utils.data.encode("Ψ"), _b("Ψ")) - - def test_repack_dict(self): - list_of_one_element_dicts = [ - {"dict_key_1": "dict_val_1"}, - {"dict_key_2": "dict_val_2"}, - {"dict_key_3": "dict_val_3"}, - ] - expected_ret = { - "dict_key_1": "dict_val_1", - "dict_key_2": "dict_val_2", - "dict_key_3": "dict_val_3", - } - ret = salt.utils.data.repack_dictlist(list_of_one_element_dicts) - self.assertDictEqual(ret, expected_ret) - - # Try with yaml - yaml_key_val_pair = "- key1: val1" - ret = salt.utils.data.repack_dictlist(yaml_key_val_pair) - self.assertDictEqual(ret, {"key1": "val1"}) - - # Make sure we handle non-yaml junk data - ret = salt.utils.data.repack_dictlist(LOREM_IPSUM) - self.assertDictEqual(ret, {}) - - def test_stringify(self): - self.assertRaises(TypeError, salt.utils.data.stringify, 9) - self.assertEqual( - salt.utils.data.stringify(["one", "two", "three", 4, 5]), - ["one", "two", "three", "4", "5"], - ) - - def test_json_query(self): - # Raises exception if jmespath module is not found - with patch("salt.utils.data.jmespath", None): - self.assertRaisesRegex( - RuntimeError, "requires jmespath", salt.utils.data.json_query, {}, "@" - ) - - # Test search - user_groups = { - "user1": {"groups": ["group1", "group2", "group3"]}, - "user2": {"groups": ["group1", "group2"]}, - "user3": {"groups": ["group3"]}, - } - expression = "*.groups[0]" - primary_groups = ["group1", "group1", "group3"] - self.assertEqual( - sorted(salt.utils.data.json_query(user_groups, expression)), primary_groups - ) - - -class FilterFalseyTestCase(TestCase): - """ - Test suite for salt.utils.data.filter_falsey - """ - - def test_nop(self): - """ - Test cases where nothing will be done. - """ - # Test with dictionary without recursion - old_dict = { - "foo": "bar", - "bar": {"baz": {"qux": "quux"}}, - "baz": ["qux", {"foo": "bar"}], - } - new_dict = salt.utils.data.filter_falsey(old_dict) - self.assertEqual(old_dict, new_dict) - # Check returned type equality - self.assertIs(type(old_dict), type(new_dict)) - # Test dictionary with recursion - new_dict = salt.utils.data.filter_falsey(old_dict, recurse_depth=3) - self.assertEqual(old_dict, new_dict) - # Test with list - old_list = ["foo", "bar"] - new_list = salt.utils.data.filter_falsey(old_list) - self.assertEqual(old_list, new_list) - # Check returned type equality - self.assertIs(type(old_list), type(new_list)) - # Test with set - old_set = {"foo", "bar"} - new_set = salt.utils.data.filter_falsey(old_set) - self.assertEqual(old_set, new_set) - # Check returned type equality - self.assertIs(type(old_set), type(new_set)) - # Test with OrderedDict - old_dict = OrderedDict( - [ - ("foo", "bar"), - ("bar", OrderedDict([("qux", "quux")])), - ("baz", ["qux", OrderedDict([("foo", "bar")])]), - ] - ) - new_dict = salt.utils.data.filter_falsey(old_dict) - self.assertEqual(old_dict, new_dict) - self.assertIs(type(old_dict), type(new_dict)) - # Test excluding int - old_list = [0] - new_list = salt.utils.data.filter_falsey(old_list, ignore_types=[int]) - self.assertEqual(old_list, new_list) - # Test excluding str (or unicode) (or both) - old_list = [""] - new_list = salt.utils.data.filter_falsey(old_list, ignore_types=[str]) - self.assertEqual(old_list, new_list) - # Test excluding list - old_list = [[]] - new_list = salt.utils.data.filter_falsey(old_list, ignore_types=[type([])]) - self.assertEqual(old_list, new_list) - # Test excluding dict - old_list = [{}] - new_list = salt.utils.data.filter_falsey(old_list, ignore_types=[type({})]) - self.assertEqual(old_list, new_list) - - def test_filter_dict_no_recurse(self): - """ - Test filtering a dictionary without recursing. - This will only filter out key-values where the values are falsey. - """ - old_dict = { - "foo": None, - "bar": {"baz": {"qux": None, "quux": "", "foo": []}}, - "baz": ["qux"], - "qux": {}, - "quux": [], - } - new_dict = salt.utils.data.filter_falsey(old_dict) - expect_dict = { - "bar": {"baz": {"qux": None, "quux": "", "foo": []}}, - "baz": ["qux"], - } - self.assertEqual(expect_dict, new_dict) - self.assertIs(type(expect_dict), type(new_dict)) - - def test_filter_dict_recurse(self): - """ - Test filtering a dictionary with recursing. - This will filter out any key-values where the values are falsey or when - the values *become* falsey after filtering their contents (in case they - are lists or dicts). - """ - old_dict = { - "foo": None, - "bar": {"baz": {"qux": None, "quux": "", "foo": []}}, - "baz": ["qux"], - "qux": {}, - "quux": [], - } - new_dict = salt.utils.data.filter_falsey(old_dict, recurse_depth=3) - expect_dict = {"baz": ["qux"]} - self.assertEqual(expect_dict, new_dict) - self.assertIs(type(expect_dict), type(new_dict)) - - def test_filter_list_no_recurse(self): - """ - Test filtering a list without recursing. - This will only filter out items which are falsey. - """ - old_list = ["foo", None, [], {}, 0, ""] - new_list = salt.utils.data.filter_falsey(old_list) - expect_list = ["foo"] - self.assertEqual(expect_list, new_list) - self.assertIs(type(expect_list), type(new_list)) - # Ensure nested values are *not* filtered out. - old_list = [ - "foo", - ["foo"], - ["foo", None], - {"foo": 0}, - {"foo": "bar", "baz": []}, - [{"foo": ""}], - ] - new_list = salt.utils.data.filter_falsey(old_list) - self.assertEqual(old_list, new_list) - self.assertIs(type(old_list), type(new_list)) - - def test_filter_list_recurse(self): - """ - Test filtering a list with recursing. - This will filter out any items which are falsey, or which become falsey - after filtering their contents (in case they are lists or dicts). - """ - old_list = [ - "foo", - ["foo"], - ["foo", None], - {"foo": 0}, - {"foo": "bar", "baz": []}, - [{"foo": ""}], - ] - new_list = salt.utils.data.filter_falsey(old_list, recurse_depth=3) - expect_list = ["foo", ["foo"], ["foo"], {"foo": "bar"}] - self.assertEqual(expect_list, new_list) - self.assertIs(type(expect_list), type(new_list)) - - def test_filter_set_no_recurse(self): - """ - Test filtering a set without recursing. - Note that a set cannot contain unhashable types, so recursion is not possible. - """ - old_set = {"foo", None, 0, ""} - new_set = salt.utils.data.filter_falsey(old_set) - expect_set = {"foo"} - self.assertEqual(expect_set, new_set) - self.assertIs(type(expect_set), type(new_set)) - - def test_filter_ordereddict_no_recurse(self): - """ - Test filtering an OrderedDict without recursing. - """ - old_dict = OrderedDict( - [ - ("foo", None), - ( - "bar", - OrderedDict( - [ - ( - "baz", - OrderedDict([("qux", None), ("quux", ""), ("foo", [])]), - ) - ] - ), - ), - ("baz", ["qux"]), - ("qux", {}), - ("quux", []), - ] - ) - new_dict = salt.utils.data.filter_falsey(old_dict) - expect_dict = OrderedDict( - [ - ( - "bar", - OrderedDict( - [ - ( - "baz", - OrderedDict([("qux", None), ("quux", ""), ("foo", [])]), - ) - ] - ), - ), - ("baz", ["qux"]), - ] - ) - self.assertEqual(expect_dict, new_dict) - self.assertIs(type(expect_dict), type(new_dict)) - - def test_filter_ordereddict_recurse(self): - """ - Test filtering an OrderedDict with recursing. - """ - old_dict = OrderedDict( - [ - ("foo", None), - ( - "bar", - OrderedDict( - [ - ( - "baz", - OrderedDict([("qux", None), ("quux", ""), ("foo", [])]), - ) - ] - ), - ), - ("baz", ["qux"]), - ("qux", {}), - ("quux", []), - ] - ) - new_dict = salt.utils.data.filter_falsey(old_dict, recurse_depth=3) - expect_dict = OrderedDict([("baz", ["qux"])]) - self.assertEqual(expect_dict, new_dict) - self.assertIs(type(expect_dict), type(new_dict)) - - def test_filter_list_recurse_limit(self): - """ - Test filtering a list with recursing, but with a limited depth. - Note that the top-level is always processed, so a recursion depth of 2 - means that two *additional* levels are processed. - """ - old_list = [None, [None, [None, [None]]]] - new_list = salt.utils.data.filter_falsey(old_list, recurse_depth=2) - self.assertEqual([[[[None]]]], new_list) - - def test_filter_dict_recurse_limit(self): - """ - Test filtering a dict with recursing, but with a limited depth. - Note that the top-level is always processed, so a recursion depth of 2 - means that two *additional* levels are processed. - """ - old_dict = { - "one": None, - "foo": {"two": None, "bar": {"three": None, "baz": {"four": None}}}, - } - new_dict = salt.utils.data.filter_falsey(old_dict, recurse_depth=2) - self.assertEqual({"foo": {"bar": {"baz": {"four": None}}}}, new_dict) - - def test_filter_exclude_types(self): - """ - Test filtering a list recursively, but also ignoring (i.e. not filtering) - out certain types that can be falsey. - """ - # Ignore int, unicode - old_list = [ - "foo", - ["foo"], - ["foo", None], - {"foo": 0}, - {"foo": "bar", "baz": []}, - [{"foo": ""}], - ] - new_list = salt.utils.data.filter_falsey( - old_list, recurse_depth=3, ignore_types=[int, str] - ) - self.assertEqual( - ["foo", ["foo"], ["foo"], {"foo": 0}, {"foo": "bar"}, [{"foo": ""}]], - new_list, - ) - # Ignore list - old_list = [ - "foo", - ["foo"], - ["foo", None], - {"foo": 0}, - {"foo": "bar", "baz": []}, - [{"foo": ""}], - ] - new_list = salt.utils.data.filter_falsey( - old_list, recurse_depth=3, ignore_types=[type([])] - ) - self.assertEqual( - ["foo", ["foo"], ["foo"], {"foo": "bar", "baz": []}, []], new_list - ) - # Ignore dict - old_list = [ - "foo", - ["foo"], - ["foo", None], - {"foo": 0}, - {"foo": "bar", "baz": []}, - [{"foo": ""}], - ] - new_list = salt.utils.data.filter_falsey( - old_list, recurse_depth=3, ignore_types=[type({})] - ) - self.assertEqual(["foo", ["foo"], ["foo"], {}, {"foo": "bar"}, [{}]], new_list) - # Ignore NoneType - old_list = [ - "foo", - ["foo"], - ["foo", None], - {"foo": 0}, - {"foo": "bar", "baz": []}, - [{"foo": ""}], - ] - new_list = salt.utils.data.filter_falsey( - old_list, recurse_depth=3, ignore_types=[type(None)] - ) - self.assertEqual(["foo", ["foo"], ["foo", None], {"foo": "bar"}], new_list) - - -class FilterRecursiveDiff(TestCase): - """ - Test suite for salt.utils.data.recursive_diff - """ - - def test_list_equality(self): - """ - Test cases where equal lists are compared. - """ - test_list = [0, 1, 2] - self.assertEqual({}, salt.utils.data.recursive_diff(test_list, test_list)) - - test_list = [[0], [1], [0, 1, 2]] - self.assertEqual({}, salt.utils.data.recursive_diff(test_list, test_list)) - - def test_dict_equality(self): - """ - Test cases where equal dicts are compared. - """ - test_dict = {"foo": "bar", "bar": {"baz": {"qux": "quux"}}, "frop": 0} - self.assertEqual({}, salt.utils.data.recursive_diff(test_dict, test_dict)) - - def test_ordereddict_equality(self): - """ - Test cases where equal OrderedDicts are compared. - """ - test_dict = OrderedDict( - [ - ("foo", "bar"), - ("bar", OrderedDict([("baz", OrderedDict([("qux", "quux")]))])), - ("frop", 0), - ] - ) - self.assertEqual({}, salt.utils.data.recursive_diff(test_dict, test_dict)) - - def test_mixed_equality(self): - """ - Test cases where mixed nested lists and dicts are compared. - """ - test_data = { - "foo": "bar", - "baz": [0, 1, 2], - "bar": {"baz": [{"qux": "quux"}, {"froop", 0}]}, - } - self.assertEqual({}, salt.utils.data.recursive_diff(test_data, test_data)) - - def test_set_equality(self): - """ - Test cases where equal sets are compared. - """ - test_set = {0, 1, 2, 3, "foo"} - self.assertEqual({}, salt.utils.data.recursive_diff(test_set, test_set)) - - # This is a bit of an oddity, as python seems to sort the sets in memory - # so both sets end up with the same ordering (0..3). - set_one = {0, 1, 2, 3} - set_two = {3, 2, 1, 0} - self.assertEqual({}, salt.utils.data.recursive_diff(set_one, set_two)) - - def test_tuple_equality(self): - """ - Test cases where equal tuples are compared. - """ - test_tuple = (0, 1, 2, 3, "foo") - self.assertEqual({}, salt.utils.data.recursive_diff(test_tuple, test_tuple)) - - def test_list_inequality(self): - """ - Test cases where two inequal lists are compared. - """ - list_one = [0, 1, 2] - list_two = ["foo", "bar", "baz"] - expected_result = {"old": list_one, "new": list_two} - self.assertEqual( - expected_result, salt.utils.data.recursive_diff(list_one, list_two) - ) - expected_result = {"new": list_one, "old": list_two} - self.assertEqual( - expected_result, salt.utils.data.recursive_diff(list_two, list_one) - ) - - list_one = [0, "foo", 1, "bar"] - list_two = [1, "foo", 1, "qux"] - expected_result = {"old": [0, "bar"], "new": [1, "qux"]} - self.assertEqual( - expected_result, salt.utils.data.recursive_diff(list_one, list_two) - ) - expected_result = {"new": [0, "bar"], "old": [1, "qux"]} - self.assertEqual( - expected_result, salt.utils.data.recursive_diff(list_two, list_one) - ) - - list_one = [0, 1, [2, 3]] - list_two = [0, 1, ["foo", "bar"]] - expected_result = {"old": [[2, 3]], "new": [["foo", "bar"]]} - self.assertEqual( - expected_result, salt.utils.data.recursive_diff(list_one, list_two) - ) - expected_result = {"new": [[2, 3]], "old": [["foo", "bar"]]} - self.assertEqual( - expected_result, salt.utils.data.recursive_diff(list_two, list_one) - ) - - def test_dict_inequality(self): - """ - Test cases where two inequal dicts are compared. - """ - dict_one = {"foo": 1, "bar": 2, "baz": 3} - dict_two = {"foo": 2, 1: "bar", "baz": 3} - expected_result = {"old": {"foo": 1, "bar": 2}, "new": {"foo": 2, 1: "bar"}} - self.assertEqual( - expected_result, salt.utils.data.recursive_diff(dict_one, dict_two) - ) - expected_result = {"new": {"foo": 1, "bar": 2}, "old": {"foo": 2, 1: "bar"}} - self.assertEqual( - expected_result, salt.utils.data.recursive_diff(dict_two, dict_one) - ) - - dict_one = {"foo": {"bar": {"baz": 1}}} - dict_two = {"foo": {"qux": {"baz": 1}}} - expected_result = {"old": dict_one, "new": dict_two} - self.assertEqual( - expected_result, salt.utils.data.recursive_diff(dict_one, dict_two) - ) - expected_result = {"new": dict_one, "old": dict_two} - self.assertEqual( - expected_result, salt.utils.data.recursive_diff(dict_two, dict_one) - ) - - def test_ordereddict_inequality(self): - """ - Test cases where two inequal OrderedDicts are compared. - """ - odict_one = OrderedDict([("foo", "bar"), ("bar", "baz")]) - odict_two = OrderedDict([("bar", "baz"), ("foo", "bar")]) - expected_result = {"old": odict_one, "new": odict_two} - self.assertEqual( - expected_result, salt.utils.data.recursive_diff(odict_one, odict_two) - ) - - def test_set_inequality(self): - """ - Test cases where two inequal sets are compared. - Tricky as the sets are compared zipped, so shuffled sets of equal values - are considered different. - """ - set_one = {0, 1, 2, 4} - set_two = {0, 1, 3, 4} - expected_result = {"old": {2}, "new": {3}} - self.assertEqual( - expected_result, salt.utils.data.recursive_diff(set_one, set_two) - ) - expected_result = {"new": {2}, "old": {3}} - self.assertEqual( - expected_result, salt.utils.data.recursive_diff(set_two, set_one) - ) - - # It is unknown how different python versions will store sets in memory. - # Python 2.7 seems to sort it (i.e. set_one below becomes {0, 1, 'foo', 'bar'} - # However Python 3.6.8 stores it differently each run. - # So just test for "not equal" here. - set_one = {0, "foo", 1, "bar"} - set_two = {"foo", 1, "bar", 2} - expected_result = {} - self.assertNotEqual( - expected_result, salt.utils.data.recursive_diff(set_one, set_two) - ) - - def test_mixed_inequality(self): - """ - Test cases where two mixed dicts/iterables that are different are compared. - """ - dict_one = {"foo": [1, 2, 3]} - dict_two = {"foo": [3, 2, 1]} - expected_result = {"old": {"foo": [1, 3]}, "new": {"foo": [3, 1]}} - self.assertEqual( - expected_result, salt.utils.data.recursive_diff(dict_one, dict_two) - ) - expected_result = {"new": {"foo": [1, 3]}, "old": {"foo": [3, 1]}} - self.assertEqual( - expected_result, salt.utils.data.recursive_diff(dict_two, dict_one) - ) - - list_one = [1, 2, {"foo": ["bar", {"foo": 1, "bar": 2}]}] - list_two = [3, 4, {"foo": ["qux", {"foo": 1, "bar": 2}]}] - expected_result = { - "old": [1, 2, {"foo": ["bar"]}], - "new": [3, 4, {"foo": ["qux"]}], - } - self.assertEqual( - expected_result, salt.utils.data.recursive_diff(list_one, list_two) - ) - expected_result = { - "new": [1, 2, {"foo": ["bar"]}], - "old": [3, 4, {"foo": ["qux"]}], - } - self.assertEqual( - expected_result, salt.utils.data.recursive_diff(list_two, list_one) - ) - - mixed_one = {"foo": {0, 1, 2}, "bar": [0, 1, 2]} - mixed_two = {"foo": {1, 2, 3}, "bar": [1, 2, 3]} - expected_result = { - "old": {"foo": {0}, "bar": [0, 1, 2]}, - "new": {"foo": {3}, "bar": [1, 2, 3]}, - } - self.assertEqual( - expected_result, salt.utils.data.recursive_diff(mixed_one, mixed_two) - ) - expected_result = { - "new": {"foo": {0}, "bar": [0, 1, 2]}, - "old": {"foo": {3}, "bar": [1, 2, 3]}, - } - self.assertEqual( - expected_result, salt.utils.data.recursive_diff(mixed_two, mixed_one) - ) - - def test_tuple_inequality(self): - """ - Test cases where two tuples that are different are compared. - """ - tuple_one = (1, 2, 3) - tuple_two = (3, 2, 1) - expected_result = {"old": (1, 3), "new": (3, 1)} - self.assertEqual( - expected_result, salt.utils.data.recursive_diff(tuple_one, tuple_two) - ) - - def test_list_vs_set(self): - """ - Test case comparing a list with a set, will be compared unordered. - """ - mixed_one = [1, 2, 3] - mixed_two = {3, 2, 1} - expected_result = {} - self.assertEqual( - expected_result, salt.utils.data.recursive_diff(mixed_one, mixed_two) - ) - self.assertEqual( - expected_result, salt.utils.data.recursive_diff(mixed_two, mixed_one) - ) - - def test_dict_vs_ordereddict(self): - """ - Test case comparing a dict with an ordereddict, will be compared unordered. - """ - test_dict = {"foo": "bar", "bar": "baz"} - test_odict = OrderedDict([("foo", "bar"), ("bar", "baz")]) - self.assertEqual({}, salt.utils.data.recursive_diff(test_dict, test_odict)) - self.assertEqual({}, salt.utils.data.recursive_diff(test_odict, test_dict)) - - test_odict2 = OrderedDict([("bar", "baz"), ("foo", "bar")]) - self.assertEqual({}, salt.utils.data.recursive_diff(test_dict, test_odict2)) - self.assertEqual({}, salt.utils.data.recursive_diff(test_odict2, test_dict)) - - def test_list_ignore_ignored(self): - """ - Test case comparing two lists with ignore-list supplied (which is not used - when comparing lists). - """ - list_one = [1, 2, 3] - list_two = [3, 2, 1] - expected_result = {"old": [1, 3], "new": [3, 1]} - self.assertEqual( - expected_result, - salt.utils.data.recursive_diff(list_one, list_two, ignore_keys=[1, 3]), - ) - - def test_dict_ignore(self): - """ - Test case comparing two dicts with ignore-list supplied. - """ - dict_one = {"foo": 1, "bar": 2, "baz": 3} - dict_two = {"foo": 3, "bar": 2, "baz": 1} - expected_result = {"old": {"baz": 3}, "new": {"baz": 1}} - self.assertEqual( - expected_result, - salt.utils.data.recursive_diff(dict_one, dict_two, ignore_keys=["foo"]), - ) - - def test_ordereddict_ignore(self): - """ - Test case comparing two OrderedDicts with ignore-list supplied. - """ - odict_one = OrderedDict([("foo", 1), ("bar", 2), ("baz", 3)]) - odict_two = OrderedDict([("baz", 1), ("bar", 2), ("foo", 3)]) - # The key 'foo' will be ignored, which means the key from the other OrderedDict - # will always be considered "different" since OrderedDicts are compared ordered. - expected_result = { - "old": OrderedDict([("baz", 3)]), - "new": OrderedDict([("baz", 1)]), - } - self.assertEqual( - expected_result, - salt.utils.data.recursive_diff(odict_one, odict_two, ignore_keys=["foo"]), - ) - - def test_dict_vs_ordereddict_ignore(self): - """ - Test case comparing a dict with an OrderedDict with ignore-list supplied. - """ - dict_one = {"foo": 1, "bar": 2, "baz": 3} - odict_two = OrderedDict([("foo", 3), ("bar", 2), ("baz", 1)]) - expected_result = {"old": {"baz": 3}, "new": OrderedDict([("baz", 1)])} - self.assertEqual( - expected_result, - salt.utils.data.recursive_diff(dict_one, odict_two, ignore_keys=["foo"]), - ) - - def test_mixed_nested_ignore(self): - """ - Test case comparing mixed, nested items with ignore-list supplied. - """ - dict_one = {"foo": [1], "bar": {"foo": 1, "bar": 2}, "baz": 3} - dict_two = {"foo": [2], "bar": {"foo": 3, "bar": 2}, "baz": 1} - expected_result = {"old": {"baz": 3}, "new": {"baz": 1}} - self.assertEqual( - expected_result, - salt.utils.data.recursive_diff(dict_one, dict_two, ignore_keys=["foo"]), - ) - - def test_ordered_dict_unequal_length(self): - """ - Test case comparing two OrderedDicts of unequal length. - """ - odict_one = OrderedDict([("foo", 1), ("bar", 2), ("baz", 3)]) - odict_two = OrderedDict([("foo", 1), ("bar", 2)]) - expected_result = {"old": OrderedDict([("baz", 3)]), "new": {}} - self.assertEqual( - expected_result, salt.utils.data.recursive_diff(odict_one, odict_two) - ) - - def test_list_unequal_length(self): - """ - Test case comparing two lists of unequal length. - """ - list_one = [1, 2, 3] - list_two = [1, 2, 3, 4] - expected_result = {"old": [], "new": [4]} - self.assertEqual( - expected_result, salt.utils.data.recursive_diff(list_one, list_two) - ) - - def test_set_unequal_length(self): - """ - Test case comparing two sets of unequal length. - This does not do anything special, as it is unordered. - """ - set_one = {1, 2, 3} - set_two = {4, 3, 2, 1} - expected_result = {"old": set(), "new": {4}} - self.assertEqual( - expected_result, salt.utils.data.recursive_diff(set_one, set_two) - ) - - def test_tuple_unequal_length(self): - """ - Test case comparing two tuples of unequal length. - This should be the same as comparing two ordered lists. - """ - tuple_one = (1, 2, 3) - tuple_two = (1, 2, 3, 4) - expected_result = {"old": (), "new": (4,)} - self.assertEqual( - expected_result, salt.utils.data.recursive_diff(tuple_one, tuple_two) - ) - - def test_list_unordered(self): - """ - Test case comparing two lists unordered. - """ - list_one = [1, 2, 3, 4] - list_two = [4, 3, 2] - expected_result = {"old": [1], "new": []} - self.assertEqual( - expected_result, - salt.utils.data.recursive_diff(list_one, list_two, ignore_order=True), - ) - - def test_mixed_nested_unordered(self): - """ - Test case comparing nested dicts/lists unordered. - """ - dict_one = {"foo": {"bar": [1, 2, 3]}, "bar": [{"foo": 4}, 0]} - dict_two = {"foo": {"bar": [3, 2, 1]}, "bar": [0, {"foo": 4}]} - expected_result = {} - self.assertEqual( - expected_result, - salt.utils.data.recursive_diff(dict_one, dict_two, ignore_order=True), - ) - expected_result = { - "old": {"foo": {"bar": [1, 3]}, "bar": [{"foo": 4}, 0]}, - "new": {"foo": {"bar": [3, 1]}, "bar": [0, {"foo": 4}]}, - } - self.assertEqual( - expected_result, salt.utils.data.recursive_diff(dict_one, dict_two) - ) - - def test_ordered_dict_unordered(self): - """ - Test case comparing OrderedDicts unordered. - """ - odict_one = OrderedDict([("foo", 1), ("bar", 2), ("baz", 3)]) - odict_two = OrderedDict([("baz", 3), ("bar", 2), ("foo", 1)]) - expected_result = {} - self.assertEqual( - expected_result, - salt.utils.data.recursive_diff(odict_one, odict_two, ignore_order=True), - ) - - def test_ignore_missing_keys_dict(self): - """ - Test case ignoring missing keys on a comparison of dicts. - """ - dict_one = {"foo": 1, "bar": 2, "baz": 3} - dict_two = {"bar": 3} - expected_result = {"old": {"bar": 2}, "new": {"bar": 3}} - self.assertEqual( - expected_result, - salt.utils.data.recursive_diff( - dict_one, dict_two, ignore_missing_keys=True - ), - ) - - def test_ignore_missing_keys_ordered_dict(self): - """ - Test case not ignoring missing keys on a comparison of OrderedDicts. - """ - odict_one = OrderedDict([("foo", 1), ("bar", 2), ("baz", 3)]) - odict_two = OrderedDict([("bar", 3)]) - expected_result = {"old": odict_one, "new": odict_two} - self.assertEqual( - expected_result, - salt.utils.data.recursive_diff( - odict_one, odict_two, ignore_missing_keys=True - ), - ) - - def test_ignore_missing_keys_recursive(self): - """ - Test case ignoring missing keys on a comparison of nested dicts. - """ - dict_one = {"foo": {"bar": 2, "baz": 3}} - dict_two = {"foo": {"baz": 3}} - expected_result = {} - self.assertEqual( - expected_result, - salt.utils.data.recursive_diff( - dict_one, dict_two, ignore_missing_keys=True - ), - ) - # Compare from dict-in-dict - dict_two = {} - self.assertEqual( - expected_result, - salt.utils.data.recursive_diff( - dict_one, dict_two, ignore_missing_keys=True - ), - ) - # Compare from dict-in-list - dict_one = {"foo": ["bar", {"baz": 3}]} - dict_two = {"foo": ["bar", {}]} - self.assertEqual( - expected_result, - salt.utils.data.recursive_diff( - dict_one, dict_two, ignore_missing_keys=True - ), - ) From 6b334b72edfe2af92dc004734a06f2734a4ac83c Mon Sep 17 00:00:00 2001 From: David Murphy < dmurphy@saltstack.com> Date: Thu, 2 Nov 2023 12:09:45 -0600 Subject: [PATCH 123/153] Marked odict as no code-coverage, and removed some proposed tests, essentially using Python's OrderedDict --- salt/utils/odict.py | 2 ++ tests/pytests/unit/utils/test_data.py | 41 --------------------------- 2 files changed, 2 insertions(+), 41 deletions(-) diff --git a/salt/utils/odict.py b/salt/utils/odict.py index 147fa7980a8..76f313fe5be 100644 --- a/salt/utils/odict.py +++ b/salt/utils/odict.py @@ -19,6 +19,8 @@ http://stackoverflow.com/questions/6190331/ """ +# pragma: no cover # essentially using Python's OrderDict + from collections.abc import Callable diff --git a/tests/pytests/unit/utils/test_data.py b/tests/pytests/unit/utils/test_data.py index 01f9ae3cfe5..5614a770316 100644 --- a/tests/pytests/unit/utils/test_data.py +++ b/tests/pytests/unit/utils/test_data.py @@ -1456,44 +1456,3 @@ def test_ignore_missing_keys_recursive(): assert expected_result == salt.utils.data.recursive_diff( dict_one, dict_two, ignore_missing_keys=True ) - - -def test_ordereddict_dict_items(): - """ - Test case for SaltOrderedDicts items. - """ - dict_one = {"foo": 1, "bar": 2, "baz": 3} - expected_items = 'odict_items([("foo", 1), ("bar", 2), ("baz", 3)])' - - odict_one = SaltOrderedDict(dict_one) - myodict = odict_one.items() - log.warning(f"DGM test_ordered_dict_items items '{str(myodict)}'") - ## assert odict_one.items() == expected_items - - myodict = odict_one.keys() - log.warning(f"DGM test_ordered_dict_items keys '{myodict}'") - ## assert odict_one.items() == expected - - myodict = odict_one.values() - log.warning(f"DGM test_ordered_dict_items values '{myodict}'") - ## assert odict_one.items() == expected - - myodict = odict_one.popitem() - log.warning(f"DGM test_ordered_dict_items popitem '{myodict}'") - ## assert odict_one.items() == expected - - odict_one.clear() - myodict = odict_one.popitem() - log.warning(f"DGM test_ordered_dict_items clear '{myodict}'") - ## assert odict_one.items() == expected - - dgm_dir = dir(odict_one) - log.warning(f"DGM test_ordered_dict_items dgm_dir iterkeys '{dgm_dir}'") - - for myodict in odict_one.iterkeys(): - log.warning(f"DGM test_ordered_dict_items iterkeys '{myodict}'") - ## assert odict_one.items() == expected - - for myodict in odict_one.itervalues(): - log.warning(f"DGM test_ordered_dict_items itervalues '{myodict}'") - ## assert odict_one.items() == expected From 90fe04b304a9ab92bfc99e57cb77935c07477c27 Mon Sep 17 00:00:00 2001 From: David Murphy < dmurphy@saltstack.com> Date: Fri, 3 Nov 2023 09:07:14 -0600 Subject: [PATCH 124/153] Adjust break in control file to 3006.4, for updated salt-common commit b3fcdf8 --- pkg/debian/control | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/pkg/debian/control b/pkg/debian/control index 0ad39d1d9c0..c08d99d5e23 100644 --- a/pkg/debian/control +++ b/pkg/debian/control @@ -25,7 +25,7 @@ Description: Salt debug symbols Package: salt-common Architecture: amd64 arm64 Depends: ${misc:Depends} -Breaks: salt-minion (<= 3006.1) +Breaks: salt-minion (<= 3006.4) Suggests: ifupdown Recommends: lsb-release Description: shared libraries that salt requires for all packages @@ -51,8 +51,8 @@ Description: shared libraries that salt requires for all packages Package: salt-master Architecture: amd64 arm64 -Replaces: salt-common (<= 3006.1) -Breaks: salt-common (<= 3006.1) +Replaces: salt-common (<= 3006.4) +Breaks: salt-common (<= 3006.4) Depends: salt-common (= ${source:Version}), ${misc:Depends} Description: remote manager to administer servers via salt @@ -77,8 +77,8 @@ Description: remote manager to administer servers via salt Package: salt-minion Architecture: amd64 arm64 -Replaces: salt-common (<= 3006.1) -Breaks: salt-common (<= 3006.1) +Replaces: salt-common (<= 3006.4) +Breaks: salt-common (<= 3006.4) Depends: bsdmainutils, dctrl-tools, salt-common (= ${source:Version}), @@ -131,7 +131,7 @@ Description: master-of-masters for salt, the distributed remote execution system Package: salt-ssh Architecture: amd64 arm64 -Breaks: salt-common (<= 3006.3) +Breaks: salt-common (<= 3006.4) Depends: salt-common (= ${source:Version}), openssh-client, ${misc:Depends} @@ -160,7 +160,7 @@ Description: remote manager to administer servers via Salt SSH Package: salt-cloud Architecture: amd64 arm64 -Breaks: salt-common (<= 3006.3) +Breaks: salt-common (<= 3006.4) Depends: salt-common (= ${source:Version}), ${misc:Depends} Description: public cloud VM management system From baa119fa01cad61fc712518158e2881bd61b5d2c Mon Sep 17 00:00:00 2001 From: Pedro Algarvio Date: Fri, 3 Nov 2023 20:05:49 +0000 Subject: [PATCH 125/153] Run `pyupgrade` against changed files in merge-forward Signed-off-by: Pedro Algarvio --- salt/utils/odict.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/salt/utils/odict.py b/salt/utils/odict.py index 76f313fe5be..b5480f6444a 100644 --- a/salt/utils/odict.py +++ b/salt/utils/odict.py @@ -74,9 +74,7 @@ except (ImportError, AttributeError): """ super().__init__() if len(args) > 1: - raise TypeError( - "expected at most 1 arguments, got {}".format(len(args)) - ) + raise TypeError(f"expected at most 1 arguments, got {len(args)}") try: self.__root except AttributeError: @@ -250,7 +248,7 @@ except (ImportError, AttributeError): _repr_running[call_key] = 1 try: if not self: - return "{}()".format(self.__class__.__name__) + return f"{self.__class__.__name__}()" return "{}('{}')".format( self.__class__.__name__, list(self.items()) ) From 6c9dc08bb14ccc97846fe2c2df1b7c19b2af1b3a Mon Sep 17 00:00:00 2001 From: Pedro Algarvio Date: Fri, 3 Nov 2023 20:13:03 +0000 Subject: [PATCH 126/153] Remove char wrongly introduced in merge-forward Signed-off-by: Pedro Algarvio --- tests/pytests/unit/transport/test_tcp.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/pytests/unit/transport/test_tcp.py b/tests/pytests/unit/transport/test_tcp.py index ef6264607e9..505ccbeb74a 100644 --- a/tests/pytests/unit/transport/test_tcp.py +++ b/tests/pytests/unit/transport/test_tcp.py @@ -16,7 +16,7 @@ import salt.exceptions import salt.transport.tcp from tests.support.mock import MagicMock, PropertyMock, patch -tpytestmark = [ +pytestmark = [ pytest.mark.core_test, ] From d891daa222909ac2924b52c640b5bda3f2fc9bf8 Mon Sep 17 00:00:00 2001 From: David Murphy < dmurphy@saltstack.com> Date: Tue, 31 Oct 2023 15:06:51 -0600 Subject: [PATCH 127/153] Ensure any pre-exiting incorrect ufw directory /etc/ufw/applications.d/salt-master is removed --- pkg/debian/salt-master.preinst | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pkg/debian/salt-master.preinst b/pkg/debian/salt-master.preinst index 3a00b757eeb..f205423079c 100644 --- a/pkg/debian/salt-master.preinst +++ b/pkg/debian/salt-master.preinst @@ -10,5 +10,9 @@ case "$1" in find ${SALT_HOME} /etc/salt /var/log/salt /var/cache/salt /var/run/salt \ \! \( -path /etc/salt/cloud.deploy.d\* -o -path /var/log/salt/cloud -o -path /opt/saltstack/salt/lib/python${PY_VER}/site-packages/salt/cloud/deploy\* \) -a \ \( -user ${SALT_USER} -o -group ${SALT_GROUP} \) -exec chown root:root \{\} \; + + # remove incorrectly installed ufw salt-master directory - issue 57712 + test -d /etc/ufw/applications.d/salt-master && rm -rf /etc/ufw/applications.d/salt-master || /bin/true + ;; esac From 3d56434d3e6274dea26345514f526e0d53ca6903 Mon Sep 17 00:00:00 2001 From: Pedro Algarvio Date: Fri, 20 Oct 2023 13:49:11 +0100 Subject: [PATCH 128/153] Upgrade to ``pytest-skip-markers==1.5.0`` Signed-off-by: Pedro Algarvio --- .pylintrc | 3 ++- requirements/static/ci/py3.10/cloud.txt | 2 +- requirements/static/ci/py3.10/darwin.txt | 2 +- requirements/static/ci/py3.10/freebsd.txt | 2 +- requirements/static/ci/py3.10/linux.txt | 2 +- requirements/static/ci/py3.10/windows.txt | 2 +- requirements/static/ci/py3.7/cloud.txt | 2 +- requirements/static/ci/py3.7/freebsd.txt | 2 +- requirements/static/ci/py3.7/linux.txt | 2 +- requirements/static/ci/py3.7/windows.txt | 2 +- requirements/static/ci/py3.8/cloud.txt | 2 +- requirements/static/ci/py3.8/freebsd.txt | 2 +- requirements/static/ci/py3.8/linux.txt | 2 +- requirements/static/ci/py3.8/windows.txt | 2 +- requirements/static/ci/py3.9/cloud.txt | 2 +- requirements/static/ci/py3.9/darwin.txt | 2 +- requirements/static/ci/py3.9/freebsd.txt | 2 +- requirements/static/ci/py3.9/linux.txt | 2 +- requirements/static/ci/py3.9/windows.txt | 2 +- 19 files changed, 20 insertions(+), 19 deletions(-) diff --git a/.pylintrc b/.pylintrc index 6e57ff6a4f7..be586e1ed34 100644 --- a/.pylintrc +++ b/.pylintrc @@ -697,7 +697,8 @@ allowed-3rd-party-modules=msgpack, fnmatch, ptscripts, packaging, - looseversion + looseversion, + pytestskipmarkers [EXCEPTIONS] diff --git a/requirements/static/ci/py3.10/cloud.txt b/requirements/static/ci/py3.10/cloud.txt index bff0998ec0d..dfa56fa2010 100644 --- a/requirements/static/ci/py3.10/cloud.txt +++ b/requirements/static/ci/py3.10/cloud.txt @@ -1051,7 +1051,7 @@ pytest-shell-utilities==1.8.0 # via # -c requirements/static/ci/py3.10/linux.txt # pytest-salt-factories -pytest-skip-markers==1.4.1 +pytest-skip-markers==1.5.0 # via # -c requirements/static/ci/py3.10/linux.txt # pytest-salt-factories diff --git a/requirements/static/ci/py3.10/darwin.txt b/requirements/static/ci/py3.10/darwin.txt index 3da6a738ab8..7d9142e2c05 100644 --- a/requirements/static/ci/py3.10/darwin.txt +++ b/requirements/static/ci/py3.10/darwin.txt @@ -739,7 +739,7 @@ pytest-salt-factories==1.0.0rc27 # via -r requirements/pytest.txt pytest-shell-utilities==1.8.0 # via pytest-salt-factories -pytest-skip-markers==1.4.1 +pytest-skip-markers==1.5.0 # via # pytest-salt-factories # pytest-shell-utilities diff --git a/requirements/static/ci/py3.10/freebsd.txt b/requirements/static/ci/py3.10/freebsd.txt index 6d379cac9c5..3163d0f5e74 100644 --- a/requirements/static/ci/py3.10/freebsd.txt +++ b/requirements/static/ci/py3.10/freebsd.txt @@ -732,7 +732,7 @@ pytest-salt-factories==1.0.0rc27 # via -r requirements/pytest.txt pytest-shell-utilities==1.8.0 # via pytest-salt-factories -pytest-skip-markers==1.4.1 +pytest-skip-markers==1.5.0 # via # pytest-salt-factories # pytest-shell-utilities diff --git a/requirements/static/ci/py3.10/linux.txt b/requirements/static/ci/py3.10/linux.txt index b3c8aa5556e..fc19f81e2cc 100644 --- a/requirements/static/ci/py3.10/linux.txt +++ b/requirements/static/ci/py3.10/linux.txt @@ -751,7 +751,7 @@ pytest-salt-factories==1.0.0rc27 # via -r requirements/pytest.txt pytest-shell-utilities==1.8.0 # via pytest-salt-factories -pytest-skip-markers==1.4.1 +pytest-skip-markers==1.5.0 # via # pytest-salt-factories # pytest-shell-utilities diff --git a/requirements/static/ci/py3.10/windows.txt b/requirements/static/ci/py3.10/windows.txt index 5646b9a2930..c4701b1c158 100644 --- a/requirements/static/ci/py3.10/windows.txt +++ b/requirements/static/ci/py3.10/windows.txt @@ -310,7 +310,7 @@ pytest-salt-factories==1.0.0rc27 # via -r requirements/pytest.txt pytest-shell-utilities==1.8.0 # via pytest-salt-factories -pytest-skip-markers==1.4.1 +pytest-skip-markers==1.5.0 # via # pytest-salt-factories # pytest-shell-utilities diff --git a/requirements/static/ci/py3.7/cloud.txt b/requirements/static/ci/py3.7/cloud.txt index 482fe4a0179..1baa78d71a8 100644 --- a/requirements/static/ci/py3.7/cloud.txt +++ b/requirements/static/ci/py3.7/cloud.txt @@ -1101,7 +1101,7 @@ pytest-shell-utilities==1.8.0 # via # -c requirements/static/ci/py3.7/linux.txt # pytest-salt-factories -pytest-skip-markers==1.4.1 +pytest-skip-markers==1.5.0 # via # -c requirements/static/ci/py3.7/linux.txt # pytest-salt-factories diff --git a/requirements/static/ci/py3.7/freebsd.txt b/requirements/static/ci/py3.7/freebsd.txt index 838981a8aa1..f9a21bb1087 100644 --- a/requirements/static/ci/py3.7/freebsd.txt +++ b/requirements/static/ci/py3.7/freebsd.txt @@ -773,7 +773,7 @@ pytest-salt-factories==1.0.0rc27 # via -r requirements/pytest.txt pytest-shell-utilities==1.8.0 # via pytest-salt-factories -pytest-skip-markers==1.4.1 +pytest-skip-markers==1.5.0 # via # pytest-salt-factories # pytest-shell-utilities diff --git a/requirements/static/ci/py3.7/linux.txt b/requirements/static/ci/py3.7/linux.txt index c077e6a3e72..080276882d3 100644 --- a/requirements/static/ci/py3.7/linux.txt +++ b/requirements/static/ci/py3.7/linux.txt @@ -794,7 +794,7 @@ pytest-salt-factories==1.0.0rc27 # via -r requirements/pytest.txt pytest-shell-utilities==1.8.0 # via pytest-salt-factories -pytest-skip-markers==1.4.1 +pytest-skip-markers==1.5.0 # via # pytest-salt-factories # pytest-shell-utilities diff --git a/requirements/static/ci/py3.7/windows.txt b/requirements/static/ci/py3.7/windows.txt index dfa1ed14327..85af33128eb 100644 --- a/requirements/static/ci/py3.7/windows.txt +++ b/requirements/static/ci/py3.7/windows.txt @@ -323,7 +323,7 @@ pytest-salt-factories==1.0.0rc27 # via -r requirements/pytest.txt pytest-shell-utilities==1.8.0 # via pytest-salt-factories -pytest-skip-markers==1.4.1 +pytest-skip-markers==1.5.0 # via # pytest-salt-factories # pytest-shell-utilities diff --git a/requirements/static/ci/py3.8/cloud.txt b/requirements/static/ci/py3.8/cloud.txt index f509db70725..9b62607515d 100644 --- a/requirements/static/ci/py3.8/cloud.txt +++ b/requirements/static/ci/py3.8/cloud.txt @@ -1089,7 +1089,7 @@ pytest-shell-utilities==1.8.0 # via # -c requirements/static/ci/py3.8/linux.txt # pytest-salt-factories -pytest-skip-markers==1.4.1 +pytest-skip-markers==1.5.0 # via # -c requirements/static/ci/py3.8/linux.txt # pytest-salt-factories diff --git a/requirements/static/ci/py3.8/freebsd.txt b/requirements/static/ci/py3.8/freebsd.txt index 7a136305dd4..583bc7f8063 100644 --- a/requirements/static/ci/py3.8/freebsd.txt +++ b/requirements/static/ci/py3.8/freebsd.txt @@ -761,7 +761,7 @@ pytest-salt-factories==1.0.0rc27 # via -r requirements/pytest.txt pytest-shell-utilities==1.8.0 # via pytest-salt-factories -pytest-skip-markers==1.4.1 +pytest-skip-markers==1.5.0 # via # pytest-salt-factories # pytest-shell-utilities diff --git a/requirements/static/ci/py3.8/linux.txt b/requirements/static/ci/py3.8/linux.txt index 1d1bf99db88..b822df95c32 100644 --- a/requirements/static/ci/py3.8/linux.txt +++ b/requirements/static/ci/py3.8/linux.txt @@ -782,7 +782,7 @@ pytest-salt-factories==1.0.0rc27 # via -r requirements/pytest.txt pytest-shell-utilities==1.8.0 # via pytest-salt-factories -pytest-skip-markers==1.4.1 +pytest-skip-markers==1.5.0 # via # pytest-salt-factories # pytest-shell-utilities diff --git a/requirements/static/ci/py3.8/windows.txt b/requirements/static/ci/py3.8/windows.txt index acd53a81525..1e8a8e6d361 100644 --- a/requirements/static/ci/py3.8/windows.txt +++ b/requirements/static/ci/py3.8/windows.txt @@ -311,7 +311,7 @@ pytest-salt-factories==1.0.0rc27 # via -r requirements/pytest.txt pytest-shell-utilities==1.8.0 # via pytest-salt-factories -pytest-skip-markers==1.4.1 +pytest-skip-markers==1.5.0 # via # pytest-salt-factories # pytest-shell-utilities diff --git a/requirements/static/ci/py3.9/cloud.txt b/requirements/static/ci/py3.9/cloud.txt index 27ff498e697..331a7845732 100644 --- a/requirements/static/ci/py3.9/cloud.txt +++ b/requirements/static/ci/py3.9/cloud.txt @@ -1091,7 +1091,7 @@ pytest-shell-utilities==1.8.0 # via # -c requirements/static/ci/py3.9/linux.txt # pytest-salt-factories -pytest-skip-markers==1.4.1 +pytest-skip-markers==1.5.0 # via # -c requirements/static/ci/py3.9/linux.txt # pytest-salt-factories diff --git a/requirements/static/ci/py3.9/darwin.txt b/requirements/static/ci/py3.9/darwin.txt index b2141a34c4e..c16500cc603 100644 --- a/requirements/static/ci/py3.9/darwin.txt +++ b/requirements/static/ci/py3.9/darwin.txt @@ -770,7 +770,7 @@ pytest-salt-factories==1.0.0rc27 # via -r requirements/pytest.txt pytest-shell-utilities==1.8.0 # via pytest-salt-factories -pytest-skip-markers==1.4.1 +pytest-skip-markers==1.5.0 # via # pytest-salt-factories # pytest-shell-utilities diff --git a/requirements/static/ci/py3.9/freebsd.txt b/requirements/static/ci/py3.9/freebsd.txt index 8e5260f63e8..97c33d2318f 100644 --- a/requirements/static/ci/py3.9/freebsd.txt +++ b/requirements/static/ci/py3.9/freebsd.txt @@ -763,7 +763,7 @@ pytest-salt-factories==1.0.0rc27 # via -r requirements/pytest.txt pytest-shell-utilities==1.8.0 # via pytest-salt-factories -pytest-skip-markers==1.4.1 +pytest-skip-markers==1.5.0 # via # pytest-salt-factories # pytest-shell-utilities diff --git a/requirements/static/ci/py3.9/linux.txt b/requirements/static/ci/py3.9/linux.txt index b11e15185cc..8628ab04adf 100644 --- a/requirements/static/ci/py3.9/linux.txt +++ b/requirements/static/ci/py3.9/linux.txt @@ -782,7 +782,7 @@ pytest-salt-factories==1.0.0rc27 # via -r requirements/pytest.txt pytest-shell-utilities==1.8.0 # via pytest-salt-factories -pytest-skip-markers==1.4.1 +pytest-skip-markers==1.5.0 # via # pytest-salt-factories # pytest-shell-utilities diff --git a/requirements/static/ci/py3.9/windows.txt b/requirements/static/ci/py3.9/windows.txt index 0fdf07ef814..31d883c671a 100644 --- a/requirements/static/ci/py3.9/windows.txt +++ b/requirements/static/ci/py3.9/windows.txt @@ -312,7 +312,7 @@ pytest-salt-factories==1.0.0rc27 # via -r requirements/pytest.txt pytest-shell-utilities==1.8.0 # via pytest-salt-factories -pytest-skip-markers==1.4.1 +pytest-skip-markers==1.5.0 # via # pytest-salt-factories # pytest-shell-utilities From 5e6fcf022bedc854d297794d2ad260352d3251f7 Mon Sep 17 00:00:00 2001 From: Pedro Algarvio Date: Mon, 30 Oct 2023 07:13:11 +0000 Subject: [PATCH 129/153] Backport https://github.com/saltstack/salt/pull/64323 (Just the requirements) Signed-off-by: Pedro Algarvio --- requirements/static/ci/common.in | 1 - requirements/static/ci/py3.10/cloud.txt | 595 +--------------------- requirements/static/ci/py3.10/darwin.txt | 422 --------------- requirements/static/ci/py3.10/docs.txt | 2 +- requirements/static/ci/py3.10/freebsd.txt | 424 +-------------- requirements/static/ci/py3.10/lint.txt | 590 --------------------- requirements/static/ci/py3.10/linux.txt | 427 +--------------- requirements/static/ci/py3.7/cloud.txt | 593 --------------------- requirements/static/ci/py3.7/freebsd.txt | 422 --------------- requirements/static/ci/py3.7/lint.txt | 590 --------------------- requirements/static/ci/py3.7/linux.txt | 425 +--------------- requirements/static/ci/py3.8/cloud.txt | 595 +--------------------- requirements/static/ci/py3.8/docs.txt | 2 +- requirements/static/ci/py3.8/freebsd.txt | 424 +-------------- requirements/static/ci/py3.8/lint.txt | 590 --------------------- requirements/static/ci/py3.8/linux.txt | 427 +--------------- requirements/static/ci/py3.9/cloud.txt | 595 +--------------------- requirements/static/ci/py3.9/darwin.txt | 422 --------------- requirements/static/ci/py3.9/docs.txt | 2 +- requirements/static/ci/py3.9/freebsd.txt | 424 +-------------- requirements/static/ci/py3.9/lint.txt | 590 --------------------- requirements/static/ci/py3.9/linux.txt | 427 +--------------- 22 files changed, 16 insertions(+), 8973 deletions(-) diff --git a/requirements/static/ci/common.in b/requirements/static/ci/common.in index baaa7fc0da6..6e1af3c6a4e 100644 --- a/requirements/static/ci/common.in +++ b/requirements/static/ci/common.in @@ -3,7 +3,6 @@ # to a particular platform, please add it to the corresponding `.in` file in this directory. --constraint=../pkg/py{py_version}/{platform}.txt -azure==4.0.0; sys_platform != 'win32' apache-libcloud>=1.5.0; sys_platform != 'win32' boto3>=1.17.67 boto>=2.46.0 diff --git a/requirements/static/ci/py3.10/cloud.txt b/requirements/static/ci/py3.10/cloud.txt index dfa56fa2010..d1f36ddeb81 100644 --- a/requirements/static/ci/py3.10/cloud.txt +++ b/requirements/static/ci/py3.10/cloud.txt @@ -4,11 +4,6 @@ # # pip-compile --no-emit-index-url --output-file=requirements/static/ci/py3.10/cloud.txt requirements/base.txt requirements/pytest.txt requirements/static/ci/cloud.in requirements/static/ci/common.in requirements/static/pkg/linux.in requirements/zeromq.txt # -adal==1.2.3 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-datalake-store - # msrestazure aiohttp==3.8.5 # via # -c requirements/static/ci/py3.10/linux.txt @@ -41,468 +36,6 @@ attrs==23.1.0 # pytest-shell-utilities # pytest-skip-markers # pytest-system-statistics -azure-applicationinsights==0.1.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure -azure-batch==4.1.3 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure -azure-common==1.1.18 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-applicationinsights - # azure-batch - # azure-cosmosdb-table - # azure-eventgrid - # azure-graphrbac - # azure-keyvault - # azure-loganalytics - # azure-mgmt-advisor - # azure-mgmt-applicationinsights - # azure-mgmt-authorization - # azure-mgmt-batch - # azure-mgmt-batchai - # azure-mgmt-billing - # azure-mgmt-cdn - # azure-mgmt-cognitiveservices - # azure-mgmt-commerce - # azure-mgmt-compute - # azure-mgmt-consumption - # azure-mgmt-containerinstance - # azure-mgmt-containerregistry - # azure-mgmt-containerservice - # azure-mgmt-cosmosdb - # azure-mgmt-datafactory - # azure-mgmt-datalake-analytics - # azure-mgmt-datalake-store - # azure-mgmt-datamigration - # azure-mgmt-devspaces - # azure-mgmt-devtestlabs - # azure-mgmt-dns - # azure-mgmt-eventgrid - # azure-mgmt-eventhub - # azure-mgmt-hanaonazure - # azure-mgmt-iotcentral - # azure-mgmt-iothub - # azure-mgmt-iothubprovisioningservices - # azure-mgmt-keyvault - # azure-mgmt-loganalytics - # azure-mgmt-logic - # azure-mgmt-machinelearningcompute - # azure-mgmt-managementgroups - # azure-mgmt-managementpartner - # azure-mgmt-maps - # azure-mgmt-marketplaceordering - # azure-mgmt-media - # azure-mgmt-monitor - # azure-mgmt-msi - # azure-mgmt-network - # azure-mgmt-notificationhubs - # azure-mgmt-policyinsights - # azure-mgmt-powerbiembedded - # azure-mgmt-rdbms - # azure-mgmt-recoveryservices - # azure-mgmt-recoveryservicesbackup - # azure-mgmt-redis - # azure-mgmt-relay - # azure-mgmt-reservations - # azure-mgmt-resource - # azure-mgmt-scheduler - # azure-mgmt-search - # azure-mgmt-servicebus - # azure-mgmt-servicefabric - # azure-mgmt-signalr - # azure-mgmt-sql - # azure-mgmt-storage - # azure-mgmt-subscription - # azure-mgmt-trafficmanager - # azure-mgmt-web - # azure-servicebus - # azure-servicefabric - # azure-servicemanagement-legacy - # azure-storage-blob - # azure-storage-common - # azure-storage-file - # azure-storage-queue -azure-cosmosdb-nspkg==2.0.2 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-cosmosdb-table -azure-cosmosdb-table==1.0.5 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure -azure-datalake-store==0.0.44 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure -azure-eventgrid==1.2.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure -azure-graphrbac==0.40.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure -azure-keyvault==1.1.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure -azure-loganalytics==0.1.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure -azure-mgmt-advisor==1.0.1 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-applicationinsights==0.1.1 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-authorization==0.50.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-batch==5.0.1 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-batchai==2.0.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-billing==0.2.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-cdn==3.1.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-cognitiveservices==3.0.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-commerce==1.0.1 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-compute==4.6.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-consumption==2.0.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-containerinstance==1.4.1 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-containerregistry==2.7.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-containerservice==4.4.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-cosmosdb==0.4.1 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-datafactory==0.6.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-datalake-analytics==0.6.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-datalake-nspkg==3.0.1 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt-datalake-analytics - # azure-mgmt-datalake-store -azure-mgmt-datalake-store==0.5.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-datamigration==1.0.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-devspaces==0.1.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-devtestlabs==2.2.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-dns==2.1.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-eventgrid==1.0.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-eventhub==2.5.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-hanaonazure==0.1.1 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-iotcentral==0.1.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-iothub==0.5.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-iothubprovisioningservices==0.2.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-keyvault==1.1.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-loganalytics==0.2.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-logic==3.0.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-machinelearningcompute==0.4.1 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-managementgroups==0.1.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-managementpartner==0.1.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-maps==0.1.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-marketplaceordering==0.1.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-media==1.0.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-monitor==0.5.2 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-msi==0.2.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-network==2.6.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-notificationhubs==2.0.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-nspkg==3.0.2 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt-advisor - # azure-mgmt-applicationinsights - # azure-mgmt-authorization - # azure-mgmt-batch - # azure-mgmt-batchai - # azure-mgmt-billing - # azure-mgmt-cognitiveservices - # azure-mgmt-commerce - # azure-mgmt-consumption - # azure-mgmt-cosmosdb - # azure-mgmt-datafactory - # azure-mgmt-datalake-nspkg - # azure-mgmt-datamigration - # azure-mgmt-devspaces - # azure-mgmt-devtestlabs - # azure-mgmt-dns - # azure-mgmt-eventgrid - # azure-mgmt-hanaonazure - # azure-mgmt-iotcentral - # azure-mgmt-iothub - # azure-mgmt-iothubprovisioningservices - # azure-mgmt-keyvault - # azure-mgmt-loganalytics - # azure-mgmt-logic - # azure-mgmt-machinelearningcompute - # azure-mgmt-managementgroups - # azure-mgmt-managementpartner - # azure-mgmt-maps - # azure-mgmt-marketplaceordering - # azure-mgmt-monitor - # azure-mgmt-msi - # azure-mgmt-notificationhubs - # azure-mgmt-policyinsights - # azure-mgmt-powerbiembedded - # azure-mgmt-recoveryservices - # azure-mgmt-recoveryservicesbackup - # azure-mgmt-redis - # azure-mgmt-relay - # azure-mgmt-reservations - # azure-mgmt-scheduler - # azure-mgmt-search - # azure-mgmt-servicefabric - # azure-mgmt-signalr - # azure-mgmt-sql - # azure-mgmt-storage - # azure-mgmt-subscription - # azure-mgmt-trafficmanager - # azure-mgmt-web -azure-mgmt-policyinsights==0.1.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-powerbiembedded==2.0.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-rdbms==1.8.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-recoveryservices==0.3.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-recoveryservicesbackup==0.3.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-redis==5.0.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-relay==0.1.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-reservations==0.2.1 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-resource==2.1.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-scheduler==2.0.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-search==2.0.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-servicebus==0.5.3 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-servicefabric==0.2.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-signalr==0.1.1 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-sql==0.9.1 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-storage==2.0.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-subscription==0.2.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-trafficmanager==0.50.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-web==0.35.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt==4.0.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure -azure-nspkg==3.0.2 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-applicationinsights - # azure-batch - # azure-cosmosdb-nspkg - # azure-eventgrid - # azure-graphrbac - # azure-keyvault - # azure-loganalytics - # azure-mgmt-nspkg - # azure-servicebus - # azure-servicefabric - # azure-servicemanagement-legacy -azure-servicebus==0.21.1 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure -azure-servicefabric==6.3.0.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure -azure-servicemanagement-legacy==0.20.6 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure -azure-storage-blob==1.5.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure -azure-storage-common==1.4.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-cosmosdb-table - # azure-storage-blob - # azure-storage-file - # azure-storage-queue -azure-storage-file==1.4.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure -azure-storage-queue==1.4.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure -azure==4.0.0 ; sys_platform != "win32" - # via - # -c requirements/static/ci/py3.10/linux.txt - # -r requirements/static/ci/common.in backports.entry-points-selectable==1.1.0 # via # -c requirements/static/ci/py3.10/linux.txt @@ -541,7 +74,6 @@ certifi==2023.07.22 # -c requirements/static/ci/py3.10/linux.txt # -r requirements/static/ci/common.in # kubernetes - # msrest # requests certvalidator==0.11.1 # via @@ -552,7 +84,6 @@ cffi==1.14.6 # -c requirements/static/ci/../pkg/py3.10/linux.txt # -c requirements/static/ci/py3.10/linux.txt # -r requirements/static/ci/common.in - # azure-datalake-store # bcrypt # cryptography # pynacl @@ -599,10 +130,6 @@ cryptography==41.0.4 # -c requirements/static/ci/../pkg/py3.10/linux.txt # -c requirements/static/ci/py3.10/linux.txt # -r requirements/static/pkg/linux.in - # adal - # azure-cosmosdb-table - # azure-keyvault - # azure-storage-common # etcd3-py # moto # paramiko @@ -696,10 +223,6 @@ ipaddress==1.0.22 # via # -c requirements/static/ci/py3.10/linux.txt # kubernetes -isodate==0.6.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # msrest jaraco.classes==3.2.1 # via # -c requirements/static/ci/../pkg/py3.10/linux.txt @@ -811,97 +334,6 @@ msgpack==1.0.2 # -c requirements/static/ci/py3.10/linux.txt # -r requirements/base.txt # pytest-salt-factories -msrest==0.6.14 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-applicationinsights - # azure-eventgrid - # azure-keyvault - # azure-loganalytics - # azure-mgmt-cdn - # azure-mgmt-compute - # azure-mgmt-containerinstance - # azure-mgmt-containerregistry - # azure-mgmt-containerservice - # azure-mgmt-dns - # azure-mgmt-eventhub - # azure-mgmt-keyvault - # azure-mgmt-media - # azure-mgmt-network - # azure-mgmt-rdbms - # azure-mgmt-resource - # azure-mgmt-servicebus - # azure-mgmt-servicefabric - # azure-mgmt-signalr - # azure-servicefabric - # msrestazure -msrestazure==0.6.3 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-batch - # azure-eventgrid - # azure-graphrbac - # azure-keyvault - # azure-mgmt-advisor - # azure-mgmt-applicationinsights - # azure-mgmt-authorization - # azure-mgmt-batch - # azure-mgmt-batchai - # azure-mgmt-billing - # azure-mgmt-cdn - # azure-mgmt-cognitiveservices - # azure-mgmt-commerce - # azure-mgmt-compute - # azure-mgmt-consumption - # azure-mgmt-containerinstance - # azure-mgmt-containerregistry - # azure-mgmt-containerservice - # azure-mgmt-cosmosdb - # azure-mgmt-datafactory - # azure-mgmt-datalake-analytics - # azure-mgmt-datalake-store - # azure-mgmt-datamigration - # azure-mgmt-devspaces - # azure-mgmt-devtestlabs - # azure-mgmt-dns - # azure-mgmt-eventgrid - # azure-mgmt-eventhub - # azure-mgmt-hanaonazure - # azure-mgmt-iotcentral - # azure-mgmt-iothub - # azure-mgmt-iothubprovisioningservices - # azure-mgmt-keyvault - # azure-mgmt-loganalytics - # azure-mgmt-logic - # azure-mgmt-machinelearningcompute - # azure-mgmt-managementgroups - # azure-mgmt-managementpartner - # azure-mgmt-maps - # azure-mgmt-marketplaceordering - # azure-mgmt-media - # azure-mgmt-monitor - # azure-mgmt-msi - # azure-mgmt-network - # azure-mgmt-notificationhubs - # azure-mgmt-policyinsights - # azure-mgmt-powerbiembedded - # azure-mgmt-rdbms - # azure-mgmt-recoveryservices - # azure-mgmt-recoveryservicesbackup - # azure-mgmt-redis - # azure-mgmt-relay - # azure-mgmt-reservations - # azure-mgmt-resource - # azure-mgmt-scheduler - # azure-mgmt-search - # azure-mgmt-servicebus - # azure-mgmt-servicefabric - # azure-mgmt-signalr - # azure-mgmt-sql - # azure-mgmt-storage - # azure-mgmt-subscription - # azure-mgmt-trafficmanager - # azure-mgmt-web multidict==6.0.2 # via # -c requirements/static/ci/py3.10/linux.txt @@ -918,10 +350,6 @@ netaddr==0.7.19 # junos-eznc ntlm-auth==1.3.0 # via requests-ntlm -oauthlib==3.2.2 - # via - # -c requirements/static/ci/py3.10/linux.txt - # requests-oauthlib oscrypto==1.2.0 # via # -c requirements/static/ci/py3.10/linux.txt @@ -996,10 +424,6 @@ pyinotify==0.9.6 ; sys_platform != "win32" and sys_platform != "darwin" and plat # via # -c requirements/static/ci/py3.10/linux.txt # -r requirements/static/ci/common.in -pyjwt==2.4.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # adal pynacl==1.5.0 # via # -c requirements/static/ci/py3.10/linux.txt @@ -1086,9 +510,6 @@ python-dateutil==2.8.1 # -c requirements/static/ci/../pkg/py3.10/linux.txt # -c requirements/static/ci/py3.10/linux.txt # -r requirements/static/pkg/linux.in - # adal - # azure-cosmosdb-table - # azure-storage-common # botocore # croniter # kubernetes @@ -1133,34 +554,21 @@ pyzmq==23.2.0 # pytest-salt-factories requests-ntlm==1.1.0 # via pywinrm -requests-oauthlib==1.3.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # msrest requests==2.31.0 # via # -c requirements/static/ci/../pkg/py3.10/linux.txt # -c requirements/static/ci/py3.10/linux.txt # -r requirements/base.txt # -r requirements/static/ci/common.in - # adal # apache-libcloud - # azure-cosmosdb-table - # azure-datalake-store - # azure-keyvault - # azure-servicebus - # azure-servicemanagement-legacy - # azure-storage-common # docker # etcd3-py # kubernetes # moto - # msrest # profitbricks # pyvmomi # pywinrm # requests-ntlm - # requests-oauthlib # responses # vcert responses==0.10.6 @@ -1207,7 +615,6 @@ six==1.16.0 # etcd3-py # genshi # geomet - # isodate # jsonschema # junos-eznc # kazoo @@ -1263,7 +670,7 @@ transitions==0.8.9 # via # -c requirements/static/ci/py3.10/linux.txt # junos-eznc -typing-extensions==4.2.0 +typing-extensions==4.8.0 # via # -c requirements/static/ci/py3.10/linux.txt # pytest-shell-utilities diff --git a/requirements/static/ci/py3.10/darwin.txt b/requirements/static/ci/py3.10/darwin.txt index 7d9142e2c05..19995230ec1 100644 --- a/requirements/static/ci/py3.10/darwin.txt +++ b/requirements/static/ci/py3.10/darwin.txt @@ -4,10 +4,6 @@ # # pip-compile --no-emit-index-url --output-file=requirements/static/ci/py3.10/darwin.txt requirements/darwin.txt requirements/pytest.txt requirements/static/ci/common.in requirements/static/ci/darwin.in requirements/static/pkg/darwin.in # -adal==1.2.5 - # via - # azure-datalake-store - # msrestazure aiohttp==3.8.5 # via etcd3-py aiosignal==1.2.0 @@ -32,304 +28,6 @@ attrs==23.1.0 # pytest-shell-utilities # pytest-skip-markers # pytest-system-statistics -azure-applicationinsights==0.1.0 - # via azure -azure-batch==4.1.3 - # via azure -azure-common==1.1.26 - # via - # azure-applicationinsights - # azure-batch - # azure-cosmosdb-table - # azure-eventgrid - # azure-graphrbac - # azure-keyvault - # azure-loganalytics - # azure-mgmt-advisor - # azure-mgmt-applicationinsights - # azure-mgmt-authorization - # azure-mgmt-batch - # azure-mgmt-batchai - # azure-mgmt-billing - # azure-mgmt-cdn - # azure-mgmt-cognitiveservices - # azure-mgmt-commerce - # azure-mgmt-compute - # azure-mgmt-consumption - # azure-mgmt-containerinstance - # azure-mgmt-containerregistry - # azure-mgmt-containerservice - # azure-mgmt-cosmosdb - # azure-mgmt-datafactory - # azure-mgmt-datalake-analytics - # azure-mgmt-datalake-store - # azure-mgmt-datamigration - # azure-mgmt-devspaces - # azure-mgmt-devtestlabs - # azure-mgmt-dns - # azure-mgmt-eventgrid - # azure-mgmt-eventhub - # azure-mgmt-hanaonazure - # azure-mgmt-iotcentral - # azure-mgmt-iothub - # azure-mgmt-iothubprovisioningservices - # azure-mgmt-keyvault - # azure-mgmt-loganalytics - # azure-mgmt-logic - # azure-mgmt-machinelearningcompute - # azure-mgmt-managementgroups - # azure-mgmt-managementpartner - # azure-mgmt-maps - # azure-mgmt-marketplaceordering - # azure-mgmt-media - # azure-mgmt-monitor - # azure-mgmt-msi - # azure-mgmt-network - # azure-mgmt-notificationhubs - # azure-mgmt-policyinsights - # azure-mgmt-powerbiembedded - # azure-mgmt-rdbms - # azure-mgmt-recoveryservices - # azure-mgmt-recoveryservicesbackup - # azure-mgmt-redis - # azure-mgmt-relay - # azure-mgmt-reservations - # azure-mgmt-resource - # azure-mgmt-scheduler - # azure-mgmt-search - # azure-mgmt-servicebus - # azure-mgmt-servicefabric - # azure-mgmt-signalr - # azure-mgmt-sql - # azure-mgmt-storage - # azure-mgmt-subscription - # azure-mgmt-trafficmanager - # azure-mgmt-web - # azure-servicebus - # azure-servicefabric - # azure-servicemanagement-legacy - # azure-storage-blob - # azure-storage-common - # azure-storage-file - # azure-storage-queue -azure-cosmosdb-nspkg==2.0.2 - # via azure-cosmosdb-table -azure-cosmosdb-table==1.0.6 - # via azure -azure-datalake-store==0.0.51 - # via azure -azure-eventgrid==1.3.0 - # via azure -azure-graphrbac==0.40.0 - # via azure -azure-keyvault==1.1.0 - # via azure -azure-loganalytics==0.1.0 - # via azure -azure-mgmt-advisor==1.0.1 - # via azure-mgmt -azure-mgmt-applicationinsights==0.1.1 - # via azure-mgmt -azure-mgmt-authorization==0.50.0 - # via azure-mgmt -azure-mgmt-batch==5.0.1 - # via azure-mgmt -azure-mgmt-batchai==2.0.0 - # via azure-mgmt -azure-mgmt-billing==0.2.0 - # via azure-mgmt -azure-mgmt-cdn==3.1.0 - # via azure-mgmt -azure-mgmt-cognitiveservices==3.0.0 - # via azure-mgmt -azure-mgmt-commerce==1.0.1 - # via azure-mgmt -azure-mgmt-compute==4.6.2 - # via azure-mgmt -azure-mgmt-consumption==2.0.0 - # via azure-mgmt -azure-mgmt-containerinstance==1.5.0 - # via azure-mgmt -azure-mgmt-containerregistry==2.8.0 - # via azure-mgmt -azure-mgmt-containerservice==4.4.0 - # via azure-mgmt -azure-mgmt-cosmosdb==0.4.1 - # via azure-mgmt -azure-mgmt-datafactory==0.6.0 - # via azure-mgmt -azure-mgmt-datalake-analytics==0.6.0 - # via azure-mgmt -azure-mgmt-datalake-nspkg==3.0.1 - # via - # azure-mgmt-datalake-analytics - # azure-mgmt-datalake-store -azure-mgmt-datalake-store==0.5.0 - # via azure-mgmt -azure-mgmt-datamigration==1.0.0 - # via azure-mgmt -azure-mgmt-devspaces==0.1.0 - # via azure-mgmt -azure-mgmt-devtestlabs==2.2.0 - # via azure-mgmt -azure-mgmt-dns==2.1.0 - # via azure-mgmt -azure-mgmt-eventgrid==1.0.0 - # via azure-mgmt -azure-mgmt-eventhub==2.6.0 - # via azure-mgmt -azure-mgmt-hanaonazure==0.1.1 - # via azure-mgmt -azure-mgmt-iotcentral==0.1.0 - # via azure-mgmt -azure-mgmt-iothub==0.5.0 - # via azure-mgmt -azure-mgmt-iothubprovisioningservices==0.2.0 - # via azure-mgmt -azure-mgmt-keyvault==1.1.0 - # via azure-mgmt -azure-mgmt-loganalytics==0.2.0 - # via azure-mgmt -azure-mgmt-logic==3.0.0 - # via azure-mgmt -azure-mgmt-machinelearningcompute==0.4.1 - # via azure-mgmt -azure-mgmt-managementgroups==0.1.0 - # via azure-mgmt -azure-mgmt-managementpartner==0.1.1 - # via azure-mgmt -azure-mgmt-maps==0.1.0 - # via azure-mgmt -azure-mgmt-marketplaceordering==0.1.0 - # via azure-mgmt -azure-mgmt-media==1.0.0 - # via azure-mgmt -azure-mgmt-monitor==0.5.2 - # via azure-mgmt -azure-mgmt-msi==0.2.0 - # via azure-mgmt -azure-mgmt-network==2.7.0 - # via azure-mgmt -azure-mgmt-notificationhubs==2.1.0 - # via azure-mgmt -azure-mgmt-nspkg==3.0.2 - # via - # azure-mgmt-advisor - # azure-mgmt-applicationinsights - # azure-mgmt-authorization - # azure-mgmt-batch - # azure-mgmt-batchai - # azure-mgmt-billing - # azure-mgmt-cognitiveservices - # azure-mgmt-commerce - # azure-mgmt-consumption - # azure-mgmt-cosmosdb - # azure-mgmt-datafactory - # azure-mgmt-datalake-nspkg - # azure-mgmt-datamigration - # azure-mgmt-devspaces - # azure-mgmt-devtestlabs - # azure-mgmt-dns - # azure-mgmt-eventgrid - # azure-mgmt-hanaonazure - # azure-mgmt-iotcentral - # azure-mgmt-iothub - # azure-mgmt-iothubprovisioningservices - # azure-mgmt-keyvault - # azure-mgmt-loganalytics - # azure-mgmt-logic - # azure-mgmt-machinelearningcompute - # azure-mgmt-managementgroups - # azure-mgmt-maps - # azure-mgmt-marketplaceordering - # azure-mgmt-monitor - # azure-mgmt-msi - # azure-mgmt-policyinsights - # azure-mgmt-powerbiembedded - # azure-mgmt-recoveryservices - # azure-mgmt-recoveryservicesbackup - # azure-mgmt-redis - # azure-mgmt-relay - # azure-mgmt-reservations - # azure-mgmt-scheduler - # azure-mgmt-servicefabric - # azure-mgmt-signalr - # azure-mgmt-sql - # azure-mgmt-storage - # azure-mgmt-subscription - # azure-mgmt-trafficmanager - # azure-mgmt-web -azure-mgmt-policyinsights==0.1.0 - # via azure-mgmt -azure-mgmt-powerbiembedded==2.0.0 - # via azure-mgmt -azure-mgmt-rdbms==1.9.0 - # via azure-mgmt -azure-mgmt-recoveryservices==0.3.0 - # via azure-mgmt -azure-mgmt-recoveryservicesbackup==0.3.0 - # via azure-mgmt -azure-mgmt-redis==5.0.0 - # via azure-mgmt -azure-mgmt-relay==0.1.0 - # via azure-mgmt -azure-mgmt-reservations==0.2.1 - # via azure-mgmt -azure-mgmt-resource==2.2.0 - # via azure-mgmt -azure-mgmt-scheduler==2.0.0 - # via azure-mgmt -azure-mgmt-search==2.1.0 - # via azure-mgmt -azure-mgmt-servicebus==0.5.3 - # via azure-mgmt -azure-mgmt-servicefabric==0.2.0 - # via azure-mgmt -azure-mgmt-signalr==0.1.1 - # via azure-mgmt -azure-mgmt-sql==0.9.1 - # via azure-mgmt -azure-mgmt-storage==2.0.0 - # via azure-mgmt -azure-mgmt-subscription==0.2.0 - # via azure-mgmt -azure-mgmt-trafficmanager==0.50.0 - # via azure-mgmt -azure-mgmt-web==0.35.0 - # via azure-mgmt -azure-mgmt==4.0.0 - # via azure -azure-nspkg==3.0.2 - # via - # azure-applicationinsights - # azure-batch - # azure-cosmosdb-nspkg - # azure-graphrbac - # azure-keyvault - # azure-loganalytics - # azure-mgmt-nspkg - # azure-servicebus - # azure-servicefabric - # azure-servicemanagement-legacy -azure-servicebus==0.21.1 - # via azure -azure-servicefabric==6.3.0.0 - # via azure -azure-servicemanagement-legacy==0.20.7 - # via azure -azure-storage-blob==1.5.0 - # via azure -azure-storage-common==1.4.2 - # via - # azure-storage-blob - # azure-storage-file - # azure-storage-queue -azure-storage-file==1.4.0 - # via azure -azure-storage-queue==1.4.0 - # via azure -azure==4.0.0 ; sys_platform != "win32" - # via -r requirements/static/ci/common.in backports.entry-points-selectable==1.1.0 # via virtualenv bcrypt==3.1.6 @@ -356,7 +54,6 @@ certifi==2023.07.22 # -c requirements/static/ci/../pkg/py3.10/darwin.txt # -r requirements/static/ci/common.in # kubernetes - # msrest # requests certvalidator==0.11.1 # via vcert @@ -364,7 +61,6 @@ cffi==1.14.6 # via # -c requirements/static/ci/../pkg/py3.10/darwin.txt # -r requirements/static/ci/common.in - # azure-datalake-store # bcrypt # cryptography # pygit2 @@ -399,10 +95,6 @@ cryptography==41.0.4 # via # -c requirements/static/ci/../pkg/py3.10/darwin.txt # -r requirements/darwin.txt - # adal - # azure-cosmosdb-table - # azure-keyvault - # azure-storage-common # etcd3-py # moto # paramiko @@ -469,8 +161,6 @@ iniconfig==1.0.1 # via pytest ipaddress==1.0.22 # via kubernetes -isodate==0.6.0 - # via msrest jaraco.classes==3.2.1 # via # -c requirements/static/ci/../pkg/py3.10/darwin.txt @@ -553,98 +243,6 @@ msgpack==1.0.2 # -c requirements/static/ci/../pkg/py3.10/darwin.txt # -r requirements/base.txt # pytest-salt-factories -msrest==0.6.19 - # via - # azure-applicationinsights - # azure-eventgrid - # azure-keyvault - # azure-loganalytics - # azure-mgmt-cdn - # azure-mgmt-compute - # azure-mgmt-containerinstance - # azure-mgmt-containerregistry - # azure-mgmt-containerservice - # azure-mgmt-dns - # azure-mgmt-eventhub - # azure-mgmt-keyvault - # azure-mgmt-managementpartner - # azure-mgmt-media - # azure-mgmt-network - # azure-mgmt-notificationhubs - # azure-mgmt-rdbms - # azure-mgmt-resource - # azure-mgmt-search - # azure-mgmt-servicebus - # azure-mgmt-servicefabric - # azure-mgmt-signalr - # azure-servicefabric - # msrestazure -msrestazure==0.6.4 - # via - # azure-batch - # azure-eventgrid - # azure-graphrbac - # azure-keyvault - # azure-mgmt-advisor - # azure-mgmt-applicationinsights - # azure-mgmt-authorization - # azure-mgmt-batch - # azure-mgmt-batchai - # azure-mgmt-billing - # azure-mgmt-cdn - # azure-mgmt-cognitiveservices - # azure-mgmt-commerce - # azure-mgmt-compute - # azure-mgmt-consumption - # azure-mgmt-containerinstance - # azure-mgmt-containerregistry - # azure-mgmt-containerservice - # azure-mgmt-cosmosdb - # azure-mgmt-datafactory - # azure-mgmt-datalake-analytics - # azure-mgmt-datalake-store - # azure-mgmt-datamigration - # azure-mgmt-devspaces - # azure-mgmt-devtestlabs - # azure-mgmt-dns - # azure-mgmt-eventgrid - # azure-mgmt-eventhub - # azure-mgmt-hanaonazure - # azure-mgmt-iotcentral - # azure-mgmt-iothub - # azure-mgmt-iothubprovisioningservices - # azure-mgmt-keyvault - # azure-mgmt-loganalytics - # azure-mgmt-logic - # azure-mgmt-machinelearningcompute - # azure-mgmt-managementgroups - # azure-mgmt-managementpartner - # azure-mgmt-maps - # azure-mgmt-marketplaceordering - # azure-mgmt-media - # azure-mgmt-monitor - # azure-mgmt-msi - # azure-mgmt-network - # azure-mgmt-notificationhubs - # azure-mgmt-policyinsights - # azure-mgmt-powerbiembedded - # azure-mgmt-rdbms - # azure-mgmt-recoveryservices - # azure-mgmt-recoveryservicesbackup - # azure-mgmt-redis - # azure-mgmt-relay - # azure-mgmt-reservations - # azure-mgmt-resource - # azure-mgmt-scheduler - # azure-mgmt-search - # azure-mgmt-servicebus - # azure-mgmt-servicefabric - # azure-mgmt-signalr - # azure-mgmt-sql - # azure-mgmt-storage - # azure-mgmt-subscription - # azure-mgmt-trafficmanager - # azure-mgmt-web multidict==6.0.2 # via # aiohttp @@ -653,8 +251,6 @@ ncclient==0.6.9 # via junos-eznc netaddr==0.7.19 # via junos-eznc -oauthlib==3.2.2 - # via requests-oauthlib oscrypto==1.2.0 # via certvalidator packaging==22.0 @@ -709,8 +305,6 @@ pycryptodomex==3.9.8 # -r requirements/crypto.txt pygit2==1.13.1 # via -r requirements/static/ci/darwin.in -pyjwt==2.4.0 - # via adal pynacl==1.5.0 # via # -r requirements/static/ci/common.in @@ -765,9 +359,6 @@ python-dateutil==2.8.0 # via # -c requirements/static/ci/../pkg/py3.10/darwin.txt # -r requirements/darwin.txt - # adal - # azure-cosmosdb-table - # azure-storage-common # botocore # croniter # kubernetes @@ -801,28 +392,17 @@ pyzmq==23.2.0 # -c requirements/static/ci/../pkg/py3.10/darwin.txt # -r requirements/zeromq.txt # pytest-salt-factories -requests-oauthlib==1.3.0 - # via msrest requests==2.31.0 # via # -c requirements/static/ci/../pkg/py3.10/darwin.txt # -r requirements/base.txt # -r requirements/static/ci/common.in - # adal # apache-libcloud - # azure-cosmosdb-table - # azure-datalake-store - # azure-keyvault - # azure-servicebus - # azure-servicemanagement-legacy - # azure-storage-common # docker # etcd3-py # kubernetes # moto - # msrest # pyvmomi - # requests-oauthlib # responses # vcert # vultr @@ -851,11 +431,9 @@ six==1.16.0 # etcd3-py # genshi # geomet - # isodate # jsonschema # junos-eznc # kubernetes - # msrestazure # ncclient # paramiko # python-dateutil diff --git a/requirements/static/ci/py3.10/docs.txt b/requirements/static/ci/py3.10/docs.txt index 680af0d458a..75bd763edc0 100644 --- a/requirements/static/ci/py3.10/docs.txt +++ b/requirements/static/ci/py3.10/docs.txt @@ -177,7 +177,7 @@ tempora==4.1.1 # via # -c requirements/static/ci/py3.10/linux.txt # portend -typing-extensions==4.2.0 +typing-extensions==4.8.0 # via # -c requirements/static/ci/py3.10/linux.txt # myst-docutils diff --git a/requirements/static/ci/py3.10/freebsd.txt b/requirements/static/ci/py3.10/freebsd.txt index 3163d0f5e74..c0b25dffe6d 100644 --- a/requirements/static/ci/py3.10/freebsd.txt +++ b/requirements/static/ci/py3.10/freebsd.txt @@ -4,10 +4,6 @@ # # pip-compile --no-emit-index-url --output-file=requirements/static/ci/py3.10/freebsd.txt requirements/base.txt requirements/pytest.txt requirements/static/ci/common.in requirements/static/ci/freebsd.in requirements/static/pkg/freebsd.in requirements/zeromq.txt # -adal==1.2.5 - # via - # azure-datalake-store - # msrestazure aiohttp==3.8.5 # via etcd3-py aiosignal==1.2.0 @@ -29,304 +25,6 @@ attrs==23.1.0 # pytest-shell-utilities # pytest-skip-markers # pytest-system-statistics -azure-applicationinsights==0.1.0 - # via azure -azure-batch==4.1.3 - # via azure -azure-common==1.1.26 - # via - # azure-applicationinsights - # azure-batch - # azure-cosmosdb-table - # azure-eventgrid - # azure-graphrbac - # azure-keyvault - # azure-loganalytics - # azure-mgmt-advisor - # azure-mgmt-applicationinsights - # azure-mgmt-authorization - # azure-mgmt-batch - # azure-mgmt-batchai - # azure-mgmt-billing - # azure-mgmt-cdn - # azure-mgmt-cognitiveservices - # azure-mgmt-commerce - # azure-mgmt-compute - # azure-mgmt-consumption - # azure-mgmt-containerinstance - # azure-mgmt-containerregistry - # azure-mgmt-containerservice - # azure-mgmt-cosmosdb - # azure-mgmt-datafactory - # azure-mgmt-datalake-analytics - # azure-mgmt-datalake-store - # azure-mgmt-datamigration - # azure-mgmt-devspaces - # azure-mgmt-devtestlabs - # azure-mgmt-dns - # azure-mgmt-eventgrid - # azure-mgmt-eventhub - # azure-mgmt-hanaonazure - # azure-mgmt-iotcentral - # azure-mgmt-iothub - # azure-mgmt-iothubprovisioningservices - # azure-mgmt-keyvault - # azure-mgmt-loganalytics - # azure-mgmt-logic - # azure-mgmt-machinelearningcompute - # azure-mgmt-managementgroups - # azure-mgmt-managementpartner - # azure-mgmt-maps - # azure-mgmt-marketplaceordering - # azure-mgmt-media - # azure-mgmt-monitor - # azure-mgmt-msi - # azure-mgmt-network - # azure-mgmt-notificationhubs - # azure-mgmt-policyinsights - # azure-mgmt-powerbiembedded - # azure-mgmt-rdbms - # azure-mgmt-recoveryservices - # azure-mgmt-recoveryservicesbackup - # azure-mgmt-redis - # azure-mgmt-relay - # azure-mgmt-reservations - # azure-mgmt-resource - # azure-mgmt-scheduler - # azure-mgmt-search - # azure-mgmt-servicebus - # azure-mgmt-servicefabric - # azure-mgmt-signalr - # azure-mgmt-sql - # azure-mgmt-storage - # azure-mgmt-subscription - # azure-mgmt-trafficmanager - # azure-mgmt-web - # azure-servicebus - # azure-servicefabric - # azure-servicemanagement-legacy - # azure-storage-blob - # azure-storage-common - # azure-storage-file - # azure-storage-queue -azure-cosmosdb-nspkg==2.0.2 - # via azure-cosmosdb-table -azure-cosmosdb-table==1.0.6 - # via azure -azure-datalake-store==0.0.51 - # via azure -azure-eventgrid==1.3.0 - # via azure -azure-graphrbac==0.40.0 - # via azure -azure-keyvault==1.1.0 - # via azure -azure-loganalytics==0.1.0 - # via azure -azure-mgmt-advisor==1.0.1 - # via azure-mgmt -azure-mgmt-applicationinsights==0.1.1 - # via azure-mgmt -azure-mgmt-authorization==0.50.0 - # via azure-mgmt -azure-mgmt-batch==5.0.1 - # via azure-mgmt -azure-mgmt-batchai==2.0.0 - # via azure-mgmt -azure-mgmt-billing==0.2.0 - # via azure-mgmt -azure-mgmt-cdn==3.1.0 - # via azure-mgmt -azure-mgmt-cognitiveservices==3.0.0 - # via azure-mgmt -azure-mgmt-commerce==1.0.1 - # via azure-mgmt -azure-mgmt-compute==4.6.2 - # via azure-mgmt -azure-mgmt-consumption==2.0.0 - # via azure-mgmt -azure-mgmt-containerinstance==1.5.0 - # via azure-mgmt -azure-mgmt-containerregistry==2.8.0 - # via azure-mgmt -azure-mgmt-containerservice==4.4.0 - # via azure-mgmt -azure-mgmt-cosmosdb==0.4.1 - # via azure-mgmt -azure-mgmt-datafactory==0.6.0 - # via azure-mgmt -azure-mgmt-datalake-analytics==0.6.0 - # via azure-mgmt -azure-mgmt-datalake-nspkg==3.0.1 - # via - # azure-mgmt-datalake-analytics - # azure-mgmt-datalake-store -azure-mgmt-datalake-store==0.5.0 - # via azure-mgmt -azure-mgmt-datamigration==1.0.0 - # via azure-mgmt -azure-mgmt-devspaces==0.1.0 - # via azure-mgmt -azure-mgmt-devtestlabs==2.2.0 - # via azure-mgmt -azure-mgmt-dns==2.1.0 - # via azure-mgmt -azure-mgmt-eventgrid==1.0.0 - # via azure-mgmt -azure-mgmt-eventhub==2.6.0 - # via azure-mgmt -azure-mgmt-hanaonazure==0.1.1 - # via azure-mgmt -azure-mgmt-iotcentral==0.1.0 - # via azure-mgmt -azure-mgmt-iothub==0.5.0 - # via azure-mgmt -azure-mgmt-iothubprovisioningservices==0.2.0 - # via azure-mgmt -azure-mgmt-keyvault==1.1.0 - # via azure-mgmt -azure-mgmt-loganalytics==0.2.0 - # via azure-mgmt -azure-mgmt-logic==3.0.0 - # via azure-mgmt -azure-mgmt-machinelearningcompute==0.4.1 - # via azure-mgmt -azure-mgmt-managementgroups==0.1.0 - # via azure-mgmt -azure-mgmt-managementpartner==0.1.1 - # via azure-mgmt -azure-mgmt-maps==0.1.0 - # via azure-mgmt -azure-mgmt-marketplaceordering==0.1.0 - # via azure-mgmt -azure-mgmt-media==1.0.0 - # via azure-mgmt -azure-mgmt-monitor==0.5.2 - # via azure-mgmt -azure-mgmt-msi==0.2.0 - # via azure-mgmt -azure-mgmt-network==2.7.0 - # via azure-mgmt -azure-mgmt-notificationhubs==2.1.0 - # via azure-mgmt -azure-mgmt-nspkg==3.0.2 - # via - # azure-mgmt-advisor - # azure-mgmt-applicationinsights - # azure-mgmt-authorization - # azure-mgmt-batch - # azure-mgmt-batchai - # azure-mgmt-billing - # azure-mgmt-cognitiveservices - # azure-mgmt-commerce - # azure-mgmt-consumption - # azure-mgmt-cosmosdb - # azure-mgmt-datafactory - # azure-mgmt-datalake-nspkg - # azure-mgmt-datamigration - # azure-mgmt-devspaces - # azure-mgmt-devtestlabs - # azure-mgmt-dns - # azure-mgmt-eventgrid - # azure-mgmt-hanaonazure - # azure-mgmt-iotcentral - # azure-mgmt-iothub - # azure-mgmt-iothubprovisioningservices - # azure-mgmt-keyvault - # azure-mgmt-loganalytics - # azure-mgmt-logic - # azure-mgmt-machinelearningcompute - # azure-mgmt-managementgroups - # azure-mgmt-maps - # azure-mgmt-marketplaceordering - # azure-mgmt-monitor - # azure-mgmt-msi - # azure-mgmt-policyinsights - # azure-mgmt-powerbiembedded - # azure-mgmt-recoveryservices - # azure-mgmt-recoveryservicesbackup - # azure-mgmt-redis - # azure-mgmt-relay - # azure-mgmt-reservations - # azure-mgmt-scheduler - # azure-mgmt-servicefabric - # azure-mgmt-signalr - # azure-mgmt-sql - # azure-mgmt-storage - # azure-mgmt-subscription - # azure-mgmt-trafficmanager - # azure-mgmt-web -azure-mgmt-policyinsights==0.1.0 - # via azure-mgmt -azure-mgmt-powerbiembedded==2.0.0 - # via azure-mgmt -azure-mgmt-rdbms==1.9.0 - # via azure-mgmt -azure-mgmt-recoveryservices==0.3.0 - # via azure-mgmt -azure-mgmt-recoveryservicesbackup==0.3.0 - # via azure-mgmt -azure-mgmt-redis==5.0.0 - # via azure-mgmt -azure-mgmt-relay==0.1.0 - # via azure-mgmt -azure-mgmt-reservations==0.2.1 - # via azure-mgmt -azure-mgmt-resource==2.2.0 - # via azure-mgmt -azure-mgmt-scheduler==2.0.0 - # via azure-mgmt -azure-mgmt-search==2.1.0 - # via azure-mgmt -azure-mgmt-servicebus==0.5.3 - # via azure-mgmt -azure-mgmt-servicefabric==0.2.0 - # via azure-mgmt -azure-mgmt-signalr==0.1.1 - # via azure-mgmt -azure-mgmt-sql==0.9.1 - # via azure-mgmt -azure-mgmt-storage==2.0.0 - # via azure-mgmt -azure-mgmt-subscription==0.2.0 - # via azure-mgmt -azure-mgmt-trafficmanager==0.50.0 - # via azure-mgmt -azure-mgmt-web==0.35.0 - # via azure-mgmt -azure-mgmt==4.0.0 - # via azure -azure-nspkg==3.0.2 - # via - # azure-applicationinsights - # azure-batch - # azure-cosmosdb-nspkg - # azure-graphrbac - # azure-keyvault - # azure-loganalytics - # azure-mgmt-nspkg - # azure-servicebus - # azure-servicefabric - # azure-servicemanagement-legacy -azure-servicebus==0.21.1 - # via azure -azure-servicefabric==6.3.0.0 - # via azure -azure-servicemanagement-legacy==0.20.7 - # via azure -azure-storage-blob==1.5.0 - # via azure -azure-storage-common==1.4.2 - # via - # azure-storage-blob - # azure-storage-file - # azure-storage-queue -azure-storage-file==1.4.0 - # via azure -azure-storage-queue==1.4.0 - # via azure -azure==4.0.0 ; sys_platform != "win32" - # via -r requirements/static/ci/common.in backports.entry-points-selectable==1.1.0 # via virtualenv bcrypt==3.1.6 @@ -353,7 +51,6 @@ certifi==2023.07.22 # -c requirements/static/ci/../pkg/py3.10/freebsd.txt # -r requirements/static/ci/common.in # kubernetes - # msrest # requests certvalidator==0.11.1 # via vcert @@ -361,7 +58,6 @@ cffi==1.14.6 # via # -c requirements/static/ci/../pkg/py3.10/freebsd.txt # -r requirements/static/ci/common.in - # azure-datalake-store # bcrypt # cryptography # pygit2 @@ -396,10 +92,6 @@ cryptography==41.0.4 # via # -c requirements/static/ci/../pkg/py3.10/freebsd.txt # -r requirements/static/pkg/freebsd.in - # adal - # azure-cosmosdb-table - # azure-keyvault - # azure-storage-common # etcd3-py # moto # paramiko @@ -461,8 +153,6 @@ iniconfig==1.0.1 # via pytest ipaddress==1.0.22 # via kubernetes -isodate==0.6.0 - # via msrest jaraco.classes==3.2.1 # via # -c requirements/static/ci/../pkg/py3.10/freebsd.txt @@ -545,98 +235,6 @@ msgpack==1.0.2 # -c requirements/static/ci/../pkg/py3.10/freebsd.txt # -r requirements/base.txt # pytest-salt-factories -msrest==0.6.19 - # via - # azure-applicationinsights - # azure-eventgrid - # azure-keyvault - # azure-loganalytics - # azure-mgmt-cdn - # azure-mgmt-compute - # azure-mgmt-containerinstance - # azure-mgmt-containerregistry - # azure-mgmt-containerservice - # azure-mgmt-dns - # azure-mgmt-eventhub - # azure-mgmt-keyvault - # azure-mgmt-managementpartner - # azure-mgmt-media - # azure-mgmt-network - # azure-mgmt-notificationhubs - # azure-mgmt-rdbms - # azure-mgmt-resource - # azure-mgmt-search - # azure-mgmt-servicebus - # azure-mgmt-servicefabric - # azure-mgmt-signalr - # azure-servicefabric - # msrestazure -msrestazure==0.6.4 - # via - # azure-batch - # azure-eventgrid - # azure-graphrbac - # azure-keyvault - # azure-mgmt-advisor - # azure-mgmt-applicationinsights - # azure-mgmt-authorization - # azure-mgmt-batch - # azure-mgmt-batchai - # azure-mgmt-billing - # azure-mgmt-cdn - # azure-mgmt-cognitiveservices - # azure-mgmt-commerce - # azure-mgmt-compute - # azure-mgmt-consumption - # azure-mgmt-containerinstance - # azure-mgmt-containerregistry - # azure-mgmt-containerservice - # azure-mgmt-cosmosdb - # azure-mgmt-datafactory - # azure-mgmt-datalake-analytics - # azure-mgmt-datalake-store - # azure-mgmt-datamigration - # azure-mgmt-devspaces - # azure-mgmt-devtestlabs - # azure-mgmt-dns - # azure-mgmt-eventgrid - # azure-mgmt-eventhub - # azure-mgmt-hanaonazure - # azure-mgmt-iotcentral - # azure-mgmt-iothub - # azure-mgmt-iothubprovisioningservices - # azure-mgmt-keyvault - # azure-mgmt-loganalytics - # azure-mgmt-logic - # azure-mgmt-machinelearningcompute - # azure-mgmt-managementgroups - # azure-mgmt-managementpartner - # azure-mgmt-maps - # azure-mgmt-marketplaceordering - # azure-mgmt-media - # azure-mgmt-monitor - # azure-mgmt-msi - # azure-mgmt-network - # azure-mgmt-notificationhubs - # azure-mgmt-policyinsights - # azure-mgmt-powerbiembedded - # azure-mgmt-rdbms - # azure-mgmt-recoveryservices - # azure-mgmt-recoveryservicesbackup - # azure-mgmt-redis - # azure-mgmt-relay - # azure-mgmt-reservations - # azure-mgmt-resource - # azure-mgmt-scheduler - # azure-mgmt-search - # azure-mgmt-servicebus - # azure-mgmt-servicefabric - # azure-mgmt-signalr - # azure-mgmt-sql - # azure-mgmt-storage - # azure-mgmt-subscription - # azure-mgmt-trafficmanager - # azure-mgmt-web multidict==6.0.2 # via # aiohttp @@ -645,8 +243,6 @@ ncclient==0.6.9 # via junos-eznc netaddr==0.7.19 # via junos-eznc -oauthlib==3.2.2 - # via requests-oauthlib oscrypto==1.2.0 # via certvalidator packaging==22.0 @@ -702,8 +298,6 @@ pygit2==1.13.1 # via -r requirements/static/ci/freebsd.in pyinotify==0.9.6 ; sys_platform != "win32" and sys_platform != "darwin" and platform_system != "openbsd" # via -r requirements/static/ci/common.in -pyjwt==2.4.0 - # via adal pynacl==1.5.0 # via # -r requirements/static/ci/common.in @@ -758,9 +352,6 @@ python-dateutil==2.8.1 # via # -c requirements/static/ci/../pkg/py3.10/freebsd.txt # -r requirements/static/pkg/freebsd.in - # adal - # azure-cosmosdb-table - # azure-storage-common # botocore # croniter # kubernetes @@ -794,28 +385,17 @@ pyzmq==23.2.0 # -c requirements/static/ci/../pkg/py3.10/freebsd.txt # -r requirements/zeromq.txt # pytest-salt-factories -requests-oauthlib==1.3.0 - # via msrest requests==2.31.0 # via # -c requirements/static/ci/../pkg/py3.10/freebsd.txt # -r requirements/base.txt # -r requirements/static/ci/common.in - # adal # apache-libcloud - # azure-cosmosdb-table - # azure-datalake-store - # azure-keyvault - # azure-servicebus - # azure-servicemanagement-legacy - # azure-storage-common # docker # etcd3-py # kubernetes # moto - # msrest # pyvmomi - # requests-oauthlib # responses # vcert responses==0.10.6 @@ -843,13 +423,11 @@ six==1.16.0 # etcd3-py # genshi # geomet - # isodate # jsonschema # junos-eznc # kazoo # kubernetes # more-itertools - # msrestazure # ncclient # paramiko # python-dateutil @@ -879,7 +457,7 @@ tomli==2.0.1 # via pytest transitions==0.8.9 # via junos-eznc -typing-extensions==4.2.0 +typing-extensions==4.8.0 # via # pytest-shell-utilities # pytest-system-statistics diff --git a/requirements/static/ci/py3.10/lint.txt b/requirements/static/ci/py3.10/lint.txt index ec68133ad30..992ffbf04e9 100644 --- a/requirements/static/ci/py3.10/lint.txt +++ b/requirements/static/ci/py3.10/lint.txt @@ -4,11 +4,6 @@ # # pip-compile --no-emit-index-url --output-file=requirements/static/ci/py3.10/lint.txt requirements/base.txt requirements/static/ci/common.in requirements/static/ci/lint.in requirements/static/ci/linux.in requirements/static/pkg/linux.in requirements/zeromq.txt # -adal==1.2.3 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-datalake-store - # msrestazure aiohttp==3.8.5 # via # -c requirements/static/ci/py3.10/linux.txt @@ -49,468 +44,6 @@ attrs==23.1.0 # -c requirements/static/ci/py3.10/linux.txt # aiohttp # jsonschema -azure-applicationinsights==0.1.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure -azure-batch==4.1.3 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure -azure-common==1.1.18 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-applicationinsights - # azure-batch - # azure-cosmosdb-table - # azure-eventgrid - # azure-graphrbac - # azure-keyvault - # azure-loganalytics - # azure-mgmt-advisor - # azure-mgmt-applicationinsights - # azure-mgmt-authorization - # azure-mgmt-batch - # azure-mgmt-batchai - # azure-mgmt-billing - # azure-mgmt-cdn - # azure-mgmt-cognitiveservices - # azure-mgmt-commerce - # azure-mgmt-compute - # azure-mgmt-consumption - # azure-mgmt-containerinstance - # azure-mgmt-containerregistry - # azure-mgmt-containerservice - # azure-mgmt-cosmosdb - # azure-mgmt-datafactory - # azure-mgmt-datalake-analytics - # azure-mgmt-datalake-store - # azure-mgmt-datamigration - # azure-mgmt-devspaces - # azure-mgmt-devtestlabs - # azure-mgmt-dns - # azure-mgmt-eventgrid - # azure-mgmt-eventhub - # azure-mgmt-hanaonazure - # azure-mgmt-iotcentral - # azure-mgmt-iothub - # azure-mgmt-iothubprovisioningservices - # azure-mgmt-keyvault - # azure-mgmt-loganalytics - # azure-mgmt-logic - # azure-mgmt-machinelearningcompute - # azure-mgmt-managementgroups - # azure-mgmt-managementpartner - # azure-mgmt-maps - # azure-mgmt-marketplaceordering - # azure-mgmt-media - # azure-mgmt-monitor - # azure-mgmt-msi - # azure-mgmt-network - # azure-mgmt-notificationhubs - # azure-mgmt-policyinsights - # azure-mgmt-powerbiembedded - # azure-mgmt-rdbms - # azure-mgmt-recoveryservices - # azure-mgmt-recoveryservicesbackup - # azure-mgmt-redis - # azure-mgmt-relay - # azure-mgmt-reservations - # azure-mgmt-resource - # azure-mgmt-scheduler - # azure-mgmt-search - # azure-mgmt-servicebus - # azure-mgmt-servicefabric - # azure-mgmt-signalr - # azure-mgmt-sql - # azure-mgmt-storage - # azure-mgmt-subscription - # azure-mgmt-trafficmanager - # azure-mgmt-web - # azure-servicebus - # azure-servicefabric - # azure-servicemanagement-legacy - # azure-storage-blob - # azure-storage-common - # azure-storage-file - # azure-storage-queue -azure-cosmosdb-nspkg==2.0.2 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-cosmosdb-table -azure-cosmosdb-table==1.0.5 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure -azure-datalake-store==0.0.44 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure -azure-eventgrid==1.2.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure -azure-graphrbac==0.40.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure -azure-keyvault==1.1.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure -azure-loganalytics==0.1.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure -azure-mgmt-advisor==1.0.1 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-applicationinsights==0.1.1 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-authorization==0.50.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-batch==5.0.1 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-batchai==2.0.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-billing==0.2.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-cdn==3.1.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-cognitiveservices==3.0.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-commerce==1.0.1 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-compute==4.6.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-consumption==2.0.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-containerinstance==1.4.1 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-containerregistry==2.7.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-containerservice==4.4.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-cosmosdb==0.4.1 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-datafactory==0.6.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-datalake-analytics==0.6.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-datalake-nspkg==3.0.1 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt-datalake-analytics - # azure-mgmt-datalake-store -azure-mgmt-datalake-store==0.5.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-datamigration==1.0.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-devspaces==0.1.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-devtestlabs==2.2.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-dns==2.1.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-eventgrid==1.0.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-eventhub==2.5.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-hanaonazure==0.1.1 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-iotcentral==0.1.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-iothub==0.5.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-iothubprovisioningservices==0.2.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-keyvault==1.1.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-loganalytics==0.2.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-logic==3.0.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-machinelearningcompute==0.4.1 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-managementgroups==0.1.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-managementpartner==0.1.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-maps==0.1.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-marketplaceordering==0.1.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-media==1.0.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-monitor==0.5.2 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-msi==0.2.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-network==2.6.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-notificationhubs==2.0.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-nspkg==3.0.2 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt-advisor - # azure-mgmt-applicationinsights - # azure-mgmt-authorization - # azure-mgmt-batch - # azure-mgmt-batchai - # azure-mgmt-billing - # azure-mgmt-cognitiveservices - # azure-mgmt-commerce - # azure-mgmt-consumption - # azure-mgmt-cosmosdb - # azure-mgmt-datafactory - # azure-mgmt-datalake-nspkg - # azure-mgmt-datamigration - # azure-mgmt-devspaces - # azure-mgmt-devtestlabs - # azure-mgmt-dns - # azure-mgmt-eventgrid - # azure-mgmt-hanaonazure - # azure-mgmt-iotcentral - # azure-mgmt-iothub - # azure-mgmt-iothubprovisioningservices - # azure-mgmt-keyvault - # azure-mgmt-loganalytics - # azure-mgmt-logic - # azure-mgmt-machinelearningcompute - # azure-mgmt-managementgroups - # azure-mgmt-managementpartner - # azure-mgmt-maps - # azure-mgmt-marketplaceordering - # azure-mgmt-monitor - # azure-mgmt-msi - # azure-mgmt-notificationhubs - # azure-mgmt-policyinsights - # azure-mgmt-powerbiembedded - # azure-mgmt-recoveryservices - # azure-mgmt-recoveryservicesbackup - # azure-mgmt-redis - # azure-mgmt-relay - # azure-mgmt-reservations - # azure-mgmt-scheduler - # azure-mgmt-search - # azure-mgmt-servicefabric - # azure-mgmt-signalr - # azure-mgmt-sql - # azure-mgmt-storage - # azure-mgmt-subscription - # azure-mgmt-trafficmanager - # azure-mgmt-web -azure-mgmt-policyinsights==0.1.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-powerbiembedded==2.0.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-rdbms==1.8.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-recoveryservices==0.3.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-recoveryservicesbackup==0.3.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-redis==5.0.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-relay==0.1.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-reservations==0.2.1 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-resource==2.1.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-scheduler==2.0.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-search==2.0.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-servicebus==0.5.3 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-servicefabric==0.2.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-signalr==0.1.1 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-sql==0.9.1 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-storage==2.0.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-subscription==0.2.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-trafficmanager==0.50.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt-web==0.35.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-mgmt -azure-mgmt==4.0.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure -azure-nspkg==3.0.2 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-applicationinsights - # azure-batch - # azure-cosmosdb-nspkg - # azure-eventgrid - # azure-graphrbac - # azure-keyvault - # azure-loganalytics - # azure-mgmt-nspkg - # azure-servicebus - # azure-servicefabric - # azure-servicemanagement-legacy -azure-servicebus==0.21.1 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure -azure-servicefabric==6.3.0.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure -azure-servicemanagement-legacy==0.20.6 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure -azure-storage-blob==1.5.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure -azure-storage-common==1.4.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-cosmosdb-table - # azure-storage-blob - # azure-storage-file - # azure-storage-queue -azure-storage-file==1.4.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure -azure-storage-queue==1.4.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure -azure==4.0.0 ; sys_platform != "win32" - # via - # -c requirements/static/ci/py3.10/linux.txt - # -r requirements/static/ci/common.in backports.entry-points-selectable==1.1.0 # via # -c requirements/static/ci/py3.10/linux.txt @@ -550,7 +83,6 @@ certifi==2023.07.22 # -c requirements/static/ci/py3.10/linux.txt # -r requirements/static/ci/common.in # kubernetes - # msrest # python-telegram-bot # requests certvalidator==0.11.1 @@ -562,7 +94,6 @@ cffi==1.14.6 # -c requirements/static/ci/../pkg/py3.10/linux.txt # -c requirements/static/ci/py3.10/linux.txt # -r requirements/static/ci/common.in - # azure-datalake-store # bcrypt # cryptography # pygit2 @@ -610,11 +141,7 @@ cryptography==41.0.4 # -c requirements/static/ci/../pkg/py3.10/linux.txt # -c requirements/static/ci/py3.10/linux.txt # -r requirements/static/pkg/linux.in - # adal # ansible-core - # azure-cosmosdb-table - # azure-keyvault - # azure-storage-common # etcd3-py # moto # paramiko @@ -696,10 +223,6 @@ ipaddress==1.0.22 # via # -c requirements/static/ci/py3.10/linux.txt # kubernetes -isodate==0.6.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # msrest isort==4.3.21 # via pylint jaraco.classes==3.2.1 @@ -818,97 +341,6 @@ msgpack==1.0.2 # -c requirements/static/ci/../pkg/py3.10/linux.txt # -c requirements/static/ci/py3.10/linux.txt # -r requirements/base.txt -msrest==0.6.14 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-applicationinsights - # azure-eventgrid - # azure-keyvault - # azure-loganalytics - # azure-mgmt-cdn - # azure-mgmt-compute - # azure-mgmt-containerinstance - # azure-mgmt-containerregistry - # azure-mgmt-containerservice - # azure-mgmt-dns - # azure-mgmt-eventhub - # azure-mgmt-keyvault - # azure-mgmt-media - # azure-mgmt-network - # azure-mgmt-rdbms - # azure-mgmt-resource - # azure-mgmt-servicebus - # azure-mgmt-servicefabric - # azure-mgmt-signalr - # azure-servicefabric - # msrestazure -msrestazure==0.6.3 - # via - # -c requirements/static/ci/py3.10/linux.txt - # azure-batch - # azure-eventgrid - # azure-graphrbac - # azure-keyvault - # azure-mgmt-advisor - # azure-mgmt-applicationinsights - # azure-mgmt-authorization - # azure-mgmt-batch - # azure-mgmt-batchai - # azure-mgmt-billing - # azure-mgmt-cdn - # azure-mgmt-cognitiveservices - # azure-mgmt-commerce - # azure-mgmt-compute - # azure-mgmt-consumption - # azure-mgmt-containerinstance - # azure-mgmt-containerregistry - # azure-mgmt-containerservice - # azure-mgmt-cosmosdb - # azure-mgmt-datafactory - # azure-mgmt-datalake-analytics - # azure-mgmt-datalake-store - # azure-mgmt-datamigration - # azure-mgmt-devspaces - # azure-mgmt-devtestlabs - # azure-mgmt-dns - # azure-mgmt-eventgrid - # azure-mgmt-eventhub - # azure-mgmt-hanaonazure - # azure-mgmt-iotcentral - # azure-mgmt-iothub - # azure-mgmt-iothubprovisioningservices - # azure-mgmt-keyvault - # azure-mgmt-loganalytics - # azure-mgmt-logic - # azure-mgmt-machinelearningcompute - # azure-mgmt-managementgroups - # azure-mgmt-managementpartner - # azure-mgmt-maps - # azure-mgmt-marketplaceordering - # azure-mgmt-media - # azure-mgmt-monitor - # azure-mgmt-msi - # azure-mgmt-network - # azure-mgmt-notificationhubs - # azure-mgmt-policyinsights - # azure-mgmt-powerbiembedded - # azure-mgmt-rdbms - # azure-mgmt-recoveryservices - # azure-mgmt-recoveryservicesbackup - # azure-mgmt-redis - # azure-mgmt-relay - # azure-mgmt-reservations - # azure-mgmt-resource - # azure-mgmt-scheduler - # azure-mgmt-search - # azure-mgmt-servicebus - # azure-mgmt-servicefabric - # azure-mgmt-signalr - # azure-mgmt-sql - # azure-mgmt-storage - # azure-mgmt-subscription - # azure-mgmt-trafficmanager - # azure-mgmt-web multidict==6.0.2 # via # -c requirements/static/ci/py3.10/linux.txt @@ -922,10 +354,6 @@ netaddr==0.7.19 # via # -c requirements/static/ci/py3.10/linux.txt # junos-eznc -oauthlib==3.2.2 - # via - # -c requirements/static/ci/py3.10/linux.txt - # requests-oauthlib oscrypto==1.2.0 # via # -c requirements/static/ci/py3.10/linux.txt @@ -1008,7 +436,6 @@ pyinotify==0.9.6 ; sys_platform != "win32" and sys_platform != "darwin" and plat pyjwt==2.4.0 # via # -c requirements/static/ci/py3.10/linux.txt - # adal # twilio pylint==2.4.4 # via @@ -1050,9 +477,6 @@ python-dateutil==2.8.1 # -c requirements/static/ci/../pkg/py3.10/linux.txt # -c requirements/static/ci/py3.10/linux.txt # -r requirements/static/pkg/linux.in - # adal - # azure-cosmosdb-table - # azure-storage-common # botocore # croniter # kubernetes @@ -1108,32 +532,19 @@ redis==3.5.3 # via # -c requirements/static/ci/py3.10/linux.txt # redis-py-cluster -requests-oauthlib==1.3.0 - # via - # -c requirements/static/ci/py3.10/linux.txt - # msrest requests==2.31.0 # via # -c requirements/static/ci/../pkg/py3.10/linux.txt # -c requirements/static/ci/py3.10/linux.txt # -r requirements/base.txt # -r requirements/static/ci/common.in - # adal # apache-libcloud - # azure-cosmosdb-table - # azure-datalake-store - # azure-keyvault - # azure-servicebus - # azure-servicemanagement-legacy - # azure-storage-common # docker # etcd3-py # kubernetes # moto - # msrest # python-consul # pyvmomi - # requests-oauthlib # responses # twilio # vcert @@ -1189,7 +600,6 @@ six==1.16.0 # etcd3-py # genshi # geomet - # isodate # jsonschema # junos-eznc # kazoo diff --git a/requirements/static/ci/py3.10/linux.txt b/requirements/static/ci/py3.10/linux.txt index fc19f81e2cc..e95bc375c06 100644 --- a/requirements/static/ci/py3.10/linux.txt +++ b/requirements/static/ci/py3.10/linux.txt @@ -4,10 +4,6 @@ # # pip-compile --no-emit-index-url --output-file=requirements/static/ci/py3.10/linux.txt requirements/base.txt requirements/pytest.txt requirements/static/ci/common.in requirements/static/ci/linux.in requirements/static/pkg/linux.in requirements/zeromq.txt # -adal==1.2.3 - # via - # azure-datalake-store - # msrestazure aiohttp==3.8.5 # via etcd3-py aiosignal==1.2.0 @@ -35,309 +31,6 @@ attrs==23.1.0 # pytest-shell-utilities # pytest-skip-markers # pytest-system-statistics -azure-applicationinsights==0.1.0 - # via azure -azure-batch==4.1.3 - # via azure -azure-common==1.1.18 - # via - # azure-applicationinsights - # azure-batch - # azure-cosmosdb-table - # azure-eventgrid - # azure-graphrbac - # azure-keyvault - # azure-loganalytics - # azure-mgmt-advisor - # azure-mgmt-applicationinsights - # azure-mgmt-authorization - # azure-mgmt-batch - # azure-mgmt-batchai - # azure-mgmt-billing - # azure-mgmt-cdn - # azure-mgmt-cognitiveservices - # azure-mgmt-commerce - # azure-mgmt-compute - # azure-mgmt-consumption - # azure-mgmt-containerinstance - # azure-mgmt-containerregistry - # azure-mgmt-containerservice - # azure-mgmt-cosmosdb - # azure-mgmt-datafactory - # azure-mgmt-datalake-analytics - # azure-mgmt-datalake-store - # azure-mgmt-datamigration - # azure-mgmt-devspaces - # azure-mgmt-devtestlabs - # azure-mgmt-dns - # azure-mgmt-eventgrid - # azure-mgmt-eventhub - # azure-mgmt-hanaonazure - # azure-mgmt-iotcentral - # azure-mgmt-iothub - # azure-mgmt-iothubprovisioningservices - # azure-mgmt-keyvault - # azure-mgmt-loganalytics - # azure-mgmt-logic - # azure-mgmt-machinelearningcompute - # azure-mgmt-managementgroups - # azure-mgmt-managementpartner - # azure-mgmt-maps - # azure-mgmt-marketplaceordering - # azure-mgmt-media - # azure-mgmt-monitor - # azure-mgmt-msi - # azure-mgmt-network - # azure-mgmt-notificationhubs - # azure-mgmt-policyinsights - # azure-mgmt-powerbiembedded - # azure-mgmt-rdbms - # azure-mgmt-recoveryservices - # azure-mgmt-recoveryservicesbackup - # azure-mgmt-redis - # azure-mgmt-relay - # azure-mgmt-reservations - # azure-mgmt-resource - # azure-mgmt-scheduler - # azure-mgmt-search - # azure-mgmt-servicebus - # azure-mgmt-servicefabric - # azure-mgmt-signalr - # azure-mgmt-sql - # azure-mgmt-storage - # azure-mgmt-subscription - # azure-mgmt-trafficmanager - # azure-mgmt-web - # azure-servicebus - # azure-servicefabric - # azure-servicemanagement-legacy - # azure-storage-blob - # azure-storage-common - # azure-storage-file - # azure-storage-queue -azure-cosmosdb-nspkg==2.0.2 - # via azure-cosmosdb-table -azure-cosmosdb-table==1.0.5 - # via azure -azure-datalake-store==0.0.44 - # via azure -azure-eventgrid==1.2.0 - # via azure -azure-graphrbac==0.40.0 - # via azure -azure-keyvault==1.1.0 - # via azure -azure-loganalytics==0.1.0 - # via azure -azure-mgmt-advisor==1.0.1 - # via azure-mgmt -azure-mgmt-applicationinsights==0.1.1 - # via azure-mgmt -azure-mgmt-authorization==0.50.0 - # via azure-mgmt -azure-mgmt-batch==5.0.1 - # via azure-mgmt -azure-mgmt-batchai==2.0.0 - # via azure-mgmt -azure-mgmt-billing==0.2.0 - # via azure-mgmt -azure-mgmt-cdn==3.1.0 - # via azure-mgmt -azure-mgmt-cognitiveservices==3.0.0 - # via azure-mgmt -azure-mgmt-commerce==1.0.1 - # via azure-mgmt -azure-mgmt-compute==4.6.0 - # via azure-mgmt -azure-mgmt-consumption==2.0.0 - # via azure-mgmt -azure-mgmt-containerinstance==1.4.1 - # via azure-mgmt -azure-mgmt-containerregistry==2.7.0 - # via azure-mgmt -azure-mgmt-containerservice==4.4.0 - # via azure-mgmt -azure-mgmt-cosmosdb==0.4.1 - # via azure-mgmt -azure-mgmt-datafactory==0.6.0 - # via azure-mgmt -azure-mgmt-datalake-analytics==0.6.0 - # via azure-mgmt -azure-mgmt-datalake-nspkg==3.0.1 - # via - # azure-mgmt-datalake-analytics - # azure-mgmt-datalake-store -azure-mgmt-datalake-store==0.5.0 - # via azure-mgmt -azure-mgmt-datamigration==1.0.0 - # via azure-mgmt -azure-mgmt-devspaces==0.1.0 - # via azure-mgmt -azure-mgmt-devtestlabs==2.2.0 - # via azure-mgmt -azure-mgmt-dns==2.1.0 - # via azure-mgmt -azure-mgmt-eventgrid==1.0.0 - # via azure-mgmt -azure-mgmt-eventhub==2.5.0 - # via azure-mgmt -azure-mgmt-hanaonazure==0.1.1 - # via azure-mgmt -azure-mgmt-iotcentral==0.1.0 - # via azure-mgmt -azure-mgmt-iothub==0.5.0 - # via azure-mgmt -azure-mgmt-iothubprovisioningservices==0.2.0 - # via azure-mgmt -azure-mgmt-keyvault==1.1.0 - # via azure-mgmt -azure-mgmt-loganalytics==0.2.0 - # via azure-mgmt -azure-mgmt-logic==3.0.0 - # via azure-mgmt -azure-mgmt-machinelearningcompute==0.4.1 - # via azure-mgmt -azure-mgmt-managementgroups==0.1.0 - # via azure-mgmt -azure-mgmt-managementpartner==0.1.0 - # via azure-mgmt -azure-mgmt-maps==0.1.0 - # via azure-mgmt -azure-mgmt-marketplaceordering==0.1.0 - # via azure-mgmt -azure-mgmt-media==1.0.0 - # via azure-mgmt -azure-mgmt-monitor==0.5.2 - # via azure-mgmt -azure-mgmt-msi==0.2.0 - # via azure-mgmt -azure-mgmt-network==2.6.0 - # via azure-mgmt -azure-mgmt-notificationhubs==2.0.0 - # via azure-mgmt -azure-mgmt-nspkg==3.0.2 - # via - # azure-mgmt-advisor - # azure-mgmt-applicationinsights - # azure-mgmt-authorization - # azure-mgmt-batch - # azure-mgmt-batchai - # azure-mgmt-billing - # azure-mgmt-cognitiveservices - # azure-mgmt-commerce - # azure-mgmt-consumption - # azure-mgmt-cosmosdb - # azure-mgmt-datafactory - # azure-mgmt-datalake-nspkg - # azure-mgmt-datamigration - # azure-mgmt-devspaces - # azure-mgmt-devtestlabs - # azure-mgmt-dns - # azure-mgmt-eventgrid - # azure-mgmt-hanaonazure - # azure-mgmt-iotcentral - # azure-mgmt-iothub - # azure-mgmt-iothubprovisioningservices - # azure-mgmt-keyvault - # azure-mgmt-loganalytics - # azure-mgmt-logic - # azure-mgmt-machinelearningcompute - # azure-mgmt-managementgroups - # azure-mgmt-managementpartner - # azure-mgmt-maps - # azure-mgmt-marketplaceordering - # azure-mgmt-monitor - # azure-mgmt-msi - # azure-mgmt-notificationhubs - # azure-mgmt-policyinsights - # azure-mgmt-powerbiembedded - # azure-mgmt-recoveryservices - # azure-mgmt-recoveryservicesbackup - # azure-mgmt-redis - # azure-mgmt-relay - # azure-mgmt-reservations - # azure-mgmt-scheduler - # azure-mgmt-search - # azure-mgmt-servicefabric - # azure-mgmt-signalr - # azure-mgmt-sql - # azure-mgmt-storage - # azure-mgmt-subscription - # azure-mgmt-trafficmanager - # azure-mgmt-web -azure-mgmt-policyinsights==0.1.0 - # via azure-mgmt -azure-mgmt-powerbiembedded==2.0.0 - # via azure-mgmt -azure-mgmt-rdbms==1.8.0 - # via azure-mgmt -azure-mgmt-recoveryservices==0.3.0 - # via azure-mgmt -azure-mgmt-recoveryservicesbackup==0.3.0 - # via azure-mgmt -azure-mgmt-redis==5.0.0 - # via azure-mgmt -azure-mgmt-relay==0.1.0 - # via azure-mgmt -azure-mgmt-reservations==0.2.1 - # via azure-mgmt -azure-mgmt-resource==2.1.0 - # via azure-mgmt -azure-mgmt-scheduler==2.0.0 - # via azure-mgmt -azure-mgmt-search==2.0.0 - # via azure-mgmt -azure-mgmt-servicebus==0.5.3 - # via azure-mgmt -azure-mgmt-servicefabric==0.2.0 - # via azure-mgmt -azure-mgmt-signalr==0.1.1 - # via azure-mgmt -azure-mgmt-sql==0.9.1 - # via azure-mgmt -azure-mgmt-storage==2.0.0 - # via azure-mgmt -azure-mgmt-subscription==0.2.0 - # via azure-mgmt -azure-mgmt-trafficmanager==0.50.0 - # via azure-mgmt -azure-mgmt-web==0.35.0 - # via azure-mgmt -azure-mgmt==4.0.0 - # via azure -azure-nspkg==3.0.2 - # via - # azure-applicationinsights - # azure-batch - # azure-cosmosdb-nspkg - # azure-eventgrid - # azure-graphrbac - # azure-keyvault - # azure-loganalytics - # azure-mgmt-nspkg - # azure-servicebus - # azure-servicefabric - # azure-servicemanagement-legacy -azure-servicebus==0.21.1 - # via azure -azure-servicefabric==6.3.0.0 - # via azure -azure-servicemanagement-legacy==0.20.6 - # via azure -azure-storage-blob==1.5.0 - # via azure -azure-storage-common==1.4.0 - # via - # azure-cosmosdb-table - # azure-storage-blob - # azure-storage-file - # azure-storage-queue -azure-storage-file==1.4.0 - # via azure -azure-storage-queue==1.4.0 - # via azure -azure==4.0.0 ; sys_platform != "win32" - # via -r requirements/static/ci/common.in backports.entry-points-selectable==1.1.0 # via virtualenv bcrypt==3.1.6 @@ -366,7 +59,6 @@ certifi==2023.07.22 # -c requirements/static/ci/../pkg/py3.10/linux.txt # -r requirements/static/ci/common.in # kubernetes - # msrest # python-telegram-bot # requests certvalidator==0.11.1 @@ -375,7 +67,6 @@ cffi==1.14.6 # via # -c requirements/static/ci/../pkg/py3.10/linux.txt # -r requirements/static/ci/common.in - # azure-datalake-store # bcrypt # cryptography # pygit2 @@ -410,11 +101,7 @@ cryptography==41.0.4 # via # -c requirements/static/ci/../pkg/py3.10/linux.txt # -r requirements/static/pkg/linux.in - # adal # ansible-core - # azure-cosmosdb-table - # azure-keyvault - # azure-storage-common # etcd3-py # moto # paramiko @@ -475,8 +162,6 @@ iniconfig==1.0.1 # via pytest ipaddress==1.0.22 # via kubernetes -isodate==0.6.0 - # via msrest jaraco.classes==3.2.1 # via # -c requirements/static/ci/../pkg/py3.10/linux.txt @@ -560,95 +245,6 @@ msgpack==1.0.2 # -c requirements/static/ci/../pkg/py3.10/linux.txt # -r requirements/base.txt # pytest-salt-factories -msrest==0.6.14 - # via - # azure-applicationinsights - # azure-eventgrid - # azure-keyvault - # azure-loganalytics - # azure-mgmt-cdn - # azure-mgmt-compute - # azure-mgmt-containerinstance - # azure-mgmt-containerregistry - # azure-mgmt-containerservice - # azure-mgmt-dns - # azure-mgmt-eventhub - # azure-mgmt-keyvault - # azure-mgmt-media - # azure-mgmt-network - # azure-mgmt-rdbms - # azure-mgmt-resource - # azure-mgmt-servicebus - # azure-mgmt-servicefabric - # azure-mgmt-signalr - # azure-servicefabric - # msrestazure -msrestazure==0.6.3 - # via - # azure-batch - # azure-eventgrid - # azure-graphrbac - # azure-keyvault - # azure-mgmt-advisor - # azure-mgmt-applicationinsights - # azure-mgmt-authorization - # azure-mgmt-batch - # azure-mgmt-batchai - # azure-mgmt-billing - # azure-mgmt-cdn - # azure-mgmt-cognitiveservices - # azure-mgmt-commerce - # azure-mgmt-compute - # azure-mgmt-consumption - # azure-mgmt-containerinstance - # azure-mgmt-containerregistry - # azure-mgmt-containerservice - # azure-mgmt-cosmosdb - # azure-mgmt-datafactory - # azure-mgmt-datalake-analytics - # azure-mgmt-datalake-store - # azure-mgmt-datamigration - # azure-mgmt-devspaces - # azure-mgmt-devtestlabs - # azure-mgmt-dns - # azure-mgmt-eventgrid - # azure-mgmt-eventhub - # azure-mgmt-hanaonazure - # azure-mgmt-iotcentral - # azure-mgmt-iothub - # azure-mgmt-iothubprovisioningservices - # azure-mgmt-keyvault - # azure-mgmt-loganalytics - # azure-mgmt-logic - # azure-mgmt-machinelearningcompute - # azure-mgmt-managementgroups - # azure-mgmt-managementpartner - # azure-mgmt-maps - # azure-mgmt-marketplaceordering - # azure-mgmt-media - # azure-mgmt-monitor - # azure-mgmt-msi - # azure-mgmt-network - # azure-mgmt-notificationhubs - # azure-mgmt-policyinsights - # azure-mgmt-powerbiembedded - # azure-mgmt-rdbms - # azure-mgmt-recoveryservices - # azure-mgmt-recoveryservicesbackup - # azure-mgmt-redis - # azure-mgmt-relay - # azure-mgmt-reservations - # azure-mgmt-resource - # azure-mgmt-scheduler - # azure-mgmt-search - # azure-mgmt-servicebus - # azure-mgmt-servicefabric - # azure-mgmt-signalr - # azure-mgmt-sql - # azure-mgmt-storage - # azure-mgmt-subscription - # azure-mgmt-trafficmanager - # azure-mgmt-web multidict==6.0.2 # via # aiohttp @@ -657,8 +253,6 @@ ncclient==0.6.9 # via junos-eznc netaddr==0.7.19 # via junos-eznc -oauthlib==3.2.2 - # via requests-oauthlib oscrypto==1.2.0 # via certvalidator packaging==22.0 @@ -718,9 +312,7 @@ pyiface==0.0.11 pyinotify==0.9.6 ; sys_platform != "win32" and sys_platform != "darwin" and platform_system != "openbsd" # via -r requirements/static/ci/common.in pyjwt==2.4.0 - # via - # adal - # twilio + # via twilio pymysql==1.0.2 # via -r requirements/static/ci/linux.in pynacl==1.5.0 @@ -779,9 +371,6 @@ python-dateutil==2.8.1 # via # -c requirements/static/ci/../pkg/py3.10/linux.txt # -r requirements/static/pkg/linux.in - # adal - # azure-cosmosdb-table - # azure-storage-common # botocore # croniter # kubernetes @@ -825,29 +414,18 @@ redis-py-cluster==2.1.3 # via -r requirements/static/ci/linux.in redis==3.5.3 # via redis-py-cluster -requests-oauthlib==1.3.0 - # via msrest requests==2.31.0 # via # -c requirements/static/ci/../pkg/py3.10/linux.txt # -r requirements/base.txt # -r requirements/static/ci/common.in - # adal # apache-libcloud - # azure-cosmosdb-table - # azure-datalake-store - # azure-keyvault - # azure-servicebus - # azure-servicemanagement-legacy - # azure-storage-common # docker # etcd3-py # kubernetes # moto - # msrest # python-consul # pyvmomi - # requests-oauthlib # responses # twilio # vcert @@ -883,7 +461,6 @@ six==1.16.0 # etcd3-py # genshi # geomet - # isodate # jsonschema # junos-eznc # kazoo @@ -927,7 +504,7 @@ transitions==0.8.9 # via junos-eznc twilio==7.9.2 # via -r requirements/static/ci/linux.in -typing-extensions==4.2.0 +typing-extensions==4.8.0 # via # pytest-shell-utilities # pytest-system-statistics diff --git a/requirements/static/ci/py3.7/cloud.txt b/requirements/static/ci/py3.7/cloud.txt index 1baa78d71a8..5db5f108dcf 100644 --- a/requirements/static/ci/py3.7/cloud.txt +++ b/requirements/static/ci/py3.7/cloud.txt @@ -4,11 +4,6 @@ # # pip-compile --no-emit-index-url --output-file=requirements/static/ci/py3.7/cloud.txt requirements/base.txt requirements/pytest.txt requirements/static/ci/cloud.in requirements/static/ci/common.in requirements/static/pkg/linux.in requirements/zeromq.txt # -adal==1.2.3 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-datalake-store - # msrestazure aiohttp==3.8.5 # via # -c requirements/static/ci/py3.7/linux.txt @@ -45,468 +40,6 @@ attrs==23.1.0 # pytest-shell-utilities # pytest-skip-markers # pytest-system-statistics -azure-applicationinsights==0.1.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure -azure-batch==4.1.3 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure -azure-common==1.1.18 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-applicationinsights - # azure-batch - # azure-cosmosdb-table - # azure-eventgrid - # azure-graphrbac - # azure-keyvault - # azure-loganalytics - # azure-mgmt-advisor - # azure-mgmt-applicationinsights - # azure-mgmt-authorization - # azure-mgmt-batch - # azure-mgmt-batchai - # azure-mgmt-billing - # azure-mgmt-cdn - # azure-mgmt-cognitiveservices - # azure-mgmt-commerce - # azure-mgmt-compute - # azure-mgmt-consumption - # azure-mgmt-containerinstance - # azure-mgmt-containerregistry - # azure-mgmt-containerservice - # azure-mgmt-cosmosdb - # azure-mgmt-datafactory - # azure-mgmt-datalake-analytics - # azure-mgmt-datalake-store - # azure-mgmt-datamigration - # azure-mgmt-devspaces - # azure-mgmt-devtestlabs - # azure-mgmt-dns - # azure-mgmt-eventgrid - # azure-mgmt-eventhub - # azure-mgmt-hanaonazure - # azure-mgmt-iotcentral - # azure-mgmt-iothub - # azure-mgmt-iothubprovisioningservices - # azure-mgmt-keyvault - # azure-mgmt-loganalytics - # azure-mgmt-logic - # azure-mgmt-machinelearningcompute - # azure-mgmt-managementgroups - # azure-mgmt-managementpartner - # azure-mgmt-maps - # azure-mgmt-marketplaceordering - # azure-mgmt-media - # azure-mgmt-monitor - # azure-mgmt-msi - # azure-mgmt-network - # azure-mgmt-notificationhubs - # azure-mgmt-policyinsights - # azure-mgmt-powerbiembedded - # azure-mgmt-rdbms - # azure-mgmt-recoveryservices - # azure-mgmt-recoveryservicesbackup - # azure-mgmt-redis - # azure-mgmt-relay - # azure-mgmt-reservations - # azure-mgmt-resource - # azure-mgmt-scheduler - # azure-mgmt-search - # azure-mgmt-servicebus - # azure-mgmt-servicefabric - # azure-mgmt-signalr - # azure-mgmt-sql - # azure-mgmt-storage - # azure-mgmt-subscription - # azure-mgmt-trafficmanager - # azure-mgmt-web - # azure-servicebus - # azure-servicefabric - # azure-servicemanagement-legacy - # azure-storage-blob - # azure-storage-common - # azure-storage-file - # azure-storage-queue -azure-cosmosdb-nspkg==2.0.2 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-cosmosdb-table -azure-cosmosdb-table==1.0.5 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure -azure-datalake-store==0.0.44 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure -azure-eventgrid==1.2.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure -azure-graphrbac==0.40.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure -azure-keyvault==1.1.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure -azure-loganalytics==0.1.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure -azure-mgmt-advisor==1.0.1 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-applicationinsights==0.1.1 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-authorization==0.50.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-batch==5.0.1 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-batchai==2.0.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-billing==0.2.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-cdn==3.1.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-cognitiveservices==3.0.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-commerce==1.0.1 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-compute==4.6.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-consumption==2.0.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-containerinstance==1.4.1 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-containerregistry==2.7.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-containerservice==4.4.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-cosmosdb==0.4.1 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-datafactory==0.6.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-datalake-analytics==0.6.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-datalake-nspkg==3.0.1 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt-datalake-analytics - # azure-mgmt-datalake-store -azure-mgmt-datalake-store==0.5.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-datamigration==1.0.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-devspaces==0.1.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-devtestlabs==2.2.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-dns==2.1.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-eventgrid==1.0.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-eventhub==2.5.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-hanaonazure==0.1.1 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-iotcentral==0.1.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-iothub==0.5.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-iothubprovisioningservices==0.2.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-keyvault==1.1.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-loganalytics==0.2.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-logic==3.0.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-machinelearningcompute==0.4.1 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-managementgroups==0.1.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-managementpartner==0.1.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-maps==0.1.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-marketplaceordering==0.1.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-media==1.0.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-monitor==0.5.2 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-msi==0.2.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-network==2.6.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-notificationhubs==2.0.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-nspkg==3.0.2 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt-advisor - # azure-mgmt-applicationinsights - # azure-mgmt-authorization - # azure-mgmt-batch - # azure-mgmt-batchai - # azure-mgmt-billing - # azure-mgmt-cognitiveservices - # azure-mgmt-commerce - # azure-mgmt-consumption - # azure-mgmt-cosmosdb - # azure-mgmt-datafactory - # azure-mgmt-datalake-nspkg - # azure-mgmt-datamigration - # azure-mgmt-devspaces - # azure-mgmt-devtestlabs - # azure-mgmt-dns - # azure-mgmt-eventgrid - # azure-mgmt-hanaonazure - # azure-mgmt-iotcentral - # azure-mgmt-iothub - # azure-mgmt-iothubprovisioningservices - # azure-mgmt-keyvault - # azure-mgmt-loganalytics - # azure-mgmt-logic - # azure-mgmt-machinelearningcompute - # azure-mgmt-managementgroups - # azure-mgmt-managementpartner - # azure-mgmt-maps - # azure-mgmt-marketplaceordering - # azure-mgmt-monitor - # azure-mgmt-msi - # azure-mgmt-notificationhubs - # azure-mgmt-policyinsights - # azure-mgmt-powerbiembedded - # azure-mgmt-recoveryservices - # azure-mgmt-recoveryservicesbackup - # azure-mgmt-redis - # azure-mgmt-relay - # azure-mgmt-reservations - # azure-mgmt-scheduler - # azure-mgmt-search - # azure-mgmt-servicefabric - # azure-mgmt-signalr - # azure-mgmt-sql - # azure-mgmt-storage - # azure-mgmt-subscription - # azure-mgmt-trafficmanager - # azure-mgmt-web -azure-mgmt-policyinsights==0.1.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-powerbiembedded==2.0.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-rdbms==1.8.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-recoveryservices==0.3.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-recoveryservicesbackup==0.3.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-redis==5.0.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-relay==0.1.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-reservations==0.2.1 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-resource==2.1.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-scheduler==2.0.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-search==2.0.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-servicebus==0.5.3 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-servicefabric==0.2.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-signalr==0.1.1 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-sql==0.9.1 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-storage==2.0.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-subscription==0.2.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-trafficmanager==0.50.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-web==0.35.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt==4.0.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure -azure-nspkg==3.0.2 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-applicationinsights - # azure-batch - # azure-cosmosdb-nspkg - # azure-eventgrid - # azure-graphrbac - # azure-keyvault - # azure-loganalytics - # azure-mgmt-nspkg - # azure-servicebus - # azure-servicefabric - # azure-servicemanagement-legacy -azure-servicebus==0.21.1 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure -azure-servicefabric==6.3.0.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure -azure-servicemanagement-legacy==0.20.6 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure -azure-storage-blob==1.5.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure -azure-storage-common==1.4.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-cosmosdb-table - # azure-storage-blob - # azure-storage-file - # azure-storage-queue -azure-storage-file==1.4.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure -azure-storage-queue==1.4.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure -azure==4.0.0 ; sys_platform != "win32" - # via - # -c requirements/static/ci/py3.7/linux.txt - # -r requirements/static/ci/common.in backports.entry-points-selectable==1.1.0 # via # -c requirements/static/ci/py3.7/linux.txt @@ -545,7 +78,6 @@ certifi==2023.07.22 # -c requirements/static/ci/py3.7/linux.txt # -r requirements/static/ci/common.in # kubernetes - # msrest # requests certvalidator==0.11.1 # via @@ -556,7 +88,6 @@ cffi==1.14.6 # -c requirements/static/ci/../pkg/py3.7/linux.txt # -c requirements/static/ci/py3.7/linux.txt # -r requirements/static/ci/common.in - # azure-datalake-store # bcrypt # cryptography # napalm @@ -612,10 +143,6 @@ cryptography==41.0.4 # -c requirements/static/ci/../pkg/py3.7/linux.txt # -c requirements/static/ci/py3.7/linux.txt # -r requirements/static/pkg/linux.in - # adal - # azure-cosmosdb-table - # azure-keyvault - # azure-storage-common # etcd3-py # moto # paramiko @@ -723,10 +250,6 @@ ipaddress==1.0.22 # via # -c requirements/static/ci/py3.7/linux.txt # kubernetes -isodate==0.6.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # msrest jaraco.classes==3.2.1 # via # -c requirements/static/ci/../pkg/py3.7/linux.txt @@ -841,97 +364,6 @@ msgpack==1.0.2 # -c requirements/static/ci/py3.7/linux.txt # -r requirements/base.txt # pytest-salt-factories -msrest==0.6.14 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-applicationinsights - # azure-eventgrid - # azure-keyvault - # azure-loganalytics - # azure-mgmt-cdn - # azure-mgmt-compute - # azure-mgmt-containerinstance - # azure-mgmt-containerregistry - # azure-mgmt-containerservice - # azure-mgmt-dns - # azure-mgmt-eventhub - # azure-mgmt-keyvault - # azure-mgmt-media - # azure-mgmt-network - # azure-mgmt-rdbms - # azure-mgmt-resource - # azure-mgmt-servicebus - # azure-mgmt-servicefabric - # azure-mgmt-signalr - # azure-servicefabric - # msrestazure -msrestazure==0.6.3 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-batch - # azure-eventgrid - # azure-graphrbac - # azure-keyvault - # azure-mgmt-advisor - # azure-mgmt-applicationinsights - # azure-mgmt-authorization - # azure-mgmt-batch - # azure-mgmt-batchai - # azure-mgmt-billing - # azure-mgmt-cdn - # azure-mgmt-cognitiveservices - # azure-mgmt-commerce - # azure-mgmt-compute - # azure-mgmt-consumption - # azure-mgmt-containerinstance - # azure-mgmt-containerregistry - # azure-mgmt-containerservice - # azure-mgmt-cosmosdb - # azure-mgmt-datafactory - # azure-mgmt-datalake-analytics - # azure-mgmt-datalake-store - # azure-mgmt-datamigration - # azure-mgmt-devspaces - # azure-mgmt-devtestlabs - # azure-mgmt-dns - # azure-mgmt-eventgrid - # azure-mgmt-eventhub - # azure-mgmt-hanaonazure - # azure-mgmt-iotcentral - # azure-mgmt-iothub - # azure-mgmt-iothubprovisioningservices - # azure-mgmt-keyvault - # azure-mgmt-loganalytics - # azure-mgmt-logic - # azure-mgmt-machinelearningcompute - # azure-mgmt-managementgroups - # azure-mgmt-managementpartner - # azure-mgmt-maps - # azure-mgmt-marketplaceordering - # azure-mgmt-media - # azure-mgmt-monitor - # azure-mgmt-msi - # azure-mgmt-network - # azure-mgmt-notificationhubs - # azure-mgmt-policyinsights - # azure-mgmt-powerbiembedded - # azure-mgmt-rdbms - # azure-mgmt-recoveryservices - # azure-mgmt-recoveryservicesbackup - # azure-mgmt-redis - # azure-mgmt-relay - # azure-mgmt-reservations - # azure-mgmt-resource - # azure-mgmt-scheduler - # azure-mgmt-search - # azure-mgmt-servicebus - # azure-mgmt-servicefabric - # azure-mgmt-signalr - # azure-mgmt-sql - # azure-mgmt-storage - # azure-mgmt-subscription - # azure-mgmt-trafficmanager - # azure-mgmt-web multidict==6.0.2 # via # -c requirements/static/ci/py3.7/linux.txt @@ -962,10 +394,6 @@ ntc-templates==1.4.0 # junos-eznc ntlm-auth==1.3.0 # via requests-ntlm -oauthlib==3.2.2 - # via - # -c requirements/static/ci/py3.7/linux.txt - # requests-oauthlib oscrypto==1.2.0 # via # -c requirements/static/ci/py3.7/linux.txt @@ -1045,10 +473,6 @@ pyinotify==0.9.6 ; sys_platform != "win32" and sys_platform != "darwin" and plat # via # -c requirements/static/ci/py3.7/linux.txt # -r requirements/static/ci/common.in -pyjwt==2.4.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # adal pynacl==1.5.0 # via # -c requirements/static/ci/py3.7/linux.txt @@ -1136,9 +560,6 @@ python-dateutil==2.8.1 # -c requirements/static/ci/../pkg/py3.7/linux.txt # -c requirements/static/ci/py3.7/linux.txt # -r requirements/static/pkg/linux.in - # adal - # azure-cosmosdb-table - # azure-storage-common # botocore # croniter # kubernetes @@ -1184,35 +605,22 @@ pyzmq==23.2.0 # pytest-salt-factories requests-ntlm==1.1.0 # via pywinrm -requests-oauthlib==1.3.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # msrest requests==2.31.0 # via # -c requirements/static/ci/../pkg/py3.7/linux.txt # -c requirements/static/ci/py3.7/linux.txt # -r requirements/base.txt # -r requirements/static/ci/common.in - # adal # apache-libcloud - # azure-cosmosdb-table - # azure-datalake-store - # azure-keyvault - # azure-servicebus - # azure-servicemanagement-legacy - # azure-storage-common # docker # etcd3-py # kubernetes # moto - # msrest # napalm # profitbricks # pyvmomi # pywinrm # requests-ntlm - # requests-oauthlib # responses # vcert responses==0.10.6 @@ -1261,7 +669,6 @@ six==1.16.0 # etcd3-py # genshi # geomet - # isodate # jsonschema # junos-eznc # kazoo diff --git a/requirements/static/ci/py3.7/freebsd.txt b/requirements/static/ci/py3.7/freebsd.txt index f9a21bb1087..3d9ec1a4400 100644 --- a/requirements/static/ci/py3.7/freebsd.txt +++ b/requirements/static/ci/py3.7/freebsd.txt @@ -4,10 +4,6 @@ # # pip-compile --no-emit-index-url --output-file=requirements/static/ci/py3.7/freebsd.txt requirements/base.txt requirements/pytest.txt requirements/static/ci/common.in requirements/static/ci/freebsd.in requirements/static/pkg/freebsd.in requirements/zeromq.txt # -adal==1.2.5 - # via - # azure-datalake-store - # msrestazure aiohttp==3.8.5 # via etcd3-py aiosignal==1.2.0 @@ -31,304 +27,6 @@ attrs==23.1.0 # pytest-shell-utilities # pytest-skip-markers # pytest-system-statistics -azure-applicationinsights==0.1.0 - # via azure -azure-batch==4.1.3 - # via azure -azure-common==1.1.26 - # via - # azure-applicationinsights - # azure-batch - # azure-cosmosdb-table - # azure-eventgrid - # azure-graphrbac - # azure-keyvault - # azure-loganalytics - # azure-mgmt-advisor - # azure-mgmt-applicationinsights - # azure-mgmt-authorization - # azure-mgmt-batch - # azure-mgmt-batchai - # azure-mgmt-billing - # azure-mgmt-cdn - # azure-mgmt-cognitiveservices - # azure-mgmt-commerce - # azure-mgmt-compute - # azure-mgmt-consumption - # azure-mgmt-containerinstance - # azure-mgmt-containerregistry - # azure-mgmt-containerservice - # azure-mgmt-cosmosdb - # azure-mgmt-datafactory - # azure-mgmt-datalake-analytics - # azure-mgmt-datalake-store - # azure-mgmt-datamigration - # azure-mgmt-devspaces - # azure-mgmt-devtestlabs - # azure-mgmt-dns - # azure-mgmt-eventgrid - # azure-mgmt-eventhub - # azure-mgmt-hanaonazure - # azure-mgmt-iotcentral - # azure-mgmt-iothub - # azure-mgmt-iothubprovisioningservices - # azure-mgmt-keyvault - # azure-mgmt-loganalytics - # azure-mgmt-logic - # azure-mgmt-machinelearningcompute - # azure-mgmt-managementgroups - # azure-mgmt-managementpartner - # azure-mgmt-maps - # azure-mgmt-marketplaceordering - # azure-mgmt-media - # azure-mgmt-monitor - # azure-mgmt-msi - # azure-mgmt-network - # azure-mgmt-notificationhubs - # azure-mgmt-policyinsights - # azure-mgmt-powerbiembedded - # azure-mgmt-rdbms - # azure-mgmt-recoveryservices - # azure-mgmt-recoveryservicesbackup - # azure-mgmt-redis - # azure-mgmt-relay - # azure-mgmt-reservations - # azure-mgmt-resource - # azure-mgmt-scheduler - # azure-mgmt-search - # azure-mgmt-servicebus - # azure-mgmt-servicefabric - # azure-mgmt-signalr - # azure-mgmt-sql - # azure-mgmt-storage - # azure-mgmt-subscription - # azure-mgmt-trafficmanager - # azure-mgmt-web - # azure-servicebus - # azure-servicefabric - # azure-servicemanagement-legacy - # azure-storage-blob - # azure-storage-common - # azure-storage-file - # azure-storage-queue -azure-cosmosdb-nspkg==2.0.2 - # via azure-cosmosdb-table -azure-cosmosdb-table==1.0.6 - # via azure -azure-datalake-store==0.0.51 - # via azure -azure-eventgrid==1.3.0 - # via azure -azure-graphrbac==0.40.0 - # via azure -azure-keyvault==1.1.0 - # via azure -azure-loganalytics==0.1.0 - # via azure -azure-mgmt-advisor==1.0.1 - # via azure-mgmt -azure-mgmt-applicationinsights==0.1.1 - # via azure-mgmt -azure-mgmt-authorization==0.50.0 - # via azure-mgmt -azure-mgmt-batch==5.0.1 - # via azure-mgmt -azure-mgmt-batchai==2.0.0 - # via azure-mgmt -azure-mgmt-billing==0.2.0 - # via azure-mgmt -azure-mgmt-cdn==3.1.0 - # via azure-mgmt -azure-mgmt-cognitiveservices==3.0.0 - # via azure-mgmt -azure-mgmt-commerce==1.0.1 - # via azure-mgmt -azure-mgmt-compute==4.6.2 - # via azure-mgmt -azure-mgmt-consumption==2.0.0 - # via azure-mgmt -azure-mgmt-containerinstance==1.5.0 - # via azure-mgmt -azure-mgmt-containerregistry==2.8.0 - # via azure-mgmt -azure-mgmt-containerservice==4.4.0 - # via azure-mgmt -azure-mgmt-cosmosdb==0.4.1 - # via azure-mgmt -azure-mgmt-datafactory==0.6.0 - # via azure-mgmt -azure-mgmt-datalake-analytics==0.6.0 - # via azure-mgmt -azure-mgmt-datalake-nspkg==3.0.1 - # via - # azure-mgmt-datalake-analytics - # azure-mgmt-datalake-store -azure-mgmt-datalake-store==0.5.0 - # via azure-mgmt -azure-mgmt-datamigration==1.0.0 - # via azure-mgmt -azure-mgmt-devspaces==0.1.0 - # via azure-mgmt -azure-mgmt-devtestlabs==2.2.0 - # via azure-mgmt -azure-mgmt-dns==2.1.0 - # via azure-mgmt -azure-mgmt-eventgrid==1.0.0 - # via azure-mgmt -azure-mgmt-eventhub==2.6.0 - # via azure-mgmt -azure-mgmt-hanaonazure==0.1.1 - # via azure-mgmt -azure-mgmt-iotcentral==0.1.0 - # via azure-mgmt -azure-mgmt-iothub==0.5.0 - # via azure-mgmt -azure-mgmt-iothubprovisioningservices==0.2.0 - # via azure-mgmt -azure-mgmt-keyvault==1.1.0 - # via azure-mgmt -azure-mgmt-loganalytics==0.2.0 - # via azure-mgmt -azure-mgmt-logic==3.0.0 - # via azure-mgmt -azure-mgmt-machinelearningcompute==0.4.1 - # via azure-mgmt -azure-mgmt-managementgroups==0.1.0 - # via azure-mgmt -azure-mgmt-managementpartner==0.1.1 - # via azure-mgmt -azure-mgmt-maps==0.1.0 - # via azure-mgmt -azure-mgmt-marketplaceordering==0.1.0 - # via azure-mgmt -azure-mgmt-media==1.0.0 - # via azure-mgmt -azure-mgmt-monitor==0.5.2 - # via azure-mgmt -azure-mgmt-msi==0.2.0 - # via azure-mgmt -azure-mgmt-network==2.7.0 - # via azure-mgmt -azure-mgmt-notificationhubs==2.1.0 - # via azure-mgmt -azure-mgmt-nspkg==3.0.2 - # via - # azure-mgmt-advisor - # azure-mgmt-applicationinsights - # azure-mgmt-authorization - # azure-mgmt-batch - # azure-mgmt-batchai - # azure-mgmt-billing - # azure-mgmt-cognitiveservices - # azure-mgmt-commerce - # azure-mgmt-consumption - # azure-mgmt-cosmosdb - # azure-mgmt-datafactory - # azure-mgmt-datalake-nspkg - # azure-mgmt-datamigration - # azure-mgmt-devspaces - # azure-mgmt-devtestlabs - # azure-mgmt-dns - # azure-mgmt-eventgrid - # azure-mgmt-hanaonazure - # azure-mgmt-iotcentral - # azure-mgmt-iothub - # azure-mgmt-iothubprovisioningservices - # azure-mgmt-keyvault - # azure-mgmt-loganalytics - # azure-mgmt-logic - # azure-mgmt-machinelearningcompute - # azure-mgmt-managementgroups - # azure-mgmt-maps - # azure-mgmt-marketplaceordering - # azure-mgmt-monitor - # azure-mgmt-msi - # azure-mgmt-policyinsights - # azure-mgmt-powerbiembedded - # azure-mgmt-recoveryservices - # azure-mgmt-recoveryservicesbackup - # azure-mgmt-redis - # azure-mgmt-relay - # azure-mgmt-reservations - # azure-mgmt-scheduler - # azure-mgmt-servicefabric - # azure-mgmt-signalr - # azure-mgmt-sql - # azure-mgmt-storage - # azure-mgmt-subscription - # azure-mgmt-trafficmanager - # azure-mgmt-web -azure-mgmt-policyinsights==0.1.0 - # via azure-mgmt -azure-mgmt-powerbiembedded==2.0.0 - # via azure-mgmt -azure-mgmt-rdbms==1.9.0 - # via azure-mgmt -azure-mgmt-recoveryservices==0.3.0 - # via azure-mgmt -azure-mgmt-recoveryservicesbackup==0.3.0 - # via azure-mgmt -azure-mgmt-redis==5.0.0 - # via azure-mgmt -azure-mgmt-relay==0.1.0 - # via azure-mgmt -azure-mgmt-reservations==0.2.1 - # via azure-mgmt -azure-mgmt-resource==2.2.0 - # via azure-mgmt -azure-mgmt-scheduler==2.0.0 - # via azure-mgmt -azure-mgmt-search==2.1.0 - # via azure-mgmt -azure-mgmt-servicebus==0.5.3 - # via azure-mgmt -azure-mgmt-servicefabric==0.2.0 - # via azure-mgmt -azure-mgmt-signalr==0.1.1 - # via azure-mgmt -azure-mgmt-sql==0.9.1 - # via azure-mgmt -azure-mgmt-storage==2.0.0 - # via azure-mgmt -azure-mgmt-subscription==0.2.0 - # via azure-mgmt -azure-mgmt-trafficmanager==0.50.0 - # via azure-mgmt -azure-mgmt-web==0.35.0 - # via azure-mgmt -azure-mgmt==4.0.0 - # via azure -azure-nspkg==3.0.2 - # via - # azure-applicationinsights - # azure-batch - # azure-cosmosdb-nspkg - # azure-graphrbac - # azure-keyvault - # azure-loganalytics - # azure-mgmt-nspkg - # azure-servicebus - # azure-servicefabric - # azure-servicemanagement-legacy -azure-servicebus==0.21.1 - # via azure -azure-servicefabric==6.3.0.0 - # via azure -azure-servicemanagement-legacy==0.20.7 - # via azure -azure-storage-blob==1.5.0 - # via azure -azure-storage-common==1.4.2 - # via - # azure-storage-blob - # azure-storage-file - # azure-storage-queue -azure-storage-file==1.4.0 - # via azure -azure-storage-queue==1.4.0 - # via azure -azure==4.0.0 ; sys_platform != "win32" - # via -r requirements/static/ci/common.in backports.entry-points-selectable==1.1.0 # via virtualenv bcrypt==3.1.6 @@ -357,7 +55,6 @@ certifi==2023.07.22 # -c requirements/static/ci/../pkg/py3.7/freebsd.txt # -r requirements/static/ci/common.in # kubernetes - # msrest # requests certvalidator==0.11.1 # via vcert @@ -365,7 +62,6 @@ cffi==1.14.6 # via # -c requirements/static/ci/../pkg/py3.7/freebsd.txt # -r requirements/static/ci/common.in - # azure-datalake-store # bcrypt # cryptography # napalm @@ -405,10 +101,6 @@ cryptography==41.0.4 # via # -c requirements/static/ci/../pkg/py3.7/freebsd.txt # -r requirements/static/pkg/freebsd.in - # adal - # azure-cosmosdb-table - # azure-keyvault - # azure-storage-common # etcd3-py # moto # paramiko @@ -483,8 +175,6 @@ iniconfig==1.0.1 # via pytest ipaddress==1.0.22 # via kubernetes -isodate==0.6.0 - # via msrest jaraco.classes==3.2.1 # via # -c requirements/static/ci/../pkg/py3.7/freebsd.txt @@ -571,98 +261,6 @@ msgpack==1.0.2 # -c requirements/static/ci/../pkg/py3.7/freebsd.txt # -r requirements/base.txt # pytest-salt-factories -msrest==0.6.19 - # via - # azure-applicationinsights - # azure-eventgrid - # azure-keyvault - # azure-loganalytics - # azure-mgmt-cdn - # azure-mgmt-compute - # azure-mgmt-containerinstance - # azure-mgmt-containerregistry - # azure-mgmt-containerservice - # azure-mgmt-dns - # azure-mgmt-eventhub - # azure-mgmt-keyvault - # azure-mgmt-managementpartner - # azure-mgmt-media - # azure-mgmt-network - # azure-mgmt-notificationhubs - # azure-mgmt-rdbms - # azure-mgmt-resource - # azure-mgmt-search - # azure-mgmt-servicebus - # azure-mgmt-servicefabric - # azure-mgmt-signalr - # azure-servicefabric - # msrestazure -msrestazure==0.6.4 - # via - # azure-batch - # azure-eventgrid - # azure-graphrbac - # azure-keyvault - # azure-mgmt-advisor - # azure-mgmt-applicationinsights - # azure-mgmt-authorization - # azure-mgmt-batch - # azure-mgmt-batchai - # azure-mgmt-billing - # azure-mgmt-cdn - # azure-mgmt-cognitiveservices - # azure-mgmt-commerce - # azure-mgmt-compute - # azure-mgmt-consumption - # azure-mgmt-containerinstance - # azure-mgmt-containerregistry - # azure-mgmt-containerservice - # azure-mgmt-cosmosdb - # azure-mgmt-datafactory - # azure-mgmt-datalake-analytics - # azure-mgmt-datalake-store - # azure-mgmt-datamigration - # azure-mgmt-devspaces - # azure-mgmt-devtestlabs - # azure-mgmt-dns - # azure-mgmt-eventgrid - # azure-mgmt-eventhub - # azure-mgmt-hanaonazure - # azure-mgmt-iotcentral - # azure-mgmt-iothub - # azure-mgmt-iothubprovisioningservices - # azure-mgmt-keyvault - # azure-mgmt-loganalytics - # azure-mgmt-logic - # azure-mgmt-machinelearningcompute - # azure-mgmt-managementgroups - # azure-mgmt-managementpartner - # azure-mgmt-maps - # azure-mgmt-marketplaceordering - # azure-mgmt-media - # azure-mgmt-monitor - # azure-mgmt-msi - # azure-mgmt-network - # azure-mgmt-notificationhubs - # azure-mgmt-policyinsights - # azure-mgmt-powerbiembedded - # azure-mgmt-rdbms - # azure-mgmt-recoveryservices - # azure-mgmt-recoveryservicesbackup - # azure-mgmt-redis - # azure-mgmt-relay - # azure-mgmt-reservations - # azure-mgmt-resource - # azure-mgmt-scheduler - # azure-mgmt-search - # azure-mgmt-servicebus - # azure-mgmt-servicefabric - # azure-mgmt-signalr - # azure-mgmt-sql - # azure-mgmt-storage - # azure-mgmt-subscription - # azure-mgmt-trafficmanager - # azure-mgmt-web multidict==6.0.2 # via # aiohttp @@ -680,8 +278,6 @@ netmiko==3.2.0 # via napalm ntc-templates==1.4.0 # via junos-eznc -oauthlib==3.2.2 - # via requests-oauthlib oscrypto==1.2.0 # via certvalidator packaging==22.0 @@ -741,8 +337,6 @@ pygit2==1.10.1 # via -r requirements/static/ci/freebsd.in pyinotify==0.9.6 ; sys_platform != "win32" and sys_platform != "darwin" and platform_system != "openbsd" # via -r requirements/static/ci/common.in -pyjwt==2.4.0 - # via adal pynacl==1.5.0 # via # -r requirements/static/ci/common.in @@ -799,9 +393,6 @@ python-dateutil==2.8.1 # via # -c requirements/static/ci/../pkg/py3.7/freebsd.txt # -r requirements/static/pkg/freebsd.in - # adal - # azure-cosmosdb-table - # azure-storage-common # botocore # croniter # kubernetes @@ -836,29 +427,18 @@ pyzmq==23.2.0 # -c requirements/static/ci/../pkg/py3.7/freebsd.txt # -r requirements/zeromq.txt # pytest-salt-factories -requests-oauthlib==1.3.0 - # via msrest requests==2.31.0 # via # -c requirements/static/ci/../pkg/py3.7/freebsd.txt # -r requirements/base.txt # -r requirements/static/ci/common.in - # adal # apache-libcloud - # azure-cosmosdb-table - # azure-datalake-store - # azure-keyvault - # azure-servicebus - # azure-servicemanagement-legacy - # azure-storage-common # docker # etcd3-py # kubernetes # moto - # msrest # napalm # pyvmomi - # requests-oauthlib # responses # vcert responses==0.10.6 @@ -889,13 +469,11 @@ six==1.16.0 # etcd3-py # genshi # geomet - # isodate # jsonschema # junos-eznc # kazoo # kubernetes # more-itertools - # msrestazure # ncclient # paramiko # python-dateutil diff --git a/requirements/static/ci/py3.7/lint.txt b/requirements/static/ci/py3.7/lint.txt index 63ac0a28c01..489c4cd9403 100644 --- a/requirements/static/ci/py3.7/lint.txt +++ b/requirements/static/ci/py3.7/lint.txt @@ -4,11 +4,6 @@ # # pip-compile --no-emit-index-url --output-file=requirements/static/ci/py3.7/lint.txt requirements/base.txt requirements/static/ci/common.in requirements/static/ci/lint.in requirements/static/ci/linux.in requirements/static/pkg/linux.in requirements/zeromq.txt # -adal==1.2.3 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-datalake-store - # msrestazure aiohttp==3.8.5 # via # -c requirements/static/ci/py3.7/linux.txt @@ -53,468 +48,6 @@ attrs==23.1.0 # -c requirements/static/ci/py3.7/linux.txt # aiohttp # jsonschema -azure-applicationinsights==0.1.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure -azure-batch==4.1.3 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure -azure-common==1.1.18 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-applicationinsights - # azure-batch - # azure-cosmosdb-table - # azure-eventgrid - # azure-graphrbac - # azure-keyvault - # azure-loganalytics - # azure-mgmt-advisor - # azure-mgmt-applicationinsights - # azure-mgmt-authorization - # azure-mgmt-batch - # azure-mgmt-batchai - # azure-mgmt-billing - # azure-mgmt-cdn - # azure-mgmt-cognitiveservices - # azure-mgmt-commerce - # azure-mgmt-compute - # azure-mgmt-consumption - # azure-mgmt-containerinstance - # azure-mgmt-containerregistry - # azure-mgmt-containerservice - # azure-mgmt-cosmosdb - # azure-mgmt-datafactory - # azure-mgmt-datalake-analytics - # azure-mgmt-datalake-store - # azure-mgmt-datamigration - # azure-mgmt-devspaces - # azure-mgmt-devtestlabs - # azure-mgmt-dns - # azure-mgmt-eventgrid - # azure-mgmt-eventhub - # azure-mgmt-hanaonazure - # azure-mgmt-iotcentral - # azure-mgmt-iothub - # azure-mgmt-iothubprovisioningservices - # azure-mgmt-keyvault - # azure-mgmt-loganalytics - # azure-mgmt-logic - # azure-mgmt-machinelearningcompute - # azure-mgmt-managementgroups - # azure-mgmt-managementpartner - # azure-mgmt-maps - # azure-mgmt-marketplaceordering - # azure-mgmt-media - # azure-mgmt-monitor - # azure-mgmt-msi - # azure-mgmt-network - # azure-mgmt-notificationhubs - # azure-mgmt-policyinsights - # azure-mgmt-powerbiembedded - # azure-mgmt-rdbms - # azure-mgmt-recoveryservices - # azure-mgmt-recoveryservicesbackup - # azure-mgmt-redis - # azure-mgmt-relay - # azure-mgmt-reservations - # azure-mgmt-resource - # azure-mgmt-scheduler - # azure-mgmt-search - # azure-mgmt-servicebus - # azure-mgmt-servicefabric - # azure-mgmt-signalr - # azure-mgmt-sql - # azure-mgmt-storage - # azure-mgmt-subscription - # azure-mgmt-trafficmanager - # azure-mgmt-web - # azure-servicebus - # azure-servicefabric - # azure-servicemanagement-legacy - # azure-storage-blob - # azure-storage-common - # azure-storage-file - # azure-storage-queue -azure-cosmosdb-nspkg==2.0.2 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-cosmosdb-table -azure-cosmosdb-table==1.0.5 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure -azure-datalake-store==0.0.44 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure -azure-eventgrid==1.2.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure -azure-graphrbac==0.40.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure -azure-keyvault==1.1.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure -azure-loganalytics==0.1.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure -azure-mgmt-advisor==1.0.1 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-applicationinsights==0.1.1 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-authorization==0.50.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-batch==5.0.1 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-batchai==2.0.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-billing==0.2.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-cdn==3.1.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-cognitiveservices==3.0.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-commerce==1.0.1 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-compute==4.6.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-consumption==2.0.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-containerinstance==1.4.1 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-containerregistry==2.7.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-containerservice==4.4.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-cosmosdb==0.4.1 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-datafactory==0.6.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-datalake-analytics==0.6.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-datalake-nspkg==3.0.1 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt-datalake-analytics - # azure-mgmt-datalake-store -azure-mgmt-datalake-store==0.5.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-datamigration==1.0.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-devspaces==0.1.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-devtestlabs==2.2.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-dns==2.1.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-eventgrid==1.0.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-eventhub==2.5.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-hanaonazure==0.1.1 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-iotcentral==0.1.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-iothub==0.5.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-iothubprovisioningservices==0.2.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-keyvault==1.1.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-loganalytics==0.2.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-logic==3.0.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-machinelearningcompute==0.4.1 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-managementgroups==0.1.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-managementpartner==0.1.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-maps==0.1.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-marketplaceordering==0.1.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-media==1.0.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-monitor==0.5.2 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-msi==0.2.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-network==2.6.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-notificationhubs==2.0.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-nspkg==3.0.2 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt-advisor - # azure-mgmt-applicationinsights - # azure-mgmt-authorization - # azure-mgmt-batch - # azure-mgmt-batchai - # azure-mgmt-billing - # azure-mgmt-cognitiveservices - # azure-mgmt-commerce - # azure-mgmt-consumption - # azure-mgmt-cosmosdb - # azure-mgmt-datafactory - # azure-mgmt-datalake-nspkg - # azure-mgmt-datamigration - # azure-mgmt-devspaces - # azure-mgmt-devtestlabs - # azure-mgmt-dns - # azure-mgmt-eventgrid - # azure-mgmt-hanaonazure - # azure-mgmt-iotcentral - # azure-mgmt-iothub - # azure-mgmt-iothubprovisioningservices - # azure-mgmt-keyvault - # azure-mgmt-loganalytics - # azure-mgmt-logic - # azure-mgmt-machinelearningcompute - # azure-mgmt-managementgroups - # azure-mgmt-managementpartner - # azure-mgmt-maps - # azure-mgmt-marketplaceordering - # azure-mgmt-monitor - # azure-mgmt-msi - # azure-mgmt-notificationhubs - # azure-mgmt-policyinsights - # azure-mgmt-powerbiembedded - # azure-mgmt-recoveryservices - # azure-mgmt-recoveryservicesbackup - # azure-mgmt-redis - # azure-mgmt-relay - # azure-mgmt-reservations - # azure-mgmt-scheduler - # azure-mgmt-search - # azure-mgmt-servicefabric - # azure-mgmt-signalr - # azure-mgmt-sql - # azure-mgmt-storage - # azure-mgmt-subscription - # azure-mgmt-trafficmanager - # azure-mgmt-web -azure-mgmt-policyinsights==0.1.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-powerbiembedded==2.0.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-rdbms==1.8.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-recoveryservices==0.3.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-recoveryservicesbackup==0.3.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-redis==5.0.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-relay==0.1.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-reservations==0.2.1 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-resource==2.1.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-scheduler==2.0.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-search==2.0.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-servicebus==0.5.3 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-servicefabric==0.2.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-signalr==0.1.1 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-sql==0.9.1 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-storage==2.0.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-subscription==0.2.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-trafficmanager==0.50.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt-web==0.35.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-mgmt -azure-mgmt==4.0.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure -azure-nspkg==3.0.2 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-applicationinsights - # azure-batch - # azure-cosmosdb-nspkg - # azure-eventgrid - # azure-graphrbac - # azure-keyvault - # azure-loganalytics - # azure-mgmt-nspkg - # azure-servicebus - # azure-servicefabric - # azure-servicemanagement-legacy -azure-servicebus==0.21.1 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure -azure-servicefabric==6.3.0.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure -azure-servicemanagement-legacy==0.20.6 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure -azure-storage-blob==1.5.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure -azure-storage-common==1.4.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-cosmosdb-table - # azure-storage-blob - # azure-storage-file - # azure-storage-queue -azure-storage-file==1.4.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure -azure-storage-queue==1.4.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure -azure==4.0.0 ; sys_platform != "win32" - # via - # -c requirements/static/ci/py3.7/linux.txt - # -r requirements/static/ci/common.in backports.entry-points-selectable==1.1.0 # via # -c requirements/static/ci/py3.7/linux.txt @@ -562,7 +95,6 @@ certifi==2023.07.22 # -c requirements/static/ci/py3.7/linux.txt # -r requirements/static/ci/common.in # kubernetes - # msrest # python-telegram-bot # requests certvalidator==0.11.1 @@ -574,7 +106,6 @@ cffi==1.14.6 # -c requirements/static/ci/../pkg/py3.7/linux.txt # -c requirements/static/ci/py3.7/linux.txt # -r requirements/static/ci/common.in - # azure-datalake-store # bcrypt # cryptography # napalm @@ -631,11 +162,7 @@ cryptography==41.0.4 # -c requirements/static/ci/../pkg/py3.7/linux.txt # -c requirements/static/ci/py3.7/linux.txt # -r requirements/static/pkg/linux.in - # adal # ansible-core - # azure-cosmosdb-table - # azure-keyvault - # azure-storage-common # etcd3-py # moto # paramiko @@ -729,10 +256,6 @@ ipaddress==1.0.22 # via # -c requirements/static/ci/py3.7/linux.txt # kubernetes -isodate==0.6.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # msrest isort==4.3.21 # via pylint jaraco.classes==3.2.1 @@ -854,97 +377,6 @@ msgpack==1.0.2 # -c requirements/static/ci/../pkg/py3.7/linux.txt # -c requirements/static/ci/py3.7/linux.txt # -r requirements/base.txt -msrest==0.6.14 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-applicationinsights - # azure-eventgrid - # azure-keyvault - # azure-loganalytics - # azure-mgmt-cdn - # azure-mgmt-compute - # azure-mgmt-containerinstance - # azure-mgmt-containerregistry - # azure-mgmt-containerservice - # azure-mgmt-dns - # azure-mgmt-eventhub - # azure-mgmt-keyvault - # azure-mgmt-media - # azure-mgmt-network - # azure-mgmt-rdbms - # azure-mgmt-resource - # azure-mgmt-servicebus - # azure-mgmt-servicefabric - # azure-mgmt-signalr - # azure-servicefabric - # msrestazure -msrestazure==0.6.3 - # via - # -c requirements/static/ci/py3.7/linux.txt - # azure-batch - # azure-eventgrid - # azure-graphrbac - # azure-keyvault - # azure-mgmt-advisor - # azure-mgmt-applicationinsights - # azure-mgmt-authorization - # azure-mgmt-batch - # azure-mgmt-batchai - # azure-mgmt-billing - # azure-mgmt-cdn - # azure-mgmt-cognitiveservices - # azure-mgmt-commerce - # azure-mgmt-compute - # azure-mgmt-consumption - # azure-mgmt-containerinstance - # azure-mgmt-containerregistry - # azure-mgmt-containerservice - # azure-mgmt-cosmosdb - # azure-mgmt-datafactory - # azure-mgmt-datalake-analytics - # azure-mgmt-datalake-store - # azure-mgmt-datamigration - # azure-mgmt-devspaces - # azure-mgmt-devtestlabs - # azure-mgmt-dns - # azure-mgmt-eventgrid - # azure-mgmt-eventhub - # azure-mgmt-hanaonazure - # azure-mgmt-iotcentral - # azure-mgmt-iothub - # azure-mgmt-iothubprovisioningservices - # azure-mgmt-keyvault - # azure-mgmt-loganalytics - # azure-mgmt-logic - # azure-mgmt-machinelearningcompute - # azure-mgmt-managementgroups - # azure-mgmt-managementpartner - # azure-mgmt-maps - # azure-mgmt-marketplaceordering - # azure-mgmt-media - # azure-mgmt-monitor - # azure-mgmt-msi - # azure-mgmt-network - # azure-mgmt-notificationhubs - # azure-mgmt-policyinsights - # azure-mgmt-powerbiembedded - # azure-mgmt-rdbms - # azure-mgmt-recoveryservices - # azure-mgmt-recoveryservicesbackup - # azure-mgmt-redis - # azure-mgmt-relay - # azure-mgmt-reservations - # azure-mgmt-resource - # azure-mgmt-scheduler - # azure-mgmt-search - # azure-mgmt-servicebus - # azure-mgmt-servicefabric - # azure-mgmt-signalr - # azure-mgmt-sql - # azure-mgmt-storage - # azure-mgmt-subscription - # azure-mgmt-trafficmanager - # azure-mgmt-web multidict==6.0.2 # via # -c requirements/static/ci/py3.7/linux.txt @@ -972,10 +404,6 @@ ntc-templates==1.4.0 # via # -c requirements/static/ci/py3.7/linux.txt # junos-eznc -oauthlib==3.2.2 - # via - # -c requirements/static/ci/py3.7/linux.txt - # requests-oauthlib oscrypto==1.2.0 # via # -c requirements/static/ci/py3.7/linux.txt @@ -1063,7 +491,6 @@ pyinotify==0.9.6 ; sys_platform != "win32" and sys_platform != "darwin" and plat pyjwt==2.4.0 # via # -c requirements/static/ci/py3.7/linux.txt - # adal # twilio pylint==2.4.4 # via @@ -1106,9 +533,6 @@ python-dateutil==2.8.1 # -c requirements/static/ci/../pkg/py3.7/linux.txt # -c requirements/static/ci/py3.7/linux.txt # -r requirements/static/pkg/linux.in - # adal - # azure-cosmosdb-table - # azure-storage-common # botocore # croniter # kubernetes @@ -1165,33 +589,20 @@ redis==3.5.3 # via # -c requirements/static/ci/py3.7/linux.txt # redis-py-cluster -requests-oauthlib==1.3.0 - # via - # -c requirements/static/ci/py3.7/linux.txt - # msrest requests==2.31.0 # via # -c requirements/static/ci/../pkg/py3.7/linux.txt # -c requirements/static/ci/py3.7/linux.txt # -r requirements/base.txt # -r requirements/static/ci/common.in - # adal # apache-libcloud - # azure-cosmosdb-table - # azure-datalake-store - # azure-keyvault - # azure-servicebus - # azure-servicemanagement-legacy - # azure-storage-common # docker # etcd3-py # kubernetes # moto - # msrest # napalm # python-consul # pyvmomi - # requests-oauthlib # responses # twilio # vcert @@ -1249,7 +660,6 @@ six==1.16.0 # etcd3-py # genshi # geomet - # isodate # jsonschema # junos-eznc # kazoo diff --git a/requirements/static/ci/py3.7/linux.txt b/requirements/static/ci/py3.7/linux.txt index 080276882d3..fbfa9435110 100644 --- a/requirements/static/ci/py3.7/linux.txt +++ b/requirements/static/ci/py3.7/linux.txt @@ -4,10 +4,6 @@ # # pip-compile --no-emit-index-url --output-file=requirements/static/ci/py3.7/linux.txt requirements/base.txt requirements/pytest.txt requirements/static/ci/common.in requirements/static/ci/linux.in requirements/static/pkg/linux.in requirements/zeromq.txt # -adal==1.2.3 - # via - # azure-datalake-store - # msrestazure aiohttp==3.8.5 # via etcd3-py aiosignal==1.2.0 @@ -37,309 +33,6 @@ attrs==23.1.0 # pytest-shell-utilities # pytest-skip-markers # pytest-system-statistics -azure-applicationinsights==0.1.0 - # via azure -azure-batch==4.1.3 - # via azure -azure-common==1.1.18 - # via - # azure-applicationinsights - # azure-batch - # azure-cosmosdb-table - # azure-eventgrid - # azure-graphrbac - # azure-keyvault - # azure-loganalytics - # azure-mgmt-advisor - # azure-mgmt-applicationinsights - # azure-mgmt-authorization - # azure-mgmt-batch - # azure-mgmt-batchai - # azure-mgmt-billing - # azure-mgmt-cdn - # azure-mgmt-cognitiveservices - # azure-mgmt-commerce - # azure-mgmt-compute - # azure-mgmt-consumption - # azure-mgmt-containerinstance - # azure-mgmt-containerregistry - # azure-mgmt-containerservice - # azure-mgmt-cosmosdb - # azure-mgmt-datafactory - # azure-mgmt-datalake-analytics - # azure-mgmt-datalake-store - # azure-mgmt-datamigration - # azure-mgmt-devspaces - # azure-mgmt-devtestlabs - # azure-mgmt-dns - # azure-mgmt-eventgrid - # azure-mgmt-eventhub - # azure-mgmt-hanaonazure - # azure-mgmt-iotcentral - # azure-mgmt-iothub - # azure-mgmt-iothubprovisioningservices - # azure-mgmt-keyvault - # azure-mgmt-loganalytics - # azure-mgmt-logic - # azure-mgmt-machinelearningcompute - # azure-mgmt-managementgroups - # azure-mgmt-managementpartner - # azure-mgmt-maps - # azure-mgmt-marketplaceordering - # azure-mgmt-media - # azure-mgmt-monitor - # azure-mgmt-msi - # azure-mgmt-network - # azure-mgmt-notificationhubs - # azure-mgmt-policyinsights - # azure-mgmt-powerbiembedded - # azure-mgmt-rdbms - # azure-mgmt-recoveryservices - # azure-mgmt-recoveryservicesbackup - # azure-mgmt-redis - # azure-mgmt-relay - # azure-mgmt-reservations - # azure-mgmt-resource - # azure-mgmt-scheduler - # azure-mgmt-search - # azure-mgmt-servicebus - # azure-mgmt-servicefabric - # azure-mgmt-signalr - # azure-mgmt-sql - # azure-mgmt-storage - # azure-mgmt-subscription - # azure-mgmt-trafficmanager - # azure-mgmt-web - # azure-servicebus - # azure-servicefabric - # azure-servicemanagement-legacy - # azure-storage-blob - # azure-storage-common - # azure-storage-file - # azure-storage-queue -azure-cosmosdb-nspkg==2.0.2 - # via azure-cosmosdb-table -azure-cosmosdb-table==1.0.5 - # via azure -azure-datalake-store==0.0.44 - # via azure -azure-eventgrid==1.2.0 - # via azure -azure-graphrbac==0.40.0 - # via azure -azure-keyvault==1.1.0 - # via azure -azure-loganalytics==0.1.0 - # via azure -azure-mgmt-advisor==1.0.1 - # via azure-mgmt -azure-mgmt-applicationinsights==0.1.1 - # via azure-mgmt -azure-mgmt-authorization==0.50.0 - # via azure-mgmt -azure-mgmt-batch==5.0.1 - # via azure-mgmt -azure-mgmt-batchai==2.0.0 - # via azure-mgmt -azure-mgmt-billing==0.2.0 - # via azure-mgmt -azure-mgmt-cdn==3.1.0 - # via azure-mgmt -azure-mgmt-cognitiveservices==3.0.0 - # via azure-mgmt -azure-mgmt-commerce==1.0.1 - # via azure-mgmt -azure-mgmt-compute==4.6.0 - # via azure-mgmt -azure-mgmt-consumption==2.0.0 - # via azure-mgmt -azure-mgmt-containerinstance==1.4.1 - # via azure-mgmt -azure-mgmt-containerregistry==2.7.0 - # via azure-mgmt -azure-mgmt-containerservice==4.4.0 - # via azure-mgmt -azure-mgmt-cosmosdb==0.4.1 - # via azure-mgmt -azure-mgmt-datafactory==0.6.0 - # via azure-mgmt -azure-mgmt-datalake-analytics==0.6.0 - # via azure-mgmt -azure-mgmt-datalake-nspkg==3.0.1 - # via - # azure-mgmt-datalake-analytics - # azure-mgmt-datalake-store -azure-mgmt-datalake-store==0.5.0 - # via azure-mgmt -azure-mgmt-datamigration==1.0.0 - # via azure-mgmt -azure-mgmt-devspaces==0.1.0 - # via azure-mgmt -azure-mgmt-devtestlabs==2.2.0 - # via azure-mgmt -azure-mgmt-dns==2.1.0 - # via azure-mgmt -azure-mgmt-eventgrid==1.0.0 - # via azure-mgmt -azure-mgmt-eventhub==2.5.0 - # via azure-mgmt -azure-mgmt-hanaonazure==0.1.1 - # via azure-mgmt -azure-mgmt-iotcentral==0.1.0 - # via azure-mgmt -azure-mgmt-iothub==0.5.0 - # via azure-mgmt -azure-mgmt-iothubprovisioningservices==0.2.0 - # via azure-mgmt -azure-mgmt-keyvault==1.1.0 - # via azure-mgmt -azure-mgmt-loganalytics==0.2.0 - # via azure-mgmt -azure-mgmt-logic==3.0.0 - # via azure-mgmt -azure-mgmt-machinelearningcompute==0.4.1 - # via azure-mgmt -azure-mgmt-managementgroups==0.1.0 - # via azure-mgmt -azure-mgmt-managementpartner==0.1.0 - # via azure-mgmt -azure-mgmt-maps==0.1.0 - # via azure-mgmt -azure-mgmt-marketplaceordering==0.1.0 - # via azure-mgmt -azure-mgmt-media==1.0.0 - # via azure-mgmt -azure-mgmt-monitor==0.5.2 - # via azure-mgmt -azure-mgmt-msi==0.2.0 - # via azure-mgmt -azure-mgmt-network==2.6.0 - # via azure-mgmt -azure-mgmt-notificationhubs==2.0.0 - # via azure-mgmt -azure-mgmt-nspkg==3.0.2 - # via - # azure-mgmt-advisor - # azure-mgmt-applicationinsights - # azure-mgmt-authorization - # azure-mgmt-batch - # azure-mgmt-batchai - # azure-mgmt-billing - # azure-mgmt-cognitiveservices - # azure-mgmt-commerce - # azure-mgmt-consumption - # azure-mgmt-cosmosdb - # azure-mgmt-datafactory - # azure-mgmt-datalake-nspkg - # azure-mgmt-datamigration - # azure-mgmt-devspaces - # azure-mgmt-devtestlabs - # azure-mgmt-dns - # azure-mgmt-eventgrid - # azure-mgmt-hanaonazure - # azure-mgmt-iotcentral - # azure-mgmt-iothub - # azure-mgmt-iothubprovisioningservices - # azure-mgmt-keyvault - # azure-mgmt-loganalytics - # azure-mgmt-logic - # azure-mgmt-machinelearningcompute - # azure-mgmt-managementgroups - # azure-mgmt-managementpartner - # azure-mgmt-maps - # azure-mgmt-marketplaceordering - # azure-mgmt-monitor - # azure-mgmt-msi - # azure-mgmt-notificationhubs - # azure-mgmt-policyinsights - # azure-mgmt-powerbiembedded - # azure-mgmt-recoveryservices - # azure-mgmt-recoveryservicesbackup - # azure-mgmt-redis - # azure-mgmt-relay - # azure-mgmt-reservations - # azure-mgmt-scheduler - # azure-mgmt-search - # azure-mgmt-servicefabric - # azure-mgmt-signalr - # azure-mgmt-sql - # azure-mgmt-storage - # azure-mgmt-subscription - # azure-mgmt-trafficmanager - # azure-mgmt-web -azure-mgmt-policyinsights==0.1.0 - # via azure-mgmt -azure-mgmt-powerbiembedded==2.0.0 - # via azure-mgmt -azure-mgmt-rdbms==1.8.0 - # via azure-mgmt -azure-mgmt-recoveryservices==0.3.0 - # via azure-mgmt -azure-mgmt-recoveryservicesbackup==0.3.0 - # via azure-mgmt -azure-mgmt-redis==5.0.0 - # via azure-mgmt -azure-mgmt-relay==0.1.0 - # via azure-mgmt -azure-mgmt-reservations==0.2.1 - # via azure-mgmt -azure-mgmt-resource==2.1.0 - # via azure-mgmt -azure-mgmt-scheduler==2.0.0 - # via azure-mgmt -azure-mgmt-search==2.0.0 - # via azure-mgmt -azure-mgmt-servicebus==0.5.3 - # via azure-mgmt -azure-mgmt-servicefabric==0.2.0 - # via azure-mgmt -azure-mgmt-signalr==0.1.1 - # via azure-mgmt -azure-mgmt-sql==0.9.1 - # via azure-mgmt -azure-mgmt-storage==2.0.0 - # via azure-mgmt -azure-mgmt-subscription==0.2.0 - # via azure-mgmt -azure-mgmt-trafficmanager==0.50.0 - # via azure-mgmt -azure-mgmt-web==0.35.0 - # via azure-mgmt -azure-mgmt==4.0.0 - # via azure -azure-nspkg==3.0.2 - # via - # azure-applicationinsights - # azure-batch - # azure-cosmosdb-nspkg - # azure-eventgrid - # azure-graphrbac - # azure-keyvault - # azure-loganalytics - # azure-mgmt-nspkg - # azure-servicebus - # azure-servicefabric - # azure-servicemanagement-legacy -azure-servicebus==0.21.1 - # via azure -azure-servicefabric==6.3.0.0 - # via azure -azure-servicemanagement-legacy==0.20.6 - # via azure -azure-storage-blob==1.5.0 - # via azure -azure-storage-common==1.4.0 - # via - # azure-cosmosdb-table - # azure-storage-blob - # azure-storage-file - # azure-storage-queue -azure-storage-file==1.4.0 - # via azure -azure-storage-queue==1.4.0 - # via azure -azure==4.0.0 ; sys_platform != "win32" - # via -r requirements/static/ci/common.in backports.entry-points-selectable==1.1.0 # via virtualenv backports.zoneinfo==0.2.1 @@ -372,7 +65,6 @@ certifi==2023.07.22 # -c requirements/static/ci/../pkg/py3.7/linux.txt # -r requirements/static/ci/common.in # kubernetes - # msrest # python-telegram-bot # requests certvalidator==0.11.1 @@ -381,7 +73,6 @@ cffi==1.14.6 # via # -c requirements/static/ci/../pkg/py3.7/linux.txt # -r requirements/static/ci/common.in - # azure-datalake-store # bcrypt # cryptography # napalm @@ -421,11 +112,7 @@ cryptography==41.0.4 # via # -c requirements/static/ci/../pkg/py3.7/linux.txt # -r requirements/static/pkg/linux.in - # adal # ansible-core - # azure-cosmosdb-table - # azure-keyvault - # azure-storage-common # etcd3-py # moto # paramiko @@ -499,8 +186,6 @@ iniconfig==1.0.1 # via pytest ipaddress==1.0.22 # via kubernetes -isodate==0.6.0 - # via msrest jaraco.classes==3.2.1 # via # -c requirements/static/ci/../pkg/py3.7/linux.txt @@ -588,95 +273,6 @@ msgpack==1.0.2 # -c requirements/static/ci/../pkg/py3.7/linux.txt # -r requirements/base.txt # pytest-salt-factories -msrest==0.6.14 - # via - # azure-applicationinsights - # azure-eventgrid - # azure-keyvault - # azure-loganalytics - # azure-mgmt-cdn - # azure-mgmt-compute - # azure-mgmt-containerinstance - # azure-mgmt-containerregistry - # azure-mgmt-containerservice - # azure-mgmt-dns - # azure-mgmt-eventhub - # azure-mgmt-keyvault - # azure-mgmt-media - # azure-mgmt-network - # azure-mgmt-rdbms - # azure-mgmt-resource - # azure-mgmt-servicebus - # azure-mgmt-servicefabric - # azure-mgmt-signalr - # azure-servicefabric - # msrestazure -msrestazure==0.6.3 - # via - # azure-batch - # azure-eventgrid - # azure-graphrbac - # azure-keyvault - # azure-mgmt-advisor - # azure-mgmt-applicationinsights - # azure-mgmt-authorization - # azure-mgmt-batch - # azure-mgmt-batchai - # azure-mgmt-billing - # azure-mgmt-cdn - # azure-mgmt-cognitiveservices - # azure-mgmt-commerce - # azure-mgmt-compute - # azure-mgmt-consumption - # azure-mgmt-containerinstance - # azure-mgmt-containerregistry - # azure-mgmt-containerservice - # azure-mgmt-cosmosdb - # azure-mgmt-datafactory - # azure-mgmt-datalake-analytics - # azure-mgmt-datalake-store - # azure-mgmt-datamigration - # azure-mgmt-devspaces - # azure-mgmt-devtestlabs - # azure-mgmt-dns - # azure-mgmt-eventgrid - # azure-mgmt-eventhub - # azure-mgmt-hanaonazure - # azure-mgmt-iotcentral - # azure-mgmt-iothub - # azure-mgmt-iothubprovisioningservices - # azure-mgmt-keyvault - # azure-mgmt-loganalytics - # azure-mgmt-logic - # azure-mgmt-machinelearningcompute - # azure-mgmt-managementgroups - # azure-mgmt-managementpartner - # azure-mgmt-maps - # azure-mgmt-marketplaceordering - # azure-mgmt-media - # azure-mgmt-monitor - # azure-mgmt-msi - # azure-mgmt-network - # azure-mgmt-notificationhubs - # azure-mgmt-policyinsights - # azure-mgmt-powerbiembedded - # azure-mgmt-rdbms - # azure-mgmt-recoveryservices - # azure-mgmt-recoveryservicesbackup - # azure-mgmt-redis - # azure-mgmt-relay - # azure-mgmt-reservations - # azure-mgmt-resource - # azure-mgmt-scheduler - # azure-mgmt-search - # azure-mgmt-servicebus - # azure-mgmt-servicefabric - # azure-mgmt-signalr - # azure-mgmt-sql - # azure-mgmt-storage - # azure-mgmt-subscription - # azure-mgmt-trafficmanager - # azure-mgmt-web multidict==6.0.2 # via # aiohttp @@ -694,8 +290,6 @@ netmiko==3.2.0 # via napalm ntc-templates==1.4.0 # via junos-eznc -oauthlib==3.2.2 - # via requests-oauthlib oscrypto==1.2.0 # via certvalidator packaging==22.0 @@ -759,9 +353,7 @@ pyiface==0.0.11 pyinotify==0.9.6 ; sys_platform != "win32" and sys_platform != "darwin" and platform_system != "openbsd" # via -r requirements/static/ci/common.in pyjwt==2.4.0 - # via - # adal - # twilio + # via twilio pymysql==1.0.2 # via -r requirements/static/ci/linux.in pynacl==1.5.0 @@ -822,9 +414,6 @@ python-dateutil==2.8.1 # via # -c requirements/static/ci/../pkg/py3.7/linux.txt # -r requirements/static/pkg/linux.in - # adal - # azure-cosmosdb-table - # azure-storage-common # botocore # croniter # kubernetes @@ -869,30 +458,19 @@ redis-py-cluster==2.1.3 # via -r requirements/static/ci/linux.in redis==3.5.3 # via redis-py-cluster -requests-oauthlib==1.3.0 - # via msrest requests==2.31.0 # via # -c requirements/static/ci/../pkg/py3.7/linux.txt # -r requirements/base.txt # -r requirements/static/ci/common.in - # adal # apache-libcloud - # azure-cosmosdb-table - # azure-datalake-store - # azure-keyvault - # azure-servicebus - # azure-servicemanagement-legacy - # azure-storage-common # docker # etcd3-py # kubernetes # moto - # msrest # napalm # python-consul # pyvmomi - # requests-oauthlib # responses # twilio # vcert @@ -931,7 +509,6 @@ six==1.16.0 # etcd3-py # genshi # geomet - # isodate # jsonschema # junos-eznc # kazoo diff --git a/requirements/static/ci/py3.8/cloud.txt b/requirements/static/ci/py3.8/cloud.txt index 9b62607515d..4dae57d76ec 100644 --- a/requirements/static/ci/py3.8/cloud.txt +++ b/requirements/static/ci/py3.8/cloud.txt @@ -4,11 +4,6 @@ # # pip-compile --no-emit-index-url --output-file=requirements/static/ci/py3.8/cloud.txt requirements/base.txt requirements/pytest.txt requirements/static/ci/cloud.in requirements/static/ci/common.in requirements/static/pkg/linux.in requirements/zeromq.txt # -adal==1.2.3 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-datalake-store - # msrestazure aiohttp==3.8.5 # via # -c requirements/static/ci/py3.8/linux.txt @@ -41,468 +36,6 @@ attrs==23.1.0 # pytest-shell-utilities # pytest-skip-markers # pytest-system-statistics -azure-applicationinsights==0.1.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure -azure-batch==4.1.3 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure -azure-common==1.1.18 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-applicationinsights - # azure-batch - # azure-cosmosdb-table - # azure-eventgrid - # azure-graphrbac - # azure-keyvault - # azure-loganalytics - # azure-mgmt-advisor - # azure-mgmt-applicationinsights - # azure-mgmt-authorization - # azure-mgmt-batch - # azure-mgmt-batchai - # azure-mgmt-billing - # azure-mgmt-cdn - # azure-mgmt-cognitiveservices - # azure-mgmt-commerce - # azure-mgmt-compute - # azure-mgmt-consumption - # azure-mgmt-containerinstance - # azure-mgmt-containerregistry - # azure-mgmt-containerservice - # azure-mgmt-cosmosdb - # azure-mgmt-datafactory - # azure-mgmt-datalake-analytics - # azure-mgmt-datalake-store - # azure-mgmt-datamigration - # azure-mgmt-devspaces - # azure-mgmt-devtestlabs - # azure-mgmt-dns - # azure-mgmt-eventgrid - # azure-mgmt-eventhub - # azure-mgmt-hanaonazure - # azure-mgmt-iotcentral - # azure-mgmt-iothub - # azure-mgmt-iothubprovisioningservices - # azure-mgmt-keyvault - # azure-mgmt-loganalytics - # azure-mgmt-logic - # azure-mgmt-machinelearningcompute - # azure-mgmt-managementgroups - # azure-mgmt-managementpartner - # azure-mgmt-maps - # azure-mgmt-marketplaceordering - # azure-mgmt-media - # azure-mgmt-monitor - # azure-mgmt-msi - # azure-mgmt-network - # azure-mgmt-notificationhubs - # azure-mgmt-policyinsights - # azure-mgmt-powerbiembedded - # azure-mgmt-rdbms - # azure-mgmt-recoveryservices - # azure-mgmt-recoveryservicesbackup - # azure-mgmt-redis - # azure-mgmt-relay - # azure-mgmt-reservations - # azure-mgmt-resource - # azure-mgmt-scheduler - # azure-mgmt-search - # azure-mgmt-servicebus - # azure-mgmt-servicefabric - # azure-mgmt-signalr - # azure-mgmt-sql - # azure-mgmt-storage - # azure-mgmt-subscription - # azure-mgmt-trafficmanager - # azure-mgmt-web - # azure-servicebus - # azure-servicefabric - # azure-servicemanagement-legacy - # azure-storage-blob - # azure-storage-common - # azure-storage-file - # azure-storage-queue -azure-cosmosdb-nspkg==2.0.2 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-cosmosdb-table -azure-cosmosdb-table==1.0.5 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure -azure-datalake-store==0.0.44 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure -azure-eventgrid==1.2.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure -azure-graphrbac==0.40.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure -azure-keyvault==1.1.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure -azure-loganalytics==0.1.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure -azure-mgmt-advisor==1.0.1 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-applicationinsights==0.1.1 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-authorization==0.50.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-batch==5.0.1 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-batchai==2.0.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-billing==0.2.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-cdn==3.1.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-cognitiveservices==3.0.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-commerce==1.0.1 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-compute==4.6.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-consumption==2.0.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-containerinstance==1.4.1 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-containerregistry==2.7.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-containerservice==4.4.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-cosmosdb==0.4.1 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-datafactory==0.6.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-datalake-analytics==0.6.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-datalake-nspkg==3.0.1 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt-datalake-analytics - # azure-mgmt-datalake-store -azure-mgmt-datalake-store==0.5.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-datamigration==1.0.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-devspaces==0.1.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-devtestlabs==2.2.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-dns==2.1.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-eventgrid==1.0.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-eventhub==2.5.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-hanaonazure==0.1.1 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-iotcentral==0.1.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-iothub==0.5.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-iothubprovisioningservices==0.2.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-keyvault==1.1.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-loganalytics==0.2.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-logic==3.0.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-machinelearningcompute==0.4.1 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-managementgroups==0.1.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-managementpartner==0.1.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-maps==0.1.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-marketplaceordering==0.1.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-media==1.0.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-monitor==0.5.2 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-msi==0.2.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-network==2.6.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-notificationhubs==2.0.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-nspkg==3.0.2 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt-advisor - # azure-mgmt-applicationinsights - # azure-mgmt-authorization - # azure-mgmt-batch - # azure-mgmt-batchai - # azure-mgmt-billing - # azure-mgmt-cognitiveservices - # azure-mgmt-commerce - # azure-mgmt-consumption - # azure-mgmt-cosmosdb - # azure-mgmt-datafactory - # azure-mgmt-datalake-nspkg - # azure-mgmt-datamigration - # azure-mgmt-devspaces - # azure-mgmt-devtestlabs - # azure-mgmt-dns - # azure-mgmt-eventgrid - # azure-mgmt-hanaonazure - # azure-mgmt-iotcentral - # azure-mgmt-iothub - # azure-mgmt-iothubprovisioningservices - # azure-mgmt-keyvault - # azure-mgmt-loganalytics - # azure-mgmt-logic - # azure-mgmt-machinelearningcompute - # azure-mgmt-managementgroups - # azure-mgmt-managementpartner - # azure-mgmt-maps - # azure-mgmt-marketplaceordering - # azure-mgmt-monitor - # azure-mgmt-msi - # azure-mgmt-notificationhubs - # azure-mgmt-policyinsights - # azure-mgmt-powerbiembedded - # azure-mgmt-recoveryservices - # azure-mgmt-recoveryservicesbackup - # azure-mgmt-redis - # azure-mgmt-relay - # azure-mgmt-reservations - # azure-mgmt-scheduler - # azure-mgmt-search - # azure-mgmt-servicefabric - # azure-mgmt-signalr - # azure-mgmt-sql - # azure-mgmt-storage - # azure-mgmt-subscription - # azure-mgmt-trafficmanager - # azure-mgmt-web -azure-mgmt-policyinsights==0.1.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-powerbiembedded==2.0.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-rdbms==1.8.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-recoveryservices==0.3.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-recoveryservicesbackup==0.3.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-redis==5.0.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-relay==0.1.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-reservations==0.2.1 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-resource==2.1.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-scheduler==2.0.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-search==2.0.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-servicebus==0.5.3 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-servicefabric==0.2.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-signalr==0.1.1 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-sql==0.9.1 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-storage==2.0.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-subscription==0.2.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-trafficmanager==0.50.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-web==0.35.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt==4.0.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure -azure-nspkg==3.0.2 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-applicationinsights - # azure-batch - # azure-cosmosdb-nspkg - # azure-eventgrid - # azure-graphrbac - # azure-keyvault - # azure-loganalytics - # azure-mgmt-nspkg - # azure-servicebus - # azure-servicefabric - # azure-servicemanagement-legacy -azure-servicebus==0.21.1 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure -azure-servicefabric==6.3.0.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure -azure-servicemanagement-legacy==0.20.6 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure -azure-storage-blob==1.5.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure -azure-storage-common==1.4.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-cosmosdb-table - # azure-storage-blob - # azure-storage-file - # azure-storage-queue -azure-storage-file==1.4.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure -azure-storage-queue==1.4.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure -azure==4.0.0 ; sys_platform != "win32" - # via - # -c requirements/static/ci/py3.8/linux.txt - # -r requirements/static/ci/common.in backports.entry-points-selectable==1.1.0 # via # -c requirements/static/ci/py3.8/linux.txt @@ -541,7 +74,6 @@ certifi==2023.07.22 # -c requirements/static/ci/py3.8/linux.txt # -r requirements/static/ci/common.in # kubernetes - # msrest # requests certvalidator==0.11.1 # via @@ -552,7 +84,6 @@ cffi==1.14.6 # -c requirements/static/ci/../pkg/py3.8/linux.txt # -c requirements/static/ci/py3.8/linux.txt # -r requirements/static/ci/common.in - # azure-datalake-store # bcrypt # cryptography # napalm @@ -608,10 +139,6 @@ cryptography==41.0.4 # -c requirements/static/ci/../pkg/py3.8/linux.txt # -c requirements/static/ci/py3.8/linux.txt # -r requirements/static/pkg/linux.in - # adal - # azure-cosmosdb-table - # azure-keyvault - # azure-storage-common # etcd3-py # moto # paramiko @@ -711,10 +238,6 @@ ipaddress==1.0.22 # via # -c requirements/static/ci/py3.8/linux.txt # kubernetes -isodate==0.6.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # msrest jaraco.classes==3.2.1 # via # -c requirements/static/ci/../pkg/py3.8/linux.txt @@ -829,97 +352,6 @@ msgpack==1.0.2 # -c requirements/static/ci/py3.8/linux.txt # -r requirements/base.txt # pytest-salt-factories -msrest==0.6.14 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-applicationinsights - # azure-eventgrid - # azure-keyvault - # azure-loganalytics - # azure-mgmt-cdn - # azure-mgmt-compute - # azure-mgmt-containerinstance - # azure-mgmt-containerregistry - # azure-mgmt-containerservice - # azure-mgmt-dns - # azure-mgmt-eventhub - # azure-mgmt-keyvault - # azure-mgmt-media - # azure-mgmt-network - # azure-mgmt-rdbms - # azure-mgmt-resource - # azure-mgmt-servicebus - # azure-mgmt-servicefabric - # azure-mgmt-signalr - # azure-servicefabric - # msrestazure -msrestazure==0.6.3 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-batch - # azure-eventgrid - # azure-graphrbac - # azure-keyvault - # azure-mgmt-advisor - # azure-mgmt-applicationinsights - # azure-mgmt-authorization - # azure-mgmt-batch - # azure-mgmt-batchai - # azure-mgmt-billing - # azure-mgmt-cdn - # azure-mgmt-cognitiveservices - # azure-mgmt-commerce - # azure-mgmt-compute - # azure-mgmt-consumption - # azure-mgmt-containerinstance - # azure-mgmt-containerregistry - # azure-mgmt-containerservice - # azure-mgmt-cosmosdb - # azure-mgmt-datafactory - # azure-mgmt-datalake-analytics - # azure-mgmt-datalake-store - # azure-mgmt-datamigration - # azure-mgmt-devspaces - # azure-mgmt-devtestlabs - # azure-mgmt-dns - # azure-mgmt-eventgrid - # azure-mgmt-eventhub - # azure-mgmt-hanaonazure - # azure-mgmt-iotcentral - # azure-mgmt-iothub - # azure-mgmt-iothubprovisioningservices - # azure-mgmt-keyvault - # azure-mgmt-loganalytics - # azure-mgmt-logic - # azure-mgmt-machinelearningcompute - # azure-mgmt-managementgroups - # azure-mgmt-managementpartner - # azure-mgmt-maps - # azure-mgmt-marketplaceordering - # azure-mgmt-media - # azure-mgmt-monitor - # azure-mgmt-msi - # azure-mgmt-network - # azure-mgmt-notificationhubs - # azure-mgmt-policyinsights - # azure-mgmt-powerbiembedded - # azure-mgmt-rdbms - # azure-mgmt-recoveryservices - # azure-mgmt-recoveryservicesbackup - # azure-mgmt-redis - # azure-mgmt-relay - # azure-mgmt-reservations - # azure-mgmt-resource - # azure-mgmt-scheduler - # azure-mgmt-search - # azure-mgmt-servicebus - # azure-mgmt-servicefabric - # azure-mgmt-signalr - # azure-mgmt-sql - # azure-mgmt-storage - # azure-mgmt-subscription - # azure-mgmt-trafficmanager - # azure-mgmt-web multidict==6.0.2 # via # -c requirements/static/ci/py3.8/linux.txt @@ -950,10 +382,6 @@ ntc-templates==1.4.1 # junos-eznc ntlm-auth==1.3.0 # via requests-ntlm -oauthlib==3.2.2 - # via - # -c requirements/static/ci/py3.8/linux.txt - # requests-oauthlib oscrypto==1.2.0 # via # -c requirements/static/ci/py3.8/linux.txt @@ -1033,10 +461,6 @@ pyinotify==0.9.6 ; sys_platform != "win32" and sys_platform != "darwin" and plat # via # -c requirements/static/ci/py3.8/linux.txt # -r requirements/static/ci/common.in -pyjwt==2.4.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # adal pynacl==1.5.0 # via # -c requirements/static/ci/py3.8/linux.txt @@ -1124,9 +548,6 @@ python-dateutil==2.8.1 # -c requirements/static/ci/../pkg/py3.8/linux.txt # -c requirements/static/ci/py3.8/linux.txt # -r requirements/static/pkg/linux.in - # adal - # azure-cosmosdb-table - # azure-storage-common # botocore # croniter # kubernetes @@ -1172,35 +593,22 @@ pyzmq==23.2.0 # pytest-salt-factories requests-ntlm==1.1.0 # via pywinrm -requests-oauthlib==1.3.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # msrest requests==2.31.0 # via # -c requirements/static/ci/../pkg/py3.8/linux.txt # -c requirements/static/ci/py3.8/linux.txt # -r requirements/base.txt # -r requirements/static/ci/common.in - # adal # apache-libcloud - # azure-cosmosdb-table - # azure-datalake-store - # azure-keyvault - # azure-servicebus - # azure-servicemanagement-legacy - # azure-storage-common # docker # etcd3-py # kubernetes # moto - # msrest # napalm # profitbricks # pyvmomi # pywinrm # requests-ntlm - # requests-oauthlib # responses # vcert responses==0.10.6 @@ -1249,7 +657,6 @@ six==1.16.0 # etcd3-py # genshi # geomet - # isodate # jsonschema # junos-eznc # kazoo @@ -1316,7 +723,7 @@ transitions==0.8.9 # via # -c requirements/static/ci/py3.8/linux.txt # junos-eznc -typing-extensions==4.2.0 +typing-extensions==4.8.0 # via # -c requirements/static/ci/py3.8/linux.txt # pytest-shell-utilities diff --git a/requirements/static/ci/py3.8/docs.txt b/requirements/static/ci/py3.8/docs.txt index 032c8433ce0..9e1df27652b 100644 --- a/requirements/static/ci/py3.8/docs.txt +++ b/requirements/static/ci/py3.8/docs.txt @@ -177,7 +177,7 @@ tempora==4.1.1 # via # -c requirements/static/ci/py3.8/linux.txt # portend -typing-extensions==4.2.0 +typing-extensions==4.8.0 # via # -c requirements/static/ci/py3.8/linux.txt # myst-docutils diff --git a/requirements/static/ci/py3.8/freebsd.txt b/requirements/static/ci/py3.8/freebsd.txt index 583bc7f8063..0e7e9f410c0 100644 --- a/requirements/static/ci/py3.8/freebsd.txt +++ b/requirements/static/ci/py3.8/freebsd.txt @@ -4,10 +4,6 @@ # # pip-compile --no-emit-index-url --output-file=requirements/static/ci/py3.8/freebsd.txt requirements/base.txt requirements/pytest.txt requirements/static/ci/common.in requirements/static/ci/freebsd.in requirements/static/pkg/freebsd.in requirements/zeromq.txt # -adal==1.2.5 - # via - # azure-datalake-store - # msrestazure aiohttp==3.8.5 # via etcd3-py aiosignal==1.2.0 @@ -29,304 +25,6 @@ attrs==23.1.0 # pytest-shell-utilities # pytest-skip-markers # pytest-system-statistics -azure-applicationinsights==0.1.0 - # via azure -azure-batch==4.1.3 - # via azure -azure-common==1.1.26 - # via - # azure-applicationinsights - # azure-batch - # azure-cosmosdb-table - # azure-eventgrid - # azure-graphrbac - # azure-keyvault - # azure-loganalytics - # azure-mgmt-advisor - # azure-mgmt-applicationinsights - # azure-mgmt-authorization - # azure-mgmt-batch - # azure-mgmt-batchai - # azure-mgmt-billing - # azure-mgmt-cdn - # azure-mgmt-cognitiveservices - # azure-mgmt-commerce - # azure-mgmt-compute - # azure-mgmt-consumption - # azure-mgmt-containerinstance - # azure-mgmt-containerregistry - # azure-mgmt-containerservice - # azure-mgmt-cosmosdb - # azure-mgmt-datafactory - # azure-mgmt-datalake-analytics - # azure-mgmt-datalake-store - # azure-mgmt-datamigration - # azure-mgmt-devspaces - # azure-mgmt-devtestlabs - # azure-mgmt-dns - # azure-mgmt-eventgrid - # azure-mgmt-eventhub - # azure-mgmt-hanaonazure - # azure-mgmt-iotcentral - # azure-mgmt-iothub - # azure-mgmt-iothubprovisioningservices - # azure-mgmt-keyvault - # azure-mgmt-loganalytics - # azure-mgmt-logic - # azure-mgmt-machinelearningcompute - # azure-mgmt-managementgroups - # azure-mgmt-managementpartner - # azure-mgmt-maps - # azure-mgmt-marketplaceordering - # azure-mgmt-media - # azure-mgmt-monitor - # azure-mgmt-msi - # azure-mgmt-network - # azure-mgmt-notificationhubs - # azure-mgmt-policyinsights - # azure-mgmt-powerbiembedded - # azure-mgmt-rdbms - # azure-mgmt-recoveryservices - # azure-mgmt-recoveryservicesbackup - # azure-mgmt-redis - # azure-mgmt-relay - # azure-mgmt-reservations - # azure-mgmt-resource - # azure-mgmt-scheduler - # azure-mgmt-search - # azure-mgmt-servicebus - # azure-mgmt-servicefabric - # azure-mgmt-signalr - # azure-mgmt-sql - # azure-mgmt-storage - # azure-mgmt-subscription - # azure-mgmt-trafficmanager - # azure-mgmt-web - # azure-servicebus - # azure-servicefabric - # azure-servicemanagement-legacy - # azure-storage-blob - # azure-storage-common - # azure-storage-file - # azure-storage-queue -azure-cosmosdb-nspkg==2.0.2 - # via azure-cosmosdb-table -azure-cosmosdb-table==1.0.6 - # via azure -azure-datalake-store==0.0.51 - # via azure -azure-eventgrid==1.3.0 - # via azure -azure-graphrbac==0.40.0 - # via azure -azure-keyvault==1.1.0 - # via azure -azure-loganalytics==0.1.0 - # via azure -azure-mgmt-advisor==1.0.1 - # via azure-mgmt -azure-mgmt-applicationinsights==0.1.1 - # via azure-mgmt -azure-mgmt-authorization==0.50.0 - # via azure-mgmt -azure-mgmt-batch==5.0.1 - # via azure-mgmt -azure-mgmt-batchai==2.0.0 - # via azure-mgmt -azure-mgmt-billing==0.2.0 - # via azure-mgmt -azure-mgmt-cdn==3.1.0 - # via azure-mgmt -azure-mgmt-cognitiveservices==3.0.0 - # via azure-mgmt -azure-mgmt-commerce==1.0.1 - # via azure-mgmt -azure-mgmt-compute==4.6.2 - # via azure-mgmt -azure-mgmt-consumption==2.0.0 - # via azure-mgmt -azure-mgmt-containerinstance==1.5.0 - # via azure-mgmt -azure-mgmt-containerregistry==2.8.0 - # via azure-mgmt -azure-mgmt-containerservice==4.4.0 - # via azure-mgmt -azure-mgmt-cosmosdb==0.4.1 - # via azure-mgmt -azure-mgmt-datafactory==0.6.0 - # via azure-mgmt -azure-mgmt-datalake-analytics==0.6.0 - # via azure-mgmt -azure-mgmt-datalake-nspkg==3.0.1 - # via - # azure-mgmt-datalake-analytics - # azure-mgmt-datalake-store -azure-mgmt-datalake-store==0.5.0 - # via azure-mgmt -azure-mgmt-datamigration==1.0.0 - # via azure-mgmt -azure-mgmt-devspaces==0.1.0 - # via azure-mgmt -azure-mgmt-devtestlabs==2.2.0 - # via azure-mgmt -azure-mgmt-dns==2.1.0 - # via azure-mgmt -azure-mgmt-eventgrid==1.0.0 - # via azure-mgmt -azure-mgmt-eventhub==2.6.0 - # via azure-mgmt -azure-mgmt-hanaonazure==0.1.1 - # via azure-mgmt -azure-mgmt-iotcentral==0.1.0 - # via azure-mgmt -azure-mgmt-iothub==0.5.0 - # via azure-mgmt -azure-mgmt-iothubprovisioningservices==0.2.0 - # via azure-mgmt -azure-mgmt-keyvault==1.1.0 - # via azure-mgmt -azure-mgmt-loganalytics==0.2.0 - # via azure-mgmt -azure-mgmt-logic==3.0.0 - # via azure-mgmt -azure-mgmt-machinelearningcompute==0.4.1 - # via azure-mgmt -azure-mgmt-managementgroups==0.1.0 - # via azure-mgmt -azure-mgmt-managementpartner==0.1.1 - # via azure-mgmt -azure-mgmt-maps==0.1.0 - # via azure-mgmt -azure-mgmt-marketplaceordering==0.1.0 - # via azure-mgmt -azure-mgmt-media==1.0.0 - # via azure-mgmt -azure-mgmt-monitor==0.5.2 - # via azure-mgmt -azure-mgmt-msi==0.2.0 - # via azure-mgmt -azure-mgmt-network==2.7.0 - # via azure-mgmt -azure-mgmt-notificationhubs==2.1.0 - # via azure-mgmt -azure-mgmt-nspkg==3.0.2 - # via - # azure-mgmt-advisor - # azure-mgmt-applicationinsights - # azure-mgmt-authorization - # azure-mgmt-batch - # azure-mgmt-batchai - # azure-mgmt-billing - # azure-mgmt-cognitiveservices - # azure-mgmt-commerce - # azure-mgmt-consumption - # azure-mgmt-cosmosdb - # azure-mgmt-datafactory - # azure-mgmt-datalake-nspkg - # azure-mgmt-datamigration - # azure-mgmt-devspaces - # azure-mgmt-devtestlabs - # azure-mgmt-dns - # azure-mgmt-eventgrid - # azure-mgmt-hanaonazure - # azure-mgmt-iotcentral - # azure-mgmt-iothub - # azure-mgmt-iothubprovisioningservices - # azure-mgmt-keyvault - # azure-mgmt-loganalytics - # azure-mgmt-logic - # azure-mgmt-machinelearningcompute - # azure-mgmt-managementgroups - # azure-mgmt-maps - # azure-mgmt-marketplaceordering - # azure-mgmt-monitor - # azure-mgmt-msi - # azure-mgmt-policyinsights - # azure-mgmt-powerbiembedded - # azure-mgmt-recoveryservices - # azure-mgmt-recoveryservicesbackup - # azure-mgmt-redis - # azure-mgmt-relay - # azure-mgmt-reservations - # azure-mgmt-scheduler - # azure-mgmt-servicefabric - # azure-mgmt-signalr - # azure-mgmt-sql - # azure-mgmt-storage - # azure-mgmt-subscription - # azure-mgmt-trafficmanager - # azure-mgmt-web -azure-mgmt-policyinsights==0.1.0 - # via azure-mgmt -azure-mgmt-powerbiembedded==2.0.0 - # via azure-mgmt -azure-mgmt-rdbms==1.9.0 - # via azure-mgmt -azure-mgmt-recoveryservices==0.3.0 - # via azure-mgmt -azure-mgmt-recoveryservicesbackup==0.3.0 - # via azure-mgmt -azure-mgmt-redis==5.0.0 - # via azure-mgmt -azure-mgmt-relay==0.1.0 - # via azure-mgmt -azure-mgmt-reservations==0.2.1 - # via azure-mgmt -azure-mgmt-resource==2.2.0 - # via azure-mgmt -azure-mgmt-scheduler==2.0.0 - # via azure-mgmt -azure-mgmt-search==2.1.0 - # via azure-mgmt -azure-mgmt-servicebus==0.5.3 - # via azure-mgmt -azure-mgmt-servicefabric==0.2.0 - # via azure-mgmt -azure-mgmt-signalr==0.1.1 - # via azure-mgmt -azure-mgmt-sql==0.9.1 - # via azure-mgmt -azure-mgmt-storage==2.0.0 - # via azure-mgmt -azure-mgmt-subscription==0.2.0 - # via azure-mgmt -azure-mgmt-trafficmanager==0.50.0 - # via azure-mgmt -azure-mgmt-web==0.35.0 - # via azure-mgmt -azure-mgmt==4.0.0 - # via azure -azure-nspkg==3.0.2 - # via - # azure-applicationinsights - # azure-batch - # azure-cosmosdb-nspkg - # azure-graphrbac - # azure-keyvault - # azure-loganalytics - # azure-mgmt-nspkg - # azure-servicebus - # azure-servicefabric - # azure-servicemanagement-legacy -azure-servicebus==0.21.1 - # via azure -azure-servicefabric==6.3.0.0 - # via azure -azure-servicemanagement-legacy==0.20.7 - # via azure -azure-storage-blob==1.5.0 - # via azure -azure-storage-common==1.4.2 - # via - # azure-storage-blob - # azure-storage-file - # azure-storage-queue -azure-storage-file==1.4.0 - # via azure -azure-storage-queue==1.4.0 - # via azure -azure==4.0.0 ; sys_platform != "win32" - # via -r requirements/static/ci/common.in backports.entry-points-selectable==1.1.0 # via virtualenv bcrypt==3.1.6 @@ -353,7 +51,6 @@ certifi==2023.07.22 # -c requirements/static/ci/../pkg/py3.8/freebsd.txt # -r requirements/static/ci/common.in # kubernetes - # msrest # requests certvalidator==0.11.1 # via vcert @@ -361,7 +58,6 @@ cffi==1.14.6 # via # -c requirements/static/ci/../pkg/py3.8/freebsd.txt # -r requirements/static/ci/common.in - # azure-datalake-store # bcrypt # cryptography # napalm @@ -401,10 +97,6 @@ cryptography==41.0.4 # via # -c requirements/static/ci/../pkg/py3.8/freebsd.txt # -r requirements/static/pkg/freebsd.in - # adal - # azure-cosmosdb-table - # azure-keyvault - # azure-storage-common # etcd3-py # moto # paramiko @@ -471,8 +163,6 @@ iniconfig==1.0.1 # via pytest ipaddress==1.0.22 # via kubernetes -isodate==0.6.0 - # via msrest jaraco.classes==3.2.1 # via # -c requirements/static/ci/../pkg/py3.8/freebsd.txt @@ -559,98 +249,6 @@ msgpack==1.0.2 # -c requirements/static/ci/../pkg/py3.8/freebsd.txt # -r requirements/base.txt # pytest-salt-factories -msrest==0.6.19 - # via - # azure-applicationinsights - # azure-eventgrid - # azure-keyvault - # azure-loganalytics - # azure-mgmt-cdn - # azure-mgmt-compute - # azure-mgmt-containerinstance - # azure-mgmt-containerregistry - # azure-mgmt-containerservice - # azure-mgmt-dns - # azure-mgmt-eventhub - # azure-mgmt-keyvault - # azure-mgmt-managementpartner - # azure-mgmt-media - # azure-mgmt-network - # azure-mgmt-notificationhubs - # azure-mgmt-rdbms - # azure-mgmt-resource - # azure-mgmt-search - # azure-mgmt-servicebus - # azure-mgmt-servicefabric - # azure-mgmt-signalr - # azure-servicefabric - # msrestazure -msrestazure==0.6.4 - # via - # azure-batch - # azure-eventgrid - # azure-graphrbac - # azure-keyvault - # azure-mgmt-advisor - # azure-mgmt-applicationinsights - # azure-mgmt-authorization - # azure-mgmt-batch - # azure-mgmt-batchai - # azure-mgmt-billing - # azure-mgmt-cdn - # azure-mgmt-cognitiveservices - # azure-mgmt-commerce - # azure-mgmt-compute - # azure-mgmt-consumption - # azure-mgmt-containerinstance - # azure-mgmt-containerregistry - # azure-mgmt-containerservice - # azure-mgmt-cosmosdb - # azure-mgmt-datafactory - # azure-mgmt-datalake-analytics - # azure-mgmt-datalake-store - # azure-mgmt-datamigration - # azure-mgmt-devspaces - # azure-mgmt-devtestlabs - # azure-mgmt-dns - # azure-mgmt-eventgrid - # azure-mgmt-eventhub - # azure-mgmt-hanaonazure - # azure-mgmt-iotcentral - # azure-mgmt-iothub - # azure-mgmt-iothubprovisioningservices - # azure-mgmt-keyvault - # azure-mgmt-loganalytics - # azure-mgmt-logic - # azure-mgmt-machinelearningcompute - # azure-mgmt-managementgroups - # azure-mgmt-managementpartner - # azure-mgmt-maps - # azure-mgmt-marketplaceordering - # azure-mgmt-media - # azure-mgmt-monitor - # azure-mgmt-msi - # azure-mgmt-network - # azure-mgmt-notificationhubs - # azure-mgmt-policyinsights - # azure-mgmt-powerbiembedded - # azure-mgmt-rdbms - # azure-mgmt-recoveryservices - # azure-mgmt-recoveryservicesbackup - # azure-mgmt-redis - # azure-mgmt-relay - # azure-mgmt-reservations - # azure-mgmt-resource - # azure-mgmt-scheduler - # azure-mgmt-search - # azure-mgmt-servicebus - # azure-mgmt-servicefabric - # azure-mgmt-signalr - # azure-mgmt-sql - # azure-mgmt-storage - # azure-mgmt-subscription - # azure-mgmt-trafficmanager - # azure-mgmt-web multidict==6.0.2 # via # aiohttp @@ -668,8 +266,6 @@ netmiko==3.2.0 # via napalm ntc-templates==1.4.1 # via junos-eznc -oauthlib==3.2.2 - # via requests-oauthlib oscrypto==1.2.0 # via certvalidator packaging==22.0 @@ -729,8 +325,6 @@ pygit2==1.13.1 # via -r requirements/static/ci/freebsd.in pyinotify==0.9.6 ; sys_platform != "win32" and sys_platform != "darwin" and platform_system != "openbsd" # via -r requirements/static/ci/common.in -pyjwt==2.4.0 - # via adal pynacl==1.5.0 # via # -r requirements/static/ci/common.in @@ -787,9 +381,6 @@ python-dateutil==2.8.1 # via # -c requirements/static/ci/../pkg/py3.8/freebsd.txt # -r requirements/static/pkg/freebsd.in - # adal - # azure-cosmosdb-table - # azure-storage-common # botocore # croniter # kubernetes @@ -824,29 +415,18 @@ pyzmq==23.2.0 # -c requirements/static/ci/../pkg/py3.8/freebsd.txt # -r requirements/zeromq.txt # pytest-salt-factories -requests-oauthlib==1.3.0 - # via msrest requests==2.31.0 # via # -c requirements/static/ci/../pkg/py3.8/freebsd.txt # -r requirements/base.txt # -r requirements/static/ci/common.in - # adal # apache-libcloud - # azure-cosmosdb-table - # azure-datalake-store - # azure-keyvault - # azure-servicebus - # azure-servicemanagement-legacy - # azure-storage-common # docker # etcd3-py # kubernetes # moto - # msrest # napalm # pyvmomi - # requests-oauthlib # responses # vcert responses==0.10.6 @@ -877,13 +457,11 @@ six==1.16.0 # etcd3-py # genshi # geomet - # isodate # jsonschema # junos-eznc # kazoo # kubernetes # more-itertools - # msrestazure # ncclient # paramiko # python-dateutil @@ -921,7 +499,7 @@ tomli==2.0.1 # via pytest transitions==0.8.9 # via junos-eznc -typing-extensions==4.2.0 +typing-extensions==4.8.0 # via # pytest-shell-utilities # pytest-system-statistics diff --git a/requirements/static/ci/py3.8/lint.txt b/requirements/static/ci/py3.8/lint.txt index cd61ff37d59..63435fa350a 100644 --- a/requirements/static/ci/py3.8/lint.txt +++ b/requirements/static/ci/py3.8/lint.txt @@ -4,11 +4,6 @@ # # pip-compile --no-emit-index-url --output-file=requirements/static/ci/py3.8/lint.txt requirements/base.txt requirements/static/ci/common.in requirements/static/ci/lint.in requirements/static/ci/linux.in requirements/static/pkg/linux.in requirements/zeromq.txt # -adal==1.2.3 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-datalake-store - # msrestazure aiohttp==3.8.5 # via # -c requirements/static/ci/py3.8/linux.txt @@ -49,468 +44,6 @@ attrs==23.1.0 # -c requirements/static/ci/py3.8/linux.txt # aiohttp # jsonschema -azure-applicationinsights==0.1.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure -azure-batch==4.1.3 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure -azure-common==1.1.18 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-applicationinsights - # azure-batch - # azure-cosmosdb-table - # azure-eventgrid - # azure-graphrbac - # azure-keyvault - # azure-loganalytics - # azure-mgmt-advisor - # azure-mgmt-applicationinsights - # azure-mgmt-authorization - # azure-mgmt-batch - # azure-mgmt-batchai - # azure-mgmt-billing - # azure-mgmt-cdn - # azure-mgmt-cognitiveservices - # azure-mgmt-commerce - # azure-mgmt-compute - # azure-mgmt-consumption - # azure-mgmt-containerinstance - # azure-mgmt-containerregistry - # azure-mgmt-containerservice - # azure-mgmt-cosmosdb - # azure-mgmt-datafactory - # azure-mgmt-datalake-analytics - # azure-mgmt-datalake-store - # azure-mgmt-datamigration - # azure-mgmt-devspaces - # azure-mgmt-devtestlabs - # azure-mgmt-dns - # azure-mgmt-eventgrid - # azure-mgmt-eventhub - # azure-mgmt-hanaonazure - # azure-mgmt-iotcentral - # azure-mgmt-iothub - # azure-mgmt-iothubprovisioningservices - # azure-mgmt-keyvault - # azure-mgmt-loganalytics - # azure-mgmt-logic - # azure-mgmt-machinelearningcompute - # azure-mgmt-managementgroups - # azure-mgmt-managementpartner - # azure-mgmt-maps - # azure-mgmt-marketplaceordering - # azure-mgmt-media - # azure-mgmt-monitor - # azure-mgmt-msi - # azure-mgmt-network - # azure-mgmt-notificationhubs - # azure-mgmt-policyinsights - # azure-mgmt-powerbiembedded - # azure-mgmt-rdbms - # azure-mgmt-recoveryservices - # azure-mgmt-recoveryservicesbackup - # azure-mgmt-redis - # azure-mgmt-relay - # azure-mgmt-reservations - # azure-mgmt-resource - # azure-mgmt-scheduler - # azure-mgmt-search - # azure-mgmt-servicebus - # azure-mgmt-servicefabric - # azure-mgmt-signalr - # azure-mgmt-sql - # azure-mgmt-storage - # azure-mgmt-subscription - # azure-mgmt-trafficmanager - # azure-mgmt-web - # azure-servicebus - # azure-servicefabric - # azure-servicemanagement-legacy - # azure-storage-blob - # azure-storage-common - # azure-storage-file - # azure-storage-queue -azure-cosmosdb-nspkg==2.0.2 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-cosmosdb-table -azure-cosmosdb-table==1.0.5 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure -azure-datalake-store==0.0.44 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure -azure-eventgrid==1.2.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure -azure-graphrbac==0.40.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure -azure-keyvault==1.1.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure -azure-loganalytics==0.1.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure -azure-mgmt-advisor==1.0.1 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-applicationinsights==0.1.1 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-authorization==0.50.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-batch==5.0.1 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-batchai==2.0.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-billing==0.2.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-cdn==3.1.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-cognitiveservices==3.0.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-commerce==1.0.1 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-compute==4.6.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-consumption==2.0.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-containerinstance==1.4.1 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-containerregistry==2.7.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-containerservice==4.4.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-cosmosdb==0.4.1 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-datafactory==0.6.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-datalake-analytics==0.6.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-datalake-nspkg==3.0.1 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt-datalake-analytics - # azure-mgmt-datalake-store -azure-mgmt-datalake-store==0.5.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-datamigration==1.0.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-devspaces==0.1.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-devtestlabs==2.2.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-dns==2.1.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-eventgrid==1.0.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-eventhub==2.5.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-hanaonazure==0.1.1 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-iotcentral==0.1.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-iothub==0.5.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-iothubprovisioningservices==0.2.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-keyvault==1.1.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-loganalytics==0.2.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-logic==3.0.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-machinelearningcompute==0.4.1 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-managementgroups==0.1.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-managementpartner==0.1.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-maps==0.1.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-marketplaceordering==0.1.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-media==1.0.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-monitor==0.5.2 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-msi==0.2.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-network==2.6.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-notificationhubs==2.0.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-nspkg==3.0.2 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt-advisor - # azure-mgmt-applicationinsights - # azure-mgmt-authorization - # azure-mgmt-batch - # azure-mgmt-batchai - # azure-mgmt-billing - # azure-mgmt-cognitiveservices - # azure-mgmt-commerce - # azure-mgmt-consumption - # azure-mgmt-cosmosdb - # azure-mgmt-datafactory - # azure-mgmt-datalake-nspkg - # azure-mgmt-datamigration - # azure-mgmt-devspaces - # azure-mgmt-devtestlabs - # azure-mgmt-dns - # azure-mgmt-eventgrid - # azure-mgmt-hanaonazure - # azure-mgmt-iotcentral - # azure-mgmt-iothub - # azure-mgmt-iothubprovisioningservices - # azure-mgmt-keyvault - # azure-mgmt-loganalytics - # azure-mgmt-logic - # azure-mgmt-machinelearningcompute - # azure-mgmt-managementgroups - # azure-mgmt-managementpartner - # azure-mgmt-maps - # azure-mgmt-marketplaceordering - # azure-mgmt-monitor - # azure-mgmt-msi - # azure-mgmt-notificationhubs - # azure-mgmt-policyinsights - # azure-mgmt-powerbiembedded - # azure-mgmt-recoveryservices - # azure-mgmt-recoveryservicesbackup - # azure-mgmt-redis - # azure-mgmt-relay - # azure-mgmt-reservations - # azure-mgmt-scheduler - # azure-mgmt-search - # azure-mgmt-servicefabric - # azure-mgmt-signalr - # azure-mgmt-sql - # azure-mgmt-storage - # azure-mgmt-subscription - # azure-mgmt-trafficmanager - # azure-mgmt-web -azure-mgmt-policyinsights==0.1.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-powerbiembedded==2.0.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-rdbms==1.8.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-recoveryservices==0.3.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-recoveryservicesbackup==0.3.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-redis==5.0.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-relay==0.1.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-reservations==0.2.1 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-resource==2.1.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-scheduler==2.0.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-search==2.0.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-servicebus==0.5.3 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-servicefabric==0.2.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-signalr==0.1.1 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-sql==0.9.1 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-storage==2.0.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-subscription==0.2.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-trafficmanager==0.50.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt-web==0.35.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-mgmt -azure-mgmt==4.0.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure -azure-nspkg==3.0.2 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-applicationinsights - # azure-batch - # azure-cosmosdb-nspkg - # azure-eventgrid - # azure-graphrbac - # azure-keyvault - # azure-loganalytics - # azure-mgmt-nspkg - # azure-servicebus - # azure-servicefabric - # azure-servicemanagement-legacy -azure-servicebus==0.21.1 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure -azure-servicefabric==6.3.0.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure -azure-servicemanagement-legacy==0.20.6 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure -azure-storage-blob==1.5.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure -azure-storage-common==1.4.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-cosmosdb-table - # azure-storage-blob - # azure-storage-file - # azure-storage-queue -azure-storage-file==1.4.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure -azure-storage-queue==1.4.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure -azure==4.0.0 ; sys_platform != "win32" - # via - # -c requirements/static/ci/py3.8/linux.txt - # -r requirements/static/ci/common.in backports.entry-points-selectable==1.1.0 # via # -c requirements/static/ci/py3.8/linux.txt @@ -554,7 +87,6 @@ certifi==2023.07.22 # -c requirements/static/ci/py3.8/linux.txt # -r requirements/static/ci/common.in # kubernetes - # msrest # python-telegram-bot # requests certvalidator==0.11.1 @@ -566,7 +98,6 @@ cffi==1.14.6 # -c requirements/static/ci/../pkg/py3.8/linux.txt # -c requirements/static/ci/py3.8/linux.txt # -r requirements/static/ci/common.in - # azure-datalake-store # bcrypt # cryptography # napalm @@ -623,11 +154,7 @@ cryptography==41.0.4 # -c requirements/static/ci/../pkg/py3.8/linux.txt # -c requirements/static/ci/py3.8/linux.txt # -r requirements/static/pkg/linux.in - # adal # ansible-core - # azure-cosmosdb-table - # azure-keyvault - # azure-storage-common # etcd3-py # moto # paramiko @@ -715,10 +242,6 @@ ipaddress==1.0.22 # via # -c requirements/static/ci/py3.8/linux.txt # kubernetes -isodate==0.6.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # msrest isort==4.3.21 # via pylint jaraco.classes==3.2.1 @@ -840,97 +363,6 @@ msgpack==1.0.2 # -c requirements/static/ci/../pkg/py3.8/linux.txt # -c requirements/static/ci/py3.8/linux.txt # -r requirements/base.txt -msrest==0.6.14 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-applicationinsights - # azure-eventgrid - # azure-keyvault - # azure-loganalytics - # azure-mgmt-cdn - # azure-mgmt-compute - # azure-mgmt-containerinstance - # azure-mgmt-containerregistry - # azure-mgmt-containerservice - # azure-mgmt-dns - # azure-mgmt-eventhub - # azure-mgmt-keyvault - # azure-mgmt-media - # azure-mgmt-network - # azure-mgmt-rdbms - # azure-mgmt-resource - # azure-mgmt-servicebus - # azure-mgmt-servicefabric - # azure-mgmt-signalr - # azure-servicefabric - # msrestazure -msrestazure==0.6.3 - # via - # -c requirements/static/ci/py3.8/linux.txt - # azure-batch - # azure-eventgrid - # azure-graphrbac - # azure-keyvault - # azure-mgmt-advisor - # azure-mgmt-applicationinsights - # azure-mgmt-authorization - # azure-mgmt-batch - # azure-mgmt-batchai - # azure-mgmt-billing - # azure-mgmt-cdn - # azure-mgmt-cognitiveservices - # azure-mgmt-commerce - # azure-mgmt-compute - # azure-mgmt-consumption - # azure-mgmt-containerinstance - # azure-mgmt-containerregistry - # azure-mgmt-containerservice - # azure-mgmt-cosmosdb - # azure-mgmt-datafactory - # azure-mgmt-datalake-analytics - # azure-mgmt-datalake-store - # azure-mgmt-datamigration - # azure-mgmt-devspaces - # azure-mgmt-devtestlabs - # azure-mgmt-dns - # azure-mgmt-eventgrid - # azure-mgmt-eventhub - # azure-mgmt-hanaonazure - # azure-mgmt-iotcentral - # azure-mgmt-iothub - # azure-mgmt-iothubprovisioningservices - # azure-mgmt-keyvault - # azure-mgmt-loganalytics - # azure-mgmt-logic - # azure-mgmt-machinelearningcompute - # azure-mgmt-managementgroups - # azure-mgmt-managementpartner - # azure-mgmt-maps - # azure-mgmt-marketplaceordering - # azure-mgmt-media - # azure-mgmt-monitor - # azure-mgmt-msi - # azure-mgmt-network - # azure-mgmt-notificationhubs - # azure-mgmt-policyinsights - # azure-mgmt-powerbiembedded - # azure-mgmt-rdbms - # azure-mgmt-recoveryservices - # azure-mgmt-recoveryservicesbackup - # azure-mgmt-redis - # azure-mgmt-relay - # azure-mgmt-reservations - # azure-mgmt-resource - # azure-mgmt-scheduler - # azure-mgmt-search - # azure-mgmt-servicebus - # azure-mgmt-servicefabric - # azure-mgmt-signalr - # azure-mgmt-sql - # azure-mgmt-storage - # azure-mgmt-subscription - # azure-mgmt-trafficmanager - # azure-mgmt-web multidict==6.0.2 # via # -c requirements/static/ci/py3.8/linux.txt @@ -958,10 +390,6 @@ ntc-templates==1.4.1 # via # -c requirements/static/ci/py3.8/linux.txt # junos-eznc -oauthlib==3.2.2 - # via - # -c requirements/static/ci/py3.8/linux.txt - # requests-oauthlib oscrypto==1.2.0 # via # -c requirements/static/ci/py3.8/linux.txt @@ -1049,7 +477,6 @@ pyinotify==0.9.6 ; sys_platform != "win32" and sys_platform != "darwin" and plat pyjwt==2.4.0 # via # -c requirements/static/ci/py3.8/linux.txt - # adal # twilio pylint==2.4.4 # via @@ -1092,9 +519,6 @@ python-dateutil==2.8.1 # -c requirements/static/ci/../pkg/py3.8/linux.txt # -c requirements/static/ci/py3.8/linux.txt # -r requirements/static/pkg/linux.in - # adal - # azure-cosmosdb-table - # azure-storage-common # botocore # croniter # kubernetes @@ -1151,33 +575,20 @@ redis==3.5.3 # via # -c requirements/static/ci/py3.8/linux.txt # redis-py-cluster -requests-oauthlib==1.3.0 - # via - # -c requirements/static/ci/py3.8/linux.txt - # msrest requests==2.31.0 # via # -c requirements/static/ci/../pkg/py3.8/linux.txt # -c requirements/static/ci/py3.8/linux.txt # -r requirements/base.txt # -r requirements/static/ci/common.in - # adal # apache-libcloud - # azure-cosmosdb-table - # azure-datalake-store - # azure-keyvault - # azure-servicebus - # azure-servicemanagement-legacy - # azure-storage-common # docker # etcd3-py # kubernetes # moto - # msrest # napalm # python-consul # pyvmomi - # requests-oauthlib # responses # twilio # vcert @@ -1235,7 +646,6 @@ six==1.16.0 # etcd3-py # genshi # geomet - # isodate # jsonschema # junos-eznc # kazoo diff --git a/requirements/static/ci/py3.8/linux.txt b/requirements/static/ci/py3.8/linux.txt index b822df95c32..aa9cc86e8f6 100644 --- a/requirements/static/ci/py3.8/linux.txt +++ b/requirements/static/ci/py3.8/linux.txt @@ -4,10 +4,6 @@ # # pip-compile --no-emit-index-url --output-file=requirements/static/ci/py3.8/linux.txt requirements/base.txt requirements/pytest.txt requirements/static/ci/common.in requirements/static/ci/linux.in requirements/static/pkg/linux.in requirements/zeromq.txt # -adal==1.2.3 - # via - # azure-datalake-store - # msrestazure aiohttp==3.8.5 # via etcd3-py aiosignal==1.2.0 @@ -35,309 +31,6 @@ attrs==23.1.0 # pytest-shell-utilities # pytest-skip-markers # pytest-system-statistics -azure-applicationinsights==0.1.0 - # via azure -azure-batch==4.1.3 - # via azure -azure-common==1.1.18 - # via - # azure-applicationinsights - # azure-batch - # azure-cosmosdb-table - # azure-eventgrid - # azure-graphrbac - # azure-keyvault - # azure-loganalytics - # azure-mgmt-advisor - # azure-mgmt-applicationinsights - # azure-mgmt-authorization - # azure-mgmt-batch - # azure-mgmt-batchai - # azure-mgmt-billing - # azure-mgmt-cdn - # azure-mgmt-cognitiveservices - # azure-mgmt-commerce - # azure-mgmt-compute - # azure-mgmt-consumption - # azure-mgmt-containerinstance - # azure-mgmt-containerregistry - # azure-mgmt-containerservice - # azure-mgmt-cosmosdb - # azure-mgmt-datafactory - # azure-mgmt-datalake-analytics - # azure-mgmt-datalake-store - # azure-mgmt-datamigration - # azure-mgmt-devspaces - # azure-mgmt-devtestlabs - # azure-mgmt-dns - # azure-mgmt-eventgrid - # azure-mgmt-eventhub - # azure-mgmt-hanaonazure - # azure-mgmt-iotcentral - # azure-mgmt-iothub - # azure-mgmt-iothubprovisioningservices - # azure-mgmt-keyvault - # azure-mgmt-loganalytics - # azure-mgmt-logic - # azure-mgmt-machinelearningcompute - # azure-mgmt-managementgroups - # azure-mgmt-managementpartner - # azure-mgmt-maps - # azure-mgmt-marketplaceordering - # azure-mgmt-media - # azure-mgmt-monitor - # azure-mgmt-msi - # azure-mgmt-network - # azure-mgmt-notificationhubs - # azure-mgmt-policyinsights - # azure-mgmt-powerbiembedded - # azure-mgmt-rdbms - # azure-mgmt-recoveryservices - # azure-mgmt-recoveryservicesbackup - # azure-mgmt-redis - # azure-mgmt-relay - # azure-mgmt-reservations - # azure-mgmt-resource - # azure-mgmt-scheduler - # azure-mgmt-search - # azure-mgmt-servicebus - # azure-mgmt-servicefabric - # azure-mgmt-signalr - # azure-mgmt-sql - # azure-mgmt-storage - # azure-mgmt-subscription - # azure-mgmt-trafficmanager - # azure-mgmt-web - # azure-servicebus - # azure-servicefabric - # azure-servicemanagement-legacy - # azure-storage-blob - # azure-storage-common - # azure-storage-file - # azure-storage-queue -azure-cosmosdb-nspkg==2.0.2 - # via azure-cosmosdb-table -azure-cosmosdb-table==1.0.5 - # via azure -azure-datalake-store==0.0.44 - # via azure -azure-eventgrid==1.2.0 - # via azure -azure-graphrbac==0.40.0 - # via azure -azure-keyvault==1.1.0 - # via azure -azure-loganalytics==0.1.0 - # via azure -azure-mgmt-advisor==1.0.1 - # via azure-mgmt -azure-mgmt-applicationinsights==0.1.1 - # via azure-mgmt -azure-mgmt-authorization==0.50.0 - # via azure-mgmt -azure-mgmt-batch==5.0.1 - # via azure-mgmt -azure-mgmt-batchai==2.0.0 - # via azure-mgmt -azure-mgmt-billing==0.2.0 - # via azure-mgmt -azure-mgmt-cdn==3.1.0 - # via azure-mgmt -azure-mgmt-cognitiveservices==3.0.0 - # via azure-mgmt -azure-mgmt-commerce==1.0.1 - # via azure-mgmt -azure-mgmt-compute==4.6.0 - # via azure-mgmt -azure-mgmt-consumption==2.0.0 - # via azure-mgmt -azure-mgmt-containerinstance==1.4.1 - # via azure-mgmt -azure-mgmt-containerregistry==2.7.0 - # via azure-mgmt -azure-mgmt-containerservice==4.4.0 - # via azure-mgmt -azure-mgmt-cosmosdb==0.4.1 - # via azure-mgmt -azure-mgmt-datafactory==0.6.0 - # via azure-mgmt -azure-mgmt-datalake-analytics==0.6.0 - # via azure-mgmt -azure-mgmt-datalake-nspkg==3.0.1 - # via - # azure-mgmt-datalake-analytics - # azure-mgmt-datalake-store -azure-mgmt-datalake-store==0.5.0 - # via azure-mgmt -azure-mgmt-datamigration==1.0.0 - # via azure-mgmt -azure-mgmt-devspaces==0.1.0 - # via azure-mgmt -azure-mgmt-devtestlabs==2.2.0 - # via azure-mgmt -azure-mgmt-dns==2.1.0 - # via azure-mgmt -azure-mgmt-eventgrid==1.0.0 - # via azure-mgmt -azure-mgmt-eventhub==2.5.0 - # via azure-mgmt -azure-mgmt-hanaonazure==0.1.1 - # via azure-mgmt -azure-mgmt-iotcentral==0.1.0 - # via azure-mgmt -azure-mgmt-iothub==0.5.0 - # via azure-mgmt -azure-mgmt-iothubprovisioningservices==0.2.0 - # via azure-mgmt -azure-mgmt-keyvault==1.1.0 - # via azure-mgmt -azure-mgmt-loganalytics==0.2.0 - # via azure-mgmt -azure-mgmt-logic==3.0.0 - # via azure-mgmt -azure-mgmt-machinelearningcompute==0.4.1 - # via azure-mgmt -azure-mgmt-managementgroups==0.1.0 - # via azure-mgmt -azure-mgmt-managementpartner==0.1.0 - # via azure-mgmt -azure-mgmt-maps==0.1.0 - # via azure-mgmt -azure-mgmt-marketplaceordering==0.1.0 - # via azure-mgmt -azure-mgmt-media==1.0.0 - # via azure-mgmt -azure-mgmt-monitor==0.5.2 - # via azure-mgmt -azure-mgmt-msi==0.2.0 - # via azure-mgmt -azure-mgmt-network==2.6.0 - # via azure-mgmt -azure-mgmt-notificationhubs==2.0.0 - # via azure-mgmt -azure-mgmt-nspkg==3.0.2 - # via - # azure-mgmt-advisor - # azure-mgmt-applicationinsights - # azure-mgmt-authorization - # azure-mgmt-batch - # azure-mgmt-batchai - # azure-mgmt-billing - # azure-mgmt-cognitiveservices - # azure-mgmt-commerce - # azure-mgmt-consumption - # azure-mgmt-cosmosdb - # azure-mgmt-datafactory - # azure-mgmt-datalake-nspkg - # azure-mgmt-datamigration - # azure-mgmt-devspaces - # azure-mgmt-devtestlabs - # azure-mgmt-dns - # azure-mgmt-eventgrid - # azure-mgmt-hanaonazure - # azure-mgmt-iotcentral - # azure-mgmt-iothub - # azure-mgmt-iothubprovisioningservices - # azure-mgmt-keyvault - # azure-mgmt-loganalytics - # azure-mgmt-logic - # azure-mgmt-machinelearningcompute - # azure-mgmt-managementgroups - # azure-mgmt-managementpartner - # azure-mgmt-maps - # azure-mgmt-marketplaceordering - # azure-mgmt-monitor - # azure-mgmt-msi - # azure-mgmt-notificationhubs - # azure-mgmt-policyinsights - # azure-mgmt-powerbiembedded - # azure-mgmt-recoveryservices - # azure-mgmt-recoveryservicesbackup - # azure-mgmt-redis - # azure-mgmt-relay - # azure-mgmt-reservations - # azure-mgmt-scheduler - # azure-mgmt-search - # azure-mgmt-servicefabric - # azure-mgmt-signalr - # azure-mgmt-sql - # azure-mgmt-storage - # azure-mgmt-subscription - # azure-mgmt-trafficmanager - # azure-mgmt-web -azure-mgmt-policyinsights==0.1.0 - # via azure-mgmt -azure-mgmt-powerbiembedded==2.0.0 - # via azure-mgmt -azure-mgmt-rdbms==1.8.0 - # via azure-mgmt -azure-mgmt-recoveryservices==0.3.0 - # via azure-mgmt -azure-mgmt-recoveryservicesbackup==0.3.0 - # via azure-mgmt -azure-mgmt-redis==5.0.0 - # via azure-mgmt -azure-mgmt-relay==0.1.0 - # via azure-mgmt -azure-mgmt-reservations==0.2.1 - # via azure-mgmt -azure-mgmt-resource==2.1.0 - # via azure-mgmt -azure-mgmt-scheduler==2.0.0 - # via azure-mgmt -azure-mgmt-search==2.0.0 - # via azure-mgmt -azure-mgmt-servicebus==0.5.3 - # via azure-mgmt -azure-mgmt-servicefabric==0.2.0 - # via azure-mgmt -azure-mgmt-signalr==0.1.1 - # via azure-mgmt -azure-mgmt-sql==0.9.1 - # via azure-mgmt -azure-mgmt-storage==2.0.0 - # via azure-mgmt -azure-mgmt-subscription==0.2.0 - # via azure-mgmt -azure-mgmt-trafficmanager==0.50.0 - # via azure-mgmt -azure-mgmt-web==0.35.0 - # via azure-mgmt -azure-mgmt==4.0.0 - # via azure -azure-nspkg==3.0.2 - # via - # azure-applicationinsights - # azure-batch - # azure-cosmosdb-nspkg - # azure-eventgrid - # azure-graphrbac - # azure-keyvault - # azure-loganalytics - # azure-mgmt-nspkg - # azure-servicebus - # azure-servicefabric - # azure-servicemanagement-legacy -azure-servicebus==0.21.1 - # via azure -azure-servicefabric==6.3.0.0 - # via azure -azure-servicemanagement-legacy==0.20.6 - # via azure -azure-storage-blob==1.5.0 - # via azure -azure-storage-common==1.4.0 - # via - # azure-cosmosdb-table - # azure-storage-blob - # azure-storage-file - # azure-storage-queue -azure-storage-file==1.4.0 - # via azure -azure-storage-queue==1.4.0 - # via azure -azure==4.0.0 ; sys_platform != "win32" - # via -r requirements/static/ci/common.in backports.entry-points-selectable==1.1.0 # via virtualenv backports.zoneinfo==0.2.1 @@ -368,7 +61,6 @@ certifi==2023.07.22 # -c requirements/static/ci/../pkg/py3.8/linux.txt # -r requirements/static/ci/common.in # kubernetes - # msrest # python-telegram-bot # requests certvalidator==0.11.1 @@ -377,7 +69,6 @@ cffi==1.14.6 # via # -c requirements/static/ci/../pkg/py3.8/linux.txt # -r requirements/static/ci/common.in - # azure-datalake-store # bcrypt # cryptography # napalm @@ -417,11 +108,7 @@ cryptography==41.0.4 # via # -c requirements/static/ci/../pkg/py3.8/linux.txt # -r requirements/static/pkg/linux.in - # adal # ansible-core - # azure-cosmosdb-table - # azure-keyvault - # azure-storage-common # etcd3-py # moto # paramiko @@ -487,8 +174,6 @@ iniconfig==1.0.1 # via pytest ipaddress==1.0.22 # via kubernetes -isodate==0.6.0 - # via msrest jaraco.classes==3.2.1 # via # -c requirements/static/ci/../pkg/py3.8/linux.txt @@ -576,95 +261,6 @@ msgpack==1.0.2 # -c requirements/static/ci/../pkg/py3.8/linux.txt # -r requirements/base.txt # pytest-salt-factories -msrest==0.6.14 - # via - # azure-applicationinsights - # azure-eventgrid - # azure-keyvault - # azure-loganalytics - # azure-mgmt-cdn - # azure-mgmt-compute - # azure-mgmt-containerinstance - # azure-mgmt-containerregistry - # azure-mgmt-containerservice - # azure-mgmt-dns - # azure-mgmt-eventhub - # azure-mgmt-keyvault - # azure-mgmt-media - # azure-mgmt-network - # azure-mgmt-rdbms - # azure-mgmt-resource - # azure-mgmt-servicebus - # azure-mgmt-servicefabric - # azure-mgmt-signalr - # azure-servicefabric - # msrestazure -msrestazure==0.6.3 - # via - # azure-batch - # azure-eventgrid - # azure-graphrbac - # azure-keyvault - # azure-mgmt-advisor - # azure-mgmt-applicationinsights - # azure-mgmt-authorization - # azure-mgmt-batch - # azure-mgmt-batchai - # azure-mgmt-billing - # azure-mgmt-cdn - # azure-mgmt-cognitiveservices - # azure-mgmt-commerce - # azure-mgmt-compute - # azure-mgmt-consumption - # azure-mgmt-containerinstance - # azure-mgmt-containerregistry - # azure-mgmt-containerservice - # azure-mgmt-cosmosdb - # azure-mgmt-datafactory - # azure-mgmt-datalake-analytics - # azure-mgmt-datalake-store - # azure-mgmt-datamigration - # azure-mgmt-devspaces - # azure-mgmt-devtestlabs - # azure-mgmt-dns - # azure-mgmt-eventgrid - # azure-mgmt-eventhub - # azure-mgmt-hanaonazure - # azure-mgmt-iotcentral - # azure-mgmt-iothub - # azure-mgmt-iothubprovisioningservices - # azure-mgmt-keyvault - # azure-mgmt-loganalytics - # azure-mgmt-logic - # azure-mgmt-machinelearningcompute - # azure-mgmt-managementgroups - # azure-mgmt-managementpartner - # azure-mgmt-maps - # azure-mgmt-marketplaceordering - # azure-mgmt-media - # azure-mgmt-monitor - # azure-mgmt-msi - # azure-mgmt-network - # azure-mgmt-notificationhubs - # azure-mgmt-policyinsights - # azure-mgmt-powerbiembedded - # azure-mgmt-rdbms - # azure-mgmt-recoveryservices - # azure-mgmt-recoveryservicesbackup - # azure-mgmt-redis - # azure-mgmt-relay - # azure-mgmt-reservations - # azure-mgmt-resource - # azure-mgmt-scheduler - # azure-mgmt-search - # azure-mgmt-servicebus - # azure-mgmt-servicefabric - # azure-mgmt-signalr - # azure-mgmt-sql - # azure-mgmt-storage - # azure-mgmt-subscription - # azure-mgmt-trafficmanager - # azure-mgmt-web multidict==6.0.2 # via # aiohttp @@ -682,8 +278,6 @@ netmiko==3.2.0 # via napalm ntc-templates==1.4.1 # via junos-eznc -oauthlib==3.2.2 - # via requests-oauthlib oscrypto==1.2.0 # via certvalidator packaging==22.0 @@ -747,9 +341,7 @@ pyiface==0.0.11 pyinotify==0.9.6 ; sys_platform != "win32" and sys_platform != "darwin" and platform_system != "openbsd" # via -r requirements/static/ci/common.in pyjwt==2.4.0 - # via - # adal - # twilio + # via twilio pymysql==1.0.2 # via -r requirements/static/ci/linux.in pynacl==1.5.0 @@ -810,9 +402,6 @@ python-dateutil==2.8.1 # via # -c requirements/static/ci/../pkg/py3.8/linux.txt # -r requirements/static/pkg/linux.in - # adal - # azure-cosmosdb-table - # azure-storage-common # botocore # croniter # kubernetes @@ -857,30 +446,19 @@ redis-py-cluster==2.1.3 # via -r requirements/static/ci/linux.in redis==3.5.3 # via redis-py-cluster -requests-oauthlib==1.3.0 - # via msrest requests==2.31.0 # via # -c requirements/static/ci/../pkg/py3.8/linux.txt # -r requirements/base.txt # -r requirements/static/ci/common.in - # adal # apache-libcloud - # azure-cosmosdb-table - # azure-datalake-store - # azure-keyvault - # azure-servicebus - # azure-servicemanagement-legacy - # azure-storage-common # docker # etcd3-py # kubernetes # moto - # msrest # napalm # python-consul # pyvmomi - # requests-oauthlib # responses # twilio # vcert @@ -919,7 +497,6 @@ six==1.16.0 # etcd3-py # genshi # geomet - # isodate # jsonschema # junos-eznc # kazoo @@ -971,7 +548,7 @@ transitions==0.8.9 # via junos-eznc twilio==7.9.2 # via -r requirements/static/ci/linux.in -typing-extensions==4.2.0 +typing-extensions==4.8.0 # via # pytest-shell-utilities # pytest-system-statistics diff --git a/requirements/static/ci/py3.9/cloud.txt b/requirements/static/ci/py3.9/cloud.txt index 331a7845732..b439d22b8b9 100644 --- a/requirements/static/ci/py3.9/cloud.txt +++ b/requirements/static/ci/py3.9/cloud.txt @@ -4,11 +4,6 @@ # # pip-compile --no-emit-index-url --output-file=requirements/static/ci/py3.9/cloud.txt requirements/base.txt requirements/pytest.txt requirements/static/ci/cloud.in requirements/static/ci/common.in requirements/static/pkg/linux.in requirements/zeromq.txt # -adal==1.2.3 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-datalake-store - # msrestazure aiohttp==3.8.5 # via # -c requirements/static/ci/py3.9/linux.txt @@ -41,468 +36,6 @@ attrs==23.1.0 # pytest-shell-utilities # pytest-skip-markers # pytest-system-statistics -azure-applicationinsights==0.1.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure -azure-batch==4.1.3 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure -azure-common==1.1.18 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-applicationinsights - # azure-batch - # azure-cosmosdb-table - # azure-eventgrid - # azure-graphrbac - # azure-keyvault - # azure-loganalytics - # azure-mgmt-advisor - # azure-mgmt-applicationinsights - # azure-mgmt-authorization - # azure-mgmt-batch - # azure-mgmt-batchai - # azure-mgmt-billing - # azure-mgmt-cdn - # azure-mgmt-cognitiveservices - # azure-mgmt-commerce - # azure-mgmt-compute - # azure-mgmt-consumption - # azure-mgmt-containerinstance - # azure-mgmt-containerregistry - # azure-mgmt-containerservice - # azure-mgmt-cosmosdb - # azure-mgmt-datafactory - # azure-mgmt-datalake-analytics - # azure-mgmt-datalake-store - # azure-mgmt-datamigration - # azure-mgmt-devspaces - # azure-mgmt-devtestlabs - # azure-mgmt-dns - # azure-mgmt-eventgrid - # azure-mgmt-eventhub - # azure-mgmt-hanaonazure - # azure-mgmt-iotcentral - # azure-mgmt-iothub - # azure-mgmt-iothubprovisioningservices - # azure-mgmt-keyvault - # azure-mgmt-loganalytics - # azure-mgmt-logic - # azure-mgmt-machinelearningcompute - # azure-mgmt-managementgroups - # azure-mgmt-managementpartner - # azure-mgmt-maps - # azure-mgmt-marketplaceordering - # azure-mgmt-media - # azure-mgmt-monitor - # azure-mgmt-msi - # azure-mgmt-network - # azure-mgmt-notificationhubs - # azure-mgmt-policyinsights - # azure-mgmt-powerbiembedded - # azure-mgmt-rdbms - # azure-mgmt-recoveryservices - # azure-mgmt-recoveryservicesbackup - # azure-mgmt-redis - # azure-mgmt-relay - # azure-mgmt-reservations - # azure-mgmt-resource - # azure-mgmt-scheduler - # azure-mgmt-search - # azure-mgmt-servicebus - # azure-mgmt-servicefabric - # azure-mgmt-signalr - # azure-mgmt-sql - # azure-mgmt-storage - # azure-mgmt-subscription - # azure-mgmt-trafficmanager - # azure-mgmt-web - # azure-servicebus - # azure-servicefabric - # azure-servicemanagement-legacy - # azure-storage-blob - # azure-storage-common - # azure-storage-file - # azure-storage-queue -azure-cosmosdb-nspkg==2.0.2 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-cosmosdb-table -azure-cosmosdb-table==1.0.5 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure -azure-datalake-store==0.0.44 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure -azure-eventgrid==1.2.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure -azure-graphrbac==0.40.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure -azure-keyvault==1.1.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure -azure-loganalytics==0.1.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure -azure-mgmt-advisor==1.0.1 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-applicationinsights==0.1.1 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-authorization==0.50.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-batch==5.0.1 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-batchai==2.0.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-billing==0.2.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-cdn==3.1.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-cognitiveservices==3.0.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-commerce==1.0.1 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-compute==4.6.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-consumption==2.0.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-containerinstance==1.4.1 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-containerregistry==2.7.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-containerservice==4.4.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-cosmosdb==0.4.1 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-datafactory==0.6.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-datalake-analytics==0.6.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-datalake-nspkg==3.0.1 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt-datalake-analytics - # azure-mgmt-datalake-store -azure-mgmt-datalake-store==0.5.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-datamigration==1.0.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-devspaces==0.1.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-devtestlabs==2.2.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-dns==2.1.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-eventgrid==1.0.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-eventhub==2.5.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-hanaonazure==0.1.1 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-iotcentral==0.1.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-iothub==0.5.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-iothubprovisioningservices==0.2.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-keyvault==1.1.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-loganalytics==0.2.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-logic==3.0.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-machinelearningcompute==0.4.1 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-managementgroups==0.1.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-managementpartner==0.1.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-maps==0.1.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-marketplaceordering==0.1.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-media==1.0.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-monitor==0.5.2 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-msi==0.2.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-network==2.6.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-notificationhubs==2.0.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-nspkg==3.0.2 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt-advisor - # azure-mgmt-applicationinsights - # azure-mgmt-authorization - # azure-mgmt-batch - # azure-mgmt-batchai - # azure-mgmt-billing - # azure-mgmt-cognitiveservices - # azure-mgmt-commerce - # azure-mgmt-consumption - # azure-mgmt-cosmosdb - # azure-mgmt-datafactory - # azure-mgmt-datalake-nspkg - # azure-mgmt-datamigration - # azure-mgmt-devspaces - # azure-mgmt-devtestlabs - # azure-mgmt-dns - # azure-mgmt-eventgrid - # azure-mgmt-hanaonazure - # azure-mgmt-iotcentral - # azure-mgmt-iothub - # azure-mgmt-iothubprovisioningservices - # azure-mgmt-keyvault - # azure-mgmt-loganalytics - # azure-mgmt-logic - # azure-mgmt-machinelearningcompute - # azure-mgmt-managementgroups - # azure-mgmt-managementpartner - # azure-mgmt-maps - # azure-mgmt-marketplaceordering - # azure-mgmt-monitor - # azure-mgmt-msi - # azure-mgmt-notificationhubs - # azure-mgmt-policyinsights - # azure-mgmt-powerbiembedded - # azure-mgmt-recoveryservices - # azure-mgmt-recoveryservicesbackup - # azure-mgmt-redis - # azure-mgmt-relay - # azure-mgmt-reservations - # azure-mgmt-scheduler - # azure-mgmt-search - # azure-mgmt-servicefabric - # azure-mgmt-signalr - # azure-mgmt-sql - # azure-mgmt-storage - # azure-mgmt-subscription - # azure-mgmt-trafficmanager - # azure-mgmt-web -azure-mgmt-policyinsights==0.1.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-powerbiembedded==2.0.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-rdbms==1.8.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-recoveryservices==0.3.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-recoveryservicesbackup==0.3.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-redis==5.0.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-relay==0.1.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-reservations==0.2.1 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-resource==2.1.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-scheduler==2.0.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-search==2.0.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-servicebus==0.5.3 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-servicefabric==0.2.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-signalr==0.1.1 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-sql==0.9.1 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-storage==2.0.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-subscription==0.2.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-trafficmanager==0.50.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-web==0.35.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt==4.0.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure -azure-nspkg==3.0.2 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-applicationinsights - # azure-batch - # azure-cosmosdb-nspkg - # azure-eventgrid - # azure-graphrbac - # azure-keyvault - # azure-loganalytics - # azure-mgmt-nspkg - # azure-servicebus - # azure-servicefabric - # azure-servicemanagement-legacy -azure-servicebus==0.21.1 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure -azure-servicefabric==6.3.0.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure -azure-servicemanagement-legacy==0.20.6 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure -azure-storage-blob==1.5.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure -azure-storage-common==1.4.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-cosmosdb-table - # azure-storage-blob - # azure-storage-file - # azure-storage-queue -azure-storage-file==1.4.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure -azure-storage-queue==1.4.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure -azure==4.0.0 ; sys_platform != "win32" - # via - # -c requirements/static/ci/py3.9/linux.txt - # -r requirements/static/ci/common.in backports.entry-points-selectable==1.1.0 # via # -c requirements/static/ci/py3.9/linux.txt @@ -541,7 +74,6 @@ certifi==2023.07.22 # -c requirements/static/ci/py3.9/linux.txt # -r requirements/static/ci/common.in # kubernetes - # msrest # requests certvalidator==0.11.1 # via @@ -552,7 +84,6 @@ cffi==1.14.6 # -c requirements/static/ci/../pkg/py3.9/linux.txt # -c requirements/static/ci/py3.9/linux.txt # -r requirements/static/ci/common.in - # azure-datalake-store # bcrypt # cryptography # napalm @@ -608,10 +139,6 @@ cryptography==41.0.4 # -c requirements/static/ci/../pkg/py3.9/linux.txt # -c requirements/static/ci/py3.9/linux.txt # -r requirements/static/pkg/linux.in - # adal - # azure-cosmosdb-table - # azure-keyvault - # azure-storage-common # etcd3-py # moto # paramiko @@ -711,10 +238,6 @@ ipaddress==1.0.22 # via # -c requirements/static/ci/py3.9/linux.txt # kubernetes -isodate==0.6.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # msrest jaraco.classes==3.2.1 # via # -c requirements/static/ci/../pkg/py3.9/linux.txt @@ -829,97 +352,6 @@ msgpack==1.0.2 # -c requirements/static/ci/py3.9/linux.txt # -r requirements/base.txt # pytest-salt-factories -msrest==0.6.14 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-applicationinsights - # azure-eventgrid - # azure-keyvault - # azure-loganalytics - # azure-mgmt-cdn - # azure-mgmt-compute - # azure-mgmt-containerinstance - # azure-mgmt-containerregistry - # azure-mgmt-containerservice - # azure-mgmt-dns - # azure-mgmt-eventhub - # azure-mgmt-keyvault - # azure-mgmt-media - # azure-mgmt-network - # azure-mgmt-rdbms - # azure-mgmt-resource - # azure-mgmt-servicebus - # azure-mgmt-servicefabric - # azure-mgmt-signalr - # azure-servicefabric - # msrestazure -msrestazure==0.6.3 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-batch - # azure-eventgrid - # azure-graphrbac - # azure-keyvault - # azure-mgmt-advisor - # azure-mgmt-applicationinsights - # azure-mgmt-authorization - # azure-mgmt-batch - # azure-mgmt-batchai - # azure-mgmt-billing - # azure-mgmt-cdn - # azure-mgmt-cognitiveservices - # azure-mgmt-commerce - # azure-mgmt-compute - # azure-mgmt-consumption - # azure-mgmt-containerinstance - # azure-mgmt-containerregistry - # azure-mgmt-containerservice - # azure-mgmt-cosmosdb - # azure-mgmt-datafactory - # azure-mgmt-datalake-analytics - # azure-mgmt-datalake-store - # azure-mgmt-datamigration - # azure-mgmt-devspaces - # azure-mgmt-devtestlabs - # azure-mgmt-dns - # azure-mgmt-eventgrid - # azure-mgmt-eventhub - # azure-mgmt-hanaonazure - # azure-mgmt-iotcentral - # azure-mgmt-iothub - # azure-mgmt-iothubprovisioningservices - # azure-mgmt-keyvault - # azure-mgmt-loganalytics - # azure-mgmt-logic - # azure-mgmt-machinelearningcompute - # azure-mgmt-managementgroups - # azure-mgmt-managementpartner - # azure-mgmt-maps - # azure-mgmt-marketplaceordering - # azure-mgmt-media - # azure-mgmt-monitor - # azure-mgmt-msi - # azure-mgmt-network - # azure-mgmt-notificationhubs - # azure-mgmt-policyinsights - # azure-mgmt-powerbiembedded - # azure-mgmt-rdbms - # azure-mgmt-recoveryservices - # azure-mgmt-recoveryservicesbackup - # azure-mgmt-redis - # azure-mgmt-relay - # azure-mgmt-reservations - # azure-mgmt-resource - # azure-mgmt-scheduler - # azure-mgmt-search - # azure-mgmt-servicebus - # azure-mgmt-servicefabric - # azure-mgmt-signalr - # azure-mgmt-sql - # azure-mgmt-storage - # azure-mgmt-subscription - # azure-mgmt-trafficmanager - # azure-mgmt-web multidict==6.0.2 # via # -c requirements/static/ci/py3.9/linux.txt @@ -950,10 +382,6 @@ ntc-templates==1.4.1 # junos-eznc ntlm-auth==1.3.0 # via requests-ntlm -oauthlib==3.2.2 - # via - # -c requirements/static/ci/py3.9/linux.txt - # requests-oauthlib oscrypto==1.2.0 # via # -c requirements/static/ci/py3.9/linux.txt @@ -1035,10 +463,6 @@ pyinotify==0.9.6 ; sys_platform != "win32" and sys_platform != "darwin" and plat # via # -c requirements/static/ci/py3.9/linux.txt # -r requirements/static/ci/common.in -pyjwt==2.4.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # adal pynacl==1.5.0 # via # -c requirements/static/ci/py3.9/linux.txt @@ -1126,9 +550,6 @@ python-dateutil==2.8.1 # -c requirements/static/ci/../pkg/py3.9/linux.txt # -c requirements/static/ci/py3.9/linux.txt # -r requirements/static/pkg/linux.in - # adal - # azure-cosmosdb-table - # azure-storage-common # botocore # croniter # kubernetes @@ -1174,35 +595,22 @@ pyzmq==23.2.0 # pytest-salt-factories requests-ntlm==1.1.0 # via pywinrm -requests-oauthlib==1.3.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # msrest requests==2.31.0 # via # -c requirements/static/ci/../pkg/py3.9/linux.txt # -c requirements/static/ci/py3.9/linux.txt # -r requirements/base.txt # -r requirements/static/ci/common.in - # adal # apache-libcloud - # azure-cosmosdb-table - # azure-datalake-store - # azure-keyvault - # azure-servicebus - # azure-servicemanagement-legacy - # azure-storage-common # docker # etcd3-py # kubernetes # moto - # msrest # napalm # profitbricks # pyvmomi # pywinrm # requests-ntlm - # requests-oauthlib # responses # vcert responses==0.10.6 @@ -1251,7 +659,6 @@ six==1.16.0 # etcd3-py # genshi # geomet - # isodate # jsonschema # junos-eznc # kazoo @@ -1318,7 +725,7 @@ transitions==0.8.9 # via # -c requirements/static/ci/py3.9/linux.txt # junos-eznc -typing-extensions==4.2.0 +typing-extensions==4.8.0 # via # -c requirements/static/ci/py3.9/linux.txt # pytest-shell-utilities diff --git a/requirements/static/ci/py3.9/darwin.txt b/requirements/static/ci/py3.9/darwin.txt index c16500cc603..fc9ad699938 100644 --- a/requirements/static/ci/py3.9/darwin.txt +++ b/requirements/static/ci/py3.9/darwin.txt @@ -4,10 +4,6 @@ # # pip-compile --no-emit-index-url --output-file=requirements/static/ci/py3.9/darwin.txt requirements/darwin.txt requirements/pytest.txt requirements/static/ci/common.in requirements/static/ci/darwin.in requirements/static/pkg/darwin.in # -adal==1.2.5 - # via - # azure-datalake-store - # msrestazure aiohttp==3.8.5 # via etcd3-py aiosignal==1.2.0 @@ -32,304 +28,6 @@ attrs==23.1.0 # pytest-shell-utilities # pytest-skip-markers # pytest-system-statistics -azure-applicationinsights==0.1.0 - # via azure -azure-batch==4.1.3 - # via azure -azure-common==1.1.26 - # via - # azure-applicationinsights - # azure-batch - # azure-cosmosdb-table - # azure-eventgrid - # azure-graphrbac - # azure-keyvault - # azure-loganalytics - # azure-mgmt-advisor - # azure-mgmt-applicationinsights - # azure-mgmt-authorization - # azure-mgmt-batch - # azure-mgmt-batchai - # azure-mgmt-billing - # azure-mgmt-cdn - # azure-mgmt-cognitiveservices - # azure-mgmt-commerce - # azure-mgmt-compute - # azure-mgmt-consumption - # azure-mgmt-containerinstance - # azure-mgmt-containerregistry - # azure-mgmt-containerservice - # azure-mgmt-cosmosdb - # azure-mgmt-datafactory - # azure-mgmt-datalake-analytics - # azure-mgmt-datalake-store - # azure-mgmt-datamigration - # azure-mgmt-devspaces - # azure-mgmt-devtestlabs - # azure-mgmt-dns - # azure-mgmt-eventgrid - # azure-mgmt-eventhub - # azure-mgmt-hanaonazure - # azure-mgmt-iotcentral - # azure-mgmt-iothub - # azure-mgmt-iothubprovisioningservices - # azure-mgmt-keyvault - # azure-mgmt-loganalytics - # azure-mgmt-logic - # azure-mgmt-machinelearningcompute - # azure-mgmt-managementgroups - # azure-mgmt-managementpartner - # azure-mgmt-maps - # azure-mgmt-marketplaceordering - # azure-mgmt-media - # azure-mgmt-monitor - # azure-mgmt-msi - # azure-mgmt-network - # azure-mgmt-notificationhubs - # azure-mgmt-policyinsights - # azure-mgmt-powerbiembedded - # azure-mgmt-rdbms - # azure-mgmt-recoveryservices - # azure-mgmt-recoveryservicesbackup - # azure-mgmt-redis - # azure-mgmt-relay - # azure-mgmt-reservations - # azure-mgmt-resource - # azure-mgmt-scheduler - # azure-mgmt-search - # azure-mgmt-servicebus - # azure-mgmt-servicefabric - # azure-mgmt-signalr - # azure-mgmt-sql - # azure-mgmt-storage - # azure-mgmt-subscription - # azure-mgmt-trafficmanager - # azure-mgmt-web - # azure-servicebus - # azure-servicefabric - # azure-servicemanagement-legacy - # azure-storage-blob - # azure-storage-common - # azure-storage-file - # azure-storage-queue -azure-cosmosdb-nspkg==2.0.2 - # via azure-cosmosdb-table -azure-cosmosdb-table==1.0.6 - # via azure -azure-datalake-store==0.0.51 - # via azure -azure-eventgrid==1.3.0 - # via azure -azure-graphrbac==0.40.0 - # via azure -azure-keyvault==1.1.0 - # via azure -azure-loganalytics==0.1.0 - # via azure -azure-mgmt-advisor==1.0.1 - # via azure-mgmt -azure-mgmt-applicationinsights==0.1.1 - # via azure-mgmt -azure-mgmt-authorization==0.50.0 - # via azure-mgmt -azure-mgmt-batch==5.0.1 - # via azure-mgmt -azure-mgmt-batchai==2.0.0 - # via azure-mgmt -azure-mgmt-billing==0.2.0 - # via azure-mgmt -azure-mgmt-cdn==3.1.0 - # via azure-mgmt -azure-mgmt-cognitiveservices==3.0.0 - # via azure-mgmt -azure-mgmt-commerce==1.0.1 - # via azure-mgmt -azure-mgmt-compute==4.6.2 - # via azure-mgmt -azure-mgmt-consumption==2.0.0 - # via azure-mgmt -azure-mgmt-containerinstance==1.5.0 - # via azure-mgmt -azure-mgmt-containerregistry==2.8.0 - # via azure-mgmt -azure-mgmt-containerservice==4.4.0 - # via azure-mgmt -azure-mgmt-cosmosdb==0.4.1 - # via azure-mgmt -azure-mgmt-datafactory==0.6.0 - # via azure-mgmt -azure-mgmt-datalake-analytics==0.6.0 - # via azure-mgmt -azure-mgmt-datalake-nspkg==3.0.1 - # via - # azure-mgmt-datalake-analytics - # azure-mgmt-datalake-store -azure-mgmt-datalake-store==0.5.0 - # via azure-mgmt -azure-mgmt-datamigration==1.0.0 - # via azure-mgmt -azure-mgmt-devspaces==0.1.0 - # via azure-mgmt -azure-mgmt-devtestlabs==2.2.0 - # via azure-mgmt -azure-mgmt-dns==2.1.0 - # via azure-mgmt -azure-mgmt-eventgrid==1.0.0 - # via azure-mgmt -azure-mgmt-eventhub==2.6.0 - # via azure-mgmt -azure-mgmt-hanaonazure==0.1.1 - # via azure-mgmt -azure-mgmt-iotcentral==0.1.0 - # via azure-mgmt -azure-mgmt-iothub==0.5.0 - # via azure-mgmt -azure-mgmt-iothubprovisioningservices==0.2.0 - # via azure-mgmt -azure-mgmt-keyvault==1.1.0 - # via azure-mgmt -azure-mgmt-loganalytics==0.2.0 - # via azure-mgmt -azure-mgmt-logic==3.0.0 - # via azure-mgmt -azure-mgmt-machinelearningcompute==0.4.1 - # via azure-mgmt -azure-mgmt-managementgroups==0.1.0 - # via azure-mgmt -azure-mgmt-managementpartner==0.1.1 - # via azure-mgmt -azure-mgmt-maps==0.1.0 - # via azure-mgmt -azure-mgmt-marketplaceordering==0.1.0 - # via azure-mgmt -azure-mgmt-media==1.0.0 - # via azure-mgmt -azure-mgmt-monitor==0.5.2 - # via azure-mgmt -azure-mgmt-msi==0.2.0 - # via azure-mgmt -azure-mgmt-network==2.7.0 - # via azure-mgmt -azure-mgmt-notificationhubs==2.1.0 - # via azure-mgmt -azure-mgmt-nspkg==3.0.2 - # via - # azure-mgmt-advisor - # azure-mgmt-applicationinsights - # azure-mgmt-authorization - # azure-mgmt-batch - # azure-mgmt-batchai - # azure-mgmt-billing - # azure-mgmt-cognitiveservices - # azure-mgmt-commerce - # azure-mgmt-consumption - # azure-mgmt-cosmosdb - # azure-mgmt-datafactory - # azure-mgmt-datalake-nspkg - # azure-mgmt-datamigration - # azure-mgmt-devspaces - # azure-mgmt-devtestlabs - # azure-mgmt-dns - # azure-mgmt-eventgrid - # azure-mgmt-hanaonazure - # azure-mgmt-iotcentral - # azure-mgmt-iothub - # azure-mgmt-iothubprovisioningservices - # azure-mgmt-keyvault - # azure-mgmt-loganalytics - # azure-mgmt-logic - # azure-mgmt-machinelearningcompute - # azure-mgmt-managementgroups - # azure-mgmt-maps - # azure-mgmt-marketplaceordering - # azure-mgmt-monitor - # azure-mgmt-msi - # azure-mgmt-policyinsights - # azure-mgmt-powerbiembedded - # azure-mgmt-recoveryservices - # azure-mgmt-recoveryservicesbackup - # azure-mgmt-redis - # azure-mgmt-relay - # azure-mgmt-reservations - # azure-mgmt-scheduler - # azure-mgmt-servicefabric - # azure-mgmt-signalr - # azure-mgmt-sql - # azure-mgmt-storage - # azure-mgmt-subscription - # azure-mgmt-trafficmanager - # azure-mgmt-web -azure-mgmt-policyinsights==0.1.0 - # via azure-mgmt -azure-mgmt-powerbiembedded==2.0.0 - # via azure-mgmt -azure-mgmt-rdbms==1.9.0 - # via azure-mgmt -azure-mgmt-recoveryservices==0.3.0 - # via azure-mgmt -azure-mgmt-recoveryservicesbackup==0.3.0 - # via azure-mgmt -azure-mgmt-redis==5.0.0 - # via azure-mgmt -azure-mgmt-relay==0.1.0 - # via azure-mgmt -azure-mgmt-reservations==0.2.1 - # via azure-mgmt -azure-mgmt-resource==2.2.0 - # via azure-mgmt -azure-mgmt-scheduler==2.0.0 - # via azure-mgmt -azure-mgmt-search==2.1.0 - # via azure-mgmt -azure-mgmt-servicebus==0.5.3 - # via azure-mgmt -azure-mgmt-servicefabric==0.2.0 - # via azure-mgmt -azure-mgmt-signalr==0.1.1 - # via azure-mgmt -azure-mgmt-sql==0.9.1 - # via azure-mgmt -azure-mgmt-storage==2.0.0 - # via azure-mgmt -azure-mgmt-subscription==0.2.0 - # via azure-mgmt -azure-mgmt-trafficmanager==0.50.0 - # via azure-mgmt -azure-mgmt-web==0.35.0 - # via azure-mgmt -azure-mgmt==4.0.0 - # via azure -azure-nspkg==3.0.2 - # via - # azure-applicationinsights - # azure-batch - # azure-cosmosdb-nspkg - # azure-graphrbac - # azure-keyvault - # azure-loganalytics - # azure-mgmt-nspkg - # azure-servicebus - # azure-servicefabric - # azure-servicemanagement-legacy -azure-servicebus==0.21.1 - # via azure -azure-servicefabric==6.3.0.0 - # via azure -azure-servicemanagement-legacy==0.20.7 - # via azure -azure-storage-blob==1.5.0 - # via azure -azure-storage-common==1.4.2 - # via - # azure-storage-blob - # azure-storage-file - # azure-storage-queue -azure-storage-file==1.4.0 - # via azure -azure-storage-queue==1.4.0 - # via azure -azure==4.0.0 ; sys_platform != "win32" - # via -r requirements/static/ci/common.in backports.entry-points-selectable==1.1.0 # via virtualenv bcrypt==3.1.6 @@ -356,7 +54,6 @@ certifi==2023.07.22 # -c requirements/static/ci/../pkg/py3.9/darwin.txt # -r requirements/static/ci/common.in # kubernetes - # msrest # requests certvalidator==0.11.1 # via vcert @@ -364,7 +61,6 @@ cffi==1.14.6 # via # -c requirements/static/ci/../pkg/py3.9/darwin.txt # -r requirements/static/ci/common.in - # azure-datalake-store # bcrypt # cryptography # napalm @@ -404,10 +100,6 @@ cryptography==41.0.4 # via # -c requirements/static/ci/../pkg/py3.9/darwin.txt # -r requirements/darwin.txt - # adal - # azure-cosmosdb-table - # azure-keyvault - # azure-storage-common # etcd3-py # moto # paramiko @@ -479,8 +171,6 @@ iniconfig==1.0.1 # via pytest ipaddress==1.0.22 # via kubernetes -isodate==0.6.0 - # via msrest jaraco.classes==3.2.1 # via # -c requirements/static/ci/../pkg/py3.9/darwin.txt @@ -567,98 +257,6 @@ msgpack==1.0.2 # -c requirements/static/ci/../pkg/py3.9/darwin.txt # -r requirements/base.txt # pytest-salt-factories -msrest==0.6.19 - # via - # azure-applicationinsights - # azure-eventgrid - # azure-keyvault - # azure-loganalytics - # azure-mgmt-cdn - # azure-mgmt-compute - # azure-mgmt-containerinstance - # azure-mgmt-containerregistry - # azure-mgmt-containerservice - # azure-mgmt-dns - # azure-mgmt-eventhub - # azure-mgmt-keyvault - # azure-mgmt-managementpartner - # azure-mgmt-media - # azure-mgmt-network - # azure-mgmt-notificationhubs - # azure-mgmt-rdbms - # azure-mgmt-resource - # azure-mgmt-search - # azure-mgmt-servicebus - # azure-mgmt-servicefabric - # azure-mgmt-signalr - # azure-servicefabric - # msrestazure -msrestazure==0.6.4 - # via - # azure-batch - # azure-eventgrid - # azure-graphrbac - # azure-keyvault - # azure-mgmt-advisor - # azure-mgmt-applicationinsights - # azure-mgmt-authorization - # azure-mgmt-batch - # azure-mgmt-batchai - # azure-mgmt-billing - # azure-mgmt-cdn - # azure-mgmt-cognitiveservices - # azure-mgmt-commerce - # azure-mgmt-compute - # azure-mgmt-consumption - # azure-mgmt-containerinstance - # azure-mgmt-containerregistry - # azure-mgmt-containerservice - # azure-mgmt-cosmosdb - # azure-mgmt-datafactory - # azure-mgmt-datalake-analytics - # azure-mgmt-datalake-store - # azure-mgmt-datamigration - # azure-mgmt-devspaces - # azure-mgmt-devtestlabs - # azure-mgmt-dns - # azure-mgmt-eventgrid - # azure-mgmt-eventhub - # azure-mgmt-hanaonazure - # azure-mgmt-iotcentral - # azure-mgmt-iothub - # azure-mgmt-iothubprovisioningservices - # azure-mgmt-keyvault - # azure-mgmt-loganalytics - # azure-mgmt-logic - # azure-mgmt-machinelearningcompute - # azure-mgmt-managementgroups - # azure-mgmt-managementpartner - # azure-mgmt-maps - # azure-mgmt-marketplaceordering - # azure-mgmt-media - # azure-mgmt-monitor - # azure-mgmt-msi - # azure-mgmt-network - # azure-mgmt-notificationhubs - # azure-mgmt-policyinsights - # azure-mgmt-powerbiembedded - # azure-mgmt-rdbms - # azure-mgmt-recoveryservices - # azure-mgmt-recoveryservicesbackup - # azure-mgmt-redis - # azure-mgmt-relay - # azure-mgmt-reservations - # azure-mgmt-resource - # azure-mgmt-scheduler - # azure-mgmt-search - # azure-mgmt-servicebus - # azure-mgmt-servicefabric - # azure-mgmt-signalr - # azure-mgmt-sql - # azure-mgmt-storage - # azure-mgmt-subscription - # azure-mgmt-trafficmanager - # azure-mgmt-web multidict==6.0.2 # via # aiohttp @@ -676,8 +274,6 @@ netmiko==3.2.0 # via napalm ntc-templates==1.4.1 # via junos-eznc -oauthlib==3.2.2 - # via requests-oauthlib oscrypto==1.2.0 # via certvalidator packaging==22.0 @@ -738,8 +334,6 @@ pyeapi==0.8.3 # via napalm pygit2==1.13.1 # via -r requirements/static/ci/darwin.in -pyjwt==2.4.0 - # via adal pynacl==1.5.0 # via # -r requirements/static/ci/common.in @@ -796,9 +390,6 @@ python-dateutil==2.8.0 # via # -c requirements/static/ci/../pkg/py3.9/darwin.txt # -r requirements/darwin.txt - # adal - # azure-cosmosdb-table - # azure-storage-common # botocore # croniter # kubernetes @@ -833,29 +424,18 @@ pyzmq==23.2.0 # -c requirements/static/ci/../pkg/py3.9/darwin.txt # -r requirements/zeromq.txt # pytest-salt-factories -requests-oauthlib==1.3.0 - # via msrest requests==2.31.0 # via # -c requirements/static/ci/../pkg/py3.9/darwin.txt # -r requirements/base.txt # -r requirements/static/ci/common.in - # adal # apache-libcloud - # azure-cosmosdb-table - # azure-datalake-store - # azure-keyvault - # azure-servicebus - # azure-servicemanagement-legacy - # azure-storage-common # docker # etcd3-py # kubernetes # moto - # msrest # napalm # pyvmomi - # requests-oauthlib # responses # vcert # vultr @@ -887,11 +467,9 @@ six==1.16.0 # etcd3-py # genshi # geomet - # isodate # jsonschema # junos-eznc # kubernetes - # msrestazure # ncclient # paramiko # python-dateutil diff --git a/requirements/static/ci/py3.9/docs.txt b/requirements/static/ci/py3.9/docs.txt index f15f41588a9..b479054a4c1 100644 --- a/requirements/static/ci/py3.9/docs.txt +++ b/requirements/static/ci/py3.9/docs.txt @@ -181,7 +181,7 @@ tempora==4.1.1 # via # -c requirements/static/ci/py3.9/linux.txt # portend -typing-extensions==4.2.0 +typing-extensions==4.8.0 # via # -c requirements/static/ci/py3.9/linux.txt # myst-docutils diff --git a/requirements/static/ci/py3.9/freebsd.txt b/requirements/static/ci/py3.9/freebsd.txt index 97c33d2318f..a01e797b2d0 100644 --- a/requirements/static/ci/py3.9/freebsd.txt +++ b/requirements/static/ci/py3.9/freebsd.txt @@ -4,10 +4,6 @@ # # pip-compile --no-emit-index-url --output-file=requirements/static/ci/py3.9/freebsd.txt requirements/base.txt requirements/pytest.txt requirements/static/ci/common.in requirements/static/ci/freebsd.in requirements/static/pkg/freebsd.in requirements/zeromq.txt # -adal==1.2.5 - # via - # azure-datalake-store - # msrestazure aiohttp==3.8.5 # via etcd3-py aiosignal==1.2.0 @@ -29,304 +25,6 @@ attrs==23.1.0 # pytest-shell-utilities # pytest-skip-markers # pytest-system-statistics -azure-applicationinsights==0.1.0 - # via azure -azure-batch==4.1.3 - # via azure -azure-common==1.1.26 - # via - # azure-applicationinsights - # azure-batch - # azure-cosmosdb-table - # azure-eventgrid - # azure-graphrbac - # azure-keyvault - # azure-loganalytics - # azure-mgmt-advisor - # azure-mgmt-applicationinsights - # azure-mgmt-authorization - # azure-mgmt-batch - # azure-mgmt-batchai - # azure-mgmt-billing - # azure-mgmt-cdn - # azure-mgmt-cognitiveservices - # azure-mgmt-commerce - # azure-mgmt-compute - # azure-mgmt-consumption - # azure-mgmt-containerinstance - # azure-mgmt-containerregistry - # azure-mgmt-containerservice - # azure-mgmt-cosmosdb - # azure-mgmt-datafactory - # azure-mgmt-datalake-analytics - # azure-mgmt-datalake-store - # azure-mgmt-datamigration - # azure-mgmt-devspaces - # azure-mgmt-devtestlabs - # azure-mgmt-dns - # azure-mgmt-eventgrid - # azure-mgmt-eventhub - # azure-mgmt-hanaonazure - # azure-mgmt-iotcentral - # azure-mgmt-iothub - # azure-mgmt-iothubprovisioningservices - # azure-mgmt-keyvault - # azure-mgmt-loganalytics - # azure-mgmt-logic - # azure-mgmt-machinelearningcompute - # azure-mgmt-managementgroups - # azure-mgmt-managementpartner - # azure-mgmt-maps - # azure-mgmt-marketplaceordering - # azure-mgmt-media - # azure-mgmt-monitor - # azure-mgmt-msi - # azure-mgmt-network - # azure-mgmt-notificationhubs - # azure-mgmt-policyinsights - # azure-mgmt-powerbiembedded - # azure-mgmt-rdbms - # azure-mgmt-recoveryservices - # azure-mgmt-recoveryservicesbackup - # azure-mgmt-redis - # azure-mgmt-relay - # azure-mgmt-reservations - # azure-mgmt-resource - # azure-mgmt-scheduler - # azure-mgmt-search - # azure-mgmt-servicebus - # azure-mgmt-servicefabric - # azure-mgmt-signalr - # azure-mgmt-sql - # azure-mgmt-storage - # azure-mgmt-subscription - # azure-mgmt-trafficmanager - # azure-mgmt-web - # azure-servicebus - # azure-servicefabric - # azure-servicemanagement-legacy - # azure-storage-blob - # azure-storage-common - # azure-storage-file - # azure-storage-queue -azure-cosmosdb-nspkg==2.0.2 - # via azure-cosmosdb-table -azure-cosmosdb-table==1.0.6 - # via azure -azure-datalake-store==0.0.51 - # via azure -azure-eventgrid==1.3.0 - # via azure -azure-graphrbac==0.40.0 - # via azure -azure-keyvault==1.1.0 - # via azure -azure-loganalytics==0.1.0 - # via azure -azure-mgmt-advisor==1.0.1 - # via azure-mgmt -azure-mgmt-applicationinsights==0.1.1 - # via azure-mgmt -azure-mgmt-authorization==0.50.0 - # via azure-mgmt -azure-mgmt-batch==5.0.1 - # via azure-mgmt -azure-mgmt-batchai==2.0.0 - # via azure-mgmt -azure-mgmt-billing==0.2.0 - # via azure-mgmt -azure-mgmt-cdn==3.1.0 - # via azure-mgmt -azure-mgmt-cognitiveservices==3.0.0 - # via azure-mgmt -azure-mgmt-commerce==1.0.1 - # via azure-mgmt -azure-mgmt-compute==4.6.2 - # via azure-mgmt -azure-mgmt-consumption==2.0.0 - # via azure-mgmt -azure-mgmt-containerinstance==1.5.0 - # via azure-mgmt -azure-mgmt-containerregistry==2.8.0 - # via azure-mgmt -azure-mgmt-containerservice==4.4.0 - # via azure-mgmt -azure-mgmt-cosmosdb==0.4.1 - # via azure-mgmt -azure-mgmt-datafactory==0.6.0 - # via azure-mgmt -azure-mgmt-datalake-analytics==0.6.0 - # via azure-mgmt -azure-mgmt-datalake-nspkg==3.0.1 - # via - # azure-mgmt-datalake-analytics - # azure-mgmt-datalake-store -azure-mgmt-datalake-store==0.5.0 - # via azure-mgmt -azure-mgmt-datamigration==1.0.0 - # via azure-mgmt -azure-mgmt-devspaces==0.1.0 - # via azure-mgmt -azure-mgmt-devtestlabs==2.2.0 - # via azure-mgmt -azure-mgmt-dns==2.1.0 - # via azure-mgmt -azure-mgmt-eventgrid==1.0.0 - # via azure-mgmt -azure-mgmt-eventhub==2.6.0 - # via azure-mgmt -azure-mgmt-hanaonazure==0.1.1 - # via azure-mgmt -azure-mgmt-iotcentral==0.1.0 - # via azure-mgmt -azure-mgmt-iothub==0.5.0 - # via azure-mgmt -azure-mgmt-iothubprovisioningservices==0.2.0 - # via azure-mgmt -azure-mgmt-keyvault==1.1.0 - # via azure-mgmt -azure-mgmt-loganalytics==0.2.0 - # via azure-mgmt -azure-mgmt-logic==3.0.0 - # via azure-mgmt -azure-mgmt-machinelearningcompute==0.4.1 - # via azure-mgmt -azure-mgmt-managementgroups==0.1.0 - # via azure-mgmt -azure-mgmt-managementpartner==0.1.1 - # via azure-mgmt -azure-mgmt-maps==0.1.0 - # via azure-mgmt -azure-mgmt-marketplaceordering==0.1.0 - # via azure-mgmt -azure-mgmt-media==1.0.0 - # via azure-mgmt -azure-mgmt-monitor==0.5.2 - # via azure-mgmt -azure-mgmt-msi==0.2.0 - # via azure-mgmt -azure-mgmt-network==2.7.0 - # via azure-mgmt -azure-mgmt-notificationhubs==2.1.0 - # via azure-mgmt -azure-mgmt-nspkg==3.0.2 - # via - # azure-mgmt-advisor - # azure-mgmt-applicationinsights - # azure-mgmt-authorization - # azure-mgmt-batch - # azure-mgmt-batchai - # azure-mgmt-billing - # azure-mgmt-cognitiveservices - # azure-mgmt-commerce - # azure-mgmt-consumption - # azure-mgmt-cosmosdb - # azure-mgmt-datafactory - # azure-mgmt-datalake-nspkg - # azure-mgmt-datamigration - # azure-mgmt-devspaces - # azure-mgmt-devtestlabs - # azure-mgmt-dns - # azure-mgmt-eventgrid - # azure-mgmt-hanaonazure - # azure-mgmt-iotcentral - # azure-mgmt-iothub - # azure-mgmt-iothubprovisioningservices - # azure-mgmt-keyvault - # azure-mgmt-loganalytics - # azure-mgmt-logic - # azure-mgmt-machinelearningcompute - # azure-mgmt-managementgroups - # azure-mgmt-maps - # azure-mgmt-marketplaceordering - # azure-mgmt-monitor - # azure-mgmt-msi - # azure-mgmt-policyinsights - # azure-mgmt-powerbiembedded - # azure-mgmt-recoveryservices - # azure-mgmt-recoveryservicesbackup - # azure-mgmt-redis - # azure-mgmt-relay - # azure-mgmt-reservations - # azure-mgmt-scheduler - # azure-mgmt-servicefabric - # azure-mgmt-signalr - # azure-mgmt-sql - # azure-mgmt-storage - # azure-mgmt-subscription - # azure-mgmt-trafficmanager - # azure-mgmt-web -azure-mgmt-policyinsights==0.1.0 - # via azure-mgmt -azure-mgmt-powerbiembedded==2.0.0 - # via azure-mgmt -azure-mgmt-rdbms==1.9.0 - # via azure-mgmt -azure-mgmt-recoveryservices==0.3.0 - # via azure-mgmt -azure-mgmt-recoveryservicesbackup==0.3.0 - # via azure-mgmt -azure-mgmt-redis==5.0.0 - # via azure-mgmt -azure-mgmt-relay==0.1.0 - # via azure-mgmt -azure-mgmt-reservations==0.2.1 - # via azure-mgmt -azure-mgmt-resource==2.2.0 - # via azure-mgmt -azure-mgmt-scheduler==2.0.0 - # via azure-mgmt -azure-mgmt-search==2.1.0 - # via azure-mgmt -azure-mgmt-servicebus==0.5.3 - # via azure-mgmt -azure-mgmt-servicefabric==0.2.0 - # via azure-mgmt -azure-mgmt-signalr==0.1.1 - # via azure-mgmt -azure-mgmt-sql==0.9.1 - # via azure-mgmt -azure-mgmt-storage==2.0.0 - # via azure-mgmt -azure-mgmt-subscription==0.2.0 - # via azure-mgmt -azure-mgmt-trafficmanager==0.50.0 - # via azure-mgmt -azure-mgmt-web==0.35.0 - # via azure-mgmt -azure-mgmt==4.0.0 - # via azure -azure-nspkg==3.0.2 - # via - # azure-applicationinsights - # azure-batch - # azure-cosmosdb-nspkg - # azure-graphrbac - # azure-keyvault - # azure-loganalytics - # azure-mgmt-nspkg - # azure-servicebus - # azure-servicefabric - # azure-servicemanagement-legacy -azure-servicebus==0.21.1 - # via azure -azure-servicefabric==6.3.0.0 - # via azure -azure-servicemanagement-legacy==0.20.7 - # via azure -azure-storage-blob==1.5.0 - # via azure -azure-storage-common==1.4.2 - # via - # azure-storage-blob - # azure-storage-file - # azure-storage-queue -azure-storage-file==1.4.0 - # via azure -azure-storage-queue==1.4.0 - # via azure -azure==4.0.0 ; sys_platform != "win32" - # via -r requirements/static/ci/common.in backports.entry-points-selectable==1.1.0 # via virtualenv bcrypt==3.1.6 @@ -353,7 +51,6 @@ certifi==2023.07.22 # -c requirements/static/ci/../pkg/py3.9/freebsd.txt # -r requirements/static/ci/common.in # kubernetes - # msrest # requests certvalidator==0.11.1 # via vcert @@ -361,7 +58,6 @@ cffi==1.14.6 # via # -c requirements/static/ci/../pkg/py3.9/freebsd.txt # -r requirements/static/ci/common.in - # azure-datalake-store # bcrypt # cryptography # napalm @@ -401,10 +97,6 @@ cryptography==41.0.4 # via # -c requirements/static/ci/../pkg/py3.9/freebsd.txt # -r requirements/static/pkg/freebsd.in - # adal - # azure-cosmosdb-table - # azure-keyvault - # azure-storage-common # etcd3-py # moto # paramiko @@ -471,8 +163,6 @@ iniconfig==1.0.1 # via pytest ipaddress==1.0.22 # via kubernetes -isodate==0.6.0 - # via msrest jaraco.classes==3.2.1 # via # -c requirements/static/ci/../pkg/py3.9/freebsd.txt @@ -559,98 +249,6 @@ msgpack==1.0.2 # -c requirements/static/ci/../pkg/py3.9/freebsd.txt # -r requirements/base.txt # pytest-salt-factories -msrest==0.6.19 - # via - # azure-applicationinsights - # azure-eventgrid - # azure-keyvault - # azure-loganalytics - # azure-mgmt-cdn - # azure-mgmt-compute - # azure-mgmt-containerinstance - # azure-mgmt-containerregistry - # azure-mgmt-containerservice - # azure-mgmt-dns - # azure-mgmt-eventhub - # azure-mgmt-keyvault - # azure-mgmt-managementpartner - # azure-mgmt-media - # azure-mgmt-network - # azure-mgmt-notificationhubs - # azure-mgmt-rdbms - # azure-mgmt-resource - # azure-mgmt-search - # azure-mgmt-servicebus - # azure-mgmt-servicefabric - # azure-mgmt-signalr - # azure-servicefabric - # msrestazure -msrestazure==0.6.4 - # via - # azure-batch - # azure-eventgrid - # azure-graphrbac - # azure-keyvault - # azure-mgmt-advisor - # azure-mgmt-applicationinsights - # azure-mgmt-authorization - # azure-mgmt-batch - # azure-mgmt-batchai - # azure-mgmt-billing - # azure-mgmt-cdn - # azure-mgmt-cognitiveservices - # azure-mgmt-commerce - # azure-mgmt-compute - # azure-mgmt-consumption - # azure-mgmt-containerinstance - # azure-mgmt-containerregistry - # azure-mgmt-containerservice - # azure-mgmt-cosmosdb - # azure-mgmt-datafactory - # azure-mgmt-datalake-analytics - # azure-mgmt-datalake-store - # azure-mgmt-datamigration - # azure-mgmt-devspaces - # azure-mgmt-devtestlabs - # azure-mgmt-dns - # azure-mgmt-eventgrid - # azure-mgmt-eventhub - # azure-mgmt-hanaonazure - # azure-mgmt-iotcentral - # azure-mgmt-iothub - # azure-mgmt-iothubprovisioningservices - # azure-mgmt-keyvault - # azure-mgmt-loganalytics - # azure-mgmt-logic - # azure-mgmt-machinelearningcompute - # azure-mgmt-managementgroups - # azure-mgmt-managementpartner - # azure-mgmt-maps - # azure-mgmt-marketplaceordering - # azure-mgmt-media - # azure-mgmt-monitor - # azure-mgmt-msi - # azure-mgmt-network - # azure-mgmt-notificationhubs - # azure-mgmt-policyinsights - # azure-mgmt-powerbiembedded - # azure-mgmt-rdbms - # azure-mgmt-recoveryservices - # azure-mgmt-recoveryservicesbackup - # azure-mgmt-redis - # azure-mgmt-relay - # azure-mgmt-reservations - # azure-mgmt-resource - # azure-mgmt-scheduler - # azure-mgmt-search - # azure-mgmt-servicebus - # azure-mgmt-servicefabric - # azure-mgmt-signalr - # azure-mgmt-sql - # azure-mgmt-storage - # azure-mgmt-subscription - # azure-mgmt-trafficmanager - # azure-mgmt-web multidict==6.0.2 # via # aiohttp @@ -668,8 +266,6 @@ netmiko==3.2.0 # via napalm ntc-templates==1.4.1 # via junos-eznc -oauthlib==3.2.2 - # via requests-oauthlib oscrypto==1.2.0 # via certvalidator packaging==22.0 @@ -731,8 +327,6 @@ pygit2==1.13.1 # via -r requirements/static/ci/freebsd.in pyinotify==0.9.6 ; sys_platform != "win32" and sys_platform != "darwin" and platform_system != "openbsd" # via -r requirements/static/ci/common.in -pyjwt==2.4.0 - # via adal pynacl==1.5.0 # via # -r requirements/static/ci/common.in @@ -789,9 +383,6 @@ python-dateutil==2.8.1 # via # -c requirements/static/ci/../pkg/py3.9/freebsd.txt # -r requirements/static/pkg/freebsd.in - # adal - # azure-cosmosdb-table - # azure-storage-common # botocore # croniter # kubernetes @@ -826,29 +417,18 @@ pyzmq==23.2.0 # -c requirements/static/ci/../pkg/py3.9/freebsd.txt # -r requirements/zeromq.txt # pytest-salt-factories -requests-oauthlib==1.3.0 - # via msrest requests==2.31.0 # via # -c requirements/static/ci/../pkg/py3.9/freebsd.txt # -r requirements/base.txt # -r requirements/static/ci/common.in - # adal # apache-libcloud - # azure-cosmosdb-table - # azure-datalake-store - # azure-keyvault - # azure-servicebus - # azure-servicemanagement-legacy - # azure-storage-common # docker # etcd3-py # kubernetes # moto - # msrest # napalm # pyvmomi - # requests-oauthlib # responses # vcert responses==0.10.6 @@ -879,13 +459,11 @@ six==1.16.0 # etcd3-py # genshi # geomet - # isodate # jsonschema # junos-eznc # kazoo # kubernetes # more-itertools - # msrestazure # ncclient # paramiko # python-dateutil @@ -923,7 +501,7 @@ tomli==2.0.1 # via pytest transitions==0.8.9 # via junos-eznc -typing-extensions==4.2.0 +typing-extensions==4.8.0 # via # pytest-shell-utilities # pytest-system-statistics diff --git a/requirements/static/ci/py3.9/lint.txt b/requirements/static/ci/py3.9/lint.txt index c9321d59f3f..2534e512786 100644 --- a/requirements/static/ci/py3.9/lint.txt +++ b/requirements/static/ci/py3.9/lint.txt @@ -4,11 +4,6 @@ # # pip-compile --no-emit-index-url --output-file=requirements/static/ci/py3.9/lint.txt requirements/base.txt requirements/static/ci/common.in requirements/static/ci/lint.in requirements/static/ci/linux.in requirements/static/pkg/linux.in requirements/zeromq.txt # -adal==1.2.3 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-datalake-store - # msrestazure aiohttp==3.8.5 # via # -c requirements/static/ci/py3.9/linux.txt @@ -49,468 +44,6 @@ attrs==23.1.0 # -c requirements/static/ci/py3.9/linux.txt # aiohttp # jsonschema -azure-applicationinsights==0.1.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure -azure-batch==4.1.3 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure -azure-common==1.1.18 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-applicationinsights - # azure-batch - # azure-cosmosdb-table - # azure-eventgrid - # azure-graphrbac - # azure-keyvault - # azure-loganalytics - # azure-mgmt-advisor - # azure-mgmt-applicationinsights - # azure-mgmt-authorization - # azure-mgmt-batch - # azure-mgmt-batchai - # azure-mgmt-billing - # azure-mgmt-cdn - # azure-mgmt-cognitiveservices - # azure-mgmt-commerce - # azure-mgmt-compute - # azure-mgmt-consumption - # azure-mgmt-containerinstance - # azure-mgmt-containerregistry - # azure-mgmt-containerservice - # azure-mgmt-cosmosdb - # azure-mgmt-datafactory - # azure-mgmt-datalake-analytics - # azure-mgmt-datalake-store - # azure-mgmt-datamigration - # azure-mgmt-devspaces - # azure-mgmt-devtestlabs - # azure-mgmt-dns - # azure-mgmt-eventgrid - # azure-mgmt-eventhub - # azure-mgmt-hanaonazure - # azure-mgmt-iotcentral - # azure-mgmt-iothub - # azure-mgmt-iothubprovisioningservices - # azure-mgmt-keyvault - # azure-mgmt-loganalytics - # azure-mgmt-logic - # azure-mgmt-machinelearningcompute - # azure-mgmt-managementgroups - # azure-mgmt-managementpartner - # azure-mgmt-maps - # azure-mgmt-marketplaceordering - # azure-mgmt-media - # azure-mgmt-monitor - # azure-mgmt-msi - # azure-mgmt-network - # azure-mgmt-notificationhubs - # azure-mgmt-policyinsights - # azure-mgmt-powerbiembedded - # azure-mgmt-rdbms - # azure-mgmt-recoveryservices - # azure-mgmt-recoveryservicesbackup - # azure-mgmt-redis - # azure-mgmt-relay - # azure-mgmt-reservations - # azure-mgmt-resource - # azure-mgmt-scheduler - # azure-mgmt-search - # azure-mgmt-servicebus - # azure-mgmt-servicefabric - # azure-mgmt-signalr - # azure-mgmt-sql - # azure-mgmt-storage - # azure-mgmt-subscription - # azure-mgmt-trafficmanager - # azure-mgmt-web - # azure-servicebus - # azure-servicefabric - # azure-servicemanagement-legacy - # azure-storage-blob - # azure-storage-common - # azure-storage-file - # azure-storage-queue -azure-cosmosdb-nspkg==2.0.2 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-cosmosdb-table -azure-cosmosdb-table==1.0.5 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure -azure-datalake-store==0.0.44 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure -azure-eventgrid==1.2.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure -azure-graphrbac==0.40.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure -azure-keyvault==1.1.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure -azure-loganalytics==0.1.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure -azure-mgmt-advisor==1.0.1 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-applicationinsights==0.1.1 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-authorization==0.50.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-batch==5.0.1 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-batchai==2.0.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-billing==0.2.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-cdn==3.1.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-cognitiveservices==3.0.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-commerce==1.0.1 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-compute==4.6.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-consumption==2.0.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-containerinstance==1.4.1 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-containerregistry==2.7.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-containerservice==4.4.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-cosmosdb==0.4.1 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-datafactory==0.6.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-datalake-analytics==0.6.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-datalake-nspkg==3.0.1 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt-datalake-analytics - # azure-mgmt-datalake-store -azure-mgmt-datalake-store==0.5.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-datamigration==1.0.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-devspaces==0.1.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-devtestlabs==2.2.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-dns==2.1.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-eventgrid==1.0.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-eventhub==2.5.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-hanaonazure==0.1.1 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-iotcentral==0.1.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-iothub==0.5.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-iothubprovisioningservices==0.2.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-keyvault==1.1.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-loganalytics==0.2.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-logic==3.0.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-machinelearningcompute==0.4.1 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-managementgroups==0.1.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-managementpartner==0.1.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-maps==0.1.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-marketplaceordering==0.1.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-media==1.0.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-monitor==0.5.2 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-msi==0.2.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-network==2.6.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-notificationhubs==2.0.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-nspkg==3.0.2 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt-advisor - # azure-mgmt-applicationinsights - # azure-mgmt-authorization - # azure-mgmt-batch - # azure-mgmt-batchai - # azure-mgmt-billing - # azure-mgmt-cognitiveservices - # azure-mgmt-commerce - # azure-mgmt-consumption - # azure-mgmt-cosmosdb - # azure-mgmt-datafactory - # azure-mgmt-datalake-nspkg - # azure-mgmt-datamigration - # azure-mgmt-devspaces - # azure-mgmt-devtestlabs - # azure-mgmt-dns - # azure-mgmt-eventgrid - # azure-mgmt-hanaonazure - # azure-mgmt-iotcentral - # azure-mgmt-iothub - # azure-mgmt-iothubprovisioningservices - # azure-mgmt-keyvault - # azure-mgmt-loganalytics - # azure-mgmt-logic - # azure-mgmt-machinelearningcompute - # azure-mgmt-managementgroups - # azure-mgmt-managementpartner - # azure-mgmt-maps - # azure-mgmt-marketplaceordering - # azure-mgmt-monitor - # azure-mgmt-msi - # azure-mgmt-notificationhubs - # azure-mgmt-policyinsights - # azure-mgmt-powerbiembedded - # azure-mgmt-recoveryservices - # azure-mgmt-recoveryservicesbackup - # azure-mgmt-redis - # azure-mgmt-relay - # azure-mgmt-reservations - # azure-mgmt-scheduler - # azure-mgmt-search - # azure-mgmt-servicefabric - # azure-mgmt-signalr - # azure-mgmt-sql - # azure-mgmt-storage - # azure-mgmt-subscription - # azure-mgmt-trafficmanager - # azure-mgmt-web -azure-mgmt-policyinsights==0.1.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-powerbiembedded==2.0.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-rdbms==1.8.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-recoveryservices==0.3.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-recoveryservicesbackup==0.3.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-redis==5.0.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-relay==0.1.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-reservations==0.2.1 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-resource==2.1.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-scheduler==2.0.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-search==2.0.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-servicebus==0.5.3 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-servicefabric==0.2.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-signalr==0.1.1 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-sql==0.9.1 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-storage==2.0.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-subscription==0.2.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-trafficmanager==0.50.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt-web==0.35.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-mgmt -azure-mgmt==4.0.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure -azure-nspkg==3.0.2 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-applicationinsights - # azure-batch - # azure-cosmosdb-nspkg - # azure-eventgrid - # azure-graphrbac - # azure-keyvault - # azure-loganalytics - # azure-mgmt-nspkg - # azure-servicebus - # azure-servicefabric - # azure-servicemanagement-legacy -azure-servicebus==0.21.1 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure -azure-servicefabric==6.3.0.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure -azure-servicemanagement-legacy==0.20.6 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure -azure-storage-blob==1.5.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure -azure-storage-common==1.4.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-cosmosdb-table - # azure-storage-blob - # azure-storage-file - # azure-storage-queue -azure-storage-file==1.4.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure -azure-storage-queue==1.4.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure -azure==4.0.0 ; sys_platform != "win32" - # via - # -c requirements/static/ci/py3.9/linux.txt - # -r requirements/static/ci/common.in backports.entry-points-selectable==1.1.0 # via # -c requirements/static/ci/py3.9/linux.txt @@ -550,7 +83,6 @@ certifi==2023.07.22 # -c requirements/static/ci/py3.9/linux.txt # -r requirements/static/ci/common.in # kubernetes - # msrest # python-telegram-bot # requests certvalidator==0.11.1 @@ -562,7 +94,6 @@ cffi==1.14.6 # -c requirements/static/ci/../pkg/py3.9/linux.txt # -c requirements/static/ci/py3.9/linux.txt # -r requirements/static/ci/common.in - # azure-datalake-store # bcrypt # cryptography # napalm @@ -619,11 +150,7 @@ cryptography==41.0.4 # -c requirements/static/ci/../pkg/py3.9/linux.txt # -c requirements/static/ci/py3.9/linux.txt # -r requirements/static/pkg/linux.in - # adal # ansible-core - # azure-cosmosdb-table - # azure-keyvault - # azure-storage-common # etcd3-py # moto # paramiko @@ -711,10 +238,6 @@ ipaddress==1.0.22 # via # -c requirements/static/ci/py3.9/linux.txt # kubernetes -isodate==0.6.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # msrest isort==4.3.21 # via pylint jaraco.classes==3.2.1 @@ -836,97 +359,6 @@ msgpack==1.0.2 # -c requirements/static/ci/../pkg/py3.9/linux.txt # -c requirements/static/ci/py3.9/linux.txt # -r requirements/base.txt -msrest==0.6.14 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-applicationinsights - # azure-eventgrid - # azure-keyvault - # azure-loganalytics - # azure-mgmt-cdn - # azure-mgmt-compute - # azure-mgmt-containerinstance - # azure-mgmt-containerregistry - # azure-mgmt-containerservice - # azure-mgmt-dns - # azure-mgmt-eventhub - # azure-mgmt-keyvault - # azure-mgmt-media - # azure-mgmt-network - # azure-mgmt-rdbms - # azure-mgmt-resource - # azure-mgmt-servicebus - # azure-mgmt-servicefabric - # azure-mgmt-signalr - # azure-servicefabric - # msrestazure -msrestazure==0.6.3 - # via - # -c requirements/static/ci/py3.9/linux.txt - # azure-batch - # azure-eventgrid - # azure-graphrbac - # azure-keyvault - # azure-mgmt-advisor - # azure-mgmt-applicationinsights - # azure-mgmt-authorization - # azure-mgmt-batch - # azure-mgmt-batchai - # azure-mgmt-billing - # azure-mgmt-cdn - # azure-mgmt-cognitiveservices - # azure-mgmt-commerce - # azure-mgmt-compute - # azure-mgmt-consumption - # azure-mgmt-containerinstance - # azure-mgmt-containerregistry - # azure-mgmt-containerservice - # azure-mgmt-cosmosdb - # azure-mgmt-datafactory - # azure-mgmt-datalake-analytics - # azure-mgmt-datalake-store - # azure-mgmt-datamigration - # azure-mgmt-devspaces - # azure-mgmt-devtestlabs - # azure-mgmt-dns - # azure-mgmt-eventgrid - # azure-mgmt-eventhub - # azure-mgmt-hanaonazure - # azure-mgmt-iotcentral - # azure-mgmt-iothub - # azure-mgmt-iothubprovisioningservices - # azure-mgmt-keyvault - # azure-mgmt-loganalytics - # azure-mgmt-logic - # azure-mgmt-machinelearningcompute - # azure-mgmt-managementgroups - # azure-mgmt-managementpartner - # azure-mgmt-maps - # azure-mgmt-marketplaceordering - # azure-mgmt-media - # azure-mgmt-monitor - # azure-mgmt-msi - # azure-mgmt-network - # azure-mgmt-notificationhubs - # azure-mgmt-policyinsights - # azure-mgmt-powerbiembedded - # azure-mgmt-rdbms - # azure-mgmt-recoveryservices - # azure-mgmt-recoveryservicesbackup - # azure-mgmt-redis - # azure-mgmt-relay - # azure-mgmt-reservations - # azure-mgmt-resource - # azure-mgmt-scheduler - # azure-mgmt-search - # azure-mgmt-servicebus - # azure-mgmt-servicefabric - # azure-mgmt-signalr - # azure-mgmt-sql - # azure-mgmt-storage - # azure-mgmt-subscription - # azure-mgmt-trafficmanager - # azure-mgmt-web multidict==6.0.2 # via # -c requirements/static/ci/py3.9/linux.txt @@ -954,10 +386,6 @@ ntc-templates==1.4.1 # via # -c requirements/static/ci/py3.9/linux.txt # junos-eznc -oauthlib==3.2.2 - # via - # -c requirements/static/ci/py3.9/linux.txt - # requests-oauthlib oscrypto==1.2.0 # via # -c requirements/static/ci/py3.9/linux.txt @@ -1047,7 +475,6 @@ pyinotify==0.9.6 ; sys_platform != "win32" and sys_platform != "darwin" and plat pyjwt==2.4.0 # via # -c requirements/static/ci/py3.9/linux.txt - # adal # twilio pylint==2.4.4 # via @@ -1090,9 +517,6 @@ python-dateutil==2.8.1 # -c requirements/static/ci/../pkg/py3.9/linux.txt # -c requirements/static/ci/py3.9/linux.txt # -r requirements/static/pkg/linux.in - # adal - # azure-cosmosdb-table - # azure-storage-common # botocore # croniter # kubernetes @@ -1149,33 +573,20 @@ redis==3.5.3 # via # -c requirements/static/ci/py3.9/linux.txt # redis-py-cluster -requests-oauthlib==1.3.0 - # via - # -c requirements/static/ci/py3.9/linux.txt - # msrest requests==2.31.0 # via # -c requirements/static/ci/../pkg/py3.9/linux.txt # -c requirements/static/ci/py3.9/linux.txt # -r requirements/base.txt # -r requirements/static/ci/common.in - # adal # apache-libcloud - # azure-cosmosdb-table - # azure-datalake-store - # azure-keyvault - # azure-servicebus - # azure-servicemanagement-legacy - # azure-storage-common # docker # etcd3-py # kubernetes # moto - # msrest # napalm # python-consul # pyvmomi - # requests-oauthlib # responses # twilio # vcert @@ -1233,7 +644,6 @@ six==1.16.0 # etcd3-py # genshi # geomet - # isodate # jsonschema # junos-eznc # kazoo diff --git a/requirements/static/ci/py3.9/linux.txt b/requirements/static/ci/py3.9/linux.txt index 8628ab04adf..cede5b7e94a 100644 --- a/requirements/static/ci/py3.9/linux.txt +++ b/requirements/static/ci/py3.9/linux.txt @@ -4,10 +4,6 @@ # # pip-compile --no-emit-index-url --output-file=requirements/static/ci/py3.9/linux.txt requirements/base.txt requirements/pytest.txt requirements/static/ci/common.in requirements/static/ci/linux.in requirements/static/pkg/linux.in requirements/zeromq.txt # -adal==1.2.3 - # via - # azure-datalake-store - # msrestazure aiohttp==3.8.5 # via etcd3-py aiosignal==1.2.0 @@ -35,309 +31,6 @@ attrs==23.1.0 # pytest-shell-utilities # pytest-skip-markers # pytest-system-statistics -azure-applicationinsights==0.1.0 - # via azure -azure-batch==4.1.3 - # via azure -azure-common==1.1.18 - # via - # azure-applicationinsights - # azure-batch - # azure-cosmosdb-table - # azure-eventgrid - # azure-graphrbac - # azure-keyvault - # azure-loganalytics - # azure-mgmt-advisor - # azure-mgmt-applicationinsights - # azure-mgmt-authorization - # azure-mgmt-batch - # azure-mgmt-batchai - # azure-mgmt-billing - # azure-mgmt-cdn - # azure-mgmt-cognitiveservices - # azure-mgmt-commerce - # azure-mgmt-compute - # azure-mgmt-consumption - # azure-mgmt-containerinstance - # azure-mgmt-containerregistry - # azure-mgmt-containerservice - # azure-mgmt-cosmosdb - # azure-mgmt-datafactory - # azure-mgmt-datalake-analytics - # azure-mgmt-datalake-store - # azure-mgmt-datamigration - # azure-mgmt-devspaces - # azure-mgmt-devtestlabs - # azure-mgmt-dns - # azure-mgmt-eventgrid - # azure-mgmt-eventhub - # azure-mgmt-hanaonazure - # azure-mgmt-iotcentral - # azure-mgmt-iothub - # azure-mgmt-iothubprovisioningservices - # azure-mgmt-keyvault - # azure-mgmt-loganalytics - # azure-mgmt-logic - # azure-mgmt-machinelearningcompute - # azure-mgmt-managementgroups - # azure-mgmt-managementpartner - # azure-mgmt-maps - # azure-mgmt-marketplaceordering - # azure-mgmt-media - # azure-mgmt-monitor - # azure-mgmt-msi - # azure-mgmt-network - # azure-mgmt-notificationhubs - # azure-mgmt-policyinsights - # azure-mgmt-powerbiembedded - # azure-mgmt-rdbms - # azure-mgmt-recoveryservices - # azure-mgmt-recoveryservicesbackup - # azure-mgmt-redis - # azure-mgmt-relay - # azure-mgmt-reservations - # azure-mgmt-resource - # azure-mgmt-scheduler - # azure-mgmt-search - # azure-mgmt-servicebus - # azure-mgmt-servicefabric - # azure-mgmt-signalr - # azure-mgmt-sql - # azure-mgmt-storage - # azure-mgmt-subscription - # azure-mgmt-trafficmanager - # azure-mgmt-web - # azure-servicebus - # azure-servicefabric - # azure-servicemanagement-legacy - # azure-storage-blob - # azure-storage-common - # azure-storage-file - # azure-storage-queue -azure-cosmosdb-nspkg==2.0.2 - # via azure-cosmosdb-table -azure-cosmosdb-table==1.0.5 - # via azure -azure-datalake-store==0.0.44 - # via azure -azure-eventgrid==1.2.0 - # via azure -azure-graphrbac==0.40.0 - # via azure -azure-keyvault==1.1.0 - # via azure -azure-loganalytics==0.1.0 - # via azure -azure-mgmt-advisor==1.0.1 - # via azure-mgmt -azure-mgmt-applicationinsights==0.1.1 - # via azure-mgmt -azure-mgmt-authorization==0.50.0 - # via azure-mgmt -azure-mgmt-batch==5.0.1 - # via azure-mgmt -azure-mgmt-batchai==2.0.0 - # via azure-mgmt -azure-mgmt-billing==0.2.0 - # via azure-mgmt -azure-mgmt-cdn==3.1.0 - # via azure-mgmt -azure-mgmt-cognitiveservices==3.0.0 - # via azure-mgmt -azure-mgmt-commerce==1.0.1 - # via azure-mgmt -azure-mgmt-compute==4.6.0 - # via azure-mgmt -azure-mgmt-consumption==2.0.0 - # via azure-mgmt -azure-mgmt-containerinstance==1.4.1 - # via azure-mgmt -azure-mgmt-containerregistry==2.7.0 - # via azure-mgmt -azure-mgmt-containerservice==4.4.0 - # via azure-mgmt -azure-mgmt-cosmosdb==0.4.1 - # via azure-mgmt -azure-mgmt-datafactory==0.6.0 - # via azure-mgmt -azure-mgmt-datalake-analytics==0.6.0 - # via azure-mgmt -azure-mgmt-datalake-nspkg==3.0.1 - # via - # azure-mgmt-datalake-analytics - # azure-mgmt-datalake-store -azure-mgmt-datalake-store==0.5.0 - # via azure-mgmt -azure-mgmt-datamigration==1.0.0 - # via azure-mgmt -azure-mgmt-devspaces==0.1.0 - # via azure-mgmt -azure-mgmt-devtestlabs==2.2.0 - # via azure-mgmt -azure-mgmt-dns==2.1.0 - # via azure-mgmt -azure-mgmt-eventgrid==1.0.0 - # via azure-mgmt -azure-mgmt-eventhub==2.5.0 - # via azure-mgmt -azure-mgmt-hanaonazure==0.1.1 - # via azure-mgmt -azure-mgmt-iotcentral==0.1.0 - # via azure-mgmt -azure-mgmt-iothub==0.5.0 - # via azure-mgmt -azure-mgmt-iothubprovisioningservices==0.2.0 - # via azure-mgmt -azure-mgmt-keyvault==1.1.0 - # via azure-mgmt -azure-mgmt-loganalytics==0.2.0 - # via azure-mgmt -azure-mgmt-logic==3.0.0 - # via azure-mgmt -azure-mgmt-machinelearningcompute==0.4.1 - # via azure-mgmt -azure-mgmt-managementgroups==0.1.0 - # via azure-mgmt -azure-mgmt-managementpartner==0.1.0 - # via azure-mgmt -azure-mgmt-maps==0.1.0 - # via azure-mgmt -azure-mgmt-marketplaceordering==0.1.0 - # via azure-mgmt -azure-mgmt-media==1.0.0 - # via azure-mgmt -azure-mgmt-monitor==0.5.2 - # via azure-mgmt -azure-mgmt-msi==0.2.0 - # via azure-mgmt -azure-mgmt-network==2.6.0 - # via azure-mgmt -azure-mgmt-notificationhubs==2.0.0 - # via azure-mgmt -azure-mgmt-nspkg==3.0.2 - # via - # azure-mgmt-advisor - # azure-mgmt-applicationinsights - # azure-mgmt-authorization - # azure-mgmt-batch - # azure-mgmt-batchai - # azure-mgmt-billing - # azure-mgmt-cognitiveservices - # azure-mgmt-commerce - # azure-mgmt-consumption - # azure-mgmt-cosmosdb - # azure-mgmt-datafactory - # azure-mgmt-datalake-nspkg - # azure-mgmt-datamigration - # azure-mgmt-devspaces - # azure-mgmt-devtestlabs - # azure-mgmt-dns - # azure-mgmt-eventgrid - # azure-mgmt-hanaonazure - # azure-mgmt-iotcentral - # azure-mgmt-iothub - # azure-mgmt-iothubprovisioningservices - # azure-mgmt-keyvault - # azure-mgmt-loganalytics - # azure-mgmt-logic - # azure-mgmt-machinelearningcompute - # azure-mgmt-managementgroups - # azure-mgmt-managementpartner - # azure-mgmt-maps - # azure-mgmt-marketplaceordering - # azure-mgmt-monitor - # azure-mgmt-msi - # azure-mgmt-notificationhubs - # azure-mgmt-policyinsights - # azure-mgmt-powerbiembedded - # azure-mgmt-recoveryservices - # azure-mgmt-recoveryservicesbackup - # azure-mgmt-redis - # azure-mgmt-relay - # azure-mgmt-reservations - # azure-mgmt-scheduler - # azure-mgmt-search - # azure-mgmt-servicefabric - # azure-mgmt-signalr - # azure-mgmt-sql - # azure-mgmt-storage - # azure-mgmt-subscription - # azure-mgmt-trafficmanager - # azure-mgmt-web -azure-mgmt-policyinsights==0.1.0 - # via azure-mgmt -azure-mgmt-powerbiembedded==2.0.0 - # via azure-mgmt -azure-mgmt-rdbms==1.8.0 - # via azure-mgmt -azure-mgmt-recoveryservices==0.3.0 - # via azure-mgmt -azure-mgmt-recoveryservicesbackup==0.3.0 - # via azure-mgmt -azure-mgmt-redis==5.0.0 - # via azure-mgmt -azure-mgmt-relay==0.1.0 - # via azure-mgmt -azure-mgmt-reservations==0.2.1 - # via azure-mgmt -azure-mgmt-resource==2.1.0 - # via azure-mgmt -azure-mgmt-scheduler==2.0.0 - # via azure-mgmt -azure-mgmt-search==2.0.0 - # via azure-mgmt -azure-mgmt-servicebus==0.5.3 - # via azure-mgmt -azure-mgmt-servicefabric==0.2.0 - # via azure-mgmt -azure-mgmt-signalr==0.1.1 - # via azure-mgmt -azure-mgmt-sql==0.9.1 - # via azure-mgmt -azure-mgmt-storage==2.0.0 - # via azure-mgmt -azure-mgmt-subscription==0.2.0 - # via azure-mgmt -azure-mgmt-trafficmanager==0.50.0 - # via azure-mgmt -azure-mgmt-web==0.35.0 - # via azure-mgmt -azure-mgmt==4.0.0 - # via azure -azure-nspkg==3.0.2 - # via - # azure-applicationinsights - # azure-batch - # azure-cosmosdb-nspkg - # azure-eventgrid - # azure-graphrbac - # azure-keyvault - # azure-loganalytics - # azure-mgmt-nspkg - # azure-servicebus - # azure-servicefabric - # azure-servicemanagement-legacy -azure-servicebus==0.21.1 - # via azure -azure-servicefabric==6.3.0.0 - # via azure -azure-servicemanagement-legacy==0.20.6 - # via azure -azure-storage-blob==1.5.0 - # via azure -azure-storage-common==1.4.0 - # via - # azure-cosmosdb-table - # azure-storage-blob - # azure-storage-file - # azure-storage-queue -azure-storage-file==1.4.0 - # via azure -azure-storage-queue==1.4.0 - # via azure -azure==4.0.0 ; sys_platform != "win32" - # via -r requirements/static/ci/common.in backports.entry-points-selectable==1.1.0 # via virtualenv bcrypt==3.1.6 @@ -366,7 +59,6 @@ certifi==2023.07.22 # -c requirements/static/ci/../pkg/py3.9/linux.txt # -r requirements/static/ci/common.in # kubernetes - # msrest # python-telegram-bot # requests certvalidator==0.11.1 @@ -375,7 +67,6 @@ cffi==1.14.6 # via # -c requirements/static/ci/../pkg/py3.9/linux.txt # -r requirements/static/ci/common.in - # azure-datalake-store # bcrypt # cryptography # napalm @@ -415,11 +106,7 @@ cryptography==41.0.4 # via # -c requirements/static/ci/../pkg/py3.9/linux.txt # -r requirements/static/pkg/linux.in - # adal # ansible-core - # azure-cosmosdb-table - # azure-keyvault - # azure-storage-common # etcd3-py # moto # paramiko @@ -485,8 +172,6 @@ iniconfig==1.0.1 # via pytest ipaddress==1.0.22 # via kubernetes -isodate==0.6.0 - # via msrest jaraco.classes==3.2.1 # via # -c requirements/static/ci/../pkg/py3.9/linux.txt @@ -574,95 +259,6 @@ msgpack==1.0.2 # -c requirements/static/ci/../pkg/py3.9/linux.txt # -r requirements/base.txt # pytest-salt-factories -msrest==0.6.14 - # via - # azure-applicationinsights - # azure-eventgrid - # azure-keyvault - # azure-loganalytics - # azure-mgmt-cdn - # azure-mgmt-compute - # azure-mgmt-containerinstance - # azure-mgmt-containerregistry - # azure-mgmt-containerservice - # azure-mgmt-dns - # azure-mgmt-eventhub - # azure-mgmt-keyvault - # azure-mgmt-media - # azure-mgmt-network - # azure-mgmt-rdbms - # azure-mgmt-resource - # azure-mgmt-servicebus - # azure-mgmt-servicefabric - # azure-mgmt-signalr - # azure-servicefabric - # msrestazure -msrestazure==0.6.3 - # via - # azure-batch - # azure-eventgrid - # azure-graphrbac - # azure-keyvault - # azure-mgmt-advisor - # azure-mgmt-applicationinsights - # azure-mgmt-authorization - # azure-mgmt-batch - # azure-mgmt-batchai - # azure-mgmt-billing - # azure-mgmt-cdn - # azure-mgmt-cognitiveservices - # azure-mgmt-commerce - # azure-mgmt-compute - # azure-mgmt-consumption - # azure-mgmt-containerinstance - # azure-mgmt-containerregistry - # azure-mgmt-containerservice - # azure-mgmt-cosmosdb - # azure-mgmt-datafactory - # azure-mgmt-datalake-analytics - # azure-mgmt-datalake-store - # azure-mgmt-datamigration - # azure-mgmt-devspaces - # azure-mgmt-devtestlabs - # azure-mgmt-dns - # azure-mgmt-eventgrid - # azure-mgmt-eventhub - # azure-mgmt-hanaonazure - # azure-mgmt-iotcentral - # azure-mgmt-iothub - # azure-mgmt-iothubprovisioningservices - # azure-mgmt-keyvault - # azure-mgmt-loganalytics - # azure-mgmt-logic - # azure-mgmt-machinelearningcompute - # azure-mgmt-managementgroups - # azure-mgmt-managementpartner - # azure-mgmt-maps - # azure-mgmt-marketplaceordering - # azure-mgmt-media - # azure-mgmt-monitor - # azure-mgmt-msi - # azure-mgmt-network - # azure-mgmt-notificationhubs - # azure-mgmt-policyinsights - # azure-mgmt-powerbiembedded - # azure-mgmt-rdbms - # azure-mgmt-recoveryservices - # azure-mgmt-recoveryservicesbackup - # azure-mgmt-redis - # azure-mgmt-relay - # azure-mgmt-reservations - # azure-mgmt-resource - # azure-mgmt-scheduler - # azure-mgmt-search - # azure-mgmt-servicebus - # azure-mgmt-servicefabric - # azure-mgmt-signalr - # azure-mgmt-sql - # azure-mgmt-storage - # azure-mgmt-subscription - # azure-mgmt-trafficmanager - # azure-mgmt-web multidict==6.0.2 # via # aiohttp @@ -680,8 +276,6 @@ netmiko==3.2.0 # via napalm ntc-templates==1.4.1 # via junos-eznc -oauthlib==3.2.2 - # via requests-oauthlib oscrypto==1.2.0 # via certvalidator packaging==22.0 @@ -747,9 +341,7 @@ pyiface==0.0.11 pyinotify==0.9.6 ; sys_platform != "win32" and sys_platform != "darwin" and platform_system != "openbsd" # via -r requirements/static/ci/common.in pyjwt==2.4.0 - # via - # adal - # twilio + # via twilio pymysql==1.0.2 # via -r requirements/static/ci/linux.in pynacl==1.5.0 @@ -810,9 +402,6 @@ python-dateutil==2.8.1 # via # -c requirements/static/ci/../pkg/py3.9/linux.txt # -r requirements/static/pkg/linux.in - # adal - # azure-cosmosdb-table - # azure-storage-common # botocore # croniter # kubernetes @@ -857,30 +446,19 @@ redis-py-cluster==2.1.3 # via -r requirements/static/ci/linux.in redis==3.5.3 # via redis-py-cluster -requests-oauthlib==1.3.0 - # via msrest requests==2.31.0 # via # -c requirements/static/ci/../pkg/py3.9/linux.txt # -r requirements/base.txt # -r requirements/static/ci/common.in - # adal # apache-libcloud - # azure-cosmosdb-table - # azure-datalake-store - # azure-keyvault - # azure-servicebus - # azure-servicemanagement-legacy - # azure-storage-common # docker # etcd3-py # kubernetes # moto - # msrest # napalm # python-consul # pyvmomi - # requests-oauthlib # responses # twilio # vcert @@ -919,7 +497,6 @@ six==1.16.0 # etcd3-py # genshi # geomet - # isodate # jsonschema # junos-eznc # kazoo @@ -971,7 +548,7 @@ transitions==0.8.9 # via junos-eznc twilio==7.9.2 # via -r requirements/static/ci/linux.in -typing-extensions==4.2.0 +typing-extensions==4.8.0 # via # pytest-shell-utilities # pytest-system-statistics From 11783d62210b18d5bb508ce9250b660f103ce0e1 Mon Sep 17 00:00:00 2001 From: Pedro Algarvio Date: Mon, 30 Oct 2023 07:26:24 +0000 Subject: [PATCH 130/153] Bump to `werkzeug==3.0.1` due to https://github.com/advisories/GHSA-hrfv-mqp8-q5rw Does not upgrade for Py3.7 since this version of werkzeug does not support 3.7. This also upgrades to `pytest-httpserver==1.0.8` Signed-off-by: Pedro Algarvio --- requirements/static/ci/py3.10/cloud.txt | 4 ++-- requirements/static/ci/py3.10/darwin.txt | 4 ++-- requirements/static/ci/py3.10/freebsd.txt | 4 ++-- requirements/static/ci/py3.10/lint.txt | 2 +- requirements/static/ci/py3.10/linux.txt | 4 ++-- requirements/static/ci/py3.10/windows.txt | 4 ++-- requirements/static/ci/py3.7/cloud.txt | 2 +- requirements/static/ci/py3.7/freebsd.txt | 2 +- requirements/static/ci/py3.7/linux.txt | 2 +- requirements/static/ci/py3.7/windows.txt | 2 +- requirements/static/ci/py3.8/cloud.txt | 4 ++-- requirements/static/ci/py3.8/freebsd.txt | 4 ++-- requirements/static/ci/py3.8/lint.txt | 2 +- requirements/static/ci/py3.8/linux.txt | 4 ++-- requirements/static/ci/py3.8/windows.txt | 4 ++-- requirements/static/ci/py3.9/cloud.txt | 4 ++-- requirements/static/ci/py3.9/darwin.txt | 4 ++-- requirements/static/ci/py3.9/freebsd.txt | 4 ++-- requirements/static/ci/py3.9/lint.txt | 2 +- requirements/static/ci/py3.9/linux.txt | 4 ++-- requirements/static/ci/py3.9/windows.txt | 4 ++-- 21 files changed, 35 insertions(+), 35 deletions(-) diff --git a/requirements/static/ci/py3.10/cloud.txt b/requirements/static/ci/py3.10/cloud.txt index d1f36ddeb81..3e1dd36839f 100644 --- a/requirements/static/ci/py3.10/cloud.txt +++ b/requirements/static/ci/py3.10/cloud.txt @@ -463,7 +463,7 @@ pytest-helpers-namespace==2021.4.29 # -r requirements/pytest.txt # pytest-salt-factories # pytest-shell-utilities -pytest-httpserver==1.0.4 +pytest-httpserver==1.0.8 # via # -c requirements/static/ci/py3.10/linux.txt # -r requirements/pytest.txt @@ -706,7 +706,7 @@ wempy==0.2.1 # via # -c requirements/static/ci/py3.10/linux.txt # -r requirements/static/ci/common.in -werkzeug==2.2.3 +werkzeug==3.0.1 # via # -c requirements/static/ci/py3.10/linux.txt # moto diff --git a/requirements/static/ci/py3.10/darwin.txt b/requirements/static/ci/py3.10/darwin.txt index 19995230ec1..c04956bc6f9 100644 --- a/requirements/static/ci/py3.10/darwin.txt +++ b/requirements/static/ci/py3.10/darwin.txt @@ -327,7 +327,7 @@ pytest-helpers-namespace==2021.4.29 # -r requirements/pytest.txt # pytest-salt-factories # pytest-shell-utilities -pytest-httpserver==1.0.4 +pytest-httpserver==1.0.8 # via -r requirements/pytest.txt pytest-salt-factories==1.0.0rc27 # via -r requirements/pytest.txt @@ -495,7 +495,7 @@ websocket-client==0.40.0 # kubernetes wempy==0.2.1 # via -r requirements/static/ci/common.in -werkzeug==2.2.3 +werkzeug==3.0.1 # via # moto # pytest-httpserver diff --git a/requirements/static/ci/py3.10/freebsd.txt b/requirements/static/ci/py3.10/freebsd.txt index c0b25dffe6d..8ddf4a5876e 100644 --- a/requirements/static/ci/py3.10/freebsd.txt +++ b/requirements/static/ci/py3.10/freebsd.txt @@ -320,7 +320,7 @@ pytest-helpers-namespace==2021.4.29 # -r requirements/pytest.txt # pytest-salt-factories # pytest-shell-utilities -pytest-httpserver==1.0.4 +pytest-httpserver==1.0.8 # via -r requirements/pytest.txt pytest-salt-factories==1.0.0rc27 # via -r requirements/pytest.txt @@ -483,7 +483,7 @@ websocket-client==0.40.0 # kubernetes wempy==0.2.1 # via -r requirements/static/ci/common.in -werkzeug==2.2.3 +werkzeug==3.0.1 # via # moto # pytest-httpserver diff --git a/requirements/static/ci/py3.10/lint.txt b/requirements/static/ci/py3.10/lint.txt index 992ffbf04e9..b337952b9cf 100644 --- a/requirements/static/ci/py3.10/lint.txt +++ b/requirements/static/ci/py3.10/lint.txt @@ -696,7 +696,7 @@ wempy==0.2.1 # via # -c requirements/static/ci/py3.10/linux.txt # -r requirements/static/ci/common.in -werkzeug==2.2.3 +werkzeug==3.0.1 # via # -c requirements/static/ci/py3.10/linux.txt # moto diff --git a/requirements/static/ci/py3.10/linux.txt b/requirements/static/ci/py3.10/linux.txt index e95bc375c06..2d232d5ff55 100644 --- a/requirements/static/ci/py3.10/linux.txt +++ b/requirements/static/ci/py3.10/linux.txt @@ -337,7 +337,7 @@ pytest-helpers-namespace==2021.4.29 # -r requirements/pytest.txt # pytest-salt-factories # pytest-shell-utilities -pytest-httpserver==1.0.4 +pytest-httpserver==1.0.8 # via -r requirements/pytest.txt pytest-salt-factories==1.0.0rc27 # via -r requirements/pytest.txt @@ -532,7 +532,7 @@ websocket-client==0.40.0 # kubernetes wempy==0.2.1 # via -r requirements/static/ci/common.in -werkzeug==2.2.3 +werkzeug==3.0.1 # via # moto # pytest-httpserver diff --git a/requirements/static/ci/py3.10/windows.txt b/requirements/static/ci/py3.10/windows.txt index c4701b1c158..7a7063de6a2 100644 --- a/requirements/static/ci/py3.10/windows.txt +++ b/requirements/static/ci/py3.10/windows.txt @@ -304,7 +304,7 @@ pytest-helpers-namespace==2021.12.29 # -r requirements/pytest.txt # pytest-salt-factories # pytest-shell-utilities -pytest-httpserver==1.0.6 +pytest-httpserver==1.0.8 # via -r requirements/pytest.txt pytest-salt-factories==1.0.0rc27 # via -r requirements/pytest.txt @@ -470,7 +470,7 @@ websocket-client==0.40.0 # kubernetes wempy==0.2.1 # via -r requirements/static/ci/common.in -werkzeug==2.2.3 +werkzeug==3.0.1 # via # moto # pytest-httpserver diff --git a/requirements/static/ci/py3.7/cloud.txt b/requirements/static/ci/py3.7/cloud.txt index 5db5f108dcf..1c279ef2051 100644 --- a/requirements/static/ci/py3.7/cloud.txt +++ b/requirements/static/ci/py3.7/cloud.txt @@ -513,7 +513,7 @@ pytest-helpers-namespace==2021.4.29 # -r requirements/pytest.txt # pytest-salt-factories # pytest-shell-utilities -pytest-httpserver==1.0.4 +pytest-httpserver==1.0.6 # via # -c requirements/static/ci/py3.7/linux.txt # -r requirements/pytest.txt diff --git a/requirements/static/ci/py3.7/freebsd.txt b/requirements/static/ci/py3.7/freebsd.txt index 3d9ec1a4400..92532a8783d 100644 --- a/requirements/static/ci/py3.7/freebsd.txt +++ b/requirements/static/ci/py3.7/freebsd.txt @@ -361,7 +361,7 @@ pytest-helpers-namespace==2021.4.29 # -r requirements/pytest.txt # pytest-salt-factories # pytest-shell-utilities -pytest-httpserver==1.0.4 +pytest-httpserver==1.0.6 # via -r requirements/pytest.txt pytest-salt-factories==1.0.0rc27 # via -r requirements/pytest.txt diff --git a/requirements/static/ci/py3.7/linux.txt b/requirements/static/ci/py3.7/linux.txt index fbfa9435110..ab9bc7f22aa 100644 --- a/requirements/static/ci/py3.7/linux.txt +++ b/requirements/static/ci/py3.7/linux.txt @@ -380,7 +380,7 @@ pytest-helpers-namespace==2021.4.29 # -r requirements/pytest.txt # pytest-salt-factories # pytest-shell-utilities -pytest-httpserver==1.0.4 +pytest-httpserver==1.0.6 # via -r requirements/pytest.txt pytest-salt-factories==1.0.0rc27 # via -r requirements/pytest.txt diff --git a/requirements/static/ci/py3.7/windows.txt b/requirements/static/ci/py3.7/windows.txt index 85af33128eb..e93c1ac92ea 100644 --- a/requirements/static/ci/py3.7/windows.txt +++ b/requirements/static/ci/py3.7/windows.txt @@ -317,7 +317,7 @@ pytest-helpers-namespace==2021.4.29 # -r requirements/pytest.txt # pytest-salt-factories # pytest-shell-utilities -pytest-httpserver==1.0.4 +pytest-httpserver==1.0.6 # via -r requirements/pytest.txt pytest-salt-factories==1.0.0rc27 # via -r requirements/pytest.txt diff --git a/requirements/static/ci/py3.8/cloud.txt b/requirements/static/ci/py3.8/cloud.txt index 4dae57d76ec..db414c83501 100644 --- a/requirements/static/ci/py3.8/cloud.txt +++ b/requirements/static/ci/py3.8/cloud.txt @@ -501,7 +501,7 @@ pytest-helpers-namespace==2021.4.29 # -r requirements/pytest.txt # pytest-salt-factories # pytest-shell-utilities -pytest-httpserver==1.0.4 +pytest-httpserver==1.0.8 # via # -c requirements/static/ci/py3.8/linux.txt # -r requirements/pytest.txt @@ -759,7 +759,7 @@ wempy==0.2.1 # via # -c requirements/static/ci/py3.8/linux.txt # -r requirements/static/ci/common.in -werkzeug==2.2.3 +werkzeug==3.0.1 # via # -c requirements/static/ci/py3.8/linux.txt # moto diff --git a/requirements/static/ci/py3.8/freebsd.txt b/requirements/static/ci/py3.8/freebsd.txt index 0e7e9f410c0..9e5db0f3934 100644 --- a/requirements/static/ci/py3.8/freebsd.txt +++ b/requirements/static/ci/py3.8/freebsd.txt @@ -349,7 +349,7 @@ pytest-helpers-namespace==2021.4.29 # -r requirements/pytest.txt # pytest-salt-factories # pytest-shell-utilities -pytest-httpserver==1.0.4 +pytest-httpserver==1.0.8 # via -r requirements/pytest.txt pytest-salt-factories==1.0.0rc27 # via -r requirements/pytest.txt @@ -525,7 +525,7 @@ websocket-client==0.40.0 # kubernetes wempy==0.2.1 # via -r requirements/static/ci/common.in -werkzeug==2.2.3 +werkzeug==3.0.1 # via # moto # pytest-httpserver diff --git a/requirements/static/ci/py3.8/lint.txt b/requirements/static/ci/py3.8/lint.txt index 63435fa350a..39ab2aa8f2c 100644 --- a/requirements/static/ci/py3.8/lint.txt +++ b/requirements/static/ci/py3.8/lint.txt @@ -753,7 +753,7 @@ wempy==0.2.1 # via # -c requirements/static/ci/py3.8/linux.txt # -r requirements/static/ci/common.in -werkzeug==2.2.3 +werkzeug==3.0.1 # via # -c requirements/static/ci/py3.8/linux.txt # moto diff --git a/requirements/static/ci/py3.8/linux.txt b/requirements/static/ci/py3.8/linux.txt index aa9cc86e8f6..efd0225b11f 100644 --- a/requirements/static/ci/py3.8/linux.txt +++ b/requirements/static/ci/py3.8/linux.txt @@ -368,7 +368,7 @@ pytest-helpers-namespace==2021.4.29 # -r requirements/pytest.txt # pytest-salt-factories # pytest-shell-utilities -pytest-httpserver==1.0.4 +pytest-httpserver==1.0.8 # via -r requirements/pytest.txt pytest-salt-factories==1.0.0rc27 # via -r requirements/pytest.txt @@ -576,7 +576,7 @@ websocket-client==0.40.0 # kubernetes wempy==0.2.1 # via -r requirements/static/ci/common.in -werkzeug==2.2.3 +werkzeug==3.0.1 # via # moto # pytest-httpserver diff --git a/requirements/static/ci/py3.8/windows.txt b/requirements/static/ci/py3.8/windows.txt index 1e8a8e6d361..9298ebfdbbe 100644 --- a/requirements/static/ci/py3.8/windows.txt +++ b/requirements/static/ci/py3.8/windows.txt @@ -305,7 +305,7 @@ pytest-helpers-namespace==2021.4.29 # -r requirements/pytest.txt # pytest-salt-factories # pytest-shell-utilities -pytest-httpserver==1.0.4 +pytest-httpserver==1.0.8 # via -r requirements/pytest.txt pytest-salt-factories==1.0.0rc27 # via -r requirements/pytest.txt @@ -473,7 +473,7 @@ websocket-client==0.40.0 # kubernetes wempy==0.2.1 # via -r requirements/static/ci/common.in -werkzeug==2.2.3 +werkzeug==3.0.1 # via # moto # pytest-httpserver diff --git a/requirements/static/ci/py3.9/cloud.txt b/requirements/static/ci/py3.9/cloud.txt index b439d22b8b9..583798b82de 100644 --- a/requirements/static/ci/py3.9/cloud.txt +++ b/requirements/static/ci/py3.9/cloud.txt @@ -503,7 +503,7 @@ pytest-helpers-namespace==2021.4.29 # -r requirements/pytest.txt # pytest-salt-factories # pytest-shell-utilities -pytest-httpserver==1.0.4 +pytest-httpserver==1.0.8 # via # -c requirements/static/ci/py3.9/linux.txt # -r requirements/pytest.txt @@ -761,7 +761,7 @@ wempy==0.2.1 # via # -c requirements/static/ci/py3.9/linux.txt # -r requirements/static/ci/common.in -werkzeug==2.2.3 +werkzeug==3.0.1 # via # -c requirements/static/ci/py3.9/linux.txt # moto diff --git a/requirements/static/ci/py3.9/darwin.txt b/requirements/static/ci/py3.9/darwin.txt index fc9ad699938..fc08c0ea394 100644 --- a/requirements/static/ci/py3.9/darwin.txt +++ b/requirements/static/ci/py3.9/darwin.txt @@ -358,7 +358,7 @@ pytest-helpers-namespace==2021.4.29 # -r requirements/pytest.txt # pytest-salt-factories # pytest-shell-utilities -pytest-httpserver==1.0.4 +pytest-httpserver==1.0.8 # via -r requirements/pytest.txt pytest-salt-factories==1.0.0rc27 # via -r requirements/pytest.txt @@ -539,7 +539,7 @@ websocket-client==0.40.0 # kubernetes wempy==0.2.1 # via -r requirements/static/ci/common.in -werkzeug==2.2.3 +werkzeug==3.0.1 # via # moto # pytest-httpserver diff --git a/requirements/static/ci/py3.9/freebsd.txt b/requirements/static/ci/py3.9/freebsd.txt index a01e797b2d0..a961aa757fa 100644 --- a/requirements/static/ci/py3.9/freebsd.txt +++ b/requirements/static/ci/py3.9/freebsd.txt @@ -351,7 +351,7 @@ pytest-helpers-namespace==2021.4.29 # -r requirements/pytest.txt # pytest-salt-factories # pytest-shell-utilities -pytest-httpserver==1.0.4 +pytest-httpserver==1.0.8 # via -r requirements/pytest.txt pytest-salt-factories==1.0.0rc27 # via -r requirements/pytest.txt @@ -527,7 +527,7 @@ websocket-client==0.40.0 # kubernetes wempy==0.2.1 # via -r requirements/static/ci/common.in -werkzeug==2.2.3 +werkzeug==3.0.1 # via # moto # pytest-httpserver diff --git a/requirements/static/ci/py3.9/lint.txt b/requirements/static/ci/py3.9/lint.txt index 2534e512786..2bf6e17fcb5 100644 --- a/requirements/static/ci/py3.9/lint.txt +++ b/requirements/static/ci/py3.9/lint.txt @@ -751,7 +751,7 @@ wempy==0.2.1 # via # -c requirements/static/ci/py3.9/linux.txt # -r requirements/static/ci/common.in -werkzeug==2.2.3 +werkzeug==3.0.1 # via # -c requirements/static/ci/py3.9/linux.txt # moto diff --git a/requirements/static/ci/py3.9/linux.txt b/requirements/static/ci/py3.9/linux.txt index cede5b7e94a..9c03f06b19e 100644 --- a/requirements/static/ci/py3.9/linux.txt +++ b/requirements/static/ci/py3.9/linux.txt @@ -368,7 +368,7 @@ pytest-helpers-namespace==2021.4.29 # -r requirements/pytest.txt # pytest-salt-factories # pytest-shell-utilities -pytest-httpserver==1.0.4 +pytest-httpserver==1.0.8 # via -r requirements/pytest.txt pytest-salt-factories==1.0.0rc27 # via -r requirements/pytest.txt @@ -576,7 +576,7 @@ websocket-client==0.40.0 # kubernetes wempy==0.2.1 # via -r requirements/static/ci/common.in -werkzeug==2.2.3 +werkzeug==3.0.1 # via # moto # pytest-httpserver diff --git a/requirements/static/ci/py3.9/windows.txt b/requirements/static/ci/py3.9/windows.txt index 31d883c671a..6ab8afb9693 100644 --- a/requirements/static/ci/py3.9/windows.txt +++ b/requirements/static/ci/py3.9/windows.txt @@ -306,7 +306,7 @@ pytest-helpers-namespace==2021.4.29 # -r requirements/pytest.txt # pytest-salt-factories # pytest-shell-utilities -pytest-httpserver==1.0.4 +pytest-httpserver==1.0.8 # via -r requirements/pytest.txt pytest-salt-factories==1.0.0rc27 # via -r requirements/pytest.txt @@ -474,7 +474,7 @@ websocket-client==0.40.0 # kubernetes wempy==0.2.1 # via -r requirements/static/ci/common.in -werkzeug==2.2.3 +werkzeug==3.0.1 # via # moto # pytest-httpserver From e43d884db77b5e48d3257dac5520464198ef6559 Mon Sep 17 00:00:00 2001 From: Pedro Algarvio Date: Sat, 4 Nov 2023 18:34:02 +0000 Subject: [PATCH 131/153] Enabling `zmq_monitor` makes the test `test_req_server_garbage_request` hang Signed-off-by: Pedro Algarvio --- tests/pytests/unit/transport/test_zeromq.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/pytests/unit/transport/test_zeromq.py b/tests/pytests/unit/transport/test_zeromq.py index 568e121d3fa..95ba87c9754 100644 --- a/tests/pytests/unit/transport/test_zeromq.py +++ b/tests/pytests/unit/transport/test_zeromq.py @@ -11,7 +11,6 @@ async def test_req_server_garbage_request(io_loop): RequestServers's message handler. """ opts = salt.config.master_config("") - opts["zmq_monitor"] = True request_server = salt.transport.zeromq.RequestServer(opts) def message_handler(payload): From 49e5127eb50c64d6eb9c407a347c7eb61c79cdfa Mon Sep 17 00:00:00 2001 From: Pedro Algarvio Date: Sun, 5 Nov 2023 10:42:30 +0000 Subject: [PATCH 132/153] Integration tests without splits now take longer then 7 hours. Split it again. Signed-off-by: Pedro Algarvio --- tools/ci.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/tools/ci.py b/tools/ci.py index ddcf66c15b4..e376105ea63 100644 --- a/tools/ci.py +++ b/tools/ci.py @@ -640,8 +640,12 @@ def matrix(ctx: Context, distro_slug: str, full: bool = False, workflow: str = " } # On nightly and scheduled builds we don't want splits at all if workflow.lower() in ("nightly", "scheduled"): - ctx.info(f"Clearning splits definition since workflow is '{workflow}'") - _splits.clear() + ctx.info(f"Reducing splits definition since workflow is '{workflow}'") + for key in _splits: + new_value = _splits[key] - 2 + if new_value < 1: + new_value = 1 + _splits[key] = new_value for transport in ("zeromq", "tcp"): if transport == "tcp": From c78b214d0ed9e0686b57cfe7896b755c04403781 Mon Sep 17 00:00:00 2001 From: Pedro Algarvio Date: Sun, 5 Nov 2023 17:06:35 +0000 Subject: [PATCH 133/153] Bump a few requirements that got downgraded during the merge-forward Signed-off-by: Pedro Algarvio --- requirements/static/ci/py3.10/darwin.txt | 2 +- requirements/static/ci/py3.10/freebsd.txt | 2 +- requirements/static/ci/py3.10/linux.txt | 6 +++--- requirements/static/ci/py3.10/windows.txt | 2 +- requirements/static/ci/py3.11/darwin.txt | 4 ++-- requirements/static/ci/py3.11/freebsd.txt | 2 +- requirements/static/ci/py3.11/linux.txt | 4 ++-- requirements/static/ci/py3.11/windows.txt | 6 +++--- requirements/static/ci/py3.8/freebsd.txt | 2 +- requirements/static/ci/py3.8/linux.txt | 6 +++--- requirements/static/ci/py3.8/windows.txt | 2 +- requirements/static/ci/py3.9/darwin.txt | 2 +- requirements/static/ci/py3.9/freebsd.txt | 2 +- requirements/static/ci/py3.9/linux.txt | 6 +++--- requirements/static/ci/py3.9/windows.txt | 2 +- requirements/static/pkg/py3.10/windows.txt | 2 +- requirements/static/pkg/py3.11/darwin.txt | 2 +- requirements/static/pkg/py3.11/windows.txt | 2 +- requirements/static/pkg/py3.8/windows.txt | 2 +- requirements/static/pkg/py3.9/windows.txt | 2 +- 20 files changed, 30 insertions(+), 30 deletions(-) diff --git a/requirements/static/ci/py3.10/darwin.txt b/requirements/static/ci/py3.10/darwin.txt index b0056d281e7..7f3dbfcf683 100644 --- a/requirements/static/ci/py3.10/darwin.txt +++ b/requirements/static/ci/py3.10/darwin.txt @@ -256,7 +256,7 @@ msgpack==1.0.5 # -c requirements/static/ci/../pkg/py3.10/darwin.txt # -r requirements/base.txt # pytest-salt-factories -multidict==6.0.2 +multidict==6.0.4 # via # aiohttp # yarl diff --git a/requirements/static/ci/py3.10/freebsd.txt b/requirements/static/ci/py3.10/freebsd.txt index 602a2402afc..2dd4e41bf66 100644 --- a/requirements/static/ci/py3.10/freebsd.txt +++ b/requirements/static/ci/py3.10/freebsd.txt @@ -251,7 +251,7 @@ msgpack==1.0.5 # -c requirements/static/ci/../pkg/py3.10/freebsd.txt # -r requirements/base.txt # pytest-salt-factories -multidict==6.0.2 +multidict==6.0.4 # via # aiohttp # yarl diff --git a/requirements/static/ci/py3.10/linux.txt b/requirements/static/ci/py3.10/linux.txt index edeb5149a7f..821a7670796 100644 --- a/requirements/static/ci/py3.10/linux.txt +++ b/requirements/static/ci/py3.10/linux.txt @@ -276,7 +276,7 @@ msgpack==1.0.5 # -c requirements/static/ci/../pkg/py3.10/linux.txt # -r requirements/base.txt # pytest-salt-factories -multidict==6.0.2 +multidict==6.0.4 # via # aiohttp # yarl @@ -359,9 +359,9 @@ pyiface==0.0.11 # via -r requirements/static/ci/linux.in pyinotify==0.9.6 ; sys_platform != "win32" and sys_platform != "darwin" and platform_system != "openbsd" # via -r requirements/static/ci/common.in -pyjwt==2.4.0 +pyjwt==2.7.0 # via twilio -pymysql==1.0.2 +pymysql==1.1.0 # via -r requirements/static/ci/linux.in pynacl==1.5.0 # via diff --git a/requirements/static/ci/py3.10/windows.txt b/requirements/static/ci/py3.10/windows.txt index 86b15b25dc2..2c61fcaaa3d 100644 --- a/requirements/static/ci/py3.10/windows.txt +++ b/requirements/static/ci/py3.10/windows.txt @@ -292,7 +292,7 @@ pymssql==2.2.7 # via # -c requirements/static/ci/../pkg/py3.10/windows.txt # -r requirements/windows.txt -pymysql==1.0.3 +pymysql==1.1.0 # via # -c requirements/static/ci/../pkg/py3.10/windows.txt # -r requirements/windows.txt diff --git a/requirements/static/ci/py3.11/darwin.txt b/requirements/static/ci/py3.11/darwin.txt index 7b07309cb81..e0c63d89b82 100644 --- a/requirements/static/ci/py3.11/darwin.txt +++ b/requirements/static/ci/py3.11/darwin.txt @@ -520,7 +520,7 @@ typing-extensions==4.8.0 # pydantic # pytest-shell-utilities # pytest-system-statistics -urllib3==1.26.14 +urllib3==1.26.18 # via # -c requirements/static/ci/../pkg/py3.11/darwin.txt # botocore @@ -548,7 +548,7 @@ websocket-client==0.40.0 # kubernetes wempy==0.2.1 # via -r requirements/static/ci/common.in -werkzeug==2.3.6 +werkzeug==3.0.1 # via # moto # pytest-httpserver diff --git a/requirements/static/ci/py3.11/freebsd.txt b/requirements/static/ci/py3.11/freebsd.txt index 89d840cef02..7031471de49 100644 --- a/requirements/static/ci/py3.11/freebsd.txt +++ b/requirements/static/ci/py3.11/freebsd.txt @@ -536,7 +536,7 @@ websocket-client==0.40.0 # kubernetes wempy==0.2.1 # via -r requirements/static/ci/common.in -werkzeug==2.3.6 +werkzeug==3.0.1 # via # moto # pytest-httpserver diff --git a/requirements/static/ci/py3.11/linux.txt b/requirements/static/ci/py3.11/linux.txt index db3bdc2b712..3bf08126343 100644 --- a/requirements/static/ci/py3.11/linux.txt +++ b/requirements/static/ci/py3.11/linux.txt @@ -357,7 +357,7 @@ pyinotify==0.9.6 ; sys_platform != "win32" and sys_platform != "darwin" and plat # via -r requirements/static/ci/common.in pyjwt==2.7.0 # via twilio -pymysql==1.0.3 +pymysql==1.1.0 # via -r requirements/static/ci/linux.in pynacl==1.5.0 # via @@ -598,7 +598,7 @@ websocket-client==0.40.0 # kubernetes wempy==0.2.1 # via -r requirements/static/ci/common.in -werkzeug==2.3.6 +werkzeug==3.0.1 # via # moto # pytest-httpserver diff --git a/requirements/static/ci/py3.11/windows.txt b/requirements/static/ci/py3.11/windows.txt index 039bbeecc65..84e2cb9981b 100644 --- a/requirements/static/ci/py3.11/windows.txt +++ b/requirements/static/ci/py3.11/windows.txt @@ -290,7 +290,7 @@ pymssql==2.2.7 # via # -c requirements/static/ci/../pkg/py3.11/windows.txt # -r requirements/windows.txt -pymysql==1.0.3 +pymysql==1.1.0 # via # -c requirements/static/ci/../pkg/py3.11/windows.txt # -r requirements/windows.txt @@ -312,7 +312,7 @@ pytest-helpers-namespace==2021.12.29 # -r requirements/pytest.txt # pytest-salt-factories # pytest-shell-utilities -pytest-httpserver==1.0.6 +pytest-httpserver==1.0.8 # via -r requirements/pytest.txt pytest-salt-factories==1.0.0rc27 # via -r requirements/pytest.txt @@ -485,7 +485,7 @@ websocket-client==0.40.0 # kubernetes wempy==0.2.1 # via -r requirements/static/ci/common.in -werkzeug==2.3.6 +werkzeug==3.0.1 # via # moto # pytest-httpserver diff --git a/requirements/static/ci/py3.8/freebsd.txt b/requirements/static/ci/py3.8/freebsd.txt index 09061fe7f45..aa783f8db67 100644 --- a/requirements/static/ci/py3.8/freebsd.txt +++ b/requirements/static/ci/py3.8/freebsd.txt @@ -255,7 +255,7 @@ msgpack==1.0.5 # -c requirements/static/ci/../pkg/py3.8/freebsd.txt # -r requirements/base.txt # pytest-salt-factories -multidict==6.0.2 +multidict==6.0.4 # via # aiohttp # yarl diff --git a/requirements/static/ci/py3.8/linux.txt b/requirements/static/ci/py3.8/linux.txt index 5949d3a0cfd..68fa2077e3e 100644 --- a/requirements/static/ci/py3.8/linux.txt +++ b/requirements/static/ci/py3.8/linux.txt @@ -280,7 +280,7 @@ msgpack==1.0.5 # -c requirements/static/ci/../pkg/py3.8/linux.txt # -r requirements/base.txt # pytest-salt-factories -multidict==6.0.2 +multidict==6.0.4 # via # aiohttp # yarl @@ -363,9 +363,9 @@ pyiface==0.0.11 # via -r requirements/static/ci/linux.in pyinotify==0.9.6 ; sys_platform != "win32" and sys_platform != "darwin" and platform_system != "openbsd" # via -r requirements/static/ci/common.in -pyjwt==2.4.0 +pyjwt==2.7.0 # via twilio -pymysql==1.0.2 +pymysql==1.1.0 # via -r requirements/static/ci/linux.in pynacl==1.5.0 # via diff --git a/requirements/static/ci/py3.8/windows.txt b/requirements/static/ci/py3.8/windows.txt index 916f94936aa..4f5417149b7 100644 --- a/requirements/static/ci/py3.8/windows.txt +++ b/requirements/static/ci/py3.8/windows.txt @@ -296,7 +296,7 @@ pymssql==2.2.7 # via # -c requirements/static/ci/../pkg/py3.8/windows.txt # -r requirements/windows.txt -pymysql==1.0.3 +pymysql==1.1.0 # via # -c requirements/static/ci/../pkg/py3.8/windows.txt # -r requirements/windows.txt diff --git a/requirements/static/ci/py3.9/darwin.txt b/requirements/static/ci/py3.9/darwin.txt index 04a360bfbce..b62a306d2bf 100644 --- a/requirements/static/ci/py3.9/darwin.txt +++ b/requirements/static/ci/py3.9/darwin.txt @@ -256,7 +256,7 @@ msgpack==1.0.5 # -c requirements/static/ci/../pkg/py3.9/darwin.txt # -r requirements/base.txt # pytest-salt-factories -multidict==6.0.2 +multidict==6.0.4 # via # aiohttp # yarl diff --git a/requirements/static/ci/py3.9/freebsd.txt b/requirements/static/ci/py3.9/freebsd.txt index c88ba9ab30e..a83fafbf3c6 100644 --- a/requirements/static/ci/py3.9/freebsd.txt +++ b/requirements/static/ci/py3.9/freebsd.txt @@ -251,7 +251,7 @@ msgpack==1.0.5 # -c requirements/static/ci/../pkg/py3.9/freebsd.txt # -r requirements/base.txt # pytest-salt-factories -multidict==6.0.2 +multidict==6.0.4 # via # aiohttp # yarl diff --git a/requirements/static/ci/py3.9/linux.txt b/requirements/static/ci/py3.9/linux.txt index d25e097c941..ae024acf80f 100644 --- a/requirements/static/ci/py3.9/linux.txt +++ b/requirements/static/ci/py3.9/linux.txt @@ -278,7 +278,7 @@ msgpack==1.0.5 # -c requirements/static/ci/../pkg/py3.9/linux.txt # -r requirements/base.txt # pytest-salt-factories -multidict==6.0.2 +multidict==6.0.4 # via # aiohttp # yarl @@ -361,9 +361,9 @@ pyiface==0.0.11 # via -r requirements/static/ci/linux.in pyinotify==0.9.6 ; sys_platform != "win32" and sys_platform != "darwin" and platform_system != "openbsd" # via -r requirements/static/ci/common.in -pyjwt==2.4.0 +pyjwt==2.7.0 # via twilio -pymysql==1.0.2 +pymysql==1.1.0 # via -r requirements/static/ci/linux.in pynacl==1.5.0 # via diff --git a/requirements/static/ci/py3.9/windows.txt b/requirements/static/ci/py3.9/windows.txt index c536441ba66..938afff343b 100644 --- a/requirements/static/ci/py3.9/windows.txt +++ b/requirements/static/ci/py3.9/windows.txt @@ -292,7 +292,7 @@ pymssql==2.2.7 # via # -c requirements/static/ci/../pkg/py3.9/windows.txt # -r requirements/windows.txt -pymysql==1.0.3 +pymysql==1.1.0 # via # -c requirements/static/ci/../pkg/py3.9/windows.txt # -r requirements/windows.txt diff --git a/requirements/static/pkg/py3.10/windows.txt b/requirements/static/pkg/py3.10/windows.txt index 3340f378829..45a492737c3 100644 --- a/requirements/static/pkg/py3.10/windows.txt +++ b/requirements/static/pkg/py3.10/windows.txt @@ -91,7 +91,7 @@ pydantic==1.10.8 # via inflect pymssql==2.2.7 # via -r requirements/windows.txt -pymysql==1.0.3 +pymysql==1.1.0 # via -r requirements/windows.txt pyopenssl==23.2.0 # via -r requirements/windows.txt diff --git a/requirements/static/pkg/py3.11/darwin.txt b/requirements/static/pkg/py3.11/darwin.txt index a896f3ce266..bfd3b5a99b0 100644 --- a/requirements/static/pkg/py3.11/darwin.txt +++ b/requirements/static/pkg/py3.11/darwin.txt @@ -115,7 +115,7 @@ tornado==6.3.3 # via -r requirements/base.txt typing-extensions==4.8.0 # via pydantic -urllib3==1.26.14 +urllib3==1.26.18 # via requests vultr==1.0.1 # via -r requirements/darwin.txt diff --git a/requirements/static/pkg/py3.11/windows.txt b/requirements/static/pkg/py3.11/windows.txt index b559416e682..8233184abcb 100644 --- a/requirements/static/pkg/py3.11/windows.txt +++ b/requirements/static/pkg/py3.11/windows.txt @@ -91,7 +91,7 @@ pydantic==1.10.8 # via inflect pymssql==2.2.7 # via -r requirements/windows.txt -pymysql==1.0.3 +pymysql==1.1.0 # via -r requirements/windows.txt pyopenssl==23.2.0 # via -r requirements/windows.txt diff --git a/requirements/static/pkg/py3.8/windows.txt b/requirements/static/pkg/py3.8/windows.txt index e8fe4ea58c4..21ec2c7957b 100644 --- a/requirements/static/pkg/py3.8/windows.txt +++ b/requirements/static/pkg/py3.8/windows.txt @@ -93,7 +93,7 @@ pydantic==1.10.8 # via inflect pymssql==2.2.7 # via -r requirements/windows.txt -pymysql==1.0.3 +pymysql==1.1.0 # via -r requirements/windows.txt pyopenssl==23.2.0 # via -r requirements/windows.txt diff --git a/requirements/static/pkg/py3.9/windows.txt b/requirements/static/pkg/py3.9/windows.txt index 8db61f1ea89..d3109afa3e0 100644 --- a/requirements/static/pkg/py3.9/windows.txt +++ b/requirements/static/pkg/py3.9/windows.txt @@ -91,7 +91,7 @@ pydantic==1.10.8 # via inflect pymssql==2.2.7 # via -r requirements/windows.txt -pymysql==1.0.3 +pymysql==1.1.0 # via -r requirements/windows.txt pyopenssl==23.2.0 # via -r requirements/windows.txt From 38e72b27166d585cf53d0450bf4dbe6c68250551 Mon Sep 17 00:00:00 2001 From: Pedro Algarvio Date: Mon, 6 Nov 2023 12:12:46 +0000 Subject: [PATCH 134/153] Need to check for both `_closing` and `_closed` Signed-off-by: Pedro Algarvio --- salt/transport/tcp.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/salt/transport/tcp.py b/salt/transport/tcp.py index 3af3fbedaf2..1c5db5614c6 100644 --- a/salt/transport/tcp.py +++ b/salt/transport/tcp.py @@ -773,7 +773,7 @@ class MessageClient: # TODO: timeout inflight sessions def close(self): - if self._closing: + if self._closing or self._closed: return self._closing = True self.io_loop.add_timeout(1, self.check_close) From 93560992290eef1033e7b86a293ed9d0ee90dbd9 Mon Sep 17 00:00:00 2001 From: Pedro Algarvio Date: Mon, 6 Nov 2023 12:18:50 +0000 Subject: [PATCH 135/153] Cleanup and fix tests after the merge-forward Signed-off-by: Pedro Algarvio --- tests/pytests/unit/transport/test_tcp.py | 107 +++++++++++--------- tests/pytests/unit/transport/test_zeromq.py | 7 +- 2 files changed, 63 insertions(+), 51 deletions(-) diff --git a/tests/pytests/unit/transport/test_tcp.py b/tests/pytests/unit/transport/test_tcp.py index 505ccbeb74a..0dcf772f560 100644 --- a/tests/pytests/unit/transport/test_tcp.py +++ b/tests/pytests/unit/transport/test_tcp.py @@ -1,6 +1,7 @@ import asyncio import os import socket +import warnings import attr import pytest @@ -22,7 +23,7 @@ pytestmark = [ @pytest.fixture -def fake_keys(): +def _fake_keys(): with patch("salt.crypt.AsyncAuth.get_keys", autospec=True): yield @@ -34,7 +35,7 @@ def fake_crypto(): @pytest.fixture -def fake_authd(io_loop): +def _fake_authd(io_loop): @tornado.gen.coroutine def return_nothing(): raise tornado.gen.Return() @@ -53,12 +54,24 @@ def fake_authd(io_loop): @pytest.fixture -def fake_crypticle(): +def _fake_crypticle(): with patch("salt.crypt.Crypticle") as fake_crypticle: fake_crypticle.generate_key_string.return_value = "fakey fake" yield fake_crypticle +@pytest.fixture +def _squash_exepected_message_client_warning(): + with warnings.catch_warnings(): + warnings.filterwarnings( + "ignore", + message="MessageClient has been deprecated and will be removed.", + category=DeprecationWarning, + module="salt.transport.tcp", + ) + yield + + @attr.s(frozen=True, slots=True) class ClientSocket: listen_on = attr.ib(init=False, default="127.0.0.1") @@ -85,47 +98,35 @@ def client_socket(): yield _client_socket -async def test_message_client_cleanup_on_close( - client_socket, temp_salt_master, io_loop -): +@pytest.mark.usefixtures("_squash_exepected_message_client_warning") +async def test_message_client_cleanup_on_close(client_socket, temp_salt_master): """ test message client cleanup on close """ - orig_loop = io_loop - opts = dict(temp_salt_master.config.copy(), transport="tcp") client = salt.transport.tcp.MessageClient( opts, client_socket.listen_on, client_socket.port ) - # Mock the io_loop's stop method so we know when it has been called. - orig_loop.real_stop = orig_loop.stop - orig_loop.stop_called = False + assert client._closed is False + assert client._closing is False + assert client._stream is None - def stop(*args, **kwargs): - orig_loop.stop_called = True - orig_loop.real_stop() + await client.connect() - orig_loop.stop = stop - try: - assert client.io_loop == orig_loop - await client.connect() + # Ensure we are testing the _read_until_future and io_loop teardown + assert client._stream is not None - # Ensure we are testing the _read_until_future and io_loop teardown - assert client._stream is not None + client.close() + assert client._closed is False + assert client._closing is True + assert client._stream is not None + await asyncio.sleep(0.1) - # The run_sync call will set stop_called, reset it - # orig_loop.stop_called = False - client.close() - - # Stop should be called again, client's io_loop should be None - # assert orig_loop.stop_called is True - # assert client.io_loop is None - finally: - orig_loop.stop = orig_loop.real_stop - del orig_loop.real_stop - del orig_loop.stop_called + assert client._closed is True + assert client._closing is False + assert client._stream is None async def test_async_tcp_pub_channel_connect_publish_port( @@ -160,6 +161,7 @@ async def test_async_tcp_pub_channel_connect_publish_port( # The first call to the mock is the instance's __init__, and the first argument to those calls is the opts dict await asyncio.sleep(0.3) assert channel.transport.connect.call_args[0][0] == opts["publish_port"] + transport.close() def test_tcp_pub_server_channel_publish_filtering(temp_salt_master): @@ -257,7 +259,10 @@ def salt_message_client(): {}, "127.0.0.1", ports.get_unused_localhost_port(), io_loop=io_loop_mock ) - yield client + try: + yield client + finally: + client.close() # XXX we don't reutnr a future anymore, this needs a different way of testing. @@ -345,6 +350,7 @@ def salt_message_client(): # assert message_id_2 not in salt_message_client.send_timeout_map +@pytest.mark.usefixtures("_squash_exepected_message_client_warning") def test_timeout_message_unknown_future(salt_message_client): # # test we don't fail on unknown message_id # salt_message_client.timeout_message(-1, "message") @@ -362,6 +368,7 @@ def test_timeout_message_unknown_future(salt_message_client): assert message_id not in salt_message_client.send_future_map +@pytest.mark.usefixtures("_squash_exepected_message_client_warning") def xtest_client_reconnect_backoff(client_socket): opts = {"tcp_reconnect_backoff": 5} @@ -388,8 +395,9 @@ def xtest_client_reconnect_backoff(client_socket): client.close() +@pytest.mark.usefixtures("_fake_crypticle", "_fake_keys") async def test_when_async_req_channel_with_syndic_role_should_use_syndic_master_pub_file_to_verify_master_sig( - fake_keys, fake_crypto, fake_crypticle + fake_crypto, ): # Syndics use the minion pki dir, but they also create a syndic_master.pub # file for comms with the Salt master @@ -417,9 +425,8 @@ async def test_when_async_req_channel_with_syndic_role_should_use_syndic_master_ assert mock.call_args_list[0][0][0] == expected_pubkey_path -async def test_mixin_should_use_correct_path_when_syndic( - fake_keys, fake_authd, fake_crypticle -): +@pytest.mark.usefixtures("_fake_authd", "_fake_crypticle", "_fake_keys") +async def test_mixin_should_use_correct_path_when_syndic(): mockloop = MagicMock() expected_pubkey_path = os.path.join("/etc/salt/pki/minion", "syndic_master.pub") opts = { @@ -443,6 +450,7 @@ async def test_mixin_should_use_correct_path_when_syndic( assert mock.call_args_list[0][0][0] == expected_pubkey_path +@pytest.mark.usefixtures("_squash_exepected_message_client_warning") def test_presence_events_callback_passed(temp_salt_master, salt_message_client): opts = dict(temp_salt_master.config.copy(), transport="tcp", presence_events=True) channel = salt.channel.server.PubServerChannel.factory(opts) @@ -489,30 +497,32 @@ async def test_presence_removed_on_stream_closed(): server.remove_presence_callback.assert_called_with(client) -async def test_tcp_pub_client_decode_dict(minion_opts, io_loop): +async def test_tcp_pub_client_decode_dict(minion_opts, io_loop, tmp_path): dmsg = {"meh": "bah"} - client = salt.transport.tcp.TCPPubClient(minion_opts, io_loop) - assert dmsg == await client._decode_messages(dmsg) + with salt.transport.tcp.TCPPubClient(minion_opts, io_loop, path=tmp_path) as client: + ret = client._decode_messages(dmsg) + assert ret == dmsg -async def test_tcp_pub_client_decode_msgpack(minion_opts, io_loop): +async def test_tcp_pub_client_decode_msgpack(minion_opts, io_loop, tmp_path): dmsg = {"meh": "bah"} msg = salt.payload.dumps(dmsg) - client = salt.transport.tcp.TCPPubClient(minion_opts, io_loop) - assert dmsg == await client._decode_messages(msg) + with salt.transport.tcp.TCPPubClient(minion_opts, io_loop, path=tmp_path) as client: + ret = client._decode_messages(msg) + assert ret == dmsg -def test_tcp_pub_client_close(minion_opts, io_loop): - client = salt.transport.tcp.TCPPubClient(minion_opts, io_loop) +def test_tcp_pub_client_close(minion_opts, io_loop, tmp_path): + client = salt.transport.tcp.TCPPubClient(minion_opts, io_loop, path=tmp_path) - message_client = MagicMock() + stream = MagicMock() - client.message_client = message_client + client._stream = stream client.close() assert client._closing is True - assert client.message_client is None + assert client._stream is None client.close() - message_client.close.assert_called_once_with() + stream.close.assert_called_once_with() async def test_pub_server__stream_read(master_opts, io_loop): @@ -609,6 +619,7 @@ async def test_salt_message_server_exception(master_opts, io_loop): stream.close.assert_called_once() +@pytest.mark.usefixtures("_squash_exepected_message_client_warning") async def test_message_client_stream_return_exception(minion_opts, io_loop): msg = {"foo": "bar"} payload = salt.transport.frame.frame_msg(msg) diff --git a/tests/pytests/unit/transport/test_zeromq.py b/tests/pytests/unit/transport/test_zeromq.py index 95ba87c9754..739aeb573e1 100644 --- a/tests/pytests/unit/transport/test_zeromq.py +++ b/tests/pytests/unit/transport/test_zeromq.py @@ -49,6 +49,7 @@ def test_pub_client_init(minion_opts, io_loop): minion_opts["master_ip"] = "127.0.0.1" minion_opts["zmq_filtering"] = True minion_opts["zmq_monitor"] = True - client = salt.transport.zeromq.PublishClient(minion_opts, io_loop) - client.send(b"asf") - client.close() + with salt.transport.zeromq.PublishClient( + minion_opts, io_loop, host=minion_opts["master_ip"], port=121212 + ) as client: + client.send(b"asf") From db38c751df10b535761e114829dedac655a0ed92 Mon Sep 17 00:00:00 2001 From: Pedro Algarvio Date: Mon, 6 Nov 2023 12:29:12 +0000 Subject: [PATCH 136/153] Don't forget to pass `ioloop` Signed-off-by: Pedro Algarvio --- salt/transport/zeromq.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/salt/transport/zeromq.py b/salt/transport/zeromq.py index 4590b0cc981..535c79e6854 100644 --- a/salt/transport/zeromq.py +++ b/salt/transport/zeromq.py @@ -859,7 +859,7 @@ class PublishServer(salt.transport.base.DaemonizedPublishServer): run in a thread or process as it creates and runs an it's own ioloop. """ ioloop = tornado.ioloop.IOLoop() - ioloop.add_callback(self.publisher, publish_payload) + ioloop.add_callback(self.publisher, publish_payload, ioloop=ioloop) try: ioloop.start() finally: From 5aba669eb48dfc8062b93da6ddb44a266928f144 Mon Sep 17 00:00:00 2001 From: Pedro Algarvio Date: Mon, 6 Nov 2023 13:10:24 +0000 Subject: [PATCH 137/153] Don't enable debug mode on the IOLoop Signed-off-by: Pedro Algarvio --- salt/transport/zeromq.py | 1 - 1 file changed, 1 deletion(-) diff --git a/salt/transport/zeromq.py b/salt/transport/zeromq.py index 535c79e6854..c423ff6ed25 100644 --- a/salt/transport/zeromq.py +++ b/salt/transport/zeromq.py @@ -914,7 +914,6 @@ class PublishServer(salt.transport.base.DaemonizedPublishServer): async def publisher(self, publish_payload, ioloop=None): if ioloop is None: ioloop = tornado.ioloop.IOLoop.current() - ioloop.asyncio_loop.set_debug(True) self.daemon_context = zmq.asyncio.Context() ( self.daemon_pull_sock, From c97a6dafdee7083f8e691fddbe1c41325b846a3a Mon Sep 17 00:00:00 2001 From: "Daniel A. Wozniak" Date: Tue, 7 Nov 2023 00:04:25 -0700 Subject: [PATCH 138/153] Fix transport merge warts and tests --- salt/transport/tcp.py | 48 ++++------ salt/transport/zeromq.py | 6 +- .../tcp/test_load_balanced_server.py | 26 +++-- .../transport/tcp/test_pub_server.py | 39 ++++---- .../zeromq/test_pub_server_channel.py | 94 ++++++++++++------- 5 files changed, 122 insertions(+), 91 deletions(-) diff --git a/salt/transport/tcp.py b/salt/transport/tcp.py index 1c5db5614c6..650b7e879eb 100644 --- a/salt/transport/tcp.py +++ b/salt/transport/tcp.py @@ -177,34 +177,22 @@ class LoadBalancerServer(SignalHandlingProcess): self._socket.setblocking(1) self._socket.bind(_get_bind_addr(self.opts, "ret_port")) self._socket.listen(self.backlog) - - def run(self): - """ - Start the load balancer - """ - self._socket = _get_socket(self.opts) - self._socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) - _set_tcp_keepalive(self._socket, self.opts) - self._socket.setblocking(1) - self._socket.bind(_get_bind_addr(self.opts, "ret_port")) - self._socket.listen(self.backlog) - - while True: - try: - # Wait for a connection to occur since the socket is - # blocking. - connection, address = self._socket.accept() - # Wait for a free slot to be available to put - # the connection into. - # Sockets are picklable on Windows in Python 3. - self.socket_queue.put((connection, address), True, None) - except OSError as e: - # ECONNABORTED indicates that there was a connection - # but it was closed while still in the accept queue. - # (observed on FreeBSD). - if tornado.util.errno_from_exception(e) == errno.ECONNABORTED: - continue - raise + while True: + try: + # Wait for a connection to occur since the socket is + # blocking. + connection, address = self._socket.accept() + # Wait for a free slot to be available to put + # the connection into. + # Sockets are picklable on Windows in Python 3. + self.socket_queue.put((connection, address), True, None) + except OSError as e: + # ECONNABORTED indicates that there was a connection + # but it was closed while still in the accept queue. + # (observed on FreeBSD). + if tornado.util.errno_from_exception(e) == errno.ECONNABORTED: + continue + raise class Resolver(tornado.netutil.DefaultLoopResolver): @@ -343,8 +331,6 @@ class TCPPubClient(salt.transport.base.PublishClient): self._closed = False self._stream = await self.getstream(timeout=timeout) if self._stream: - # if not self._stream_return_running: - # self.io_loop.spawn_callback(self._stream_return) if self.connect_callback: self.connect_callback(True) self.connected = True @@ -1039,7 +1025,7 @@ class PubServer(tornado.tcpserver.TCPServer): return self._closing = True for client in self.clients: - client.stream.disconnect() + client.stream.close() # pylint: disable=W1701 def __del__(self): diff --git a/salt/transport/zeromq.py b/salt/transport/zeromq.py index c423ff6ed25..4e826d3b9bf 100644 --- a/salt/transport/zeromq.py +++ b/salt/transport/zeromq.py @@ -1000,13 +1000,14 @@ class PublishServer(salt.transport.base.DaemonizedPublishServer): ctx = self.ctx self.ctx = None ctx.term() + if self.daemon_monitor: + self.daemon_monitor.stop() if self.daemon_pub_sock: self.daemon_pub_sock.close() if self.daemon_pull_sock: self.daemon_pull_sock.close() - if self.daemon_monitor: - self.daemon_monitor.stop() if self.daemon_context: + self.daemon_context.destroy(1) self.daemon_context.term() async def publish(self, payload, **kwargs): @@ -1019,6 +1020,7 @@ class PublishServer(salt.transport.base.DaemonizedPublishServer): if not self.sock: self.connect() await self.sock.send(payload) + # await self.sock.send(salt.payload.dumps(payload)) @property def topic_support(self): diff --git a/tests/pytests/functional/transport/tcp/test_load_balanced_server.py b/tests/pytests/functional/transport/tcp/test_load_balanced_server.py index cfc25f917e5..5b312d60e50 100644 --- a/tests/pytests/functional/transport/tcp/test_load_balanced_server.py +++ b/tests/pytests/functional/transport/tcp/test_load_balanced_server.py @@ -1,3 +1,4 @@ +import asyncio import multiprocessing import socket import threading @@ -24,10 +25,10 @@ def test_tcp_load_balancer_server(master_opts, io_loop): worker = salt.transport.tcp.LoadBalancerWorker(queue, handler, io_loop=io_loop) def run_loop(): - io_loop.start() - - loop_thread = threading.Thread(target=run_loop) - loop_thread.start() + try: + io_loop.start() + except Exception as exc: + print(f"Caught exeption {exc}") thread = threading.Thread(target=server.run) thread.start() @@ -41,15 +42,22 @@ def test_tcp_load_balancer_server(master_opts, io_loop): sock.connect(("127.0.0.1", master_opts["ret_port"])) sock.send(payload) - try: - start = time.monotonic() + start = time.monotonic() + + async def check_test(): while not messages: - time.sleep(0.3) + await asyncio.sleep(0.3) if time.monotonic() - start > 30: - assert False, "Took longer than 30 seconds to receive message" + break + + io_loop.run_sync(lambda: check_test()) + + try: + if time.monotonic() - start > 30: + assert False, "Took longer than 30 seconds to receive message" + assert [package] == messages finally: server.close() thread.join() - io_loop.stop() worker.close() diff --git a/tests/pytests/functional/transport/tcp/test_pub_server.py b/tests/pytests/functional/transport/tcp/test_pub_server.py index 0a4210b5a57..e4ec44fb856 100644 --- a/tests/pytests/functional/transport/tcp/test_pub_server.py +++ b/tests/pytests/functional/transport/tcp/test_pub_server.py @@ -1,3 +1,4 @@ +import os import threading import time @@ -16,36 +17,42 @@ async def test_pub_channel(master_opts, minion_opts, io_loop): master_opts["transport"] = "tcp" minion_opts.update(master_ip="127.0.0.1", transport="tcp") - server = salt.transport.tcp.TCPPublishServer(master_opts) + server = salt.transport.tcp.TCPPublishServer( + master_opts, + pub_host="127.0.0.1", + pub_port=master_opts["publish_port"], + pull_path=os.path.join(master_opts["sock_dir"], "publish_pull.ipc"), + ) - client = salt.transport.tcp.TCPPubClient(minion_opts, io_loop) + client = salt.transport.tcp.TCPPubClient( + minion_opts, + io_loop, + host="127.0.0.1", + port=master_opts["publish_port"], + ) payloads = [] publishes = [] - def publish_payload(payload, callback): - server.publish_payload(payload) + async def publish_payload(payload, callback): + await server.publish_payload(payload) payloads.append(payload) - def on_recv(message): - print("ON RECV") + async def on_recv(message): publishes.append(message) - thread = threading.Thread( - target=server.publish_daemon, - args=(publish_payload, presence_callback, remove_presence_callback), + io_loop.add_callback( + server.publisher, publish_payload, presence_callback, remove_presence_callback ) - thread.start() # Wait for socket to bind. - time.sleep(3) + await tornado.gen.sleep(3) await client.connect(master_opts["publish_port"]) client.on_recv(on_recv) - print("Publish message") - server.publish({"meh": "bah"}) + await server.publish({"meh": "bah"}) start = time.monotonic() try: @@ -54,6 +61,6 @@ async def test_pub_channel(master_opts, minion_opts, io_loop): if time.monotonic() - start > 30: assert False, "Message not published after 30 seconds" finally: - server.io_loop.stop() - thread.join() - server.io_loop.close(all_fds=True) + server.close() + server.pub_server.close() + client.close() diff --git a/tests/pytests/functional/transport/zeromq/test_pub_server_channel.py b/tests/pytests/functional/transport/zeromq/test_pub_server_channel.py index 27a315fda91..09b27f3cc63 100644 --- a/tests/pytests/functional/transport/zeromq/test_pub_server_channel.py +++ b/tests/pytests/functional/transport/zeromq/test_pub_server_channel.py @@ -1,4 +1,6 @@ +import asyncio import logging +import os import threading import time @@ -56,84 +58,110 @@ def test_zeromq_filtering(salt_master, salt_minion): ) -def test_pub_channel(master_opts): - server = salt.transport.zeromq.PublishServer(master_opts) +async def test_pub_channel(master_opts, io_loop): + + server = salt.transport.zeromq.PublishServer( + master_opts, + pub_host="127.0.0.1", + pub_port=4506, + pull_path=os.path.join(master_opts["sock_dir"], "publish_pull.ipc"), + ) payloads = [] - def publish_payload(payload): - server.publish_payload(payload) + async def publish_payload(payload): + await server.publish_payload(payload) payloads.append(payload) - thread = threading.Thread(target=server.publish_daemon, args=(publish_payload,)) - thread.start() + io_loop.add_callback( + server.publisher, + publish_payload, + ioloop=io_loop, + ) - server.publish({"meh": "bah"}) + await asyncio.sleep(3) + + await server.publish(salt.payload.dumps({"meh": "bah"})) start = time.monotonic() + try: while not payloads: - time.sleep(0.3) + await asyncio.sleep(0.3) if time.monotonic() - start > 30: assert False, "No message received after 30 seconds" + assert payloads finally: server.close() - server.io_loop.stop() - thread.join() - server.io_loop.close(all_fds=True) -def test_pub_channel_filtering(master_opts): +async def test_pub_channel_filtering(master_opts, io_loop): master_opts["zmq_filtering"] = True - server = salt.transport.zeromq.PublishServer(master_opts) + + server = salt.transport.zeromq.PublishServer( + master_opts, + pub_host="127.0.0.1", + pub_port=4506, + pull_path=os.path.join(master_opts["sock_dir"], "publish_pull.ipc"), + ) payloads = [] - def publish_payload(payload): - server.publish_payload(payload) + async def publish_payload(payload): + await server.publish_payload(payload) payloads.append(payload) - thread = threading.Thread(target=server.publish_daemon, args=(publish_payload,)) - thread.start() + io_loop.add_callback( + server.publisher, + publish_payload, + ioloop=io_loop, + ) - server.publish({"meh": "bah"}) + await asyncio.sleep(3) + + await server.publish(salt.payload.dumps({"meh": "bah"})) start = time.monotonic() try: while not payloads: - time.sleep(0.3) + await asyncio.sleep(0.3) if time.monotonic() - start > 30: assert False, "No message received after 30 seconds" finally: server.close() - server.io_loop.stop() - thread.join() - server.io_loop.close(all_fds=True) -def test_pub_channel_filtering_topic(master_opts): +async def test_pub_channel_filtering_topic(master_opts, io_loop): master_opts["zmq_filtering"] = True - server = salt.transport.zeromq.PublishServer(master_opts) + + server = salt.transport.zeromq.PublishServer( + master_opts, + pub_host="127.0.0.1", + pub_port=4506, + pull_path=os.path.join(master_opts["sock_dir"], "publish_pull.ipc"), + ) payloads = [] - def publish_payload(payload): - server.publish_payload(payload, topic_list=["meh"]) + async def publish_payload(payload): + await server.publish_payload(payload, topic_list=["meh"]) payloads.append(payload) - thread = threading.Thread(target=server.publish_daemon, args=(publish_payload,)) - thread.start() + io_loop.add_callback( + server.publisher, + publish_payload, + ioloop=io_loop, + ) - server.publish({"meh": "bah"}) + await asyncio.sleep(3) + + await server.publish(salt.payload.dumps({"meh": "bah"})) start = time.monotonic() try: while not payloads: - time.sleep(0.3) + await asyncio.sleep(0.3) if time.monotonic() - start > 30: assert False, "No message received after 30 seconds" finally: server.close() - server.io_loop.stop() - thread.join() - server.io_loop.close(all_fds=True) From 8bdb2cd1e8aa66218c5a0a71feafde8185e67f08 Mon Sep 17 00:00:00 2001 From: Pedro Algarvio Date: Thu, 22 Dec 2022 18:56:07 +0000 Subject: [PATCH 139/153] Remove Tiamat's `run.py` entry point Signed-off-by: Pedro Algarvio --- run.py | 119 --------------------------------------------------------- 1 file changed, 119 deletions(-) delete mode 100755 run.py diff --git a/run.py b/run.py deleted file mode 100755 index 4ea17f81d39..00000000000 --- a/run.py +++ /dev/null @@ -1,119 +0,0 @@ -#!/usr/bin/env python3 -# see issue: https://gitlab.com/saltstack/open/salt-pkg/-/issues/19 -import contextlib -import multiprocessing -import os -import pathlib -import sys - -import _pyio -import tiamatpip.cli -import tiamatpip.configure -import tiamatpip.utils - -import salt.scripts -import salt.utils.platform - -AVAIL = ( - "minion", - "master", - "call", - "api", - "cloud", - "cp", - "extend", - "key", - "proxy", - "pip", - "run", - "shell", - "spm", - "ssh", - "support", - "syndic", - "python", -) - - -if "TIAMAT_PIP_PYPATH" in os.environ: - PIP_PATH = pathlib.Path(os.environ["TIAMAT_PIP_PYPATH"]).resolve() -elif not sys.platform.startswith("win"): - PIP_PATH = pathlib.Path(f"{os.sep}opt", "saltstack", "salt", "pypath") -else: - PIP_PATH = pathlib.Path(os.getenv("LocalAppData"), "salt", "pypath") -with contextlib.suppress(PermissionError): - PIP_PATH.mkdir(mode=0o755, parents=True, exist_ok=True) -tiamatpip.configure.set_user_base_path(PIP_PATH) - - -def py_shell(): - if not sys.platform.startswith("win"): - # optional, will allow Up/Down/History in the console - import readline - import code - - variables = globals().copy() - variables.update(locals()) - shell = code.InteractiveConsole(variables) - shell.interact() - - -def python_runtime(): - import traceback - - # extract the absolute script path to alter sys.path and specific dunder variables - script = pathlib.Path(sys.argv[2]).expanduser().resolve() - sys.path.insert(0, str(script.parent)) - - # update passed args so they don't start with " python" - sys.argv[:] = sys.argv[2:] - exec_locals = {"__name__": "__main__", "__file__": str(script), "__doc__": None} - with open(script, encoding="utf-8") as rfh: - try: - exec(rfh.read(), exec_locals) - except Exception: - traceback.print_exc() - sys.exit(1) - - -def redirect(argv): - """ - Change the args and redirect to another salt script - """ - if len(argv) < 2: - msg = "Must pass in a salt command, available commands are:" - for cmd in AVAIL: - msg += f"\n{cmd}" - print(msg, file=sys.stderr, flush=True) - sys.exit(1) - cmd = sys.argv[1] - if cmd == "shell": - py_shell() - return - if cmd == "python": - if len(argv) < 3: - msg = "Must pass script location to this command" - print(msg, file=sys.stderr, flush=True) - sys.exit(1) - - python_runtime() - return - if tiamatpip.cli.should_redirect_argv(argv): - tiamatpip.cli.process_pip_argv(argv) - return - if cmd not in AVAIL: - # Fall back to the salt command - args = ["salt"] - s_fun = salt.scripts.salt_main - else: - args = [f"salt-{cmd}"] - sys.argv.pop(1) - s_fun = getattr(salt.scripts, f"salt_{cmd}") - args.extend(argv[1:]) - with tiamatpip.utils.patched_sys_argv(args): - s_fun() - - -if __name__ == "__main__": - multiprocessing.freeze_support() - redirect(sys.argv) From 99370c664109a651684660baf00680c5d6d524e4 Mon Sep 17 00:00:00 2001 From: Pedro Algarvio Date: Tue, 7 Nov 2023 08:36:43 +0000 Subject: [PATCH 140/153] Remove commend and unused import Signed-off-by: Pedro Algarvio --- salt/transport/zeromq.py | 1 - .../functional/transport/zeromq/test_pub_server_channel.py | 1 - 2 files changed, 2 deletions(-) diff --git a/salt/transport/zeromq.py b/salt/transport/zeromq.py index 4e826d3b9bf..e4fcb5dd9f7 100644 --- a/salt/transport/zeromq.py +++ b/salt/transport/zeromq.py @@ -1020,7 +1020,6 @@ class PublishServer(salt.transport.base.DaemonizedPublishServer): if not self.sock: self.connect() await self.sock.send(payload) - # await self.sock.send(salt.payload.dumps(payload)) @property def topic_support(self): diff --git a/tests/pytests/functional/transport/zeromq/test_pub_server_channel.py b/tests/pytests/functional/transport/zeromq/test_pub_server_channel.py index 09b27f3cc63..80e83087b84 100644 --- a/tests/pytests/functional/transport/zeromq/test_pub_server_channel.py +++ b/tests/pytests/functional/transport/zeromq/test_pub_server_channel.py @@ -1,7 +1,6 @@ import asyncio import logging import os -import threading import time import pytest From e35033aebc988ac46a11a9d1bc9bab54598c8256 Mon Sep 17 00:00:00 2001 From: Pedro Algarvio Date: Tue, 7 Nov 2023 15:17:08 +0000 Subject: [PATCH 141/153] Consolidate requirements into `requirements/base.txt` Signed-off-by: Pedro Algarvio --- requirements/base.txt | 33 ++++++++++- requirements/crypto.txt | 1 - requirements/darwin.txt | 17 +----- requirements/static/ci/py3.10/darwin.txt | 48 ++++++++-------- requirements/static/ci/py3.10/freebsd.txt | 22 ++++---- requirements/static/ci/py3.10/linux.txt | 25 ++++----- requirements/static/ci/py3.10/windows.txt | 57 ++++++++----------- requirements/static/ci/py3.11/darwin.txt | 42 +++++++------- requirements/static/ci/py3.11/freebsd.txt | 20 +++---- requirements/static/ci/py3.11/linux.txt | 23 ++++---- requirements/static/ci/py3.11/windows.txt | 57 ++++++++----------- requirements/static/ci/py3.8/docs.txt | 2 +- requirements/static/ci/py3.8/freebsd.txt | 22 ++++---- requirements/static/ci/py3.8/linux.txt | 25 ++++----- requirements/static/ci/py3.8/windows.txt | 57 ++++++++----------- requirements/static/ci/py3.9/darwin.txt | 48 ++++++++-------- requirements/static/ci/py3.9/docs.txt | 2 +- requirements/static/ci/py3.9/freebsd.txt | 22 ++++---- requirements/static/ci/py3.9/linux.txt | 25 ++++----- requirements/static/ci/py3.9/windows.txt | 57 ++++++++----------- requirements/static/pkg/darwin.in | 3 +- requirements/static/pkg/freebsd.in | 9 --- requirements/static/pkg/linux.in | 12 +--- requirements/static/pkg/py3.10/darwin.txt | 41 +++++++------- requirements/static/pkg/py3.10/freebsd.txt | 23 ++++---- requirements/static/pkg/py3.10/linux.txt | 23 ++++---- requirements/static/pkg/py3.10/windows.txt | 64 +++++++++------------- requirements/static/pkg/py3.11/darwin.txt | 41 +++++++------- requirements/static/pkg/py3.11/freebsd.txt | 23 ++++---- requirements/static/pkg/py3.11/linux.txt | 23 ++++---- requirements/static/pkg/py3.11/windows.txt | 64 +++++++++------------- requirements/static/pkg/py3.8/freebsd.txt | 23 ++++---- requirements/static/pkg/py3.8/linux.txt | 23 ++++---- requirements/static/pkg/py3.8/windows.txt | 64 +++++++++------------- requirements/static/pkg/py3.9/darwin.txt | 41 +++++++------- requirements/static/pkg/py3.9/freebsd.txt | 23 ++++---- requirements/static/pkg/py3.9/linux.txt | 23 ++++---- requirements/static/pkg/py3.9/windows.txt | 64 +++++++++------------- requirements/static/pkg/windows.in | 3 +- requirements/windows.txt | 30 +--------- 40 files changed, 542 insertions(+), 683 deletions(-) diff --git a/requirements/base.txt b/requirements/base.txt index 55574c2725b..ab4c93433fb 100644 --- a/requirements/base.txt +++ b/requirements/base.txt @@ -3,12 +3,41 @@ jmespath msgpack>=1.0.0 PyYAML MarkupSafe -requests>=1.0.0 +requests>=2.25.1 distro>=1.0.1 psutil>=5.0.0 packaging>=21.3 looseversion tornado>=6.3.3 -# We need contextvars for salt-ssh +# We need contextvars for salt-ssh. +# Even on python versions which ships with contextvars in the standard library! contextvars + +setproctitle>=1.2.3 +timelib>=0.2.5 +pyopenssl>=20.0.1 +python-dateutil>=2.8.1 +python-gnupg>=0.4.7 +cherrypy>=18.6.1 +importlib-metadata>=3.3.0 +cryptography>=41.0.3 + +# From old requirements/static/pkg/linux.in +rpm-vercmp; sys_platform == 'linux' + +# From old windows.txt requirements file +pywin32>=305; sys_platform == 'win32' +wmi>=1.5.1; sys_platform == 'win32' +pythonnet>=3.0.1; sys_platform == 'win32' +pymssql>=2.2.1; sys_platform == 'win32' +pymysql>=1.0.2; sys_platform == 'win32' +lxml>=4.6.3; sys_platform == 'win32' + +# From old darwin.txt requirements file +apache-libcloud>=2.4.0; sys_platform == 'darwin' +linode-python>=1.1.1; sys_platform == 'darwin' +vultr>=1.0.1; sys_platform == 'darwin' + +# From old windows.txt and darwin.txt requirements file +gitpython>=3.1.35; sys_platform == 'win32' or sys_platform == 'darwin' diff --git a/requirements/crypto.txt b/requirements/crypto.txt index dd6c8c43368..243cd87c2b9 100644 --- a/requirements/crypto.txt +++ b/requirements/crypto.txt @@ -1,2 +1 @@ pycryptodomex>=3.9.8 -cryptography>=40.0.3 diff --git a/requirements/darwin.txt b/requirements/darwin.txt index 841a6ed03a3..0a2350c27e6 100644 --- a/requirements/darwin.txt +++ b/requirements/darwin.txt @@ -1,18 +1,5 @@ # Darwin source distribution requirements +# Don't add any requirements here, add them in requirements/base.txt +# If they are macOS specific, place "; sys_platform == 'darwin'" in front of the requirement. -r zeromq.txt - -apache-libcloud>=2.4.0 -cherrypy>=17.4.1 -gitpython>=3.1.35 -cryptography>=41.0.3 -gitpython>=3.1.37 -idna>=2.8 -linode-python>=1.1.1 -pyasn1>=0.4.8 -pyopenssl>=23.2.0 -python-dateutil>=2.8.0 -python-gnupg>=0.4.4 -setproctitle>=1.2.3 -timelib>=0.2.5 -vultr>=1.0.1 diff --git a/requirements/static/ci/py3.10/darwin.txt b/requirements/static/ci/py3.10/darwin.txt index 7f3dbfcf683..f884660fae1 100644 --- a/requirements/static/ci/py3.10/darwin.txt +++ b/requirements/static/ci/py3.10/darwin.txt @@ -8,10 +8,10 @@ aiohttp==3.8.5 # via etcd3-py aiosignal==1.3.1 # via aiohttp -apache-libcloud==3.7.0 ; sys_platform != "win32" +apache-libcloud==3.7.0 ; sys_platform == "darwin" # via # -c requirements/static/ci/../pkg/py3.10/darwin.txt - # -r requirements/darwin.txt + # -r requirements/base.txt # -r requirements/static/ci/common.in asn1crypto==1.5.1 # via @@ -81,7 +81,7 @@ cheroot==10.0.0 cherrypy==18.8.0 # via # -c requirements/static/ci/../pkg/py3.10/darwin.txt - # -r requirements/darwin.txt + # -r requirements/base.txt # -r requirements/static/ci/common.in click==8.1.3 # via geomet @@ -91,13 +91,12 @@ contextvars==2.4 # via # -c requirements/static/ci/../pkg/py3.10/darwin.txt # -r requirements/base.txt -croniter==0.3.29 ; sys_platform != "win32" +croniter==1.3.15 ; sys_platform != "win32" # via -r requirements/static/ci/common.in cryptography==41.0.4 # via # -c requirements/static/ci/../pkg/py3.10/darwin.txt - # -r requirements/crypto.txt - # -r requirements/darwin.txt + # -r requirements/base.txt # etcd3-py # moto # paramiko @@ -140,10 +139,10 @@ gitdb==4.0.10 # via # -c requirements/static/ci/../pkg/py3.10/darwin.txt # gitpython -gitpython==3.1.40 +gitpython==3.1.40 ; sys_platform == "win32" or sys_platform == "darwin" # via # -c requirements/static/ci/../pkg/py3.10/darwin.txt - # -r requirements/darwin.txt + # -r requirements/base.txt # -r requirements/static/ci/common.in google-auth==2.19.1 # via kubernetes @@ -152,7 +151,6 @@ hglib==2.6.2 idna==3.4 # via # -c requirements/static/ci/../pkg/py3.10/darwin.txt - # -r requirements/darwin.txt # etcd3-py # requests # yarl @@ -160,6 +158,10 @@ immutables==0.15 # via # -c requirements/static/ci/../pkg/py3.10/darwin.txt # contextvars +importlib-metadata==6.6.0 + # via + # -c requirements/static/ci/../pkg/py3.10/darwin.txt + # -r requirements/base.txt inflect==6.0.4 # via # -c requirements/static/ci/../pkg/py3.10/darwin.txt @@ -214,10 +216,10 @@ keyring==5.7.1 # via -r requirements/static/ci/common.in kubernetes==3.0.0 # via -r requirements/static/ci/common.in -linode-python==1.1.1 +linode-python==1.1.1 ; sys_platform == "darwin" # via # -c requirements/static/ci/../pkg/py3.10/darwin.txt - # -r requirements/darwin.txt + # -r requirements/base.txt looseversion==1.2.0 # via # -c requirements/static/ci/../pkg/py3.10/darwin.txt @@ -296,8 +298,6 @@ passlib==1.7.4 # via -r requirements/static/ci/common.in pathspec==0.11.1 # via yamllint -pathtools==0.1.2 - # via watchdog platformdirs==3.5.3 # via virtualenv pluggy==1.0.0 @@ -317,8 +317,6 @@ pyasn1-modules==0.3.0 # via google-auth pyasn1==0.4.8 # via - # -c requirements/static/ci/../pkg/py3.10/darwin.txt - # -r requirements/darwin.txt # pyasn1-modules # rsa pycparser==2.21 @@ -344,7 +342,7 @@ pynacl==1.5.0 pyopenssl==23.2.0 # via # -c requirements/static/ci/../pkg/py3.10/darwin.txt - # -r requirements/darwin.txt + # -r requirements/base.txt # etcd3-py pyparsing==3.0.9 # via junos-eznc @@ -392,7 +390,7 @@ pytest==7.3.2 python-dateutil==2.8.2 # via # -c requirements/static/ci/../pkg/py3.10/darwin.txt - # -r requirements/darwin.txt + # -r requirements/base.txt # botocore # croniter # kubernetes @@ -403,7 +401,7 @@ python-etcd==0.4.5 python-gnupg==0.5.0 # via # -c requirements/static/ci/../pkg/py3.10/darwin.txt - # -r requirements/darwin.txt + # -r requirements/base.txt pytz==2023.3 # via # -c requirements/static/ci/../pkg/py3.10/darwin.txt @@ -460,7 +458,7 @@ semantic-version==2.10.0 setproctitle==1.3.2 # via # -c requirements/static/ci/../pkg/py3.10/darwin.txt - # -r requirements/darwin.txt + # -r requirements/base.txt six==1.16.0 # via # -c requirements/static/ci/../pkg/py3.10/darwin.txt @@ -500,7 +498,7 @@ textfsm==1.1.3 timelib==0.3.0 # via # -c requirements/static/ci/../pkg/py3.10/darwin.txt - # -r requirements/darwin.txt + # -r requirements/base.txt toml==0.10.2 # via -r requirements/static/ci/common.in tomli==2.0.1 @@ -542,11 +540,11 @@ virtualenv==20.23.0 # via # -r requirements/static/ci/common.in # pytest-salt-factories -vultr==1.0.1 +vultr==1.0.1 ; sys_platform == "darwin" # via # -c requirements/static/ci/../pkg/py3.10/darwin.txt - # -r requirements/darwin.txt -watchdog==0.10.3 + # -r requirements/base.txt +watchdog==3.0.0 # via -r requirements/static/ci/common.in websocket-client==0.40.0 # via @@ -572,6 +570,10 @@ zc.lockfile==3.0.post1 # via # -c requirements/static/ci/../pkg/py3.10/darwin.txt # cherrypy +zipp==3.16.2 + # via + # -c requirements/static/ci/../pkg/py3.10/darwin.txt + # importlib-metadata # The following packages are considered to be unsafe in a requirements file: # setuptools diff --git a/requirements/static/ci/py3.10/freebsd.txt b/requirements/static/ci/py3.10/freebsd.txt index 2dd4e41bf66..295e7ad6d8f 100644 --- a/requirements/static/ci/py3.10/freebsd.txt +++ b/requirements/static/ci/py3.10/freebsd.txt @@ -77,8 +77,8 @@ cheroot==10.0.0 cherrypy==18.8.0 # via # -c requirements/static/ci/../pkg/py3.10/freebsd.txt + # -r requirements/base.txt # -r requirements/static/ci/common.in - # -r requirements/static/pkg/freebsd.in click==8.1.3 # via geomet clustershell==1.9.1 @@ -87,13 +87,12 @@ contextvars==2.4 # via # -c requirements/static/ci/../pkg/py3.10/freebsd.txt # -r requirements/base.txt -croniter==0.3.29 ; sys_platform != "win32" +croniter==1.3.15 ; sys_platform != "win32" # via -r requirements/static/ci/common.in cryptography==41.0.4 # via # -c requirements/static/ci/../pkg/py3.10/freebsd.txt - # -r requirements/crypto.txt - # -r requirements/static/pkg/freebsd.in + # -r requirements/base.txt # etcd3-py # moto # paramiko @@ -105,7 +104,6 @@ distro==1.8.0 # via # -c requirements/static/ci/../pkg/py3.10/freebsd.txt # -r requirements/base.txt - # -r requirements/static/pkg/freebsd.in # pytest-skip-markers dnspython==2.3.0 # via @@ -154,7 +152,7 @@ immutables==0.15 importlib-metadata==6.6.0 # via # -c requirements/static/ci/../pkg/py3.10/freebsd.txt - # -r requirements/static/pkg/freebsd.in + # -r requirements/base.txt inflect==6.0.4 # via # -c requirements/static/ci/../pkg/py3.10/freebsd.txt @@ -336,7 +334,7 @@ pynacl==1.5.0 pyopenssl==23.2.0 # via # -c requirements/static/ci/../pkg/py3.10/freebsd.txt - # -r requirements/static/pkg/freebsd.in + # -r requirements/base.txt # etcd3-py pyparsing==3.0.9 # via junos-eznc @@ -384,7 +382,7 @@ pytest==7.3.2 python-dateutil==2.8.2 # via # -c requirements/static/ci/../pkg/py3.10/freebsd.txt - # -r requirements/static/pkg/freebsd.in + # -r requirements/base.txt # botocore # croniter # kubernetes @@ -395,7 +393,7 @@ python-etcd==0.4.5 python-gnupg==0.5.0 # via # -c requirements/static/ci/../pkg/py3.10/freebsd.txt - # -r requirements/static/pkg/freebsd.in + # -r requirements/base.txt pytz==2023.3 # via # -c requirements/static/ci/../pkg/py3.10/freebsd.txt @@ -451,7 +449,7 @@ semantic-version==2.10.0 setproctitle==1.3.2 # via # -c requirements/static/ci/../pkg/py3.10/freebsd.txt - # -r requirements/static/pkg/freebsd.in + # -r requirements/base.txt six==1.16.0 # via # -c requirements/static/ci/../pkg/py3.10/freebsd.txt @@ -490,7 +488,7 @@ textfsm==1.1.3 timelib==0.3.0 # via # -c requirements/static/ci/../pkg/py3.10/freebsd.txt - # -r requirements/static/pkg/freebsd.in + # -r requirements/base.txt toml==0.10.2 # via -r requirements/static/ci/common.in tomli==2.0.1 @@ -558,7 +556,7 @@ zc.lockfile==3.0.post1 # via # -c requirements/static/ci/../pkg/py3.10/freebsd.txt # cherrypy -zipp==3.15.0 +zipp==3.16.2 # via # -c requirements/static/ci/../pkg/py3.10/freebsd.txt # importlib-metadata diff --git a/requirements/static/ci/py3.10/linux.txt b/requirements/static/ci/py3.10/linux.txt index 821a7670796..4efc740a247 100644 --- a/requirements/static/ci/py3.10/linux.txt +++ b/requirements/static/ci/py3.10/linux.txt @@ -91,8 +91,8 @@ cheroot==10.0.0 cherrypy==18.8.0 # via # -c requirements/static/ci/../pkg/py3.10/linux.txt + # -r requirements/base.txt # -r requirements/static/ci/common.in - # -r requirements/static/pkg/linux.in click==8.1.3 # via geomet clustershell==1.9.1 @@ -101,13 +101,12 @@ contextvars==2.4 # via # -c requirements/static/ci/../pkg/py3.10/linux.txt # -r requirements/base.txt -croniter==0.3.29 ; sys_platform != "win32" +croniter==1.3.15 ; sys_platform != "win32" # via -r requirements/static/ci/common.in cryptography==41.0.4 # via # -c requirements/static/ci/../pkg/py3.10/linux.txt - # -r requirements/crypto.txt - # -r requirements/static/pkg/linux.in + # -r requirements/base.txt # ansible-core # etcd3-py # moto @@ -178,7 +177,7 @@ immutables==0.15 importlib-metadata==6.6.0 # via # -c requirements/static/ci/../pkg/py3.10/linux.txt - # -r requirements/static/pkg/linux.in + # -r requirements/base.txt inflect==6.0.4 # via # -c requirements/static/ci/../pkg/py3.10/linux.txt @@ -370,7 +369,7 @@ pynacl==1.5.0 pyopenssl==23.2.0 # via # -c requirements/static/ci/../pkg/py3.10/linux.txt - # -r requirements/static/pkg/linux.in + # -r requirements/base.txt # etcd3-py pyparsing==3.0.9 # via junos-eznc @@ -420,7 +419,7 @@ python-consul==1.1.0 python-dateutil==2.8.2 # via # -c requirements/static/ci/../pkg/py3.10/linux.txt - # -r requirements/static/pkg/linux.in + # -r requirements/base.txt # botocore # croniter # kubernetes @@ -431,7 +430,7 @@ python-etcd==0.4.5 python-gnupg==0.5.0 # via # -c requirements/static/ci/../pkg/py3.10/linux.txt - # -r requirements/static/pkg/linux.in + # -r requirements/base.txt python-telegram-bot==20.3 # via -r requirements/static/ci/linux.in pytz==2023.3 @@ -485,10 +484,10 @@ responses==0.23.1 # via moto rfc3987==1.3.8 # via -r requirements/static/ci/common.in -rpm-vercmp==0.1.2 +rpm-vercmp==0.1.2 ; sys_platform == "linux" # via # -c requirements/static/ci/../pkg/py3.10/linux.txt - # -r requirements/static/pkg/linux.in + # -r requirements/base.txt rsa==4.9 # via google-auth s3transfer==0.6.1 @@ -503,7 +502,7 @@ semantic-version==2.10.0 setproctitle==1.3.2 # via # -c requirements/static/ci/../pkg/py3.10/linux.txt - # -r requirements/static/pkg/linux.in + # -r requirements/base.txt six==1.16.0 # via # -c requirements/static/ci/../pkg/py3.10/linux.txt @@ -552,7 +551,7 @@ textfsm==1.1.3 timelib==0.3.0 # via # -c requirements/static/ci/../pkg/py3.10/linux.txt - # -r requirements/static/pkg/linux.in + # -r requirements/base.txt toml==0.10.2 # via -r requirements/static/ci/common.in tomli==2.0.1 @@ -622,7 +621,7 @@ zc.lockfile==3.0.post1 # via # -c requirements/static/ci/../pkg/py3.10/linux.txt # cherrypy -zipp==3.15.0 +zipp==3.16.2 # via # -c requirements/static/ci/../pkg/py3.10/linux.txt # importlib-metadata diff --git a/requirements/static/ci/py3.10/windows.txt b/requirements/static/ci/py3.10/windows.txt index 2c61fcaaa3d..ff78ef6bae3 100644 --- a/requirements/static/ci/py3.10/windows.txt +++ b/requirements/static/ci/py3.10/windows.txt @@ -44,14 +44,12 @@ certifi==2023.07.22 # via # -c requirements/static/ci/../pkg/py3.10/windows.txt # -r requirements/static/ci/common.in - # -r requirements/windows.txt # kubernetes # requests cffi==1.14.6 # via # -c requirements/static/ci/../pkg/py3.10/windows.txt # -r requirements/static/ci/common.in - # -r requirements/windows.txt # clr-loader # cryptography # pygit2 @@ -70,8 +68,8 @@ cheroot==10.0.0 cherrypy==18.8.0 # via # -c requirements/static/ci/../pkg/py3.10/windows.txt + # -r requirements/base.txt # -r requirements/static/ci/common.in - # -r requirements/windows.txt click==8.1.3 # via geomet clr-loader==0.2.4 @@ -91,8 +89,7 @@ contextvars==2.4 cryptography==41.0.4 # via # -c requirements/static/ci/../pkg/py3.10/windows.txt - # -r requirements/crypto.txt - # -r requirements/windows.txt + # -r requirements/base.txt # etcd3-py # moto # pyopenssl @@ -133,11 +130,11 @@ gitdb==4.0.10 # via # -c requirements/static/ci/../pkg/py3.10/windows.txt # gitpython -gitpython==3.1.40 +gitpython==3.1.40 ; sys_platform == "win32" or sys_platform == "darwin" # via # -c requirements/static/ci/../pkg/py3.10/windows.txt + # -r requirements/base.txt # -r requirements/static/ci/common.in - # -r requirements/windows.txt google-auth==2.19.1 # via kubernetes idna==3.4 @@ -153,7 +150,7 @@ immutables==0.15 importlib-metadata==6.6.0 # via # -c requirements/static/ci/../pkg/py3.10/windows.txt - # -r requirements/windows.txt + # -r requirements/base.txt inflect==6.0.4 # via # -c requirements/static/ci/../pkg/py3.10/windows.txt @@ -204,10 +201,10 @@ looseversion==1.2.0 # via # -c requirements/static/ci/../pkg/py3.10/windows.txt # -r requirements/base.txt -lxml==4.9.2 +lxml==4.9.2 ; sys_platform == "win32" # via # -c requirements/static/ci/../pkg/py3.10/windows.txt - # -r requirements/windows.txt + # -r requirements/base.txt # xmldiff mako==1.2.4 # via -r requirements/static/ci/common.in @@ -270,8 +267,6 @@ pyasn1-modules==0.3.0 # via google-auth pyasn1==0.4.8 # via - # -c requirements/static/ci/../pkg/py3.10/windows.txt - # -r requirements/windows.txt # pyasn1-modules # rsa pycparser==2.21 @@ -288,20 +283,20 @@ pydantic==1.10.8 # inflect pygit2==1.13.1 # via -r requirements/static/ci/windows.in -pymssql==2.2.7 +pymssql==2.2.7 ; sys_platform == "win32" # via # -c requirements/static/ci/../pkg/py3.10/windows.txt - # -r requirements/windows.txt -pymysql==1.1.0 + # -r requirements/base.txt +pymysql==1.1.0 ; sys_platform == "win32" # via # -c requirements/static/ci/../pkg/py3.10/windows.txt - # -r requirements/windows.txt + # -r requirements/base.txt pynacl==1.5.0 # via -r requirements/static/ci/common.in pyopenssl==23.2.0 # via # -c requirements/static/ci/../pkg/py3.10/windows.txt - # -r requirements/windows.txt + # -r requirements/base.txt # etcd3-py pyrsistent==0.19.3 # via jsonschema @@ -345,7 +340,7 @@ pytest==7.3.2 python-dateutil==2.8.2 # via # -c requirements/static/ci/../pkg/py3.10/windows.txt - # -r requirements/windows.txt + # -r requirements/base.txt # botocore # kubernetes # moto @@ -354,21 +349,21 @@ python-etcd==0.4.5 python-gnupg==0.5.0 # via # -c requirements/static/ci/../pkg/py3.10/windows.txt - # -r requirements/windows.txt -pythonnet==3.0.1 + # -r requirements/base.txt +pythonnet==3.0.1 ; sys_platform == "win32" # via # -c requirements/static/ci/../pkg/py3.10/windows.txt - # -r requirements/windows.txt + # -r requirements/base.txt pytz==2023.3 # via # -c requirements/static/ci/../pkg/py3.10/windows.txt # tempora pyvmomi==8.0.1.0.1 # via -r requirements/static/ci/common.in -pywin32==306 +pywin32==306 ; sys_platform == "win32" # via # -c requirements/static/ci/../pkg/py3.10/windows.txt - # -r requirements/windows.txt + # -r requirements/base.txt # docker # pytest-skip-markers # wmi @@ -395,7 +390,6 @@ requests==2.31.0 # -c requirements/static/ci/../pkg/py3.10/windows.txt # -r requirements/base.txt # -r requirements/static/ci/common.in - # -r requirements/windows.txt # docker # etcd3-py # kubernetes @@ -418,7 +412,7 @@ semantic-version==2.10.0 setproctitle==1.3.2 # via # -c requirements/static/ci/../pkg/py3.10/windows.txt - # -r requirements/windows.txt + # -r requirements/base.txt six==1.15.0 # via # -c requirements/static/ci/../pkg/py3.10/windows.txt @@ -449,7 +443,7 @@ tempora==5.3.0 timelib==0.3.0 # via # -c requirements/static/ci/../pkg/py3.10/windows.txt - # -r requirements/windows.txt + # -r requirements/base.txt toml==0.10.2 # via -r requirements/static/ci/common.in tomli==2.0.1 @@ -469,7 +463,6 @@ typing-extensions==4.8.0 urllib3==1.26.18 # via # -c requirements/static/ci/../pkg/py3.10/windows.txt - # -r requirements/windows.txt # botocore # docker # google-auth @@ -493,14 +486,10 @@ werkzeug==3.0.1 # via # moto # pytest-httpserver -wheel==0.38.4 +wmi==1.5.1 ; sys_platform == "win32" # via # -c requirements/static/ci/../pkg/py3.10/windows.txt - # -r requirements/windows.txt -wmi==1.5.1 - # via - # -c requirements/static/ci/../pkg/py3.10/windows.txt - # -r requirements/windows.txt + # -r requirements/base.txt xmldiff==2.6.3 # via -r requirements/static/ci/common.in xmltodict==0.13.0 @@ -515,7 +504,7 @@ zc.lockfile==3.0.post1 # via # -c requirements/static/ci/../pkg/py3.10/windows.txt # cherrypy -zipp==3.15.0 +zipp==3.16.2 # via # -c requirements/static/ci/../pkg/py3.10/windows.txt # importlib-metadata diff --git a/requirements/static/ci/py3.11/darwin.txt b/requirements/static/ci/py3.11/darwin.txt index e0c63d89b82..f4dfd3f8495 100644 --- a/requirements/static/ci/py3.11/darwin.txt +++ b/requirements/static/ci/py3.11/darwin.txt @@ -8,10 +8,10 @@ aiohttp==3.8.5 # via etcd3-py aiosignal==1.3.1 # via aiohttp -apache-libcloud==3.7.0 ; sys_platform != "win32" +apache-libcloud==3.7.0 ; sys_platform == "darwin" # via # -c requirements/static/ci/../pkg/py3.11/darwin.txt - # -r requirements/darwin.txt + # -r requirements/base.txt # -r requirements/static/ci/common.in asn1crypto==1.5.1 # via @@ -81,7 +81,7 @@ cheroot==10.0.0 cherrypy==18.8.0 # via # -c requirements/static/ci/../pkg/py3.11/darwin.txt - # -r requirements/darwin.txt + # -r requirements/base.txt # -r requirements/static/ci/common.in click==8.1.3 # via geomet @@ -96,8 +96,7 @@ croniter==1.3.15 ; sys_platform != "win32" cryptography==41.0.4 # via # -c requirements/static/ci/../pkg/py3.11/darwin.txt - # -r requirements/crypto.txt - # -r requirements/darwin.txt + # -r requirements/base.txt # etcd3-py # moto # paramiko @@ -138,10 +137,10 @@ gitdb==4.0.10 # via # -c requirements/static/ci/../pkg/py3.11/darwin.txt # gitpython -gitpython==3.1.40 +gitpython==3.1.40 ; sys_platform == "win32" or sys_platform == "darwin" # via # -c requirements/static/ci/../pkg/py3.11/darwin.txt - # -r requirements/darwin.txt + # -r requirements/base.txt # -r requirements/static/ci/common.in google-auth==2.19.1 # via kubernetes @@ -150,7 +149,6 @@ hglib==2.6.2 idna==3.4 # via # -c requirements/static/ci/../pkg/py3.11/darwin.txt - # -r requirements/darwin.txt # etcd3-py # requests # yarl @@ -158,6 +156,10 @@ immutables==0.15 # via # -c requirements/static/ci/../pkg/py3.11/darwin.txt # contextvars +importlib-metadata==6.6.0 + # via + # -c requirements/static/ci/../pkg/py3.11/darwin.txt + # -r requirements/base.txt inflect==6.0.4 # via # -c requirements/static/ci/../pkg/py3.11/darwin.txt @@ -212,10 +214,10 @@ keyring==5.7.1 # via -r requirements/static/ci/common.in kubernetes==3.0.0 # via -r requirements/static/ci/common.in -linode-python==1.1.1 +linode-python==1.1.1 ; sys_platform == "darwin" # via # -c requirements/static/ci/../pkg/py3.11/darwin.txt - # -r requirements/darwin.txt + # -r requirements/base.txt looseversion==1.2.0 # via # -c requirements/static/ci/../pkg/py3.11/darwin.txt @@ -313,8 +315,6 @@ pyasn1-modules==0.3.0 # via google-auth pyasn1==0.4.8 # via - # -c requirements/static/ci/../pkg/py3.11/darwin.txt - # -r requirements/darwin.txt # pyasn1-modules # rsa pycparser==2.21 @@ -340,7 +340,7 @@ pynacl==1.5.0 pyopenssl==23.2.0 # via # -c requirements/static/ci/../pkg/py3.11/darwin.txt - # -r requirements/darwin.txt + # -r requirements/base.txt # etcd3-py pyparsing==3.0.9 # via junos-eznc @@ -388,7 +388,7 @@ pytest==7.3.2 python-dateutil==2.8.2 # via # -c requirements/static/ci/../pkg/py3.11/darwin.txt - # -r requirements/darwin.txt + # -r requirements/base.txt # botocore # croniter # kubernetes @@ -399,7 +399,7 @@ python-etcd==0.4.5 python-gnupg==0.5.0 # via # -c requirements/static/ci/../pkg/py3.11/darwin.txt - # -r requirements/darwin.txt + # -r requirements/base.txt pytz==2023.3 # via # -c requirements/static/ci/../pkg/py3.11/darwin.txt @@ -456,7 +456,7 @@ semantic-version==2.10.0 setproctitle==1.3.2 # via # -c requirements/static/ci/../pkg/py3.11/darwin.txt - # -r requirements/darwin.txt + # -r requirements/base.txt six==1.16.0 # via # -c requirements/static/ci/../pkg/py3.11/darwin.txt @@ -496,7 +496,7 @@ textfsm==1.1.3 timelib==0.3.0 # via # -c requirements/static/ci/../pkg/py3.11/darwin.txt - # -r requirements/darwin.txt + # -r requirements/base.txt toml==0.10.2 # via -r requirements/static/ci/common.in tornado==6.3.3 @@ -536,10 +536,10 @@ virtualenv==20.23.0 # via # -r requirements/static/ci/common.in # pytest-salt-factories -vultr==1.0.1 +vultr==1.0.1 ; sys_platform == "darwin" # via # -c requirements/static/ci/../pkg/py3.11/darwin.txt - # -r requirements/darwin.txt + # -r requirements/base.txt watchdog==3.0.0 # via -r requirements/static/ci/common.in websocket-client==0.40.0 @@ -566,6 +566,10 @@ zc.lockfile==3.0.post1 # via # -c requirements/static/ci/../pkg/py3.11/darwin.txt # cherrypy +zipp==3.16.2 + # via + # -c requirements/static/ci/../pkg/py3.11/darwin.txt + # importlib-metadata # The following packages are considered to be unsafe in a requirements file: # setuptools diff --git a/requirements/static/ci/py3.11/freebsd.txt b/requirements/static/ci/py3.11/freebsd.txt index 7031471de49..ee44f8168bb 100644 --- a/requirements/static/ci/py3.11/freebsd.txt +++ b/requirements/static/ci/py3.11/freebsd.txt @@ -77,8 +77,8 @@ cheroot==10.0.0 cherrypy==18.8.0 # via # -c requirements/static/ci/../pkg/py3.11/freebsd.txt + # -r requirements/base.txt # -r requirements/static/ci/common.in - # -r requirements/static/pkg/freebsd.in click==8.1.3 # via geomet clustershell==1.9.1 @@ -92,8 +92,7 @@ croniter==1.3.15 ; sys_platform != "win32" cryptography==41.0.4 # via # -c requirements/static/ci/../pkg/py3.11/freebsd.txt - # -r requirements/crypto.txt - # -r requirements/static/pkg/freebsd.in + # -r requirements/base.txt # etcd3-py # moto # paramiko @@ -105,7 +104,6 @@ distro==1.8.0 # via # -c requirements/static/ci/../pkg/py3.11/freebsd.txt # -r requirements/base.txt - # -r requirements/static/pkg/freebsd.in # pytest-skip-markers dnspython==2.3.0 # via @@ -152,7 +150,7 @@ immutables==0.15 importlib-metadata==6.6.0 # via # -c requirements/static/ci/../pkg/py3.11/freebsd.txt - # -r requirements/static/pkg/freebsd.in + # -r requirements/base.txt inflect==6.0.4 # via # -c requirements/static/ci/../pkg/py3.11/freebsd.txt @@ -334,7 +332,7 @@ pynacl==1.5.0 pyopenssl==23.2.0 # via # -c requirements/static/ci/../pkg/py3.11/freebsd.txt - # -r requirements/static/pkg/freebsd.in + # -r requirements/base.txt # etcd3-py pyparsing==3.0.9 # via junos-eznc @@ -382,7 +380,7 @@ pytest==7.3.2 python-dateutil==2.8.2 # via # -c requirements/static/ci/../pkg/py3.11/freebsd.txt - # -r requirements/static/pkg/freebsd.in + # -r requirements/base.txt # botocore # croniter # kubernetes @@ -393,7 +391,7 @@ python-etcd==0.4.5 python-gnupg==0.5.0 # via # -c requirements/static/ci/../pkg/py3.11/freebsd.txt - # -r requirements/static/pkg/freebsd.in + # -r requirements/base.txt pytz==2023.3 # via # -c requirements/static/ci/../pkg/py3.11/freebsd.txt @@ -449,7 +447,7 @@ semantic-version==2.10.0 setproctitle==1.3.2 # via # -c requirements/static/ci/../pkg/py3.11/freebsd.txt - # -r requirements/static/pkg/freebsd.in + # -r requirements/base.txt six==1.16.0 # via # -c requirements/static/ci/../pkg/py3.11/freebsd.txt @@ -488,7 +486,7 @@ textfsm==1.1.3 timelib==0.3.0 # via # -c requirements/static/ci/../pkg/py3.11/freebsd.txt - # -r requirements/static/pkg/freebsd.in + # -r requirements/base.txt toml==0.10.2 # via -r requirements/static/ci/common.in tornado==6.3.3 @@ -554,7 +552,7 @@ zc.lockfile==3.0.post1 # via # -c requirements/static/ci/../pkg/py3.11/freebsd.txt # cherrypy -zipp==3.15.0 +zipp==3.16.2 # via # -c requirements/static/ci/../pkg/py3.11/freebsd.txt # importlib-metadata diff --git a/requirements/static/ci/py3.11/linux.txt b/requirements/static/ci/py3.11/linux.txt index 3bf08126343..1374e9a016c 100644 --- a/requirements/static/ci/py3.11/linux.txt +++ b/requirements/static/ci/py3.11/linux.txt @@ -91,8 +91,8 @@ cheroot==10.0.0 cherrypy==18.8.0 # via # -c requirements/static/ci/../pkg/py3.11/linux.txt + # -r requirements/base.txt # -r requirements/static/ci/common.in - # -r requirements/static/pkg/linux.in click==8.1.3 # via geomet clustershell==1.9.1 @@ -106,8 +106,7 @@ croniter==1.3.15 ; sys_platform != "win32" cryptography==41.0.4 # via # -c requirements/static/ci/../pkg/py3.11/linux.txt - # -r requirements/crypto.txt - # -r requirements/static/pkg/linux.in + # -r requirements/base.txt # ansible-core # etcd3-py # moto @@ -174,7 +173,7 @@ immutables==0.15 importlib-metadata==6.6.0 # via # -c requirements/static/ci/../pkg/py3.11/linux.txt - # -r requirements/static/pkg/linux.in + # -r requirements/base.txt inflect==6.0.4 # via # -c requirements/static/ci/../pkg/py3.11/linux.txt @@ -366,7 +365,7 @@ pynacl==1.5.0 pyopenssl==23.2.0 # via # -c requirements/static/ci/../pkg/py3.11/linux.txt - # -r requirements/static/pkg/linux.in + # -r requirements/base.txt # etcd3-py pyparsing==3.0.9 # via junos-eznc @@ -416,7 +415,7 @@ python-consul==1.1.0 python-dateutil==2.8.2 # via # -c requirements/static/ci/../pkg/py3.11/linux.txt - # -r requirements/static/pkg/linux.in + # -r requirements/base.txt # botocore # croniter # kubernetes @@ -427,7 +426,7 @@ python-etcd==0.4.5 python-gnupg==0.5.0 # via # -c requirements/static/ci/../pkg/py3.11/linux.txt - # -r requirements/static/pkg/linux.in + # -r requirements/base.txt python-telegram-bot==20.3 # via -r requirements/static/ci/linux.in pytz==2023.3 @@ -481,10 +480,10 @@ responses==0.23.1 # via moto rfc3987==1.3.8 # via -r requirements/static/ci/common.in -rpm-vercmp==0.1.2 +rpm-vercmp==0.1.2 ; sys_platform == "linux" # via # -c requirements/static/ci/../pkg/py3.11/linux.txt - # -r requirements/static/pkg/linux.in + # -r requirements/base.txt rsa==4.9 # via google-auth s3transfer==0.6.1 @@ -499,7 +498,7 @@ semantic-version==2.10.0 setproctitle==1.3.2 # via # -c requirements/static/ci/../pkg/py3.11/linux.txt - # -r requirements/static/pkg/linux.in + # -r requirements/base.txt six==1.16.0 # via # -c requirements/static/ci/../pkg/py3.11/linux.txt @@ -548,7 +547,7 @@ textfsm==1.1.3 timelib==0.3.0 # via # -c requirements/static/ci/../pkg/py3.11/linux.txt - # -r requirements/static/pkg/linux.in + # -r requirements/base.txt toml==0.10.2 # via -r requirements/static/ci/common.in tornado==6.3.3 @@ -616,7 +615,7 @@ zc.lockfile==3.0.post1 # via # -c requirements/static/ci/../pkg/py3.11/linux.txt # cherrypy -zipp==3.15.0 +zipp==3.16.2 # via # -c requirements/static/ci/../pkg/py3.11/linux.txt # importlib-metadata diff --git a/requirements/static/ci/py3.11/windows.txt b/requirements/static/ci/py3.11/windows.txt index 84e2cb9981b..368ed571402 100644 --- a/requirements/static/ci/py3.11/windows.txt +++ b/requirements/static/ci/py3.11/windows.txt @@ -44,14 +44,12 @@ certifi==2023.07.22 # via # -c requirements/static/ci/../pkg/py3.11/windows.txt # -r requirements/static/ci/common.in - # -r requirements/windows.txt # kubernetes # requests cffi==1.14.6 # via # -c requirements/static/ci/../pkg/py3.11/windows.txt # -r requirements/static/ci/common.in - # -r requirements/windows.txt # clr-loader # cryptography # pygit2 @@ -70,8 +68,8 @@ cheroot==10.0.0 cherrypy==18.8.0 # via # -c requirements/static/ci/../pkg/py3.11/windows.txt + # -r requirements/base.txt # -r requirements/static/ci/common.in - # -r requirements/windows.txt click==8.1.3 # via geomet clr-loader==0.2.4 @@ -91,8 +89,7 @@ contextvars==2.4 cryptography==41.0.4 # via # -c requirements/static/ci/../pkg/py3.11/windows.txt - # -r requirements/crypto.txt - # -r requirements/windows.txt + # -r requirements/base.txt # etcd3-py # moto # pyopenssl @@ -131,11 +128,11 @@ gitdb==4.0.10 # via # -c requirements/static/ci/../pkg/py3.11/windows.txt # gitpython -gitpython==3.1.40 +gitpython==3.1.40 ; sys_platform == "win32" or sys_platform == "darwin" # via # -c requirements/static/ci/../pkg/py3.11/windows.txt + # -r requirements/base.txt # -r requirements/static/ci/common.in - # -r requirements/windows.txt google-auth==2.19.1 # via kubernetes idna==3.4 @@ -151,7 +148,7 @@ immutables==0.15 importlib-metadata==6.6.0 # via # -c requirements/static/ci/../pkg/py3.11/windows.txt - # -r requirements/windows.txt + # -r requirements/base.txt inflect==6.0.4 # via # -c requirements/static/ci/../pkg/py3.11/windows.txt @@ -202,10 +199,10 @@ looseversion==1.2.0 # via # -c requirements/static/ci/../pkg/py3.11/windows.txt # -r requirements/base.txt -lxml==4.9.2 +lxml==4.9.2 ; sys_platform == "win32" # via # -c requirements/static/ci/../pkg/py3.11/windows.txt - # -r requirements/windows.txt + # -r requirements/base.txt # xmldiff mako==1.2.4 # via -r requirements/static/ci/common.in @@ -268,8 +265,6 @@ pyasn1-modules==0.3.0 # via google-auth pyasn1==0.4.8 # via - # -c requirements/static/ci/../pkg/py3.11/windows.txt - # -r requirements/windows.txt # pyasn1-modules # rsa pycparser==2.21 @@ -286,20 +281,20 @@ pydantic==1.10.8 # inflect pygit2==1.13.1 # via -r requirements/static/ci/windows.in -pymssql==2.2.7 +pymssql==2.2.7 ; sys_platform == "win32" # via # -c requirements/static/ci/../pkg/py3.11/windows.txt - # -r requirements/windows.txt -pymysql==1.1.0 + # -r requirements/base.txt +pymysql==1.1.0 ; sys_platform == "win32" # via # -c requirements/static/ci/../pkg/py3.11/windows.txt - # -r requirements/windows.txt + # -r requirements/base.txt pynacl==1.5.0 # via -r requirements/static/ci/common.in pyopenssl==23.2.0 # via # -c requirements/static/ci/../pkg/py3.11/windows.txt - # -r requirements/windows.txt + # -r requirements/base.txt # etcd3-py pyrsistent==0.19.3 # via jsonschema @@ -343,7 +338,7 @@ pytest==7.3.2 python-dateutil==2.8.2 # via # -c requirements/static/ci/../pkg/py3.11/windows.txt - # -r requirements/windows.txt + # -r requirements/base.txt # botocore # kubernetes # moto @@ -352,21 +347,21 @@ python-etcd==0.4.5 python-gnupg==0.5.0 # via # -c requirements/static/ci/../pkg/py3.11/windows.txt - # -r requirements/windows.txt -pythonnet==3.0.1 + # -r requirements/base.txt +pythonnet==3.0.1 ; sys_platform == "win32" # via # -c requirements/static/ci/../pkg/py3.11/windows.txt - # -r requirements/windows.txt + # -r requirements/base.txt pytz==2023.3 # via # -c requirements/static/ci/../pkg/py3.11/windows.txt # tempora pyvmomi==8.0.1.0.1 # via -r requirements/static/ci/common.in -pywin32==306 +pywin32==306 ; sys_platform == "win32" # via # -c requirements/static/ci/../pkg/py3.11/windows.txt - # -r requirements/windows.txt + # -r requirements/base.txt # docker # pytest-skip-markers # wmi @@ -393,7 +388,6 @@ requests==2.31.0 # -c requirements/static/ci/../pkg/py3.11/windows.txt # -r requirements/base.txt # -r requirements/static/ci/common.in - # -r requirements/windows.txt # docker # etcd3-py # kubernetes @@ -416,7 +410,7 @@ semantic-version==2.10.0 setproctitle==1.3.2 # via # -c requirements/static/ci/../pkg/py3.11/windows.txt - # -r requirements/windows.txt + # -r requirements/base.txt six==1.15.0 # via # -c requirements/static/ci/../pkg/py3.11/windows.txt @@ -447,7 +441,7 @@ tempora==5.3.0 timelib==0.3.0 # via # -c requirements/static/ci/../pkg/py3.11/windows.txt - # -r requirements/windows.txt + # -r requirements/base.txt toml==0.10.2 # via -r requirements/static/ci/common.in tornado==6.3.3 @@ -465,7 +459,6 @@ typing-extensions==4.8.0 urllib3==1.26.18 # via # -c requirements/static/ci/../pkg/py3.11/windows.txt - # -r requirements/windows.txt # botocore # docker # google-auth @@ -489,14 +482,10 @@ werkzeug==3.0.1 # via # moto # pytest-httpserver -wheel==0.38.4 +wmi==1.5.1 ; sys_platform == "win32" # via # -c requirements/static/ci/../pkg/py3.11/windows.txt - # -r requirements/windows.txt -wmi==1.5.1 - # via - # -c requirements/static/ci/../pkg/py3.11/windows.txt - # -r requirements/windows.txt + # -r requirements/base.txt xmldiff==2.6.3 # via -r requirements/static/ci/common.in xmltodict==0.13.0 @@ -511,7 +500,7 @@ zc.lockfile==3.0.post1 # via # -c requirements/static/ci/../pkg/py3.11/windows.txt # cherrypy -zipp==3.15.0 +zipp==3.16.2 # via # -c requirements/static/ci/../pkg/py3.11/windows.txt # importlib-metadata diff --git a/requirements/static/ci/py3.8/docs.txt b/requirements/static/ci/py3.8/docs.txt index 56d0e0df50e..c708e6f6c76 100644 --- a/requirements/static/ci/py3.8/docs.txt +++ b/requirements/static/ci/py3.8/docs.txt @@ -169,7 +169,7 @@ zc.lockfile==3.0.post1 # via # -c requirements/static/ci/py3.8/linux.txt # cherrypy -zipp==3.15.0 +zipp==3.16.2 # via # -c requirements/static/ci/py3.8/linux.txt # importlib-metadata diff --git a/requirements/static/ci/py3.8/freebsd.txt b/requirements/static/ci/py3.8/freebsd.txt index aa783f8db67..b2409e15c5c 100644 --- a/requirements/static/ci/py3.8/freebsd.txt +++ b/requirements/static/ci/py3.8/freebsd.txt @@ -77,8 +77,8 @@ cheroot==10.0.0 cherrypy==18.8.0 # via # -c requirements/static/ci/../pkg/py3.8/freebsd.txt + # -r requirements/base.txt # -r requirements/static/ci/common.in - # -r requirements/static/pkg/freebsd.in click==8.1.3 # via geomet clustershell==1.9.1 @@ -87,13 +87,12 @@ contextvars==2.4 # via # -c requirements/static/ci/../pkg/py3.8/freebsd.txt # -r requirements/base.txt -croniter==0.3.29 ; sys_platform != "win32" +croniter==1.3.15 ; sys_platform != "win32" # via -r requirements/static/ci/common.in cryptography==41.0.4 # via # -c requirements/static/ci/../pkg/py3.8/freebsd.txt - # -r requirements/crypto.txt - # -r requirements/static/pkg/freebsd.in + # -r requirements/base.txt # etcd3-py # moto # paramiko @@ -105,7 +104,6 @@ distro==1.8.0 # via # -c requirements/static/ci/../pkg/py3.8/freebsd.txt # -r requirements/base.txt - # -r requirements/static/pkg/freebsd.in # pytest-skip-markers dnspython==2.3.0 # via @@ -154,7 +152,7 @@ immutables==0.15 importlib-metadata==6.6.0 # via # -c requirements/static/ci/../pkg/py3.8/freebsd.txt - # -r requirements/static/pkg/freebsd.in + # -r requirements/base.txt importlib-resources==5.12.0 # via # -c requirements/static/ci/../pkg/py3.8/freebsd.txt @@ -340,7 +338,7 @@ pynacl==1.5.0 pyopenssl==23.2.0 # via # -c requirements/static/ci/../pkg/py3.8/freebsd.txt - # -r requirements/static/pkg/freebsd.in + # -r requirements/base.txt # etcd3-py pyparsing==3.0.9 # via junos-eznc @@ -388,7 +386,7 @@ pytest==7.3.2 python-dateutil==2.8.2 # via # -c requirements/static/ci/../pkg/py3.8/freebsd.txt - # -r requirements/static/pkg/freebsd.in + # -r requirements/base.txt # botocore # croniter # kubernetes @@ -399,7 +397,7 @@ python-etcd==0.4.5 python-gnupg==0.5.0 # via # -c requirements/static/ci/../pkg/py3.8/freebsd.txt - # -r requirements/static/pkg/freebsd.in + # -r requirements/base.txt pytz==2023.3 # via # -c requirements/static/ci/../pkg/py3.8/freebsd.txt @@ -455,7 +453,7 @@ semantic-version==2.10.0 setproctitle==1.3.2 # via # -c requirements/static/ci/../pkg/py3.8/freebsd.txt - # -r requirements/static/pkg/freebsd.in + # -r requirements/base.txt six==1.16.0 # via # -c requirements/static/ci/../pkg/py3.8/freebsd.txt @@ -494,7 +492,7 @@ textfsm==1.1.3 timelib==0.3.0 # via # -c requirements/static/ci/../pkg/py3.8/freebsd.txt - # -r requirements/static/pkg/freebsd.in + # -r requirements/base.txt toml==0.10.2 # via -r requirements/static/ci/common.in tomli==2.0.1 @@ -562,7 +560,7 @@ zc.lockfile==3.0.post1 # via # -c requirements/static/ci/../pkg/py3.8/freebsd.txt # cherrypy -zipp==3.15.0 +zipp==3.16.2 # via # -c requirements/static/ci/../pkg/py3.8/freebsd.txt # importlib-metadata diff --git a/requirements/static/ci/py3.8/linux.txt b/requirements/static/ci/py3.8/linux.txt index 68fa2077e3e..7b5d48ddc47 100644 --- a/requirements/static/ci/py3.8/linux.txt +++ b/requirements/static/ci/py3.8/linux.txt @@ -91,8 +91,8 @@ cheroot==10.0.0 cherrypy==18.8.0 # via # -c requirements/static/ci/../pkg/py3.8/linux.txt + # -r requirements/base.txt # -r requirements/static/ci/common.in - # -r requirements/static/pkg/linux.in click==8.1.3 # via geomet clustershell==1.9.1 @@ -101,13 +101,12 @@ contextvars==2.4 # via # -c requirements/static/ci/../pkg/py3.8/linux.txt # -r requirements/base.txt -croniter==0.3.29 ; sys_platform != "win32" +croniter==1.3.15 ; sys_platform != "win32" # via -r requirements/static/ci/common.in cryptography==41.0.4 # via # -c requirements/static/ci/../pkg/py3.8/linux.txt - # -r requirements/crypto.txt - # -r requirements/static/pkg/linux.in + # -r requirements/base.txt # ansible-core # etcd3-py # moto @@ -178,7 +177,7 @@ immutables==0.15 importlib-metadata==6.6.0 # via # -c requirements/static/ci/../pkg/py3.8/linux.txt - # -r requirements/static/pkg/linux.in + # -r requirements/base.txt importlib-resources==5.12.0 # via # -c requirements/static/ci/../pkg/py3.8/linux.txt @@ -374,7 +373,7 @@ pynacl==1.5.0 pyopenssl==23.2.0 # via # -c requirements/static/ci/../pkg/py3.8/linux.txt - # -r requirements/static/pkg/linux.in + # -r requirements/base.txt # etcd3-py pyparsing==3.0.9 # via junos-eznc @@ -424,7 +423,7 @@ python-consul==1.1.0 python-dateutil==2.8.2 # via # -c requirements/static/ci/../pkg/py3.8/linux.txt - # -r requirements/static/pkg/linux.in + # -r requirements/base.txt # botocore # croniter # kubernetes @@ -435,7 +434,7 @@ python-etcd==0.4.5 python-gnupg==0.5.0 # via # -c requirements/static/ci/../pkg/py3.8/linux.txt - # -r requirements/static/pkg/linux.in + # -r requirements/base.txt python-telegram-bot==20.3 # via -r requirements/static/ci/linux.in pytz==2023.3 @@ -489,10 +488,10 @@ responses==0.23.1 # via moto rfc3987==1.3.8 # via -r requirements/static/ci/common.in -rpm-vercmp==0.1.2 +rpm-vercmp==0.1.2 ; sys_platform == "linux" # via # -c requirements/static/ci/../pkg/py3.8/linux.txt - # -r requirements/static/pkg/linux.in + # -r requirements/base.txt rsa==4.9 # via google-auth s3transfer==0.6.1 @@ -507,7 +506,7 @@ semantic-version==2.10.0 setproctitle==1.3.2 # via # -c requirements/static/ci/../pkg/py3.8/linux.txt - # -r requirements/static/pkg/linux.in + # -r requirements/base.txt six==1.16.0 # via # -c requirements/static/ci/../pkg/py3.8/linux.txt @@ -556,7 +555,7 @@ textfsm==1.1.3 timelib==0.3.0 # via # -c requirements/static/ci/../pkg/py3.8/linux.txt - # -r requirements/static/pkg/linux.in + # -r requirements/base.txt toml==0.10.2 # via -r requirements/static/ci/common.in tomli==2.0.1 @@ -626,7 +625,7 @@ zc.lockfile==3.0.post1 # via # -c requirements/static/ci/../pkg/py3.8/linux.txt # cherrypy -zipp==3.15.0 +zipp==3.16.2 # via # -c requirements/static/ci/../pkg/py3.8/linux.txt # importlib-metadata diff --git a/requirements/static/ci/py3.8/windows.txt b/requirements/static/ci/py3.8/windows.txt index 4f5417149b7..b3c8438642a 100644 --- a/requirements/static/ci/py3.8/windows.txt +++ b/requirements/static/ci/py3.8/windows.txt @@ -44,14 +44,12 @@ certifi==2023.07.22 # via # -c requirements/static/ci/../pkg/py3.8/windows.txt # -r requirements/static/ci/common.in - # -r requirements/windows.txt # kubernetes # requests cffi==1.14.6 # via # -c requirements/static/ci/../pkg/py3.8/windows.txt # -r requirements/static/ci/common.in - # -r requirements/windows.txt # clr-loader # cryptography # pygit2 @@ -70,8 +68,8 @@ cheroot==10.0.0 cherrypy==18.8.0 # via # -c requirements/static/ci/../pkg/py3.8/windows.txt + # -r requirements/base.txt # -r requirements/static/ci/common.in - # -r requirements/windows.txt click==8.1.3 # via geomet clr-loader==0.2.4 @@ -91,8 +89,7 @@ contextvars==2.4 cryptography==41.0.4 # via # -c requirements/static/ci/../pkg/py3.8/windows.txt - # -r requirements/crypto.txt - # -r requirements/windows.txt + # -r requirements/base.txt # etcd3-py # moto # pyopenssl @@ -133,11 +130,11 @@ gitdb==4.0.10 # via # -c requirements/static/ci/../pkg/py3.8/windows.txt # gitpython -gitpython==3.1.40 +gitpython==3.1.40 ; sys_platform == "win32" or sys_platform == "darwin" # via # -c requirements/static/ci/../pkg/py3.8/windows.txt + # -r requirements/base.txt # -r requirements/static/ci/common.in - # -r requirements/windows.txt google-auth==2.19.1 # via kubernetes idna==3.4 @@ -153,7 +150,7 @@ immutables==0.15 importlib-metadata==6.6.0 # via # -c requirements/static/ci/../pkg/py3.8/windows.txt - # -r requirements/windows.txt + # -r requirements/base.txt importlib-resources==5.12.0 # via # -c requirements/static/ci/../pkg/py3.8/windows.txt @@ -208,10 +205,10 @@ looseversion==1.2.0 # via # -c requirements/static/ci/../pkg/py3.8/windows.txt # -r requirements/base.txt -lxml==4.9.2 +lxml==4.9.2 ; sys_platform == "win32" # via # -c requirements/static/ci/../pkg/py3.8/windows.txt - # -r requirements/windows.txt + # -r requirements/base.txt # xmldiff mako==1.2.4 # via -r requirements/static/ci/common.in @@ -274,8 +271,6 @@ pyasn1-modules==0.3.0 # via google-auth pyasn1==0.4.8 # via - # -c requirements/static/ci/../pkg/py3.8/windows.txt - # -r requirements/windows.txt # pyasn1-modules # rsa pycparser==2.21 @@ -292,20 +287,20 @@ pydantic==1.10.8 # inflect pygit2==1.13.1 # via -r requirements/static/ci/windows.in -pymssql==2.2.7 +pymssql==2.2.7 ; sys_platform == "win32" # via # -c requirements/static/ci/../pkg/py3.8/windows.txt - # -r requirements/windows.txt -pymysql==1.1.0 + # -r requirements/base.txt +pymysql==1.1.0 ; sys_platform == "win32" # via # -c requirements/static/ci/../pkg/py3.8/windows.txt - # -r requirements/windows.txt + # -r requirements/base.txt pynacl==1.5.0 # via -r requirements/static/ci/common.in pyopenssl==23.2.0 # via # -c requirements/static/ci/../pkg/py3.8/windows.txt - # -r requirements/windows.txt + # -r requirements/base.txt # etcd3-py pyrsistent==0.19.3 # via jsonschema @@ -349,7 +344,7 @@ pytest==7.3.2 python-dateutil==2.8.2 # via # -c requirements/static/ci/../pkg/py3.8/windows.txt - # -r requirements/windows.txt + # -r requirements/base.txt # botocore # kubernetes # moto @@ -358,21 +353,21 @@ python-etcd==0.4.5 python-gnupg==0.5.0 # via # -c requirements/static/ci/../pkg/py3.8/windows.txt - # -r requirements/windows.txt -pythonnet==3.0.1 + # -r requirements/base.txt +pythonnet==3.0.1 ; sys_platform == "win32" # via # -c requirements/static/ci/../pkg/py3.8/windows.txt - # -r requirements/windows.txt + # -r requirements/base.txt pytz==2023.3 # via # -c requirements/static/ci/../pkg/py3.8/windows.txt # tempora pyvmomi==8.0.1.0.1 # via -r requirements/static/ci/common.in -pywin32==306 +pywin32==306 ; sys_platform == "win32" # via # -c requirements/static/ci/../pkg/py3.8/windows.txt - # -r requirements/windows.txt + # -r requirements/base.txt # cherrypy # docker # pytest-skip-markers @@ -400,7 +395,6 @@ requests==2.31.0 # -c requirements/static/ci/../pkg/py3.8/windows.txt # -r requirements/base.txt # -r requirements/static/ci/common.in - # -r requirements/windows.txt # docker # etcd3-py # kubernetes @@ -423,7 +417,7 @@ semantic-version==2.10.0 setproctitle==1.3.2 # via # -c requirements/static/ci/../pkg/py3.8/windows.txt - # -r requirements/windows.txt + # -r requirements/base.txt six==1.15.0 # via # -c requirements/static/ci/../pkg/py3.8/windows.txt @@ -454,7 +448,7 @@ tempora==5.3.0 timelib==0.3.0 # via # -c requirements/static/ci/../pkg/py3.8/windows.txt - # -r requirements/windows.txt + # -r requirements/base.txt toml==0.10.2 # via -r requirements/static/ci/common.in tomli==2.0.1 @@ -474,7 +468,6 @@ typing-extensions==4.8.0 urllib3==1.26.18 # via # -c requirements/static/ci/../pkg/py3.8/windows.txt - # -r requirements/windows.txt # botocore # docker # google-auth @@ -498,14 +491,10 @@ werkzeug==3.0.1 # via # moto # pytest-httpserver -wheel==0.38.4 +wmi==1.5.1 ; sys_platform == "win32" # via # -c requirements/static/ci/../pkg/py3.8/windows.txt - # -r requirements/windows.txt -wmi==1.5.1 - # via - # -c requirements/static/ci/../pkg/py3.8/windows.txt - # -r requirements/windows.txt + # -r requirements/base.txt xmldiff==2.6.3 # via -r requirements/static/ci/common.in xmltodict==0.13.0 @@ -520,7 +509,7 @@ zc.lockfile==3.0.post1 # via # -c requirements/static/ci/../pkg/py3.8/windows.txt # cherrypy -zipp==3.15.0 +zipp==3.16.2 # via # -c requirements/static/ci/../pkg/py3.8/windows.txt # importlib-metadata diff --git a/requirements/static/ci/py3.9/darwin.txt b/requirements/static/ci/py3.9/darwin.txt index b62a306d2bf..f82d6df764d 100644 --- a/requirements/static/ci/py3.9/darwin.txt +++ b/requirements/static/ci/py3.9/darwin.txt @@ -8,10 +8,10 @@ aiohttp==3.8.5 # via etcd3-py aiosignal==1.3.1 # via aiohttp -apache-libcloud==3.7.0 ; sys_platform != "win32" +apache-libcloud==3.7.0 ; sys_platform == "darwin" # via # -c requirements/static/ci/../pkg/py3.9/darwin.txt - # -r requirements/darwin.txt + # -r requirements/base.txt # -r requirements/static/ci/common.in asn1crypto==1.5.1 # via @@ -81,7 +81,7 @@ cheroot==10.0.0 cherrypy==18.8.0 # via # -c requirements/static/ci/../pkg/py3.9/darwin.txt - # -r requirements/darwin.txt + # -r requirements/base.txt # -r requirements/static/ci/common.in click==8.1.3 # via geomet @@ -91,13 +91,12 @@ contextvars==2.4 # via # -c requirements/static/ci/../pkg/py3.9/darwin.txt # -r requirements/base.txt -croniter==0.3.29 ; sys_platform != "win32" +croniter==1.3.15 ; sys_platform != "win32" # via -r requirements/static/ci/common.in cryptography==41.0.4 # via # -c requirements/static/ci/../pkg/py3.9/darwin.txt - # -r requirements/crypto.txt - # -r requirements/darwin.txt + # -r requirements/base.txt # etcd3-py # moto # paramiko @@ -140,10 +139,10 @@ gitdb==4.0.10 # via # -c requirements/static/ci/../pkg/py3.9/darwin.txt # gitpython -gitpython==3.1.40 +gitpython==3.1.40 ; sys_platform == "win32" or sys_platform == "darwin" # via # -c requirements/static/ci/../pkg/py3.9/darwin.txt - # -r requirements/darwin.txt + # -r requirements/base.txt # -r requirements/static/ci/common.in google-auth==2.19.1 # via kubernetes @@ -152,7 +151,6 @@ hglib==2.6.2 idna==3.4 # via # -c requirements/static/ci/../pkg/py3.9/darwin.txt - # -r requirements/darwin.txt # etcd3-py # requests # yarl @@ -160,6 +158,10 @@ immutables==0.15 # via # -c requirements/static/ci/../pkg/py3.9/darwin.txt # contextvars +importlib-metadata==6.6.0 + # via + # -c requirements/static/ci/../pkg/py3.9/darwin.txt + # -r requirements/base.txt inflect==6.0.4 # via # -c requirements/static/ci/../pkg/py3.9/darwin.txt @@ -214,10 +216,10 @@ keyring==5.7.1 # via -r requirements/static/ci/common.in kubernetes==3.0.0 # via -r requirements/static/ci/common.in -linode-python==1.1.1 +linode-python==1.1.1 ; sys_platform == "darwin" # via # -c requirements/static/ci/../pkg/py3.9/darwin.txt - # -r requirements/darwin.txt + # -r requirements/base.txt looseversion==1.2.0 # via # -c requirements/static/ci/../pkg/py3.9/darwin.txt @@ -296,8 +298,6 @@ passlib==1.7.4 # via -r requirements/static/ci/common.in pathspec==0.11.1 # via yamllint -pathtools==0.1.2 - # via watchdog platformdirs==3.5.3 # via virtualenv pluggy==1.0.0 @@ -317,8 +317,6 @@ pyasn1-modules==0.3.0 # via google-auth pyasn1==0.4.8 # via - # -c requirements/static/ci/../pkg/py3.9/darwin.txt - # -r requirements/darwin.txt # pyasn1-modules # rsa pycparser==2.21 @@ -344,7 +342,7 @@ pynacl==1.5.0 pyopenssl==23.2.0 # via # -c requirements/static/ci/../pkg/py3.9/darwin.txt - # -r requirements/darwin.txt + # -r requirements/base.txt # etcd3-py pyparsing==3.0.9 # via junos-eznc @@ -392,7 +390,7 @@ pytest==7.3.2 python-dateutil==2.8.2 # via # -c requirements/static/ci/../pkg/py3.9/darwin.txt - # -r requirements/darwin.txt + # -r requirements/base.txt # botocore # croniter # kubernetes @@ -403,7 +401,7 @@ python-etcd==0.4.5 python-gnupg==0.5.0 # via # -c requirements/static/ci/../pkg/py3.9/darwin.txt - # -r requirements/darwin.txt + # -r requirements/base.txt pytz==2023.3 # via # -c requirements/static/ci/../pkg/py3.9/darwin.txt @@ -460,7 +458,7 @@ semantic-version==2.10.0 setproctitle==1.3.2 # via # -c requirements/static/ci/../pkg/py3.9/darwin.txt - # -r requirements/darwin.txt + # -r requirements/base.txt six==1.16.0 # via # -c requirements/static/ci/../pkg/py3.9/darwin.txt @@ -500,7 +498,7 @@ textfsm==1.1.3 timelib==0.3.0 # via # -c requirements/static/ci/../pkg/py3.9/darwin.txt - # -r requirements/darwin.txt + # -r requirements/base.txt toml==0.10.2 # via -r requirements/static/ci/common.in tomli==2.0.1 @@ -542,11 +540,11 @@ virtualenv==20.23.0 # via # -r requirements/static/ci/common.in # pytest-salt-factories -vultr==1.0.1 +vultr==1.0.1 ; sys_platform == "darwin" # via # -c requirements/static/ci/../pkg/py3.9/darwin.txt - # -r requirements/darwin.txt -watchdog==0.10.3 + # -r requirements/base.txt +watchdog==3.0.0 # via -r requirements/static/ci/common.in websocket-client==0.40.0 # via @@ -572,6 +570,10 @@ zc.lockfile==3.0.post1 # via # -c requirements/static/ci/../pkg/py3.9/darwin.txt # cherrypy +zipp==3.16.2 + # via + # -c requirements/static/ci/../pkg/py3.9/darwin.txt + # importlib-metadata # The following packages are considered to be unsafe in a requirements file: # setuptools diff --git a/requirements/static/ci/py3.9/docs.txt b/requirements/static/ci/py3.9/docs.txt index 286e6b441d4..767a22dcf08 100644 --- a/requirements/static/ci/py3.9/docs.txt +++ b/requirements/static/ci/py3.9/docs.txt @@ -164,7 +164,7 @@ zc.lockfile==3.0.post1 # via # -c requirements/static/ci/py3.9/linux.txt # cherrypy -zipp==3.15.0 +zipp==3.16.2 # via # -c requirements/static/ci/py3.9/linux.txt # importlib-metadata diff --git a/requirements/static/ci/py3.9/freebsd.txt b/requirements/static/ci/py3.9/freebsd.txt index a83fafbf3c6..bb439e82d60 100644 --- a/requirements/static/ci/py3.9/freebsd.txt +++ b/requirements/static/ci/py3.9/freebsd.txt @@ -77,8 +77,8 @@ cheroot==10.0.0 cherrypy==18.8.0 # via # -c requirements/static/ci/../pkg/py3.9/freebsd.txt + # -r requirements/base.txt # -r requirements/static/ci/common.in - # -r requirements/static/pkg/freebsd.in click==8.1.3 # via geomet clustershell==1.9.1 @@ -87,13 +87,12 @@ contextvars==2.4 # via # -c requirements/static/ci/../pkg/py3.9/freebsd.txt # -r requirements/base.txt -croniter==0.3.29 ; sys_platform != "win32" +croniter==1.3.15 ; sys_platform != "win32" # via -r requirements/static/ci/common.in cryptography==41.0.4 # via # -c requirements/static/ci/../pkg/py3.9/freebsd.txt - # -r requirements/crypto.txt - # -r requirements/static/pkg/freebsd.in + # -r requirements/base.txt # etcd3-py # moto # paramiko @@ -105,7 +104,6 @@ distro==1.8.0 # via # -c requirements/static/ci/../pkg/py3.9/freebsd.txt # -r requirements/base.txt - # -r requirements/static/pkg/freebsd.in # pytest-skip-markers dnspython==2.3.0 # via @@ -154,7 +152,7 @@ immutables==0.15 importlib-metadata==6.6.0 # via # -c requirements/static/ci/../pkg/py3.9/freebsd.txt - # -r requirements/static/pkg/freebsd.in + # -r requirements/base.txt inflect==6.0.4 # via # -c requirements/static/ci/../pkg/py3.9/freebsd.txt @@ -336,7 +334,7 @@ pynacl==1.5.0 pyopenssl==23.2.0 # via # -c requirements/static/ci/../pkg/py3.9/freebsd.txt - # -r requirements/static/pkg/freebsd.in + # -r requirements/base.txt # etcd3-py pyparsing==3.0.9 # via junos-eznc @@ -384,7 +382,7 @@ pytest==7.3.2 python-dateutil==2.8.2 # via # -c requirements/static/ci/../pkg/py3.9/freebsd.txt - # -r requirements/static/pkg/freebsd.in + # -r requirements/base.txt # botocore # croniter # kubernetes @@ -395,7 +393,7 @@ python-etcd==0.4.5 python-gnupg==0.5.0 # via # -c requirements/static/ci/../pkg/py3.9/freebsd.txt - # -r requirements/static/pkg/freebsd.in + # -r requirements/base.txt pytz==2023.3 # via # -c requirements/static/ci/../pkg/py3.9/freebsd.txt @@ -451,7 +449,7 @@ semantic-version==2.10.0 setproctitle==1.3.2 # via # -c requirements/static/ci/../pkg/py3.9/freebsd.txt - # -r requirements/static/pkg/freebsd.in + # -r requirements/base.txt six==1.16.0 # via # -c requirements/static/ci/../pkg/py3.9/freebsd.txt @@ -490,7 +488,7 @@ textfsm==1.1.3 timelib==0.3.0 # via # -c requirements/static/ci/../pkg/py3.9/freebsd.txt - # -r requirements/static/pkg/freebsd.in + # -r requirements/base.txt toml==0.10.2 # via -r requirements/static/ci/common.in tomli==2.0.1 @@ -558,7 +556,7 @@ zc.lockfile==3.0.post1 # via # -c requirements/static/ci/../pkg/py3.9/freebsd.txt # cherrypy -zipp==3.15.0 +zipp==3.16.2 # via # -c requirements/static/ci/../pkg/py3.9/freebsd.txt # importlib-metadata diff --git a/requirements/static/ci/py3.9/linux.txt b/requirements/static/ci/py3.9/linux.txt index ae024acf80f..3cdcf4b42a3 100644 --- a/requirements/static/ci/py3.9/linux.txt +++ b/requirements/static/ci/py3.9/linux.txt @@ -91,8 +91,8 @@ cheroot==10.0.0 cherrypy==18.8.0 # via # -c requirements/static/ci/../pkg/py3.9/linux.txt + # -r requirements/base.txt # -r requirements/static/ci/common.in - # -r requirements/static/pkg/linux.in click==8.1.3 # via geomet clustershell==1.9.1 @@ -101,13 +101,12 @@ contextvars==2.4 # via # -c requirements/static/ci/../pkg/py3.9/linux.txt # -r requirements/base.txt -croniter==0.3.29 ; sys_platform != "win32" +croniter==1.3.15 ; sys_platform != "win32" # via -r requirements/static/ci/common.in cryptography==41.0.4 # via # -c requirements/static/ci/../pkg/py3.9/linux.txt - # -r requirements/crypto.txt - # -r requirements/static/pkg/linux.in + # -r requirements/base.txt # ansible-core # etcd3-py # moto @@ -178,7 +177,7 @@ immutables==0.15 importlib-metadata==6.6.0 # via # -c requirements/static/ci/../pkg/py3.9/linux.txt - # -r requirements/static/pkg/linux.in + # -r requirements/base.txt importlib-resources==5.0.7 # via ansible-core inflect==6.0.4 @@ -372,7 +371,7 @@ pynacl==1.5.0 pyopenssl==23.2.0 # via # -c requirements/static/ci/../pkg/py3.9/linux.txt - # -r requirements/static/pkg/linux.in + # -r requirements/base.txt # etcd3-py pyparsing==3.0.9 # via junos-eznc @@ -422,7 +421,7 @@ python-consul==1.1.0 python-dateutil==2.8.2 # via # -c requirements/static/ci/../pkg/py3.9/linux.txt - # -r requirements/static/pkg/linux.in + # -r requirements/base.txt # botocore # croniter # kubernetes @@ -433,7 +432,7 @@ python-etcd==0.4.5 python-gnupg==0.5.0 # via # -c requirements/static/ci/../pkg/py3.9/linux.txt - # -r requirements/static/pkg/linux.in + # -r requirements/base.txt python-telegram-bot==20.3 # via -r requirements/static/ci/linux.in pytz==2023.3 @@ -487,10 +486,10 @@ responses==0.23.1 # via moto rfc3987==1.3.8 # via -r requirements/static/ci/common.in -rpm-vercmp==0.1.2 +rpm-vercmp==0.1.2 ; sys_platform == "linux" # via # -c requirements/static/ci/../pkg/py3.9/linux.txt - # -r requirements/static/pkg/linux.in + # -r requirements/base.txt rsa==4.9 # via google-auth s3transfer==0.6.1 @@ -505,7 +504,7 @@ semantic-version==2.10.0 setproctitle==1.3.2 # via # -c requirements/static/ci/../pkg/py3.9/linux.txt - # -r requirements/static/pkg/linux.in + # -r requirements/base.txt six==1.16.0 # via # -c requirements/static/ci/../pkg/py3.9/linux.txt @@ -554,7 +553,7 @@ textfsm==1.1.3 timelib==0.3.0 # via # -c requirements/static/ci/../pkg/py3.9/linux.txt - # -r requirements/static/pkg/linux.in + # -r requirements/base.txt toml==0.10.2 # via -r requirements/static/ci/common.in tomli==2.0.1 @@ -624,7 +623,7 @@ zc.lockfile==3.0.post1 # via # -c requirements/static/ci/../pkg/py3.9/linux.txt # cherrypy -zipp==3.15.0 +zipp==3.16.2 # via # -c requirements/static/ci/../pkg/py3.9/linux.txt # importlib-metadata diff --git a/requirements/static/ci/py3.9/windows.txt b/requirements/static/ci/py3.9/windows.txt index 938afff343b..bffecdb853f 100644 --- a/requirements/static/ci/py3.9/windows.txt +++ b/requirements/static/ci/py3.9/windows.txt @@ -44,14 +44,12 @@ certifi==2023.07.22 # via # -c requirements/static/ci/../pkg/py3.9/windows.txt # -r requirements/static/ci/common.in - # -r requirements/windows.txt # kubernetes # requests cffi==1.14.6 # via # -c requirements/static/ci/../pkg/py3.9/windows.txt # -r requirements/static/ci/common.in - # -r requirements/windows.txt # clr-loader # cryptography # pygit2 @@ -70,8 +68,8 @@ cheroot==10.0.0 cherrypy==18.8.0 # via # -c requirements/static/ci/../pkg/py3.9/windows.txt + # -r requirements/base.txt # -r requirements/static/ci/common.in - # -r requirements/windows.txt click==8.1.3 # via geomet clr-loader==0.2.4 @@ -91,8 +89,7 @@ contextvars==2.4 cryptography==41.0.4 # via # -c requirements/static/ci/../pkg/py3.9/windows.txt - # -r requirements/crypto.txt - # -r requirements/windows.txt + # -r requirements/base.txt # etcd3-py # moto # pyopenssl @@ -133,11 +130,11 @@ gitdb==4.0.10 # via # -c requirements/static/ci/../pkg/py3.9/windows.txt # gitpython -gitpython==3.1.40 +gitpython==3.1.40 ; sys_platform == "win32" or sys_platform == "darwin" # via # -c requirements/static/ci/../pkg/py3.9/windows.txt + # -r requirements/base.txt # -r requirements/static/ci/common.in - # -r requirements/windows.txt google-auth==2.19.1 # via kubernetes idna==3.4 @@ -153,7 +150,7 @@ immutables==0.15 importlib-metadata==6.6.0 # via # -c requirements/static/ci/../pkg/py3.9/windows.txt - # -r requirements/windows.txt + # -r requirements/base.txt inflect==6.0.4 # via # -c requirements/static/ci/../pkg/py3.9/windows.txt @@ -204,10 +201,10 @@ looseversion==1.2.0 # via # -c requirements/static/ci/../pkg/py3.9/windows.txt # -r requirements/base.txt -lxml==4.9.2 +lxml==4.9.2 ; sys_platform == "win32" # via # -c requirements/static/ci/../pkg/py3.9/windows.txt - # -r requirements/windows.txt + # -r requirements/base.txt # xmldiff mako==1.2.4 # via -r requirements/static/ci/common.in @@ -270,8 +267,6 @@ pyasn1-modules==0.3.0 # via google-auth pyasn1==0.4.8 # via - # -c requirements/static/ci/../pkg/py3.9/windows.txt - # -r requirements/windows.txt # pyasn1-modules # rsa pycparser==2.21 @@ -288,20 +283,20 @@ pydantic==1.10.8 # inflect pygit2==1.13.1 # via -r requirements/static/ci/windows.in -pymssql==2.2.7 +pymssql==2.2.7 ; sys_platform == "win32" # via # -c requirements/static/ci/../pkg/py3.9/windows.txt - # -r requirements/windows.txt -pymysql==1.1.0 + # -r requirements/base.txt +pymysql==1.1.0 ; sys_platform == "win32" # via # -c requirements/static/ci/../pkg/py3.9/windows.txt - # -r requirements/windows.txt + # -r requirements/base.txt pynacl==1.5.0 # via -r requirements/static/ci/common.in pyopenssl==23.2.0 # via # -c requirements/static/ci/../pkg/py3.9/windows.txt - # -r requirements/windows.txt + # -r requirements/base.txt # etcd3-py pyrsistent==0.19.3 # via jsonschema @@ -345,7 +340,7 @@ pytest==7.3.2 python-dateutil==2.8.2 # via # -c requirements/static/ci/../pkg/py3.9/windows.txt - # -r requirements/windows.txt + # -r requirements/base.txt # botocore # kubernetes # moto @@ -354,21 +349,21 @@ python-etcd==0.4.5 python-gnupg==0.5.0 # via # -c requirements/static/ci/../pkg/py3.9/windows.txt - # -r requirements/windows.txt -pythonnet==3.0.1 + # -r requirements/base.txt +pythonnet==3.0.1 ; sys_platform == "win32" # via # -c requirements/static/ci/../pkg/py3.9/windows.txt - # -r requirements/windows.txt + # -r requirements/base.txt pytz==2023.3 # via # -c requirements/static/ci/../pkg/py3.9/windows.txt # tempora pyvmomi==8.0.1.0.1 # via -r requirements/static/ci/common.in -pywin32==306 +pywin32==306 ; sys_platform == "win32" # via # -c requirements/static/ci/../pkg/py3.9/windows.txt - # -r requirements/windows.txt + # -r requirements/base.txt # cherrypy # docker # pytest-skip-markers @@ -396,7 +391,6 @@ requests==2.31.0 # -c requirements/static/ci/../pkg/py3.9/windows.txt # -r requirements/base.txt # -r requirements/static/ci/common.in - # -r requirements/windows.txt # docker # etcd3-py # kubernetes @@ -419,7 +413,7 @@ semantic-version==2.10.0 setproctitle==1.3.2 # via # -c requirements/static/ci/../pkg/py3.9/windows.txt - # -r requirements/windows.txt + # -r requirements/base.txt six==1.15.0 # via # -c requirements/static/ci/../pkg/py3.9/windows.txt @@ -450,7 +444,7 @@ tempora==5.3.0 timelib==0.3.0 # via # -c requirements/static/ci/../pkg/py3.9/windows.txt - # -r requirements/windows.txt + # -r requirements/base.txt toml==0.10.2 # via -r requirements/static/ci/common.in tomli==2.0.1 @@ -470,7 +464,6 @@ typing-extensions==4.8.0 urllib3==1.26.18 # via # -c requirements/static/ci/../pkg/py3.9/windows.txt - # -r requirements/windows.txt # botocore # docker # google-auth @@ -494,14 +487,10 @@ werkzeug==3.0.1 # via # moto # pytest-httpserver -wheel==0.38.4 +wmi==1.5.1 ; sys_platform == "win32" # via # -c requirements/static/ci/../pkg/py3.9/windows.txt - # -r requirements/windows.txt -wmi==1.5.1 - # via - # -c requirements/static/ci/../pkg/py3.9/windows.txt - # -r requirements/windows.txt + # -r requirements/base.txt xmldiff==2.6.3 # via -r requirements/static/ci/common.in xmltodict==0.13.0 @@ -516,7 +505,7 @@ zc.lockfile==3.0.post1 # via # -c requirements/static/ci/../pkg/py3.9/windows.txt # cherrypy -zipp==3.15.0 +zipp==3.16.2 # via # -c requirements/static/ci/../pkg/py3.9/windows.txt # importlib-metadata diff --git a/requirements/static/pkg/darwin.in b/requirements/static/pkg/darwin.in index cab131bae5b..ba5ea19e993 100644 --- a/requirements/static/pkg/darwin.in +++ b/requirements/static/pkg/darwin.in @@ -1,2 +1,3 @@ # This file only exists to trigger the right static compiled requirements destination -# Don't add any requirements here, add them in requirements/darwin.txt +# Don't add any requirements here, add them in requirements/base.txt +# If they are macOS specific, place "; sys_platform == 'darwin'" in front of the requirement. diff --git a/requirements/static/pkg/freebsd.in b/requirements/static/pkg/freebsd.in index c89ea0dccde..15509d7a683 100644 --- a/requirements/static/pkg/freebsd.in +++ b/requirements/static/pkg/freebsd.in @@ -1,11 +1,2 @@ # This file only exists to trigger the right static compiled requirements destination # Any non hard dependencies of Salt for FreeBSD can go here -cherrypy -cryptography>=41.0.3 -pyopenssl>=23.2.0 -python-dateutil>=2.8.0 -python-gnupg>=0.4.4 -setproctitle>=1.2.3 -timelib>=0.2.5 -distro>=1.3.0 -importlib-metadata>=3.3.0 diff --git a/requirements/static/pkg/linux.in b/requirements/static/pkg/linux.in index bd8396653da..4f41ec7c3c5 100644 --- a/requirements/static/pkg/linux.in +++ b/requirements/static/pkg/linux.in @@ -1,11 +1,3 @@ # This file only exists to trigger the right static compiled requirements destination. -# Any non hard dependencies of Salt for linux can go here -cherrypy -pyopenssl>=23.2.0 -python-dateutil>=2.8.0 -python-gnupg>=0.4.4 -rpm-vercmp -setproctitle>=1.2.3 -timelib>=0.2.5 -importlib-metadata>=3.3.0 -cryptography>=41.0.3 +# Don't add any requirements here, add them in requirements/base.txt +# If they are linux specific, place "; sys_platform == 'linux'" in front of the requirement. diff --git a/requirements/static/pkg/py3.10/darwin.txt b/requirements/static/pkg/py3.10/darwin.txt index 729320f336c..977290a6e9c 100644 --- a/requirements/static/pkg/py3.10/darwin.txt +++ b/requirements/static/pkg/py3.10/darwin.txt @@ -4,8 +4,8 @@ # # pip-compile --no-emit-index-url --output-file=requirements/static/pkg/py3.10/darwin.txt requirements/darwin.txt requirements/static/pkg/darwin.in # -apache-libcloud==3.7.0 - # via -r requirements/darwin.txt +apache-libcloud==3.7.0 ; sys_platform == "darwin" + # via -r requirements/base.txt autocommand==2.2.2 # via jaraco.text certifi==2023.07.22 @@ -17,26 +17,25 @@ charset-normalizer==3.2.0 cheroot==10.0.0 # via cherrypy cherrypy==18.8.0 - # via -r requirements/darwin.txt + # via -r requirements/base.txt contextvars==2.4 # via -r requirements/base.txt cryptography==41.0.4 # via - # -r requirements/crypto.txt - # -r requirements/darwin.txt + # -r requirements/base.txt # pyopenssl distro==1.8.0 # via -r requirements/base.txt gitdb==4.0.10 # via gitpython -gitpython==3.1.40 - # via -r requirements/darwin.txt +gitpython==3.1.40 ; sys_platform == "win32" or sys_platform == "darwin" + # via -r requirements/base.txt idna==3.4 - # via - # -r requirements/darwin.txt - # requests + # via requests immutables==0.15 # via contextvars +importlib-metadata==6.6.0 + # via -r requirements/base.txt inflect==6.0.4 # via jaraco.text jaraco.collections==4.1.0 @@ -54,8 +53,8 @@ jinja2==3.1.2 # via -r requirements/base.txt jmespath==1.0.1 # via -r requirements/base.txt -linode-python==1.1.1 - # via -r requirements/darwin.txt +linode-python==1.1.1 ; sys_platform == "darwin" + # via -r requirements/base.txt looseversion==1.2.0 # via -r requirements/base.txt markupsafe==2.1.2 @@ -76,8 +75,6 @@ portend==3.1.0 # via cherrypy psutil==5.9.5 # via -r requirements/base.txt -pyasn1==0.4.8 - # via -r requirements/darwin.txt pycparser==2.21 # via cffi pycryptodomex==3.9.8 @@ -85,11 +82,11 @@ pycryptodomex==3.9.8 pydantic==1.10.8 # via inflect pyopenssl==23.2.0 - # via -r requirements/darwin.txt + # via -r requirements/base.txt python-dateutil==2.8.2 - # via -r requirements/darwin.txt + # via -r requirements/base.txt python-gnupg==0.5.0 - # via -r requirements/darwin.txt + # via -r requirements/base.txt pytz==2023.3 # via tempora pyyaml==6.0.1 @@ -102,7 +99,7 @@ requests==2.31.0 # apache-libcloud # vultr setproctitle==1.3.2 - # via -r requirements/darwin.txt + # via -r requirements/base.txt six==1.16.0 # via python-dateutil smmap==5.0.0 @@ -110,17 +107,19 @@ smmap==5.0.0 tempora==5.3.0 # via portend timelib==0.3.0 - # via -r requirements/darwin.txt + # via -r requirements/base.txt tornado==6.3.3 # via -r requirements/base.txt typing-extensions==4.8.0 # via pydantic urllib3==1.26.18 # via requests -vultr==1.0.1 - # via -r requirements/darwin.txt +vultr==1.0.1 ; sys_platform == "darwin" + # via -r requirements/base.txt zc.lockfile==3.0.post1 # via cherrypy +zipp==3.16.2 + # via importlib-metadata # The following packages are considered to be unsafe in a requirements file: # setuptools diff --git a/requirements/static/pkg/py3.10/freebsd.txt b/requirements/static/pkg/py3.10/freebsd.txt index 650b425e99e..fdf1dae044b 100644 --- a/requirements/static/pkg/py3.10/freebsd.txt +++ b/requirements/static/pkg/py3.10/freebsd.txt @@ -15,24 +15,21 @@ charset-normalizer==3.2.0 cheroot==10.0.0 # via cherrypy cherrypy==18.8.0 - # via -r requirements/static/pkg/freebsd.in + # via -r requirements/base.txt contextvars==2.4 # via -r requirements/base.txt cryptography==41.0.4 # via - # -r requirements/crypto.txt - # -r requirements/static/pkg/freebsd.in + # -r requirements/base.txt # pyopenssl distro==1.8.0 - # via - # -r requirements/base.txt - # -r requirements/static/pkg/freebsd.in + # via -r requirements/base.txt idna==3.4 # via requests immutables==0.15 # via contextvars importlib-metadata==6.6.0 - # via -r requirements/static/pkg/freebsd.in + # via -r requirements/base.txt inflect==6.0.4 # via jaraco.text jaraco.collections==4.1.0 @@ -77,11 +74,11 @@ pycryptodomex==3.9.8 pydantic==1.10.8 # via inflect pyopenssl==23.2.0 - # via -r requirements/static/pkg/freebsd.in + # via -r requirements/base.txt python-dateutil==2.8.2 - # via -r requirements/static/pkg/freebsd.in + # via -r requirements/base.txt python-gnupg==0.5.0 - # via -r requirements/static/pkg/freebsd.in + # via -r requirements/base.txt pytz==2023.3 # via tempora pyyaml==6.0.1 @@ -91,13 +88,13 @@ pyzmq==25.1.0 requests==2.31.0 # via -r requirements/base.txt setproctitle==1.3.2 - # via -r requirements/static/pkg/freebsd.in + # via -r requirements/base.txt six==1.16.0 # via python-dateutil tempora==5.3.0 # via portend timelib==0.3.0 - # via -r requirements/static/pkg/freebsd.in + # via -r requirements/base.txt tornado==6.3.3 # via -r requirements/base.txt typing-extensions==4.8.0 @@ -106,7 +103,7 @@ urllib3==1.26.18 # via requests zc.lockfile==3.0.post1 # via cherrypy -zipp==3.15.0 +zipp==3.16.2 # via importlib-metadata # The following packages are considered to be unsafe in a requirements file: diff --git a/requirements/static/pkg/py3.10/linux.txt b/requirements/static/pkg/py3.10/linux.txt index 995f431042e..3dfac41d889 100644 --- a/requirements/static/pkg/py3.10/linux.txt +++ b/requirements/static/pkg/py3.10/linux.txt @@ -15,13 +15,12 @@ charset-normalizer==3.2.0 cheroot==10.0.0 # via cherrypy cherrypy==18.8.0 - # via -r requirements/static/pkg/linux.in + # via -r requirements/base.txt contextvars==2.4 # via -r requirements/base.txt cryptography==41.0.4 # via - # -r requirements/crypto.txt - # -r requirements/static/pkg/linux.in + # -r requirements/base.txt # pyopenssl distro==1.8.0 # via -r requirements/base.txt @@ -30,7 +29,7 @@ idna==3.4 immutables==0.15 # via contextvars importlib-metadata==6.6.0 - # via -r requirements/static/pkg/linux.in + # via -r requirements/base.txt inflect==6.0.4 # via jaraco.text jaraco.collections==4.1.0 @@ -75,11 +74,11 @@ pycryptodomex==3.9.8 pydantic==1.10.8 # via inflect pyopenssl==23.2.0 - # via -r requirements/static/pkg/linux.in + # via -r requirements/base.txt python-dateutil==2.8.2 - # via -r requirements/static/pkg/linux.in + # via -r requirements/base.txt python-gnupg==0.5.0 - # via -r requirements/static/pkg/linux.in + # via -r requirements/base.txt pytz==2023.3 # via tempora pyyaml==6.0.1 @@ -88,16 +87,16 @@ pyzmq==25.1.0 # via -r requirements/zeromq.txt requests==2.31.0 # via -r requirements/base.txt -rpm-vercmp==0.1.2 - # via -r requirements/static/pkg/linux.in +rpm-vercmp==0.1.2 ; sys_platform == "linux" + # via -r requirements/base.txt setproctitle==1.3.2 - # via -r requirements/static/pkg/linux.in + # via -r requirements/base.txt six==1.16.0 # via python-dateutil tempora==5.3.0 # via portend timelib==0.3.0 - # via -r requirements/static/pkg/linux.in + # via -r requirements/base.txt tornado==6.3.3 # via -r requirements/base.txt typing-extensions==4.8.0 @@ -106,7 +105,7 @@ urllib3==1.26.18 # via requests zc.lockfile==3.0.post1 # via cherrypy -zipp==3.15.0 +zipp==3.16.2 # via importlib-metadata # The following packages are considered to be unsafe in a requirements file: diff --git a/requirements/static/pkg/py3.10/windows.txt b/requirements/static/pkg/py3.10/windows.txt index 45a492737c3..111b15b9e95 100644 --- a/requirements/static/pkg/py3.10/windows.txt +++ b/requirements/static/pkg/py3.10/windows.txt @@ -7,12 +7,9 @@ autocommand==2.2.2 # via jaraco.text certifi==2023.07.22 - # via - # -r requirements/windows.txt - # requests + # via requests cffi==1.14.6 # via - # -r requirements/windows.txt # clr-loader # cryptography charset-normalizer==3.2.0 @@ -20,28 +17,27 @@ charset-normalizer==3.2.0 cheroot==10.0.0 # via cherrypy cherrypy==18.8.0 - # via -r requirements/windows.txt + # via -r requirements/base.txt clr-loader==0.2.4 # via pythonnet contextvars==2.4 # via -r requirements/base.txt cryptography==41.0.4 # via - # -r requirements/crypto.txt - # -r requirements/windows.txt + # -r requirements/base.txt # pyopenssl distro==1.8.0 # via -r requirements/base.txt gitdb==4.0.10 # via gitpython -gitpython==3.1.40 - # via -r requirements/windows.txt +gitpython==3.1.40 ; sys_platform == "win32" or sys_platform == "darwin" + # via -r requirements/base.txt idna==3.4 # via requests immutables==0.15 # via contextvars importlib-metadata==6.6.0 - # via -r requirements/windows.txt + # via -r requirements/base.txt inflect==6.0.4 # via jaraco.text jaraco.collections==4.1.0 @@ -61,8 +57,8 @@ jmespath==1.0.1 # via -r requirements/base.txt looseversion==1.2.0 # via -r requirements/base.txt -lxml==4.9.2 - # via -r requirements/windows.txt +lxml==4.9.2 ; sys_platform == "win32" + # via -r requirements/base.txt markupsafe==2.1.2 # via # -r requirements/base.txt @@ -81,42 +77,38 @@ portend==3.1.0 # via cherrypy psutil==5.8.0 # via -r requirements/base.txt -pyasn1==0.4.8 - # via -r requirements/windows.txt pycparser==2.21 # via cffi pycryptodomex==3.9.8 # via -r requirements/crypto.txt pydantic==1.10.8 # via inflect -pymssql==2.2.7 - # via -r requirements/windows.txt -pymysql==1.1.0 - # via -r requirements/windows.txt +pymssql==2.2.7 ; sys_platform == "win32" + # via -r requirements/base.txt +pymysql==1.1.0 ; sys_platform == "win32" + # via -r requirements/base.txt pyopenssl==23.2.0 - # via -r requirements/windows.txt + # via -r requirements/base.txt python-dateutil==2.8.2 - # via -r requirements/windows.txt + # via -r requirements/base.txt python-gnupg==0.5.0 - # via -r requirements/windows.txt -pythonnet==3.0.1 - # via -r requirements/windows.txt + # via -r requirements/base.txt +pythonnet==3.0.1 ; sys_platform == "win32" + # via -r requirements/base.txt pytz==2023.3 # via tempora -pywin32==306 +pywin32==306 ; sys_platform == "win32" # via - # -r requirements/windows.txt + # -r requirements/base.txt # wmi pyyaml==6.0.1 # via -r requirements/base.txt pyzmq==25.1.0 # via -r requirements/zeromq.txt requests==2.31.0 - # via - # -r requirements/base.txt - # -r requirements/windows.txt + # via -r requirements/base.txt setproctitle==1.3.2 - # via -r requirements/windows.txt + # via -r requirements/base.txt six==1.15.0 # via python-dateutil smmap==5.0.0 @@ -124,22 +116,18 @@ smmap==5.0.0 tempora==5.3.0 # via portend timelib==0.3.0 - # via -r requirements/windows.txt + # via -r requirements/base.txt tornado==6.3.3 # via -r requirements/base.txt typing-extensions==4.8.0 # via pydantic urllib3==1.26.18 - # via - # -r requirements/windows.txt - # requests -wheel==0.38.4 - # via -r requirements/windows.txt -wmi==1.5.1 - # via -r requirements/windows.txt + # via requests +wmi==1.5.1 ; sys_platform == "win32" + # via -r requirements/base.txt zc.lockfile==3.0.post1 # via cherrypy -zipp==3.15.0 +zipp==3.16.2 # via importlib-metadata # The following packages are considered to be unsafe in a requirements file: diff --git a/requirements/static/pkg/py3.11/darwin.txt b/requirements/static/pkg/py3.11/darwin.txt index bfd3b5a99b0..7c4054c39ee 100644 --- a/requirements/static/pkg/py3.11/darwin.txt +++ b/requirements/static/pkg/py3.11/darwin.txt @@ -4,8 +4,8 @@ # # pip-compile --no-emit-index-url --output-file=requirements/static/pkg/py3.11/darwin.txt requirements/darwin.txt requirements/static/pkg/darwin.in # -apache-libcloud==3.7.0 - # via -r requirements/darwin.txt +apache-libcloud==3.7.0 ; sys_platform == "darwin" + # via -r requirements/base.txt autocommand==2.2.2 # via jaraco.text certifi==2023.07.22 @@ -17,26 +17,25 @@ charset-normalizer==3.2.0 cheroot==10.0.0 # via cherrypy cherrypy==18.8.0 - # via -r requirements/darwin.txt + # via -r requirements/base.txt contextvars==2.4 # via -r requirements/base.txt cryptography==41.0.4 # via - # -r requirements/crypto.txt - # -r requirements/darwin.txt + # -r requirements/base.txt # pyopenssl distro==1.8.0 # via -r requirements/base.txt gitdb==4.0.10 # via gitpython -gitpython==3.1.40 - # via -r requirements/darwin.txt +gitpython==3.1.40 ; sys_platform == "win32" or sys_platform == "darwin" + # via -r requirements/base.txt idna==3.4 - # via - # -r requirements/darwin.txt - # requests + # via requests immutables==0.15 # via contextvars +importlib-metadata==6.6.0 + # via -r requirements/base.txt inflect==6.0.4 # via jaraco.text jaraco.collections==4.1.0 @@ -54,8 +53,8 @@ jinja2==3.1.2 # via -r requirements/base.txt jmespath==1.0.1 # via -r requirements/base.txt -linode-python==1.1.1 - # via -r requirements/darwin.txt +linode-python==1.1.1 ; sys_platform == "darwin" + # via -r requirements/base.txt looseversion==1.2.0 # via -r requirements/base.txt markupsafe==2.1.2 @@ -76,8 +75,6 @@ portend==3.1.0 # via cherrypy psutil==5.9.5 # via -r requirements/base.txt -pyasn1==0.4.8 - # via -r requirements/darwin.txt pycparser==2.21 # via cffi pycryptodomex==3.9.8 @@ -85,11 +82,11 @@ pycryptodomex==3.9.8 pydantic==1.10.8 # via inflect pyopenssl==23.2.0 - # via -r requirements/darwin.txt + # via -r requirements/base.txt python-dateutil==2.8.2 - # via -r requirements/darwin.txt + # via -r requirements/base.txt python-gnupg==0.5.0 - # via -r requirements/darwin.txt + # via -r requirements/base.txt pytz==2023.3 # via tempora pyyaml==6.0.1 @@ -102,7 +99,7 @@ requests==2.31.0 # apache-libcloud # vultr setproctitle==1.3.2 - # via -r requirements/darwin.txt + # via -r requirements/base.txt six==1.16.0 # via python-dateutil smmap==5.0.0 @@ -110,17 +107,19 @@ smmap==5.0.0 tempora==5.3.0 # via portend timelib==0.3.0 - # via -r requirements/darwin.txt + # via -r requirements/base.txt tornado==6.3.3 # via -r requirements/base.txt typing-extensions==4.8.0 # via pydantic urllib3==1.26.18 # via requests -vultr==1.0.1 - # via -r requirements/darwin.txt +vultr==1.0.1 ; sys_platform == "darwin" + # via -r requirements/base.txt zc.lockfile==3.0.post1 # via cherrypy +zipp==3.16.2 + # via importlib-metadata # The following packages are considered to be unsafe in a requirements file: # setuptools diff --git a/requirements/static/pkg/py3.11/freebsd.txt b/requirements/static/pkg/py3.11/freebsd.txt index 219958e1367..daffdd6023e 100644 --- a/requirements/static/pkg/py3.11/freebsd.txt +++ b/requirements/static/pkg/py3.11/freebsd.txt @@ -15,24 +15,21 @@ charset-normalizer==3.2.0 cheroot==10.0.0 # via cherrypy cherrypy==18.8.0 - # via -r requirements/static/pkg/freebsd.in + # via -r requirements/base.txt contextvars==2.4 # via -r requirements/base.txt cryptography==41.0.4 # via - # -r requirements/crypto.txt - # -r requirements/static/pkg/freebsd.in + # -r requirements/base.txt # pyopenssl distro==1.8.0 - # via - # -r requirements/base.txt - # -r requirements/static/pkg/freebsd.in + # via -r requirements/base.txt idna==3.4 # via requests immutables==0.15 # via contextvars importlib-metadata==6.6.0 - # via -r requirements/static/pkg/freebsd.in + # via -r requirements/base.txt inflect==6.0.4 # via jaraco.text jaraco.collections==4.1.0 @@ -77,11 +74,11 @@ pycryptodomex==3.9.8 pydantic==1.10.8 # via inflect pyopenssl==23.2.0 - # via -r requirements/static/pkg/freebsd.in + # via -r requirements/base.txt python-dateutil==2.8.2 - # via -r requirements/static/pkg/freebsd.in + # via -r requirements/base.txt python-gnupg==0.5.0 - # via -r requirements/static/pkg/freebsd.in + # via -r requirements/base.txt pytz==2023.3 # via tempora pyyaml==6.0.1 @@ -91,13 +88,13 @@ pyzmq==25.1.0 requests==2.31.0 # via -r requirements/base.txt setproctitle==1.3.2 - # via -r requirements/static/pkg/freebsd.in + # via -r requirements/base.txt six==1.16.0 # via python-dateutil tempora==5.3.0 # via portend timelib==0.3.0 - # via -r requirements/static/pkg/freebsd.in + # via -r requirements/base.txt tornado==6.3.3 # via -r requirements/base.txt typing-extensions==4.8.0 @@ -106,7 +103,7 @@ urllib3==1.26.18 # via requests zc.lockfile==3.0.post1 # via cherrypy -zipp==3.15.0 +zipp==3.16.2 # via importlib-metadata # The following packages are considered to be unsafe in a requirements file: diff --git a/requirements/static/pkg/py3.11/linux.txt b/requirements/static/pkg/py3.11/linux.txt index 8756f9592c4..f042dadaf17 100644 --- a/requirements/static/pkg/py3.11/linux.txt +++ b/requirements/static/pkg/py3.11/linux.txt @@ -15,13 +15,12 @@ charset-normalizer==3.2.0 cheroot==10.0.0 # via cherrypy cherrypy==18.8.0 - # via -r requirements/static/pkg/linux.in + # via -r requirements/base.txt contextvars==2.4 # via -r requirements/base.txt cryptography==41.0.4 # via - # -r requirements/crypto.txt - # -r requirements/static/pkg/linux.in + # -r requirements/base.txt # pyopenssl distro==1.8.0 # via -r requirements/base.txt @@ -30,7 +29,7 @@ idna==3.4 immutables==0.15 # via contextvars importlib-metadata==6.6.0 - # via -r requirements/static/pkg/linux.in + # via -r requirements/base.txt inflect==6.0.4 # via jaraco.text jaraco.collections==4.1.0 @@ -75,11 +74,11 @@ pycryptodomex==3.9.8 pydantic==1.10.8 # via inflect pyopenssl==23.2.0 - # via -r requirements/static/pkg/linux.in + # via -r requirements/base.txt python-dateutil==2.8.2 - # via -r requirements/static/pkg/linux.in + # via -r requirements/base.txt python-gnupg==0.5.0 - # via -r requirements/static/pkg/linux.in + # via -r requirements/base.txt pytz==2023.3 # via tempora pyyaml==6.0.1 @@ -88,16 +87,16 @@ pyzmq==25.1.0 # via -r requirements/zeromq.txt requests==2.31.0 # via -r requirements/base.txt -rpm-vercmp==0.1.2 - # via -r requirements/static/pkg/linux.in +rpm-vercmp==0.1.2 ; sys_platform == "linux" + # via -r requirements/base.txt setproctitle==1.3.2 - # via -r requirements/static/pkg/linux.in + # via -r requirements/base.txt six==1.16.0 # via python-dateutil tempora==5.3.0 # via portend timelib==0.3.0 - # via -r requirements/static/pkg/linux.in + # via -r requirements/base.txt tornado==6.3.3 # via -r requirements/base.txt typing-extensions==4.8.0 @@ -106,7 +105,7 @@ urllib3==1.26.18 # via requests zc.lockfile==3.0.post1 # via cherrypy -zipp==3.15.0 +zipp==3.16.2 # via importlib-metadata # The following packages are considered to be unsafe in a requirements file: diff --git a/requirements/static/pkg/py3.11/windows.txt b/requirements/static/pkg/py3.11/windows.txt index 8233184abcb..770650d3a33 100644 --- a/requirements/static/pkg/py3.11/windows.txt +++ b/requirements/static/pkg/py3.11/windows.txt @@ -7,12 +7,9 @@ autocommand==2.2.2 # via jaraco.text certifi==2023.07.22 - # via - # -r requirements/windows.txt - # requests + # via requests cffi==1.14.6 # via - # -r requirements/windows.txt # clr-loader # cryptography charset-normalizer==3.2.0 @@ -20,28 +17,27 @@ charset-normalizer==3.2.0 cheroot==10.0.0 # via cherrypy cherrypy==18.8.0 - # via -r requirements/windows.txt + # via -r requirements/base.txt clr-loader==0.2.4 # via pythonnet contextvars==2.4 # via -r requirements/base.txt cryptography==41.0.4 # via - # -r requirements/crypto.txt - # -r requirements/windows.txt + # -r requirements/base.txt # pyopenssl distro==1.8.0 # via -r requirements/base.txt gitdb==4.0.10 # via gitpython -gitpython==3.1.40 - # via -r requirements/windows.txt +gitpython==3.1.40 ; sys_platform == "win32" or sys_platform == "darwin" + # via -r requirements/base.txt idna==3.4 # via requests immutables==0.15 # via contextvars importlib-metadata==6.6.0 - # via -r requirements/windows.txt + # via -r requirements/base.txt inflect==6.0.4 # via jaraco.text jaraco.collections==4.1.0 @@ -61,8 +57,8 @@ jmespath==1.0.1 # via -r requirements/base.txt looseversion==1.2.0 # via -r requirements/base.txt -lxml==4.9.2 - # via -r requirements/windows.txt +lxml==4.9.2 ; sys_platform == "win32" + # via -r requirements/base.txt markupsafe==2.1.2 # via # -r requirements/base.txt @@ -81,42 +77,38 @@ portend==3.1.0 # via cherrypy psutil==5.8.0 # via -r requirements/base.txt -pyasn1==0.4.8 - # via -r requirements/windows.txt pycparser==2.21 # via cffi pycryptodomex==3.9.8 # via -r requirements/crypto.txt pydantic==1.10.8 # via inflect -pymssql==2.2.7 - # via -r requirements/windows.txt -pymysql==1.1.0 - # via -r requirements/windows.txt +pymssql==2.2.7 ; sys_platform == "win32" + # via -r requirements/base.txt +pymysql==1.1.0 ; sys_platform == "win32" + # via -r requirements/base.txt pyopenssl==23.2.0 - # via -r requirements/windows.txt + # via -r requirements/base.txt python-dateutil==2.8.2 - # via -r requirements/windows.txt + # via -r requirements/base.txt python-gnupg==0.5.0 - # via -r requirements/windows.txt -pythonnet==3.0.1 - # via -r requirements/windows.txt + # via -r requirements/base.txt +pythonnet==3.0.1 ; sys_platform == "win32" + # via -r requirements/base.txt pytz==2023.3 # via tempora -pywin32==306 +pywin32==306 ; sys_platform == "win32" # via - # -r requirements/windows.txt + # -r requirements/base.txt # wmi pyyaml==6.0.1 # via -r requirements/base.txt pyzmq==25.1.0 # via -r requirements/zeromq.txt requests==2.31.0 - # via - # -r requirements/base.txt - # -r requirements/windows.txt + # via -r requirements/base.txt setproctitle==1.3.2 - # via -r requirements/windows.txt + # via -r requirements/base.txt six==1.15.0 # via python-dateutil smmap==5.0.0 @@ -124,22 +116,18 @@ smmap==5.0.0 tempora==5.3.0 # via portend timelib==0.3.0 - # via -r requirements/windows.txt + # via -r requirements/base.txt tornado==6.3.3 # via -r requirements/base.txt typing-extensions==4.8.0 # via pydantic urllib3==1.26.18 - # via - # -r requirements/windows.txt - # requests -wheel==0.38.4 - # via -r requirements/windows.txt -wmi==1.5.1 - # via -r requirements/windows.txt + # via requests +wmi==1.5.1 ; sys_platform == "win32" + # via -r requirements/base.txt zc.lockfile==3.0.post1 # via cherrypy -zipp==3.15.0 +zipp==3.16.2 # via importlib-metadata # The following packages are considered to be unsafe in a requirements file: diff --git a/requirements/static/pkg/py3.8/freebsd.txt b/requirements/static/pkg/py3.8/freebsd.txt index b172891671a..e7550ee7f08 100644 --- a/requirements/static/pkg/py3.8/freebsd.txt +++ b/requirements/static/pkg/py3.8/freebsd.txt @@ -15,24 +15,21 @@ charset-normalizer==3.2.0 cheroot==10.0.0 # via cherrypy cherrypy==18.8.0 - # via -r requirements/static/pkg/freebsd.in + # via -r requirements/base.txt contextvars==2.4 # via -r requirements/base.txt cryptography==41.0.4 # via - # -r requirements/crypto.txt - # -r requirements/static/pkg/freebsd.in + # -r requirements/base.txt # pyopenssl distro==1.8.0 - # via - # -r requirements/base.txt - # -r requirements/static/pkg/freebsd.in + # via -r requirements/base.txt idna==3.4 # via requests immutables==0.15 # via contextvars importlib-metadata==6.6.0 - # via -r requirements/static/pkg/freebsd.in + # via -r requirements/base.txt importlib-resources==5.12.0 # via jaraco.text inflect==6.0.4 @@ -79,11 +76,11 @@ pycryptodomex==3.9.8 pydantic==1.10.8 # via inflect pyopenssl==23.2.0 - # via -r requirements/static/pkg/freebsd.in + # via -r requirements/base.txt python-dateutil==2.8.2 - # via -r requirements/static/pkg/freebsd.in + # via -r requirements/base.txt python-gnupg==0.5.0 - # via -r requirements/static/pkg/freebsd.in + # via -r requirements/base.txt pytz==2023.3 # via tempora pyyaml==6.0.1 @@ -93,13 +90,13 @@ pyzmq==25.1.0 requests==2.31.0 # via -r requirements/base.txt setproctitle==1.3.2 - # via -r requirements/static/pkg/freebsd.in + # via -r requirements/base.txt six==1.16.0 # via python-dateutil tempora==5.3.0 # via portend timelib==0.3.0 - # via -r requirements/static/pkg/freebsd.in + # via -r requirements/base.txt tornado==6.3.3 # via -r requirements/base.txt typing-extensions==4.8.0 @@ -108,7 +105,7 @@ urllib3==1.26.18 # via requests zc.lockfile==3.0.post1 # via cherrypy -zipp==3.15.0 +zipp==3.16.2 # via # importlib-metadata # importlib-resources diff --git a/requirements/static/pkg/py3.8/linux.txt b/requirements/static/pkg/py3.8/linux.txt index e06b76dbf74..a3de491311f 100644 --- a/requirements/static/pkg/py3.8/linux.txt +++ b/requirements/static/pkg/py3.8/linux.txt @@ -15,13 +15,12 @@ charset-normalizer==3.2.0 cheroot==10.0.0 # via cherrypy cherrypy==18.8.0 - # via -r requirements/static/pkg/linux.in + # via -r requirements/base.txt contextvars==2.4 # via -r requirements/base.txt cryptography==41.0.4 # via - # -r requirements/crypto.txt - # -r requirements/static/pkg/linux.in + # -r requirements/base.txt # pyopenssl distro==1.8.0 # via -r requirements/base.txt @@ -30,7 +29,7 @@ idna==3.4 immutables==0.15 # via contextvars importlib-metadata==6.6.0 - # via -r requirements/static/pkg/linux.in + # via -r requirements/base.txt importlib-resources==5.12.0 # via jaraco.text inflect==6.0.4 @@ -77,11 +76,11 @@ pycryptodomex==3.9.8 pydantic==1.10.8 # via inflect pyopenssl==23.2.0 - # via -r requirements/static/pkg/linux.in + # via -r requirements/base.txt python-dateutil==2.8.2 - # via -r requirements/static/pkg/linux.in + # via -r requirements/base.txt python-gnupg==0.5.0 - # via -r requirements/static/pkg/linux.in + # via -r requirements/base.txt pytz==2023.3 # via tempora pyyaml==6.0.1 @@ -90,16 +89,16 @@ pyzmq==25.1.0 # via -r requirements/zeromq.txt requests==2.31.0 # via -r requirements/base.txt -rpm-vercmp==0.1.2 - # via -r requirements/static/pkg/linux.in +rpm-vercmp==0.1.2 ; sys_platform == "linux" + # via -r requirements/base.txt setproctitle==1.3.2 - # via -r requirements/static/pkg/linux.in + # via -r requirements/base.txt six==1.16.0 # via python-dateutil tempora==5.3.0 # via portend timelib==0.3.0 - # via -r requirements/static/pkg/linux.in + # via -r requirements/base.txt tornado==6.3.3 # via -r requirements/base.txt typing-extensions==4.8.0 @@ -108,7 +107,7 @@ urllib3==1.26.18 # via requests zc.lockfile==3.0.post1 # via cherrypy -zipp==3.15.0 +zipp==3.16.2 # via # importlib-metadata # importlib-resources diff --git a/requirements/static/pkg/py3.8/windows.txt b/requirements/static/pkg/py3.8/windows.txt index 21ec2c7957b..1785ac1341c 100644 --- a/requirements/static/pkg/py3.8/windows.txt +++ b/requirements/static/pkg/py3.8/windows.txt @@ -7,12 +7,9 @@ autocommand==2.2.2 # via jaraco.text certifi==2023.07.22 - # via - # -r requirements/windows.txt - # requests + # via requests cffi==1.14.6 # via - # -r requirements/windows.txt # clr-loader # cryptography charset-normalizer==3.2.0 @@ -20,28 +17,27 @@ charset-normalizer==3.2.0 cheroot==10.0.0 # via cherrypy cherrypy==18.8.0 - # via -r requirements/windows.txt + # via -r requirements/base.txt clr-loader==0.2.4 # via pythonnet contextvars==2.4 # via -r requirements/base.txt cryptography==41.0.4 # via - # -r requirements/crypto.txt - # -r requirements/windows.txt + # -r requirements/base.txt # pyopenssl distro==1.8.0 # via -r requirements/base.txt gitdb==4.0.10 # via gitpython -gitpython==3.1.40 - # via -r requirements/windows.txt +gitpython==3.1.40 ; sys_platform == "win32" or sys_platform == "darwin" + # via -r requirements/base.txt idna==3.4 # via requests immutables==0.15 # via contextvars importlib-metadata==6.6.0 - # via -r requirements/windows.txt + # via -r requirements/base.txt importlib-resources==5.12.0 # via jaraco.text inflect==6.0.4 @@ -63,8 +59,8 @@ jmespath==1.0.1 # via -r requirements/base.txt looseversion==1.2.0 # via -r requirements/base.txt -lxml==4.9.2 - # via -r requirements/windows.txt +lxml==4.9.2 ; sys_platform == "win32" + # via -r requirements/base.txt markupsafe==2.1.2 # via # -r requirements/base.txt @@ -83,31 +79,29 @@ portend==3.1.0 # via cherrypy psutil==5.8.0 # via -r requirements/base.txt -pyasn1==0.4.8 - # via -r requirements/windows.txt pycparser==2.21 # via cffi pycryptodomex==3.9.8 # via -r requirements/crypto.txt pydantic==1.10.8 # via inflect -pymssql==2.2.7 - # via -r requirements/windows.txt -pymysql==1.1.0 - # via -r requirements/windows.txt +pymssql==2.2.7 ; sys_platform == "win32" + # via -r requirements/base.txt +pymysql==1.1.0 ; sys_platform == "win32" + # via -r requirements/base.txt pyopenssl==23.2.0 - # via -r requirements/windows.txt + # via -r requirements/base.txt python-dateutil==2.8.2 - # via -r requirements/windows.txt + # via -r requirements/base.txt python-gnupg==0.5.0 - # via -r requirements/windows.txt -pythonnet==3.0.1 - # via -r requirements/windows.txt + # via -r requirements/base.txt +pythonnet==3.0.1 ; sys_platform == "win32" + # via -r requirements/base.txt pytz==2023.3 # via tempora -pywin32==306 +pywin32==306 ; sys_platform == "win32" # via - # -r requirements/windows.txt + # -r requirements/base.txt # cherrypy # wmi pyyaml==6.0.1 @@ -115,11 +109,9 @@ pyyaml==6.0.1 pyzmq==25.1.0 # via -r requirements/zeromq.txt requests==2.31.0 - # via - # -r requirements/base.txt - # -r requirements/windows.txt + # via -r requirements/base.txt setproctitle==1.3.2 - # via -r requirements/windows.txt + # via -r requirements/base.txt six==1.15.0 # via python-dateutil smmap==5.0.0 @@ -127,22 +119,18 @@ smmap==5.0.0 tempora==5.3.0 # via portend timelib==0.3.0 - # via -r requirements/windows.txt + # via -r requirements/base.txt tornado==6.3.3 # via -r requirements/base.txt typing-extensions==4.8.0 # via pydantic urllib3==1.26.18 - # via - # -r requirements/windows.txt - # requests -wheel==0.38.4 - # via -r requirements/windows.txt -wmi==1.5.1 - # via -r requirements/windows.txt + # via requests +wmi==1.5.1 ; sys_platform == "win32" + # via -r requirements/base.txt zc.lockfile==3.0.post1 # via cherrypy -zipp==3.15.0 +zipp==3.16.2 # via # importlib-metadata # importlib-resources diff --git a/requirements/static/pkg/py3.9/darwin.txt b/requirements/static/pkg/py3.9/darwin.txt index 70e390c7e51..6ffe69f8b07 100644 --- a/requirements/static/pkg/py3.9/darwin.txt +++ b/requirements/static/pkg/py3.9/darwin.txt @@ -4,8 +4,8 @@ # # pip-compile --no-emit-index-url --output-file=requirements/static/pkg/py3.9/darwin.txt requirements/darwin.txt requirements/static/pkg/darwin.in # -apache-libcloud==3.7.0 - # via -r requirements/darwin.txt +apache-libcloud==3.7.0 ; sys_platform == "darwin" + # via -r requirements/base.txt autocommand==2.2.2 # via jaraco.text certifi==2023.07.22 @@ -17,26 +17,25 @@ charset-normalizer==3.2.0 cheroot==10.0.0 # via cherrypy cherrypy==18.8.0 - # via -r requirements/darwin.txt + # via -r requirements/base.txt contextvars==2.4 # via -r requirements/base.txt cryptography==41.0.4 # via - # -r requirements/crypto.txt - # -r requirements/darwin.txt + # -r requirements/base.txt # pyopenssl distro==1.8.0 # via -r requirements/base.txt gitdb==4.0.10 # via gitpython -gitpython==3.1.40 - # via -r requirements/darwin.txt +gitpython==3.1.40 ; sys_platform == "win32" or sys_platform == "darwin" + # via -r requirements/base.txt idna==3.4 - # via - # -r requirements/darwin.txt - # requests + # via requests immutables==0.15 # via contextvars +importlib-metadata==6.6.0 + # via -r requirements/base.txt inflect==6.0.4 # via jaraco.text jaraco.collections==4.1.0 @@ -54,8 +53,8 @@ jinja2==3.1.2 # via -r requirements/base.txt jmespath==1.0.1 # via -r requirements/base.txt -linode-python==1.1.1 - # via -r requirements/darwin.txt +linode-python==1.1.1 ; sys_platform == "darwin" + # via -r requirements/base.txt looseversion==1.2.0 # via -r requirements/base.txt markupsafe==2.1.2 @@ -76,8 +75,6 @@ portend==3.1.0 # via cherrypy psutil==5.9.5 # via -r requirements/base.txt -pyasn1==0.4.8 - # via -r requirements/darwin.txt pycparser==2.21 # via cffi pycryptodomex==3.9.8 @@ -85,11 +82,11 @@ pycryptodomex==3.9.8 pydantic==1.10.8 # via inflect pyopenssl==23.2.0 - # via -r requirements/darwin.txt + # via -r requirements/base.txt python-dateutil==2.8.2 - # via -r requirements/darwin.txt + # via -r requirements/base.txt python-gnupg==0.5.0 - # via -r requirements/darwin.txt + # via -r requirements/base.txt pytz==2023.3 # via tempora pyyaml==6.0.1 @@ -102,7 +99,7 @@ requests==2.31.0 # apache-libcloud # vultr setproctitle==1.3.2 - # via -r requirements/darwin.txt + # via -r requirements/base.txt six==1.16.0 # via python-dateutil smmap==5.0.0 @@ -110,17 +107,19 @@ smmap==5.0.0 tempora==5.3.0 # via portend timelib==0.3.0 - # via -r requirements/darwin.txt + # via -r requirements/base.txt tornado==6.3.3 # via -r requirements/base.txt typing-extensions==4.8.0 # via pydantic urllib3==1.26.18 # via requests -vultr==1.0.1 - # via -r requirements/darwin.txt +vultr==1.0.1 ; sys_platform == "darwin" + # via -r requirements/base.txt zc.lockfile==3.0.post1 # via cherrypy +zipp==3.16.2 + # via importlib-metadata # The following packages are considered to be unsafe in a requirements file: # setuptools diff --git a/requirements/static/pkg/py3.9/freebsd.txt b/requirements/static/pkg/py3.9/freebsd.txt index 8e080c520a2..c3b84bb78c0 100644 --- a/requirements/static/pkg/py3.9/freebsd.txt +++ b/requirements/static/pkg/py3.9/freebsd.txt @@ -15,24 +15,21 @@ charset-normalizer==3.2.0 cheroot==10.0.0 # via cherrypy cherrypy==18.8.0 - # via -r requirements/static/pkg/freebsd.in + # via -r requirements/base.txt contextvars==2.4 # via -r requirements/base.txt cryptography==41.0.4 # via - # -r requirements/crypto.txt - # -r requirements/static/pkg/freebsd.in + # -r requirements/base.txt # pyopenssl distro==1.8.0 - # via - # -r requirements/base.txt - # -r requirements/static/pkg/freebsd.in + # via -r requirements/base.txt idna==3.4 # via requests immutables==0.15 # via contextvars importlib-metadata==6.6.0 - # via -r requirements/static/pkg/freebsd.in + # via -r requirements/base.txt inflect==6.0.4 # via jaraco.text jaraco.collections==4.1.0 @@ -77,11 +74,11 @@ pycryptodomex==3.9.8 pydantic==1.10.8 # via inflect pyopenssl==23.2.0 - # via -r requirements/static/pkg/freebsd.in + # via -r requirements/base.txt python-dateutil==2.8.2 - # via -r requirements/static/pkg/freebsd.in + # via -r requirements/base.txt python-gnupg==0.5.0 - # via -r requirements/static/pkg/freebsd.in + # via -r requirements/base.txt pytz==2023.3 # via tempora pyyaml==6.0.1 @@ -91,13 +88,13 @@ pyzmq==25.1.0 requests==2.31.0 # via -r requirements/base.txt setproctitle==1.3.2 - # via -r requirements/static/pkg/freebsd.in + # via -r requirements/base.txt six==1.16.0 # via python-dateutil tempora==5.3.0 # via portend timelib==0.3.0 - # via -r requirements/static/pkg/freebsd.in + # via -r requirements/base.txt tornado==6.3.3 # via -r requirements/base.txt typing-extensions==4.8.0 @@ -106,7 +103,7 @@ urllib3==1.26.18 # via requests zc.lockfile==3.0.post1 # via cherrypy -zipp==3.15.0 +zipp==3.16.2 # via importlib-metadata # The following packages are considered to be unsafe in a requirements file: diff --git a/requirements/static/pkg/py3.9/linux.txt b/requirements/static/pkg/py3.9/linux.txt index 13c10e9459d..8e16d07dbd9 100644 --- a/requirements/static/pkg/py3.9/linux.txt +++ b/requirements/static/pkg/py3.9/linux.txt @@ -15,13 +15,12 @@ charset-normalizer==3.2.0 cheroot==10.0.0 # via cherrypy cherrypy==18.8.0 - # via -r requirements/static/pkg/linux.in + # via -r requirements/base.txt contextvars==2.4 # via -r requirements/base.txt cryptography==41.0.4 # via - # -r requirements/crypto.txt - # -r requirements/static/pkg/linux.in + # -r requirements/base.txt # pyopenssl distro==1.8.0 # via -r requirements/base.txt @@ -30,7 +29,7 @@ idna==3.4 immutables==0.15 # via contextvars importlib-metadata==6.6.0 - # via -r requirements/static/pkg/linux.in + # via -r requirements/base.txt inflect==6.0.4 # via jaraco.text jaraco.collections==4.1.0 @@ -75,11 +74,11 @@ pycryptodomex==3.9.8 pydantic==1.10.8 # via inflect pyopenssl==23.2.0 - # via -r requirements/static/pkg/linux.in + # via -r requirements/base.txt python-dateutil==2.8.2 - # via -r requirements/static/pkg/linux.in + # via -r requirements/base.txt python-gnupg==0.5.0 - # via -r requirements/static/pkg/linux.in + # via -r requirements/base.txt pytz==2023.3 # via tempora pyyaml==6.0.1 @@ -88,16 +87,16 @@ pyzmq==25.1.0 # via -r requirements/zeromq.txt requests==2.31.0 # via -r requirements/base.txt -rpm-vercmp==0.1.2 - # via -r requirements/static/pkg/linux.in +rpm-vercmp==0.1.2 ; sys_platform == "linux" + # via -r requirements/base.txt setproctitle==1.3.2 - # via -r requirements/static/pkg/linux.in + # via -r requirements/base.txt six==1.16.0 # via python-dateutil tempora==5.3.0 # via portend timelib==0.3.0 - # via -r requirements/static/pkg/linux.in + # via -r requirements/base.txt tornado==6.3.3 # via -r requirements/base.txt typing-extensions==4.8.0 @@ -106,7 +105,7 @@ urllib3==1.26.18 # via requests zc.lockfile==3.0.post1 # via cherrypy -zipp==3.15.0 +zipp==3.16.2 # via importlib-metadata # The following packages are considered to be unsafe in a requirements file: diff --git a/requirements/static/pkg/py3.9/windows.txt b/requirements/static/pkg/py3.9/windows.txt index d3109afa3e0..f478bc1810d 100644 --- a/requirements/static/pkg/py3.9/windows.txt +++ b/requirements/static/pkg/py3.9/windows.txt @@ -7,12 +7,9 @@ autocommand==2.2.2 # via jaraco.text certifi==2023.07.22 - # via - # -r requirements/windows.txt - # requests + # via requests cffi==1.14.6 # via - # -r requirements/windows.txt # clr-loader # cryptography charset-normalizer==3.2.0 @@ -20,28 +17,27 @@ charset-normalizer==3.2.0 cheroot==10.0.0 # via cherrypy cherrypy==18.8.0 - # via -r requirements/windows.txt + # via -r requirements/base.txt clr-loader==0.2.4 # via pythonnet contextvars==2.4 # via -r requirements/base.txt cryptography==41.0.4 # via - # -r requirements/crypto.txt - # -r requirements/windows.txt + # -r requirements/base.txt # pyopenssl distro==1.8.0 # via -r requirements/base.txt gitdb==4.0.10 # via gitpython -gitpython==3.1.40 - # via -r requirements/windows.txt +gitpython==3.1.40 ; sys_platform == "win32" or sys_platform == "darwin" + # via -r requirements/base.txt idna==3.4 # via requests immutables==0.15 # via contextvars importlib-metadata==6.6.0 - # via -r requirements/windows.txt + # via -r requirements/base.txt inflect==6.0.4 # via jaraco.text jaraco.collections==4.1.0 @@ -61,8 +57,8 @@ jmespath==1.0.1 # via -r requirements/base.txt looseversion==1.2.0 # via -r requirements/base.txt -lxml==4.9.2 - # via -r requirements/windows.txt +lxml==4.9.2 ; sys_platform == "win32" + # via -r requirements/base.txt markupsafe==2.1.2 # via # -r requirements/base.txt @@ -81,31 +77,29 @@ portend==3.1.0 # via cherrypy psutil==5.8.0 # via -r requirements/base.txt -pyasn1==0.4.8 - # via -r requirements/windows.txt pycparser==2.21 # via cffi pycryptodomex==3.9.8 # via -r requirements/crypto.txt pydantic==1.10.8 # via inflect -pymssql==2.2.7 - # via -r requirements/windows.txt -pymysql==1.1.0 - # via -r requirements/windows.txt +pymssql==2.2.7 ; sys_platform == "win32" + # via -r requirements/base.txt +pymysql==1.1.0 ; sys_platform == "win32" + # via -r requirements/base.txt pyopenssl==23.2.0 - # via -r requirements/windows.txt + # via -r requirements/base.txt python-dateutil==2.8.2 - # via -r requirements/windows.txt + # via -r requirements/base.txt python-gnupg==0.5.0 - # via -r requirements/windows.txt -pythonnet==3.0.1 - # via -r requirements/windows.txt + # via -r requirements/base.txt +pythonnet==3.0.1 ; sys_platform == "win32" + # via -r requirements/base.txt pytz==2023.3 # via tempora -pywin32==306 +pywin32==306 ; sys_platform == "win32" # via - # -r requirements/windows.txt + # -r requirements/base.txt # cherrypy # wmi pyyaml==6.0.1 @@ -113,11 +107,9 @@ pyyaml==6.0.1 pyzmq==25.1.0 # via -r requirements/zeromq.txt requests==2.31.0 - # via - # -r requirements/base.txt - # -r requirements/windows.txt + # via -r requirements/base.txt setproctitle==1.3.2 - # via -r requirements/windows.txt + # via -r requirements/base.txt six==1.15.0 # via python-dateutil smmap==5.0.0 @@ -125,22 +117,18 @@ smmap==5.0.0 tempora==5.3.0 # via portend timelib==0.3.0 - # via -r requirements/windows.txt + # via -r requirements/base.txt tornado==6.3.3 # via -r requirements/base.txt typing-extensions==4.8.0 # via pydantic urllib3==1.26.18 - # via - # -r requirements/windows.txt - # requests -wheel==0.38.4 - # via -r requirements/windows.txt -wmi==1.5.1 - # via -r requirements/windows.txt + # via requests +wmi==1.5.1 ; sys_platform == "win32" + # via -r requirements/base.txt zc.lockfile==3.0.post1 # via cherrypy -zipp==3.15.0 +zipp==3.16.2 # via importlib-metadata # The following packages are considered to be unsafe in a requirements file: diff --git a/requirements/static/pkg/windows.in b/requirements/static/pkg/windows.in index 82a579db57e..83770a49f22 100644 --- a/requirements/static/pkg/windows.in +++ b/requirements/static/pkg/windows.in @@ -1,2 +1,3 @@ # This file only exists to trigger the right static compiled requirements destination -# Don't add any requirements here, add them in requirements/windows.txt +# Don't add any requirements here, add them in requirements/base.txt +# If they are windows specific, place "; sys_platform == 'win32'" in front of the requirement. diff --git a/requirements/windows.txt b/requirements/windows.txt index 81f44689c75..cf7f176b9f9 100644 --- a/requirements/windows.txt +++ b/requirements/windows.txt @@ -1,31 +1,5 @@ # Windows source distribution requirements +# Don't add any requirements here, add them in requirements/base.txt +# If they are windows specific, place "; sys_platform == 'win32'" in front of the requirement. -r zeromq.txt - -pywin32>=305 -wmi>=1.5.1 -pythonnet>=3.0.1 - -certifi>=2022.12.07 -cffi>=1.14.5 -cherrypy>=18.6.1 -gitpython>=3.1.37 -cryptography>=41.0.3 -lxml>=4.6.3 -pyasn1>=0.4.8 -pymssql>=2.2.1 -pymysql>=1.0.2 -pyopenssl>=23.2.0 -python-dateutil>=2.8.1 -python-gnupg>=0.4.7 -requests>=2.25.1 -setproctitle>=1.2.3 -timelib>=0.2.5 -urllib3>=1.26.5 -# Watchdog pulls in a GPL-3 package, argh, which cannot be shipped on the -# windows distribution package. -# -# watchdog>=2.1.3 -wheel>=0.38.1 - -importlib-metadata>=3.3.0 From d6b7d47430d97669b6554063feef30ffc532302d Mon Sep 17 00:00:00 2001 From: Pedro Algarvio Date: Tue, 31 Oct 2023 10:56:35 +0000 Subject: [PATCH 142/153] GitPython is no longer a base dependency for Windows and MacOS. The plan is to make pygit2 the base dependency before 3007.0 comes out. Signed-off-by: Pedro Algarvio --- requirements/base.txt | 3 --- requirements/static/ci/py3.10/darwin.txt | 15 ++++----------- requirements/static/ci/py3.10/windows.txt | 15 ++++----------- requirements/static/ci/py3.11/darwin.txt | 15 ++++----------- requirements/static/ci/py3.11/windows.txt | 15 ++++----------- requirements/static/ci/py3.8/windows.txt | 15 ++++----------- requirements/static/ci/py3.9/darwin.txt | 15 ++++----------- requirements/static/ci/py3.9/windows.txt | 15 ++++----------- requirements/static/pkg/py3.10/darwin.txt | 6 ------ requirements/static/pkg/py3.10/windows.txt | 6 ------ requirements/static/pkg/py3.11/darwin.txt | 6 ------ requirements/static/pkg/py3.11/windows.txt | 6 ------ requirements/static/pkg/py3.8/windows.txt | 6 ------ requirements/static/pkg/py3.9/darwin.txt | 6 ------ requirements/static/pkg/py3.9/windows.txt | 6 ------ 15 files changed, 28 insertions(+), 122 deletions(-) diff --git a/requirements/base.txt b/requirements/base.txt index ab4c93433fb..feb58338cb5 100644 --- a/requirements/base.txt +++ b/requirements/base.txt @@ -38,6 +38,3 @@ lxml>=4.6.3; sys_platform == 'win32' apache-libcloud>=2.4.0; sys_platform == 'darwin' linode-python>=1.1.1; sys_platform == 'darwin' vultr>=1.0.1; sys_platform == 'darwin' - -# From old windows.txt and darwin.txt requirements file -gitpython>=3.1.35; sys_platform == 'win32' or sys_platform == 'darwin' diff --git a/requirements/static/ci/py3.10/darwin.txt b/requirements/static/ci/py3.10/darwin.txt index f884660fae1..47a97e17a72 100644 --- a/requirements/static/ci/py3.10/darwin.txt +++ b/requirements/static/ci/py3.10/darwin.txt @@ -136,14 +136,9 @@ genshi==0.7.7 geomet==0.2.1.post1 # via cassandra-driver gitdb==4.0.10 - # via - # -c requirements/static/ci/../pkg/py3.10/darwin.txt - # gitpython -gitpython==3.1.40 ; sys_platform == "win32" or sys_platform == "darwin" - # via - # -c requirements/static/ci/../pkg/py3.10/darwin.txt - # -r requirements/base.txt - # -r requirements/static/ci/common.in + # via gitpython +gitpython==3.1.40 + # via -r requirements/static/ci/common.in google-auth==2.19.1 # via kubernetes hglib==2.6.2 @@ -479,9 +474,7 @@ six==1.16.0 # vcert # websocket-client smmap==5.0.0 - # via - # -c requirements/static/ci/../pkg/py3.10/darwin.txt - # gitdb + # via gitdb sqlparse==0.4.4 # via -r requirements/static/ci/common.in strict-rfc3339==0.7 diff --git a/requirements/static/ci/py3.10/windows.txt b/requirements/static/ci/py3.10/windows.txt index ff78ef6bae3..3651ed2dca3 100644 --- a/requirements/static/ci/py3.10/windows.txt +++ b/requirements/static/ci/py3.10/windows.txt @@ -127,14 +127,9 @@ genshi==0.7.7 geomet==0.2.1.post1 # via cassandra-driver gitdb==4.0.10 - # via - # -c requirements/static/ci/../pkg/py3.10/windows.txt - # gitpython -gitpython==3.1.40 ; sys_platform == "win32" or sys_platform == "darwin" - # via - # -c requirements/static/ci/../pkg/py3.10/windows.txt - # -r requirements/base.txt - # -r requirements/static/ci/common.in + # via gitpython +gitpython==3.1.40 + # via -r requirements/static/ci/common.in google-auth==2.19.1 # via kubernetes idna==3.4 @@ -429,9 +424,7 @@ six==1.15.0 # pywinrm # websocket-client smmap==5.0.0 - # via - # -c requirements/static/ci/../pkg/py3.10/windows.txt - # gitdb + # via gitdb sqlparse==0.4.4 # via -r requirements/static/ci/common.in strict-rfc3339==0.7 diff --git a/requirements/static/ci/py3.11/darwin.txt b/requirements/static/ci/py3.11/darwin.txt index f4dfd3f8495..6b235bc61e8 100644 --- a/requirements/static/ci/py3.11/darwin.txt +++ b/requirements/static/ci/py3.11/darwin.txt @@ -134,14 +134,9 @@ genshi==0.7.7 geomet==0.2.1.post1 # via cassandra-driver gitdb==4.0.10 - # via - # -c requirements/static/ci/../pkg/py3.11/darwin.txt - # gitpython -gitpython==3.1.40 ; sys_platform == "win32" or sys_platform == "darwin" - # via - # -c requirements/static/ci/../pkg/py3.11/darwin.txt - # -r requirements/base.txt - # -r requirements/static/ci/common.in + # via gitpython +gitpython==3.1.40 + # via -r requirements/static/ci/common.in google-auth==2.19.1 # via kubernetes hglib==2.6.2 @@ -477,9 +472,7 @@ six==1.16.0 # vcert # websocket-client smmap==5.0.0 - # via - # -c requirements/static/ci/../pkg/py3.11/darwin.txt - # gitdb + # via gitdb sqlparse==0.4.4 # via -r requirements/static/ci/common.in strict-rfc3339==0.7 diff --git a/requirements/static/ci/py3.11/windows.txt b/requirements/static/ci/py3.11/windows.txt index 368ed571402..099017171de 100644 --- a/requirements/static/ci/py3.11/windows.txt +++ b/requirements/static/ci/py3.11/windows.txt @@ -125,14 +125,9 @@ genshi==0.7.7 geomet==0.2.1.post1 # via cassandra-driver gitdb==4.0.10 - # via - # -c requirements/static/ci/../pkg/py3.11/windows.txt - # gitpython -gitpython==3.1.40 ; sys_platform == "win32" or sys_platform == "darwin" - # via - # -c requirements/static/ci/../pkg/py3.11/windows.txt - # -r requirements/base.txt - # -r requirements/static/ci/common.in + # via gitpython +gitpython==3.1.40 + # via -r requirements/static/ci/common.in google-auth==2.19.1 # via kubernetes idna==3.4 @@ -427,9 +422,7 @@ six==1.15.0 # pywinrm # websocket-client smmap==5.0.0 - # via - # -c requirements/static/ci/../pkg/py3.11/windows.txt - # gitdb + # via gitdb sqlparse==0.4.4 # via -r requirements/static/ci/common.in strict-rfc3339==0.7 diff --git a/requirements/static/ci/py3.8/windows.txt b/requirements/static/ci/py3.8/windows.txt index b3c8438642a..d24ec5d3135 100644 --- a/requirements/static/ci/py3.8/windows.txt +++ b/requirements/static/ci/py3.8/windows.txt @@ -127,14 +127,9 @@ genshi==0.7.7 geomet==0.2.1.post1 # via cassandra-driver gitdb==4.0.10 - # via - # -c requirements/static/ci/../pkg/py3.8/windows.txt - # gitpython -gitpython==3.1.40 ; sys_platform == "win32" or sys_platform == "darwin" - # via - # -c requirements/static/ci/../pkg/py3.8/windows.txt - # -r requirements/base.txt - # -r requirements/static/ci/common.in + # via gitpython +gitpython==3.1.40 + # via -r requirements/static/ci/common.in google-auth==2.19.1 # via kubernetes idna==3.4 @@ -434,9 +429,7 @@ six==1.15.0 # pywinrm # websocket-client smmap==5.0.0 - # via - # -c requirements/static/ci/../pkg/py3.8/windows.txt - # gitdb + # via gitdb sqlparse==0.4.4 # via -r requirements/static/ci/common.in strict-rfc3339==0.7 diff --git a/requirements/static/ci/py3.9/darwin.txt b/requirements/static/ci/py3.9/darwin.txt index f82d6df764d..09e575a60bf 100644 --- a/requirements/static/ci/py3.9/darwin.txt +++ b/requirements/static/ci/py3.9/darwin.txt @@ -136,14 +136,9 @@ genshi==0.7.7 geomet==0.2.1.post1 # via cassandra-driver gitdb==4.0.10 - # via - # -c requirements/static/ci/../pkg/py3.9/darwin.txt - # gitpython -gitpython==3.1.40 ; sys_platform == "win32" or sys_platform == "darwin" - # via - # -c requirements/static/ci/../pkg/py3.9/darwin.txt - # -r requirements/base.txt - # -r requirements/static/ci/common.in + # via gitpython +gitpython==3.1.40 + # via -r requirements/static/ci/common.in google-auth==2.19.1 # via kubernetes hglib==2.6.2 @@ -479,9 +474,7 @@ six==1.16.0 # vcert # websocket-client smmap==5.0.0 - # via - # -c requirements/static/ci/../pkg/py3.9/darwin.txt - # gitdb + # via gitdb sqlparse==0.4.4 # via -r requirements/static/ci/common.in strict-rfc3339==0.7 diff --git a/requirements/static/ci/py3.9/windows.txt b/requirements/static/ci/py3.9/windows.txt index bffecdb853f..393205d4ef4 100644 --- a/requirements/static/ci/py3.9/windows.txt +++ b/requirements/static/ci/py3.9/windows.txt @@ -127,14 +127,9 @@ genshi==0.7.7 geomet==0.2.1.post1 # via cassandra-driver gitdb==4.0.10 - # via - # -c requirements/static/ci/../pkg/py3.9/windows.txt - # gitpython -gitpython==3.1.40 ; sys_platform == "win32" or sys_platform == "darwin" - # via - # -c requirements/static/ci/../pkg/py3.9/windows.txt - # -r requirements/base.txt - # -r requirements/static/ci/common.in + # via gitpython +gitpython==3.1.40 + # via -r requirements/static/ci/common.in google-auth==2.19.1 # via kubernetes idna==3.4 @@ -430,9 +425,7 @@ six==1.15.0 # pywinrm # websocket-client smmap==5.0.0 - # via - # -c requirements/static/ci/../pkg/py3.9/windows.txt - # gitdb + # via gitdb sqlparse==0.4.4 # via -r requirements/static/ci/common.in strict-rfc3339==0.7 diff --git a/requirements/static/pkg/py3.10/darwin.txt b/requirements/static/pkg/py3.10/darwin.txt index 977290a6e9c..8e818502f62 100644 --- a/requirements/static/pkg/py3.10/darwin.txt +++ b/requirements/static/pkg/py3.10/darwin.txt @@ -26,10 +26,6 @@ cryptography==41.0.4 # pyopenssl distro==1.8.0 # via -r requirements/base.txt -gitdb==4.0.10 - # via gitpython -gitpython==3.1.40 ; sys_platform == "win32" or sys_platform == "darwin" - # via -r requirements/base.txt idna==3.4 # via requests immutables==0.15 @@ -102,8 +98,6 @@ setproctitle==1.3.2 # via -r requirements/base.txt six==1.16.0 # via python-dateutil -smmap==5.0.0 - # via gitdb tempora==5.3.0 # via portend timelib==0.3.0 diff --git a/requirements/static/pkg/py3.10/windows.txt b/requirements/static/pkg/py3.10/windows.txt index 111b15b9e95..a408b56dfa4 100644 --- a/requirements/static/pkg/py3.10/windows.txt +++ b/requirements/static/pkg/py3.10/windows.txt @@ -28,10 +28,6 @@ cryptography==41.0.4 # pyopenssl distro==1.8.0 # via -r requirements/base.txt -gitdb==4.0.10 - # via gitpython -gitpython==3.1.40 ; sys_platform == "win32" or sys_platform == "darwin" - # via -r requirements/base.txt idna==3.4 # via requests immutables==0.15 @@ -111,8 +107,6 @@ setproctitle==1.3.2 # via -r requirements/base.txt six==1.15.0 # via python-dateutil -smmap==5.0.0 - # via gitdb tempora==5.3.0 # via portend timelib==0.3.0 diff --git a/requirements/static/pkg/py3.11/darwin.txt b/requirements/static/pkg/py3.11/darwin.txt index 7c4054c39ee..acb725dfa8a 100644 --- a/requirements/static/pkg/py3.11/darwin.txt +++ b/requirements/static/pkg/py3.11/darwin.txt @@ -26,10 +26,6 @@ cryptography==41.0.4 # pyopenssl distro==1.8.0 # via -r requirements/base.txt -gitdb==4.0.10 - # via gitpython -gitpython==3.1.40 ; sys_platform == "win32" or sys_platform == "darwin" - # via -r requirements/base.txt idna==3.4 # via requests immutables==0.15 @@ -102,8 +98,6 @@ setproctitle==1.3.2 # via -r requirements/base.txt six==1.16.0 # via python-dateutil -smmap==5.0.0 - # via gitdb tempora==5.3.0 # via portend timelib==0.3.0 diff --git a/requirements/static/pkg/py3.11/windows.txt b/requirements/static/pkg/py3.11/windows.txt index 770650d3a33..2940d3f32cb 100644 --- a/requirements/static/pkg/py3.11/windows.txt +++ b/requirements/static/pkg/py3.11/windows.txt @@ -28,10 +28,6 @@ cryptography==41.0.4 # pyopenssl distro==1.8.0 # via -r requirements/base.txt -gitdb==4.0.10 - # via gitpython -gitpython==3.1.40 ; sys_platform == "win32" or sys_platform == "darwin" - # via -r requirements/base.txt idna==3.4 # via requests immutables==0.15 @@ -111,8 +107,6 @@ setproctitle==1.3.2 # via -r requirements/base.txt six==1.15.0 # via python-dateutil -smmap==5.0.0 - # via gitdb tempora==5.3.0 # via portend timelib==0.3.0 diff --git a/requirements/static/pkg/py3.8/windows.txt b/requirements/static/pkg/py3.8/windows.txt index 1785ac1341c..b0cafc06d43 100644 --- a/requirements/static/pkg/py3.8/windows.txt +++ b/requirements/static/pkg/py3.8/windows.txt @@ -28,10 +28,6 @@ cryptography==41.0.4 # pyopenssl distro==1.8.0 # via -r requirements/base.txt -gitdb==4.0.10 - # via gitpython -gitpython==3.1.40 ; sys_platform == "win32" or sys_platform == "darwin" - # via -r requirements/base.txt idna==3.4 # via requests immutables==0.15 @@ -114,8 +110,6 @@ setproctitle==1.3.2 # via -r requirements/base.txt six==1.15.0 # via python-dateutil -smmap==5.0.0 - # via gitdb tempora==5.3.0 # via portend timelib==0.3.0 diff --git a/requirements/static/pkg/py3.9/darwin.txt b/requirements/static/pkg/py3.9/darwin.txt index 6ffe69f8b07..c3502c5a45f 100644 --- a/requirements/static/pkg/py3.9/darwin.txt +++ b/requirements/static/pkg/py3.9/darwin.txt @@ -26,10 +26,6 @@ cryptography==41.0.4 # pyopenssl distro==1.8.0 # via -r requirements/base.txt -gitdb==4.0.10 - # via gitpython -gitpython==3.1.40 ; sys_platform == "win32" or sys_platform == "darwin" - # via -r requirements/base.txt idna==3.4 # via requests immutables==0.15 @@ -102,8 +98,6 @@ setproctitle==1.3.2 # via -r requirements/base.txt six==1.16.0 # via python-dateutil -smmap==5.0.0 - # via gitdb tempora==5.3.0 # via portend timelib==0.3.0 diff --git a/requirements/static/pkg/py3.9/windows.txt b/requirements/static/pkg/py3.9/windows.txt index f478bc1810d..d00f41bfe9e 100644 --- a/requirements/static/pkg/py3.9/windows.txt +++ b/requirements/static/pkg/py3.9/windows.txt @@ -28,10 +28,6 @@ cryptography==41.0.4 # pyopenssl distro==1.8.0 # via -r requirements/base.txt -gitdb==4.0.10 - # via gitpython -gitpython==3.1.40 ; sys_platform == "win32" or sys_platform == "darwin" - # via -r requirements/base.txt idna==3.4 # via requests immutables==0.15 @@ -112,8 +108,6 @@ setproctitle==1.3.2 # via -r requirements/base.txt six==1.15.0 # via python-dateutil -smmap==5.0.0 - # via gitdb tempora==5.3.0 # via portend timelib==0.3.0 From 163d34f43046b290a30e45ad7a1a9a857dc9b742 Mon Sep 17 00:00:00 2001 From: Pedro Algarvio Date: Sat, 21 Oct 2023 12:42:12 +0100 Subject: [PATCH 143/153] Drop cloud specific requirements from MacOS's base requirements. Signed-off-by: Pedro Algarvio --- requirements/base.txt | 5 ----- requirements/static/ci/py3.10/darwin.txt | 16 ++-------------- requirements/static/ci/py3.11/darwin.txt | 16 ++-------------- requirements/static/ci/py3.9/darwin.txt | 16 ++-------------- requirements/static/pkg/py3.10/darwin.txt | 11 +---------- requirements/static/pkg/py3.11/darwin.txt | 11 +---------- requirements/static/pkg/py3.9/darwin.txt | 11 +---------- 7 files changed, 9 insertions(+), 77 deletions(-) diff --git a/requirements/base.txt b/requirements/base.txt index feb58338cb5..2a1eeac6112 100644 --- a/requirements/base.txt +++ b/requirements/base.txt @@ -33,8 +33,3 @@ pythonnet>=3.0.1; sys_platform == 'win32' pymssql>=2.2.1; sys_platform == 'win32' pymysql>=1.0.2; sys_platform == 'win32' lxml>=4.6.3; sys_platform == 'win32' - -# From old darwin.txt requirements file -apache-libcloud>=2.4.0; sys_platform == 'darwin' -linode-python>=1.1.1; sys_platform == 'darwin' -vultr>=1.0.1; sys_platform == 'darwin' diff --git a/requirements/static/ci/py3.10/darwin.txt b/requirements/static/ci/py3.10/darwin.txt index 47a97e17a72..87be78a2042 100644 --- a/requirements/static/ci/py3.10/darwin.txt +++ b/requirements/static/ci/py3.10/darwin.txt @@ -8,11 +8,8 @@ aiohttp==3.8.5 # via etcd3-py aiosignal==1.3.1 # via aiohttp -apache-libcloud==3.7.0 ; sys_platform == "darwin" - # via - # -c requirements/static/ci/../pkg/py3.10/darwin.txt - # -r requirements/base.txt - # -r requirements/static/ci/common.in +apache-libcloud==3.7.0 ; sys_platform != "win32" + # via -r requirements/static/ci/common.in asn1crypto==1.5.1 # via # certvalidator @@ -211,10 +208,6 @@ keyring==5.7.1 # via -r requirements/static/ci/common.in kubernetes==3.0.0 # via -r requirements/static/ci/common.in -linode-python==1.1.1 ; sys_platform == "darwin" - # via - # -c requirements/static/ci/../pkg/py3.10/darwin.txt - # -r requirements/base.txt looseversion==1.2.0 # via # -c requirements/static/ci/../pkg/py3.10/darwin.txt @@ -434,7 +427,6 @@ requests==2.31.0 # napalm # responses # vcert - # vultr responses==0.23.1 # via moto rfc3987==1.3.8 @@ -533,10 +525,6 @@ virtualenv==20.23.0 # via # -r requirements/static/ci/common.in # pytest-salt-factories -vultr==1.0.1 ; sys_platform == "darwin" - # via - # -c requirements/static/ci/../pkg/py3.10/darwin.txt - # -r requirements/base.txt watchdog==3.0.0 # via -r requirements/static/ci/common.in websocket-client==0.40.0 diff --git a/requirements/static/ci/py3.11/darwin.txt b/requirements/static/ci/py3.11/darwin.txt index 6b235bc61e8..79542228e01 100644 --- a/requirements/static/ci/py3.11/darwin.txt +++ b/requirements/static/ci/py3.11/darwin.txt @@ -8,11 +8,8 @@ aiohttp==3.8.5 # via etcd3-py aiosignal==1.3.1 # via aiohttp -apache-libcloud==3.7.0 ; sys_platform == "darwin" - # via - # -c requirements/static/ci/../pkg/py3.11/darwin.txt - # -r requirements/base.txt - # -r requirements/static/ci/common.in +apache-libcloud==3.7.0 ; sys_platform != "win32" + # via -r requirements/static/ci/common.in asn1crypto==1.5.1 # via # certvalidator @@ -209,10 +206,6 @@ keyring==5.7.1 # via -r requirements/static/ci/common.in kubernetes==3.0.0 # via -r requirements/static/ci/common.in -linode-python==1.1.1 ; sys_platform == "darwin" - # via - # -c requirements/static/ci/../pkg/py3.11/darwin.txt - # -r requirements/base.txt looseversion==1.2.0 # via # -c requirements/static/ci/../pkg/py3.11/darwin.txt @@ -432,7 +425,6 @@ requests==2.31.0 # napalm # responses # vcert - # vultr responses==0.23.1 # via moto rfc3987==1.3.8 @@ -529,10 +521,6 @@ virtualenv==20.23.0 # via # -r requirements/static/ci/common.in # pytest-salt-factories -vultr==1.0.1 ; sys_platform == "darwin" - # via - # -c requirements/static/ci/../pkg/py3.11/darwin.txt - # -r requirements/base.txt watchdog==3.0.0 # via -r requirements/static/ci/common.in websocket-client==0.40.0 diff --git a/requirements/static/ci/py3.9/darwin.txt b/requirements/static/ci/py3.9/darwin.txt index 09e575a60bf..d1116faa200 100644 --- a/requirements/static/ci/py3.9/darwin.txt +++ b/requirements/static/ci/py3.9/darwin.txt @@ -8,11 +8,8 @@ aiohttp==3.8.5 # via etcd3-py aiosignal==1.3.1 # via aiohttp -apache-libcloud==3.7.0 ; sys_platform == "darwin" - # via - # -c requirements/static/ci/../pkg/py3.9/darwin.txt - # -r requirements/base.txt - # -r requirements/static/ci/common.in +apache-libcloud==3.7.0 ; sys_platform != "win32" + # via -r requirements/static/ci/common.in asn1crypto==1.5.1 # via # certvalidator @@ -211,10 +208,6 @@ keyring==5.7.1 # via -r requirements/static/ci/common.in kubernetes==3.0.0 # via -r requirements/static/ci/common.in -linode-python==1.1.1 ; sys_platform == "darwin" - # via - # -c requirements/static/ci/../pkg/py3.9/darwin.txt - # -r requirements/base.txt looseversion==1.2.0 # via # -c requirements/static/ci/../pkg/py3.9/darwin.txt @@ -434,7 +427,6 @@ requests==2.31.0 # napalm # responses # vcert - # vultr responses==0.23.1 # via moto rfc3987==1.3.8 @@ -533,10 +525,6 @@ virtualenv==20.23.0 # via # -r requirements/static/ci/common.in # pytest-salt-factories -vultr==1.0.1 ; sys_platform == "darwin" - # via - # -c requirements/static/ci/../pkg/py3.9/darwin.txt - # -r requirements/base.txt watchdog==3.0.0 # via -r requirements/static/ci/common.in websocket-client==0.40.0 diff --git a/requirements/static/pkg/py3.10/darwin.txt b/requirements/static/pkg/py3.10/darwin.txt index 8e818502f62..2702a588144 100644 --- a/requirements/static/pkg/py3.10/darwin.txt +++ b/requirements/static/pkg/py3.10/darwin.txt @@ -4,8 +4,6 @@ # # pip-compile --no-emit-index-url --output-file=requirements/static/pkg/py3.10/darwin.txt requirements/darwin.txt requirements/static/pkg/darwin.in # -apache-libcloud==3.7.0 ; sys_platform == "darwin" - # via -r requirements/base.txt autocommand==2.2.2 # via jaraco.text certifi==2023.07.22 @@ -49,8 +47,6 @@ jinja2==3.1.2 # via -r requirements/base.txt jmespath==1.0.1 # via -r requirements/base.txt -linode-python==1.1.1 ; sys_platform == "darwin" - # via -r requirements/base.txt looseversion==1.2.0 # via -r requirements/base.txt markupsafe==2.1.2 @@ -90,10 +86,7 @@ pyyaml==6.0.1 pyzmq==25.1.0 # via -r requirements/zeromq.txt requests==2.31.0 - # via - # -r requirements/base.txt - # apache-libcloud - # vultr + # via -r requirements/base.txt setproctitle==1.3.2 # via -r requirements/base.txt six==1.16.0 @@ -108,8 +101,6 @@ typing-extensions==4.8.0 # via pydantic urllib3==1.26.18 # via requests -vultr==1.0.1 ; sys_platform == "darwin" - # via -r requirements/base.txt zc.lockfile==3.0.post1 # via cherrypy zipp==3.16.2 diff --git a/requirements/static/pkg/py3.11/darwin.txt b/requirements/static/pkg/py3.11/darwin.txt index acb725dfa8a..c8da143624a 100644 --- a/requirements/static/pkg/py3.11/darwin.txt +++ b/requirements/static/pkg/py3.11/darwin.txt @@ -4,8 +4,6 @@ # # pip-compile --no-emit-index-url --output-file=requirements/static/pkg/py3.11/darwin.txt requirements/darwin.txt requirements/static/pkg/darwin.in # -apache-libcloud==3.7.0 ; sys_platform == "darwin" - # via -r requirements/base.txt autocommand==2.2.2 # via jaraco.text certifi==2023.07.22 @@ -49,8 +47,6 @@ jinja2==3.1.2 # via -r requirements/base.txt jmespath==1.0.1 # via -r requirements/base.txt -linode-python==1.1.1 ; sys_platform == "darwin" - # via -r requirements/base.txt looseversion==1.2.0 # via -r requirements/base.txt markupsafe==2.1.2 @@ -90,10 +86,7 @@ pyyaml==6.0.1 pyzmq==25.1.0 # via -r requirements/zeromq.txt requests==2.31.0 - # via - # -r requirements/base.txt - # apache-libcloud - # vultr + # via -r requirements/base.txt setproctitle==1.3.2 # via -r requirements/base.txt six==1.16.0 @@ -108,8 +101,6 @@ typing-extensions==4.8.0 # via pydantic urllib3==1.26.18 # via requests -vultr==1.0.1 ; sys_platform == "darwin" - # via -r requirements/base.txt zc.lockfile==3.0.post1 # via cherrypy zipp==3.16.2 diff --git a/requirements/static/pkg/py3.9/darwin.txt b/requirements/static/pkg/py3.9/darwin.txt index c3502c5a45f..612ba9616d0 100644 --- a/requirements/static/pkg/py3.9/darwin.txt +++ b/requirements/static/pkg/py3.9/darwin.txt @@ -4,8 +4,6 @@ # # pip-compile --no-emit-index-url --output-file=requirements/static/pkg/py3.9/darwin.txt requirements/darwin.txt requirements/static/pkg/darwin.in # -apache-libcloud==3.7.0 ; sys_platform == "darwin" - # via -r requirements/base.txt autocommand==2.2.2 # via jaraco.text certifi==2023.07.22 @@ -49,8 +47,6 @@ jinja2==3.1.2 # via -r requirements/base.txt jmespath==1.0.1 # via -r requirements/base.txt -linode-python==1.1.1 ; sys_platform == "darwin" - # via -r requirements/base.txt looseversion==1.2.0 # via -r requirements/base.txt markupsafe==2.1.2 @@ -90,10 +86,7 @@ pyyaml==6.0.1 pyzmq==25.1.0 # via -r requirements/zeromq.txt requests==2.31.0 - # via - # -r requirements/base.txt - # apache-libcloud - # vultr + # via -r requirements/base.txt setproctitle==1.3.2 # via -r requirements/base.txt six==1.16.0 @@ -108,8 +101,6 @@ typing-extensions==4.8.0 # via pydantic urllib3==1.26.18 # via requests -vultr==1.0.1 ; sys_platform == "darwin" - # via -r requirements/base.txt zc.lockfile==3.0.post1 # via cherrypy zipp==3.16.2 From 63ade50e2b12fa7cb66f22e78160775b37a41e59 Mon Sep 17 00:00:00 2001 From: Pedro Algarvio Date: Tue, 7 Nov 2023 15:47:51 +0000 Subject: [PATCH 144/153] Bump to `paramiko==3.3.1` Signed-off-by: Pedro Algarvio --- requirements/static/ci/py3.10/darwin.txt | 2 +- requirements/static/ci/py3.10/freebsd.txt | 2 +- requirements/static/ci/py3.10/linux.txt | 2 +- requirements/static/ci/py3.11/darwin.txt | 2 +- requirements/static/ci/py3.11/freebsd.txt | 2 +- requirements/static/ci/py3.11/linux.txt | 2 +- requirements/static/ci/py3.8/freebsd.txt | 2 +- requirements/static/ci/py3.8/linux.txt | 2 +- requirements/static/ci/py3.9/darwin.txt | 2 +- requirements/static/ci/py3.9/freebsd.txt | 2 +- requirements/static/ci/py3.9/linux.txt | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/requirements/static/ci/py3.10/darwin.txt b/requirements/static/ci/py3.10/darwin.txt index 87be78a2042..956d3bf522b 100644 --- a/requirements/static/ci/py3.10/darwin.txt +++ b/requirements/static/ci/py3.10/darwin.txt @@ -275,7 +275,7 @@ packaging==23.1 # -r requirements/base.txt # docker # pytest -paramiko==3.2.0 +paramiko==3.3.1 # via # junos-eznc # napalm diff --git a/requirements/static/ci/py3.10/freebsd.txt b/requirements/static/ci/py3.10/freebsd.txt index 295e7ad6d8f..ffc467b40c0 100644 --- a/requirements/static/ci/py3.10/freebsd.txt +++ b/requirements/static/ci/py3.10/freebsd.txt @@ -278,7 +278,7 @@ packaging==23.1 # -r requirements/base.txt # docker # pytest -paramiko==3.2.0 ; sys_platform != "win32" and sys_platform != "darwin" +paramiko==3.3.1 ; sys_platform != "win32" and sys_platform != "darwin" # via # -r requirements/static/ci/common.in # junos-eznc diff --git a/requirements/static/ci/py3.10/linux.txt b/requirements/static/ci/py3.10/linux.txt index 4efc740a247..4d31a8e5e29 100644 --- a/requirements/static/ci/py3.10/linux.txt +++ b/requirements/static/ci/py3.10/linux.txt @@ -305,7 +305,7 @@ packaging==23.1 # ansible-core # docker # pytest -paramiko==3.2.0 ; sys_platform != "win32" and sys_platform != "darwin" +paramiko==3.3.1 ; sys_platform != "win32" and sys_platform != "darwin" # via # -r requirements/static/ci/common.in # junos-eznc diff --git a/requirements/static/ci/py3.11/darwin.txt b/requirements/static/ci/py3.11/darwin.txt index 79542228e01..29f2761e139 100644 --- a/requirements/static/ci/py3.11/darwin.txt +++ b/requirements/static/ci/py3.11/darwin.txt @@ -273,7 +273,7 @@ packaging==23.1 # -r requirements/base.txt # docker # pytest -paramiko==3.2.0 +paramiko==3.3.1 # via # junos-eznc # napalm diff --git a/requirements/static/ci/py3.11/freebsd.txt b/requirements/static/ci/py3.11/freebsd.txt index ee44f8168bb..781e6afd9c7 100644 --- a/requirements/static/ci/py3.11/freebsd.txt +++ b/requirements/static/ci/py3.11/freebsd.txt @@ -276,7 +276,7 @@ packaging==23.1 # -r requirements/base.txt # docker # pytest -paramiko==3.2.0 ; sys_platform != "win32" and sys_platform != "darwin" +paramiko==3.3.1 ; sys_platform != "win32" and sys_platform != "darwin" # via # -r requirements/static/ci/common.in # junos-eznc diff --git a/requirements/static/ci/py3.11/linux.txt b/requirements/static/ci/py3.11/linux.txt index 1374e9a016c..a7f4bdf04b6 100644 --- a/requirements/static/ci/py3.11/linux.txt +++ b/requirements/static/ci/py3.11/linux.txt @@ -301,7 +301,7 @@ packaging==23.1 # ansible-core # docker # pytest -paramiko==3.2.0 ; sys_platform != "win32" and sys_platform != "darwin" +paramiko==3.3.1 ; sys_platform != "win32" and sys_platform != "darwin" # via # -r requirements/static/ci/common.in # junos-eznc diff --git a/requirements/static/ci/py3.8/freebsd.txt b/requirements/static/ci/py3.8/freebsd.txt index b2409e15c5c..63e17ed9e6a 100644 --- a/requirements/static/ci/py3.8/freebsd.txt +++ b/requirements/static/ci/py3.8/freebsd.txt @@ -282,7 +282,7 @@ packaging==23.1 # -r requirements/base.txt # docker # pytest -paramiko==3.2.0 ; sys_platform != "win32" and sys_platform != "darwin" +paramiko==3.3.1 ; sys_platform != "win32" and sys_platform != "darwin" # via # -r requirements/static/ci/common.in # junos-eznc diff --git a/requirements/static/ci/py3.8/linux.txt b/requirements/static/ci/py3.8/linux.txt index 7b5d48ddc47..36ee8e0b975 100644 --- a/requirements/static/ci/py3.8/linux.txt +++ b/requirements/static/ci/py3.8/linux.txt @@ -309,7 +309,7 @@ packaging==23.1 # ansible-core # docker # pytest -paramiko==3.2.0 ; sys_platform != "win32" and sys_platform != "darwin" +paramiko==3.3.1 ; sys_platform != "win32" and sys_platform != "darwin" # via # -r requirements/static/ci/common.in # junos-eznc diff --git a/requirements/static/ci/py3.9/darwin.txt b/requirements/static/ci/py3.9/darwin.txt index d1116faa200..d419d6dfb0d 100644 --- a/requirements/static/ci/py3.9/darwin.txt +++ b/requirements/static/ci/py3.9/darwin.txt @@ -275,7 +275,7 @@ packaging==23.1 # -r requirements/base.txt # docker # pytest -paramiko==3.2.0 +paramiko==3.3.1 # via # junos-eznc # napalm diff --git a/requirements/static/ci/py3.9/freebsd.txt b/requirements/static/ci/py3.9/freebsd.txt index bb439e82d60..1c2bcec7afa 100644 --- a/requirements/static/ci/py3.9/freebsd.txt +++ b/requirements/static/ci/py3.9/freebsd.txt @@ -278,7 +278,7 @@ packaging==23.1 # -r requirements/base.txt # docker # pytest -paramiko==3.2.0 ; sys_platform != "win32" and sys_platform != "darwin" +paramiko==3.3.1 ; sys_platform != "win32" and sys_platform != "darwin" # via # -r requirements/static/ci/common.in # junos-eznc diff --git a/requirements/static/ci/py3.9/linux.txt b/requirements/static/ci/py3.9/linux.txt index 3cdcf4b42a3..48617bf1fcd 100644 --- a/requirements/static/ci/py3.9/linux.txt +++ b/requirements/static/ci/py3.9/linux.txt @@ -307,7 +307,7 @@ packaging==23.1 # ansible-core # docker # pytest -paramiko==3.2.0 ; sys_platform != "win32" and sys_platform != "darwin" +paramiko==3.3.1 ; sys_platform != "win32" and sys_platform != "darwin" # via # -r requirements/static/ci/common.in # junos-eznc From 92cae105fd6dfdddce8ebeedec4ecaa4fc076cf0 Mon Sep 17 00:00:00 2001 From: Pedro Algarvio Date: Thu, 9 Nov 2023 06:46:32 +0000 Subject: [PATCH 145/153] Add deprecation warnings and release notes about ``setup.py`` Signed-off-by: Pedro Algarvio --- doc/topics/releases/templates/3007.0.md.template | 6 ++++++ setup.py | 5 +++++ 2 files changed, 11 insertions(+) diff --git a/doc/topics/releases/templates/3007.0.md.template b/doc/topics/releases/templates/3007.0.md.template index 9b1043c9a44..229918daaad 100644 --- a/doc/topics/releases/templates/3007.0.md.template +++ b/doc/topics/releases/templates/3007.0.md.template @@ -6,6 +6,12 @@ Add release specific details below --> +## Salt's ``setup.py`` customizations +> :warning: **Deprecation Notice**:
+In Salt 3009, the ``setup.py`` file will be stripped of it's custom additions and migrated to a plain ``pyproject.toml`` python package +or whatever is found best during the process of removing the customizations.
+**If you're relying on these customizations please stop as your workflow will break in the future**. + ## Python 3.11 Salt's onedir packages now use Python 3.11 diff --git a/setup.py b/setup.py index 0f5870e9029..b81542d5db0 100755 --- a/setup.py +++ b/setup.py @@ -1225,4 +1225,9 @@ if __name__ == "__main__": warnings.warn( "Warning: distutils is deprecated and shall be removed in Python 3.12, advise migrate to using setuptools" ) + warnings.warn( + "In Salt 3009, the `setup.py` file will be stripped of it's custom additions and migrated to a plain " + "`pyproject.toml` python package or whatever is found best during the process of removing the customizations. " + "If you're relying on these customizations please stop as your workflow will break in the future." + ) setup(distclass=SaltDistribution) From ede29b4fdfd8c4b218559557645eedae7722898c Mon Sep 17 00:00:00 2001 From: Pedro Algarvio Date: Thu, 9 Nov 2023 06:48:25 +0000 Subject: [PATCH 146/153] This is not yet true Signed-off-by: Pedro Algarvio --- doc/topics/releases/templates/3007.0.md.template | 3 --- 1 file changed, 3 deletions(-) diff --git a/doc/topics/releases/templates/3007.0.md.template b/doc/topics/releases/templates/3007.0.md.template index 229918daaad..bfaa59defba 100644 --- a/doc/topics/releases/templates/3007.0.md.template +++ b/doc/topics/releases/templates/3007.0.md.template @@ -12,9 +12,6 @@ In Salt 3009, the ``setup.py`` file will be stripped of it's custom additions an or whatever is found best during the process of removing the customizations.
**If you're relying on these customizations please stop as your workflow will break in the future**. -## Python 3.11 -Salt's onedir packages now use Python 3.11 - ## Python 3.7 Support Dropped Support for python 3.7 has been dropped since it reached end-of-line in 27 Jun 2023. From d7443d1aeabd5472ae2752cf00b6340ee2b784fa Mon Sep 17 00:00:00 2001 From: Pedro Algarvio Date: Fri, 10 Nov 2023 14:17:03 +0000 Subject: [PATCH 147/153] Bump to actionlint 1.6.26 Signed-off-by: Pedro Algarvio --- .github/actions/setup-actionlint/action.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/actions/setup-actionlint/action.yml b/.github/actions/setup-actionlint/action.yml index 6605d5db1bc..42ef2e7181e 100644 --- a/.github/actions/setup-actionlint/action.yml +++ b/.github/actions/setup-actionlint/action.yml @@ -4,7 +4,7 @@ description: Setup actionlint inputs: version: description: The version of actionlint - default: 1.6.24 + default: 1.6.26 cache-seed: required: true type: string From 4f790e39451681e0d9838999969b470f87d9b6a0 Mon Sep 17 00:00:00 2001 From: Pedro Algarvio Date: Fri, 10 Nov 2023 14:05:41 +0000 Subject: [PATCH 148/153] Add `macos-13` to the platforms to run tests on Signed-off-by: Pedro Algarvio --- .github/workflows/ci.yml | 66 +++++++++++++++++++ .github/workflows/nightly.yml | 66 +++++++++++++++++++ .github/workflows/release.yml | 18 +++++ .github/workflows/scheduled.yml | 66 +++++++++++++++++++ .github/workflows/staging.yml | 65 ++++++++++++++++++ .../test-package-downloads-action.yml | 5 +- tools/pre_commit.py | 27 +++++--- 7 files changed, 302 insertions(+), 11 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b9fb055ede4..1e387d3940e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -716,6 +716,23 @@ jobs: salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 + macos-13-ci-deps: + name: macOS 13 Deps + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['build-deps-ci'] && fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] }} + needs: + - prepare-workflow + - build-salt-onedir-macos + uses: ./.github/workflows/build-deps-ci-action-macos.yml + with: + distro-slug: macos-13 + nox-session: ci-test-onedir + platform: darwin + arch: x86_64 + nox-version: 2022.8.7 + python-version: "3.10" + salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" + cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 + almalinux-8-ci-deps: name: Alma Linux 8 Deps if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['build-deps-ci'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} @@ -1717,6 +1734,28 @@ jobs: skip-junit-reports: ${{ github.event_name == 'pull_request' }} testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} + macos-13-pkg-tests: + name: macOS 13 Package Test + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] }} + needs: + - prepare-workflow + - build-macos-pkgs-onedir + - macos-13-ci-deps + uses: ./.github/workflows/test-packages-action-macos.yml + with: + distro-slug: macos-13 + nox-session: ci-test-onedir + platform: darwin + arch: x86_64 + salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" + pkg-type: macos + nox-version: 2022.8.7 + python-version: "3.10" + cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 + skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} + skip-junit-reports: ${{ github.event_name == 'pull_request' }} + testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} + windows-2016-nsis-pkg-tests: name: Windows 2016 NSIS Package Test if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} @@ -1937,6 +1976,28 @@ jobs: workflow-slug: ci default-timeout: 180 + macos-13: + name: macOS 13 Test + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] }} + needs: + - prepare-workflow + - macos-13-ci-deps + uses: ./.github/workflows/test-action-macos.yml + with: + distro-slug: macos-13 + nox-session: ci-test-onedir + platform: darwin + arch: x86_64 + nox-version: 2022.8.7 + python-version: "3.10" + testrun: ${{ needs.prepare-workflow.outputs.testrun }} + salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" + cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 + skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} + skip-junit-reports: ${{ github.event_name == 'pull_request' }} + workflow-slug: ci + default-timeout: 180 + almalinux-8: name: Alma Linux 8 Test if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} @@ -2497,6 +2558,7 @@ jobs: - windows-2019-ci-deps - windows-2022-ci-deps - macos-12-ci-deps + - macos-13-ci-deps - almalinux-8-ci-deps - almalinux-8-arm64-ci-deps - almalinux-9-ci-deps @@ -2534,6 +2596,7 @@ jobs: - windows-2019 - windows-2022 - macos-12 + - macos-13 - almalinux-8 - almalinux-9 - amazonlinux-2 @@ -2688,6 +2751,7 @@ jobs: - windows-2019-ci-deps - windows-2022-ci-deps - macos-12-ci-deps + - macos-13-ci-deps - almalinux-8-ci-deps - almalinux-8-arm64-ci-deps - almalinux-9-ci-deps @@ -2725,6 +2789,7 @@ jobs: - windows-2019 - windows-2022 - macos-12 + - macos-13 - almalinux-8 - almalinux-9 - amazonlinux-2 @@ -2770,6 +2835,7 @@ jobs: - ubuntu-2204-pkg-tests - ubuntu-2204-arm64-pkg-tests - macos-12-pkg-tests + - macos-13-pkg-tests - windows-2016-nsis-pkg-tests - windows-2016-msi-pkg-tests - windows-2019-nsis-pkg-tests diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index 105b50a3511..efe7ba6ada2 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -772,6 +772,23 @@ jobs: salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 + macos-13-ci-deps: + name: macOS 13 Deps + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['build-deps-ci'] && fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] }} + needs: + - prepare-workflow + - build-salt-onedir-macos + uses: ./.github/workflows/build-deps-ci-action-macos.yml + with: + distro-slug: macos-13 + nox-session: ci-test-onedir + platform: darwin + arch: x86_64 + nox-version: 2022.8.7 + python-version: "3.10" + salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" + cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 + almalinux-8-ci-deps: name: Alma Linux 8 Deps if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['build-deps-ci'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} @@ -1773,6 +1790,28 @@ jobs: skip-junit-reports: false testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} + macos-13-pkg-tests: + name: macOS 13 Package Test + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] }} + needs: + - prepare-workflow + - build-macos-pkgs-onedir + - macos-13-ci-deps + uses: ./.github/workflows/test-packages-action-macos.yml + with: + distro-slug: macos-13 + nox-session: ci-test-onedir + platform: darwin + arch: x86_64 + salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" + pkg-type: macos + nox-version: 2022.8.7 + python-version: "3.10" + cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 + skip-code-coverage: false + skip-junit-reports: false + testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} + windows-2016-nsis-pkg-tests: name: Windows 2016 NSIS Package Test if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} @@ -1993,6 +2032,28 @@ jobs: workflow-slug: nightly default-timeout: 360 + macos-13: + name: macOS 13 Test + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] }} + needs: + - prepare-workflow + - macos-13-ci-deps + uses: ./.github/workflows/test-action-macos.yml + with: + distro-slug: macos-13 + nox-session: ci-test-onedir + platform: darwin + arch: x86_64 + nox-version: 2022.8.7 + python-version: "3.10" + testrun: ${{ needs.prepare-workflow.outputs.testrun }} + salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" + cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 + skip-code-coverage: false + skip-junit-reports: false + workflow-slug: nightly + default-timeout: 360 + almalinux-8: name: Alma Linux 8 Test if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} @@ -2553,6 +2614,7 @@ jobs: - windows-2019-ci-deps - windows-2022-ci-deps - macos-12-ci-deps + - macos-13-ci-deps - almalinux-8-ci-deps - almalinux-8-arm64-ci-deps - almalinux-9-ci-deps @@ -2590,6 +2652,7 @@ jobs: - windows-2019 - windows-2022 - macos-12 + - macos-13 - almalinux-8 - almalinux-9 - amazonlinux-2 @@ -3435,6 +3498,7 @@ jobs: - windows-2019-ci-deps - windows-2022-ci-deps - macos-12-ci-deps + - macos-13-ci-deps - almalinux-8-ci-deps - almalinux-8-arm64-ci-deps - almalinux-9-ci-deps @@ -3472,6 +3536,7 @@ jobs: - windows-2019 - windows-2022 - macos-12 + - macos-13 - almalinux-8 - almalinux-9 - amazonlinux-2 @@ -3578,6 +3643,7 @@ jobs: - ubuntu-2204-pkg-tests - ubuntu-2204-arm64-pkg-tests - macos-12-pkg-tests + - macos-13-pkg-tests - windows-2016-nsis-pkg-tests - windows-2016-msi-pkg-tests - windows-2019-nsis-pkg-tests diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 0a31e7601e2..c4330c3ef74 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -225,6 +225,22 @@ jobs: salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 + macos-13-ci-deps: + name: macOS 13 Deps + needs: + - prepare-workflow + - download-onedir-artifact + uses: ./.github/workflows/build-deps-ci-action-macos.yml + with: + distro-slug: macos-13 + nox-session: ci-test-onedir + platform: darwin + arch: x86_64 + nox-version: 2022.8.7 + python-version: "3.10" + salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" + cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 + almalinux-8-ci-deps: name: Alma Linux 8 Deps needs: @@ -842,6 +858,7 @@ jobs: - fedora-38-arm64-ci-deps - fedora-38-ci-deps - macos-12-ci-deps + - macos-13-ci-deps - photonos-3-arm64-ci-deps - photonos-3-ci-deps - photonos-4-arm64-ci-deps @@ -1044,6 +1061,7 @@ jobs: - windows-2019-ci-deps - windows-2022-ci-deps - macos-12-ci-deps + - macos-13-ci-deps - almalinux-8-ci-deps - almalinux-8-arm64-ci-deps - almalinux-9-ci-deps diff --git a/.github/workflows/scheduled.yml b/.github/workflows/scheduled.yml index 07ddd71dedd..f8cf3d33d49 100644 --- a/.github/workflows/scheduled.yml +++ b/.github/workflows/scheduled.yml @@ -750,6 +750,23 @@ jobs: salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 + macos-13-ci-deps: + name: macOS 13 Deps + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['build-deps-ci'] && fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] }} + needs: + - prepare-workflow + - build-salt-onedir-macos + uses: ./.github/workflows/build-deps-ci-action-macos.yml + with: + distro-slug: macos-13 + nox-session: ci-test-onedir + platform: darwin + arch: x86_64 + nox-version: 2022.8.7 + python-version: "3.10" + salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" + cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 + almalinux-8-ci-deps: name: Alma Linux 8 Deps if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['build-deps-ci'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} @@ -1751,6 +1768,28 @@ jobs: skip-junit-reports: false testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} + macos-13-pkg-tests: + name: macOS 13 Package Test + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] }} + needs: + - prepare-workflow + - build-macos-pkgs-onedir + - macos-13-ci-deps + uses: ./.github/workflows/test-packages-action-macos.yml + with: + distro-slug: macos-13 + nox-session: ci-test-onedir + platform: darwin + arch: x86_64 + salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" + pkg-type: macos + nox-version: 2022.8.7 + python-version: "3.10" + cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 + skip-code-coverage: false + skip-junit-reports: false + testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} + windows-2016-nsis-pkg-tests: name: Windows 2016 NSIS Package Test if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} @@ -1971,6 +2010,28 @@ jobs: workflow-slug: scheduled default-timeout: 360 + macos-13: + name: macOS 13 Test + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] }} + needs: + - prepare-workflow + - macos-13-ci-deps + uses: ./.github/workflows/test-action-macos.yml + with: + distro-slug: macos-13 + nox-session: ci-test-onedir + platform: darwin + arch: x86_64 + nox-version: 2022.8.7 + python-version: "3.10" + testrun: ${{ needs.prepare-workflow.outputs.testrun }} + salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" + cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 + skip-code-coverage: false + skip-junit-reports: false + workflow-slug: scheduled + default-timeout: 360 + almalinux-8: name: Alma Linux 8 Test if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} @@ -2531,6 +2592,7 @@ jobs: - windows-2019-ci-deps - windows-2022-ci-deps - macos-12-ci-deps + - macos-13-ci-deps - almalinux-8-ci-deps - almalinux-8-arm64-ci-deps - almalinux-9-ci-deps @@ -2568,6 +2630,7 @@ jobs: - windows-2019 - windows-2022 - macos-12 + - macos-13 - almalinux-8 - almalinux-9 - amazonlinux-2 @@ -2724,6 +2787,7 @@ jobs: - windows-2019-ci-deps - windows-2022-ci-deps - macos-12-ci-deps + - macos-13-ci-deps - almalinux-8-ci-deps - almalinux-8-arm64-ci-deps - almalinux-9-ci-deps @@ -2761,6 +2825,7 @@ jobs: - windows-2019 - windows-2022 - macos-12 + - macos-13 - almalinux-8 - almalinux-9 - amazonlinux-2 @@ -2806,6 +2871,7 @@ jobs: - ubuntu-2204-pkg-tests - ubuntu-2204-arm64-pkg-tests - macos-12-pkg-tests + - macos-13-pkg-tests - windows-2016-nsis-pkg-tests - windows-2016-msi-pkg-tests - windows-2019-nsis-pkg-tests diff --git a/.github/workflows/staging.yml b/.github/workflows/staging.yml index 68f327890df..45aa6f6d6b8 100644 --- a/.github/workflows/staging.yml +++ b/.github/workflows/staging.yml @@ -772,6 +772,23 @@ jobs: salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 + macos-13-ci-deps: + name: macOS 13 Deps + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['build-deps-ci'] && fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] }} + needs: + - prepare-workflow + - build-salt-onedir-macos + uses: ./.github/workflows/build-deps-ci-action-macos.yml + with: + distro-slug: macos-13 + nox-session: ci-test-onedir + platform: darwin + arch: x86_64 + nox-version: 2022.8.7 + python-version: "3.10" + salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" + cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 + almalinux-8-ci-deps: name: Alma Linux 8 Deps if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['build-deps-ci'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} @@ -1773,6 +1790,28 @@ jobs: skip-junit-reports: true testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} + macos-13-pkg-tests: + name: macOS 13 Package Test + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] }} + needs: + - prepare-workflow + - build-macos-pkgs-onedir + - macos-13-ci-deps + uses: ./.github/workflows/test-packages-action-macos.yml + with: + distro-slug: macos-13 + nox-session: ci-test-onedir + platform: darwin + arch: x86_64 + salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" + pkg-type: macos + nox-version: 2022.8.7 + python-version: "3.10" + cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 + skip-code-coverage: true + skip-junit-reports: true + testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} + windows-2016-nsis-pkg-tests: name: Windows 2016 NSIS Package Test if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} @@ -1993,6 +2032,28 @@ jobs: workflow-slug: staging default-timeout: 180 + macos-13: + name: macOS 13 Test + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] }} + needs: + - prepare-workflow + - macos-13-ci-deps + uses: ./.github/workflows/test-action-macos.yml + with: + distro-slug: macos-13 + nox-session: ci-test-onedir + platform: darwin + arch: x86_64 + nox-version: 2022.8.7 + python-version: "3.10" + testrun: ${{ needs.prepare-workflow.outputs.testrun }} + salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" + cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 + skip-code-coverage: true + skip-junit-reports: true + workflow-slug: staging + default-timeout: 180 + almalinux-8: name: Alma Linux 8 Test if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} @@ -3386,6 +3447,7 @@ jobs: - fedora-38-arm64-ci-deps - fedora-38-ci-deps - macos-12-ci-deps + - macos-13-ci-deps - photonos-3-arm64-ci-deps - photonos-3-ci-deps - photonos-4-arm64-ci-deps @@ -3422,6 +3484,7 @@ jobs: - windows-2019-ci-deps - windows-2022-ci-deps - macos-12-ci-deps + - macos-13-ci-deps - almalinux-8-ci-deps - almalinux-8-arm64-ci-deps - almalinux-9-ci-deps @@ -3459,6 +3522,7 @@ jobs: - windows-2019 - windows-2022 - macos-12 + - macos-13 - almalinux-8 - almalinux-9 - amazonlinux-2 @@ -3504,6 +3568,7 @@ jobs: - ubuntu-2204-pkg-tests - ubuntu-2204-arm64-pkg-tests - macos-12-pkg-tests + - macos-13-pkg-tests - windows-2016-nsis-pkg-tests - windows-2016-msi-pkg-tests - windows-2019-nsis-pkg-tests diff --git a/.github/workflows/test-package-downloads-action.yml b/.github/workflows/test-package-downloads-action.yml index 7ca255f79ba..32879958651 100644 --- a/.github/workflows/test-package-downloads-action.yml +++ b/.github/workflows/test-package-downloads-action.yml @@ -394,7 +394,10 @@ jobs: - distro-slug: macos-12 arch: x86_64 pkg-type: package - - distro-slug: macos-12 + - distro-slug: macos-13 + arch: x86_64 + pkg-type: package + - distro-slug: macos-13 arch: x86_64 pkg-type: onedir diff --git a/tools/pre_commit.py b/tools/pre_commit.py index 9044ffbcfb7..0cd219f139a 100644 --- a/tools/pre_commit.py +++ b/tools/pre_commit.py @@ -85,7 +85,7 @@ def generate_workflows(ctx: Context): }, } test_salt_listing = { - "linux": ( + "linux": [ ("almalinux-8", "Alma Linux 8", "x86_64"), ("almalinux-9", "Alma Linux 9", "x86_64"), ("amazonlinux-2", "Amazon Linux 2", "x86_64"), @@ -111,16 +111,19 @@ def generate_workflows(ctx: Context): ("ubuntu-20.04-arm64", "Ubuntu 20.04 Arm64", "aarch64"), ("ubuntu-22.04", "Ubuntu 22.04", "x86_64"), ("ubuntu-22.04-arm64", "Ubuntu 22.04 Arm64", "aarch64"), - ), - "macos": (("macos-12", "macOS 12", "x86_64"),), - "windows": ( + ], + "macos": [ + ("macos-12", "macOS 12", "x86_64"), + ("macos-13", "macOS 13", "x86_64"), + ], + "windows": [ ("windows-2016", "Windows 2016", "amd64"), ("windows-2019", "Windows 2019", "amd64"), ("windows-2022", "Windows 2022", "amd64"), - ), + ], } test_salt_pkg_listing = { - "linux": ( + "linux": [ ("amazonlinux-2", "Amazon Linux 2", "x86_64", "rpm"), ("centos-7", "CentOS 7", "x86_64", "rpm"), ("centosstream-8", "CentOS Stream 8", "x86_64", "rpm"), @@ -140,13 +143,16 @@ def generate_workflows(ctx: Context): ("ubuntu-20.04-arm64", "Ubuntu 20.04 Arm64", "aarch64", "deb"), ("ubuntu-22.04", "Ubuntu 22.04", "x86_64", "deb"), ("ubuntu-22.04-arm64", "Ubuntu 22.04 Arm64", "aarch64", "deb"), - ), - "macos": (("macos-12", "macOS 12", "x86_64"),), - "windows": ( + ], + "macos": [ + ("macos-12", "macOS 12", "x86_64"), + ("macos-13", "macOS 13", "x86_64"), + ], + "windows": [ ("windows-2016", "Windows 2016", "amd64"), ("windows-2019", "Windows 2019", "amd64"), ("windows-2022", "Windows 2022", "amd64"), - ), + ], } build_ci_deps_listing = { "linux": [ @@ -186,6 +192,7 @@ def generate_workflows(ctx: Context): ], "macos": [ ("macos-12", "macOS 12", "x86_64"), + ("macos-13", "macOS 13", "x86_64"), ], "windows": [ ("windows-2016", "Windows 2016", "amd64"), From 6640b052168d6a437bcb511c5e137c571ad7e6b8 Mon Sep 17 00:00:00 2001 From: "Gareth J. Greenaway" Date: Wed, 25 Oct 2023 16:26:10 -0700 Subject: [PATCH 149/153] fixes for MacOS X 13 --- salt/modules/mac_service.py | 11 ++++++----- tests/integration/modules/test_mac_sysctl.py | 4 ++-- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/salt/modules/mac_service.py b/salt/modules/mac_service.py index 2932d083651..39dd6dd0f67 100644 --- a/salt/modules/mac_service.py +++ b/salt/modules/mac_service.py @@ -143,7 +143,7 @@ def _get_service(name): # so we need to raise that the service could not be found. try: if not __context__["using_cached_services"]: - raise CommandExecutionError("Service not found: {}".format(name)) + raise CommandExecutionError(f"Service not found: {name}") except KeyError: pass @@ -151,7 +151,7 @@ def _get_service(name): # state then there is no reason to check again. # fixes https://github.com/saltstack/salt/issues/57907 if __context__.get("service.state") == "dead": - raise CommandExecutionError("Service not found: {}".format(name)) + raise CommandExecutionError(f"Service not found: {name}") # we used a cached version to check, a service could have been made # between now and then, we should refresh our available services. @@ -162,7 +162,7 @@ def _get_service(name): if not service: # Could not find the service after refresh raise. - raise CommandExecutionError("Service not found: {}".format(name)) + raise CommandExecutionError(f"Service not found: {name}") # found it :) return service @@ -240,7 +240,7 @@ def _get_domain_target(name, service_target=False): if "LaunchAgents" in path: # Get the console user so we can service in the correct session uid = __utils__["mac_utils.console_user"]() - domain_target = "gui/{}".format(uid) + domain_target = f"gui/{uid}" # check to see if we need to make it a full service target. if service_target is True: @@ -638,7 +638,8 @@ def disabled(name, runas=None, domain="system"): if name != srv_name: pass else: - return True if "true" in status.lower() else False + matches = ["true", "disabled"] + return True if any([x in status.lower() for x in matches]) else False return False diff --git a/tests/integration/modules/test_mac_sysctl.py b/tests/integration/modules/test_mac_sysctl.py index 6d7b1c945d6..cdf1b665a53 100644 --- a/tests/integration/modules/test_mac_sysctl.py +++ b/tests/integration/modules/test_mac_sysctl.py @@ -12,7 +12,7 @@ from salt.exceptions import CommandExecutionError from tests.support.case import ModuleCase # Module Variables -ASSIGN_CMD = "net.inet.icmp.icmplim" +ASSIGN_CMD = "net.inet.icmp.timestamp" CONFIG = "/etc/sysctl.conf" @@ -74,7 +74,7 @@ class DarwinSysctlModuleTest(ModuleCase): os.remove(CONFIG) try: self.run_function("sysctl.persist", [ASSIGN_CMD, 10]) - line = "{}={}".format(ASSIGN_CMD, 10) + line = f"{ASSIGN_CMD}={10}" found = self.__check_string(CONFIG, line) self.assertTrue(found) except CommandExecutionError: From ad05dce33af62497723def3103642628cebfe9ab Mon Sep 17 00:00:00 2001 From: "Gareth J. Greenaway" Date: Mon, 6 Nov 2023 11:31:16 -0800 Subject: [PATCH 150/153] Additional package name for OS X 13. --- tests/pytests/functional/modules/test_mac_pkgutil.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/pytests/functional/modules/test_mac_pkgutil.py b/tests/pytests/functional/modules/test_mac_pkgutil.py index 12a07726ad7..02bb2e5641f 100644 --- a/tests/pytests/functional/modules/test_mac_pkgutil.py +++ b/tests/pytests/functional/modules/test_mac_pkgutil.py @@ -56,6 +56,8 @@ def macports_package_url(macports_package_filename): @pytest.fixture(scope="module") def pkg_name(grains): + if grains["osrelease_info"][0] >= 13: + return "com.apple.pkg.CLTools_SDK_macOS13" if grains["osrelease_info"][0] >= 12: return "com.apple.pkg.XcodeSystemResources" if grains["osrelease_info"][0] >= 11: From 6531c36679d59c9523dddeaa61f3d23169a9daa6 Mon Sep 17 00:00:00 2001 From: Salt Project Packaging Date: Tue, 7 Nov 2023 19:55:44 +0000 Subject: [PATCH 151/153] Update the bootstrap script to v2023.11.07 --- salt/cloud/deploy/bootstrap-salt.sh | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/salt/cloud/deploy/bootstrap-salt.sh b/salt/cloud/deploy/bootstrap-salt.sh index b937fbb7ef7..f66aeea3a8a 100644 --- a/salt/cloud/deploy/bootstrap-salt.sh +++ b/salt/cloud/deploy/bootstrap-salt.sh @@ -23,7 +23,7 @@ #====================================================================================================================== set -o nounset # Treat unset variables as an error -__ScriptVersion="2023.07.25" +__ScriptVersion="2023.11.07" __ScriptName="bootstrap-salt.sh" __ScriptFullName="$0" @@ -1523,7 +1523,7 @@ __check_dpkg_architecture() { else # Saltstack official repository has arm64 metadata beginning with Debian 11, # use amd64 repositories on arm64 for anything older, since all pkgs are arch-independent - if [ "$DISTRO_NAME_L" = "debian" ] || [ "$DISTRO_MAJOR_VERSION" -lt 11 ]; then + if [ "$DISTRO_NAME_L" = "debian" ] && [ "$DISTRO_MAJOR_VERSION" -lt 11 ]; then __REPO_ARCH="amd64" else __REPO_ARCH="arm64" @@ -1709,6 +1709,14 @@ __debian_codename_translation() { "11") DISTRO_CODENAME="bullseye" ;; + "12") + DISTRO_CODENAME="bookworm" + # FIXME - TEMPORARY + # use bullseye packages until bookworm packages are available + DISTRO_CODENAME="bullseye" + DISTRO_MAJOR_VERSION=11 + rv=11 + ;; *) DISTRO_CODENAME="stretch" ;; @@ -2196,7 +2204,7 @@ __dnf_install_noinput() { #--- FUNCTION ------------------------------------------------------------------------------------------------------- # NAME: __tdnf_install_noinput -# DESCRIPTION: (DRY) dnf install with noinput options +# DESCRIPTION: (DRY) tdnf install with noinput options #---------------------------------------------------------------------------------------------------------------------- __tdnf_install_noinput() { @@ -7033,15 +7041,17 @@ install_photon_git_deps() { "${__python}" -m pip install "${dep}" || return 1 done else - __PACKAGES="python${PY_PKG_VER}-devel python${PY_PKG_VER}-pip python${PY_PKG_VER}-setuptools gcc" + __PACKAGES="python${PY_PKG_VER}-devel python${PY_PKG_VER}-pip python${PY_PKG_VER}-setuptools gcc glibc-devel linux-devel.x86_64" # shellcheck disable=SC2086 __tdnf_install_noinput ${__PACKAGES} || return 1 fi - # Need newer version of setuptools on Photon - _setuptools_dep="setuptools>=${_MINIMUM_SETUPTOOLS_VERSION}" - echodebug "Running '${_PY_EXE} -m pip --upgrade install ${_setuptools_dep}'" - ${_PY_EXE} -m pip install --upgrade "${_setuptools_dep}" + if [ "${DISTRO_MAJOR_VERSION}" -gt 3 ]; then + # Need newer version of setuptools on Photon + _setuptools_dep="setuptools>=${_MINIMUM_SETUPTOOLS_VERSION}" + echodebug "Running '${_PY_EXE} -m pip --upgrade install ${_setuptools_dep}'" + ${_PY_EXE} -m pip install --upgrade "${_setuptools_dep}" + fi # Let's trigger config_salt() if [ "$_TEMP_CONFIG_DIR" = "null" ]; then From c5fbfa1fe74da3aa6a736653635cb857a74e8bc0 Mon Sep 17 00:00:00 2001 From: nicholasmhughes Date: Tue, 14 Nov 2023 16:25:13 -0500 Subject: [PATCH 152/153] fixes saltstack/salt#65501 file.comment ignore_missing not working with multiline char --- changelog/65501.fixed.md | 1 + salt/states/file.py | 2 +- .../functional/states/file/test_comment.py | 15 ++++++++++++++- 3 files changed, 16 insertions(+), 2 deletions(-) create mode 100644 changelog/65501.fixed.md diff --git a/changelog/65501.fixed.md b/changelog/65501.fixed.md new file mode 100644 index 00000000000..31592c67e70 --- /dev/null +++ b/changelog/65501.fixed.md @@ -0,0 +1 @@ +Fix file.comment ignore_missing not working with multiline char diff --git a/salt/states/file.py b/salt/states/file.py index 3a845131447..4f53b1e485d 100644 --- a/salt/states/file.py +++ b/salt/states/file.py @@ -6171,7 +6171,7 @@ def comment(name, regex, char="#", backup=".bak", ignore_missing=False): # remove (?i)-like flags, ^ and $ unanchor_regex = re.sub(r"^(\(\?[iLmsux]\))?\^?(.*?)\$?$", r"\2", regex) - uncomment_regex = rf"^(?!\s*{char}).*" + unanchor_regex + uncomment_regex = rf"^(?!\s*{char})\s*" + unanchor_regex comment_regex = char + unanchor_regex # Make sure the pattern appears in the file before continuing diff --git a/tests/pytests/functional/states/file/test_comment.py b/tests/pytests/functional/states/file/test_comment.py index 377e6b1b0e6..b7a7c8a7c95 100644 --- a/tests/pytests/functional/states/file/test_comment.py +++ b/tests/pytests/functional/states/file/test_comment.py @@ -106,7 +106,7 @@ def test_issue_2401_file_comment(modules, tmp_path): tmp_file.write_text("hello\nworld\n") # create the sls template template_lines = [ - "{}:".format(tmp_file), + f"{tmp_file}:", " file.comment:", " - regex: ^world", ] @@ -122,3 +122,16 @@ def test_issue_2401_file_comment(modules, tmp_path): for state_run in ret: assert state_run.result is True assert "Pattern already commented" in state_run.comment + + +def test_issue_65501(file, tmp_path): + tmp_file = tmp_path / "issue-65501.txt" + tmp_file.write_text("first\n#PermitRootLogin prohibit-password\nlast") + ret = file.comment( + name=str(tmp_file), + regex="^PermitRootLogin[ \t]+.*$", + char="# NEXT LINE COMMENT SALTSTACK openssh-server_comment_permitrootlogin_sshd_config\n# ", + ignore_missing=True, + ) + assert ret.result is True + assert ret.comment == "Pattern not found and ignore_missing set to True" From 040ae9e55ccf01acf5ce9c5daefc0006e4cc15c3 Mon Sep 17 00:00:00 2001 From: Nicholas Hughes Date: Wed, 15 Nov 2023 14:48:45 -0500 Subject: [PATCH 153/153] [master] Add wildcard removal for aptpkg (#65221) * fixes saltstack/salt#65220 add wildcard removal for aptpkg * adding functional module tests for wildcard removal * fix functional pkg tests for wildcard * fix functional pkg tests for wildcard * fix functional pkg tests for wildcard * fix functional pkg tests for wildcard * fix functional pkg tests for wildcard * fix functional pkg tests for wildcard * fix functional pkg tests for wildcard * fix functional pkg tests for wildcard * fix functional pkg tests for wildcard * fix functional pkg tests for wildcard * fix functional pkg tests for wildcard * adding pytest marks to skip yum tests on non-el systems * fixing update method for match_wildcard dict --------- Co-authored-by: Megan Wilhite --- changelog/65220.added.md | 1 + salt/modules/aptpkg.py | 4 +- salt/modules/yumpkg.py | 17 +-------- salt/utils/pkg/__init__.py | 31 +++++++++++++++ .../pytests/functional/modules/test_aptpkg.py | 26 ++++++++++++- .../pytests/functional/modules/test_yumpkg.py | 38 ++++++++++++++++--- tests/pytests/unit/utils/test_pkg.py | 30 +++++++++++++++ 7 files changed, 122 insertions(+), 25 deletions(-) create mode 100644 changelog/65220.added.md create mode 100644 tests/pytests/unit/utils/test_pkg.py diff --git a/changelog/65220.added.md b/changelog/65220.added.md new file mode 100644 index 00000000000..6db0a4c4b0a --- /dev/null +++ b/changelog/65220.added.md @@ -0,0 +1 @@ +Add ability to remove packages by wildcard via apt execution module diff --git a/salt/modules/aptpkg.py b/salt/modules/aptpkg.py index 70db64b8405..06cfad43e84 100644 --- a/salt/modules/aptpkg.py +++ b/salt/modules/aptpkg.py @@ -1057,9 +1057,9 @@ def _uninstall(action="remove", name=None, pkgs=None, **kwargs): old = list_pkgs() old_removed = list_pkgs(removed=True) - targets = [x for x in pkg_params if x in old] + targets = salt.utils.pkg.match_wildcard(old, pkg_params) if action == "purge": - targets.extend([x for x in pkg_params if x in old_removed]) + targets.update(salt.utils.pkg.match_wildcard(old_removed, pkg_params)) if not targets: return {} cmd = ["apt-get", "-q", "-y", action] diff --git a/salt/modules/yumpkg.py b/salt/modules/yumpkg.py index 4262057f55f..e3e4a689b04 100644 --- a/salt/modules/yumpkg.py +++ b/salt/modules/yumpkg.py @@ -2155,22 +2155,7 @@ def remove(name=None, pkgs=None, **kwargs): # pylint: disable=W0613 old = list_pkgs() targets = [] - # Loop through pkg_params looking for any - # which contains a wildcard and get the - # real package names from the packages - # which are currently installed. - pkg_matches = {} - for pkg_param in list(pkg_params): - if "*" in pkg_param: - pkg_matches = { - x: pkg_params[pkg_param] for x in old if fnmatch.fnmatch(x, pkg_param) - } - - # Remove previous pkg_param - pkg_params.pop(pkg_param) - - # Update pkg_params with the matches - pkg_params.update(pkg_matches) + pkg_params = salt.utils.pkg.match_wildcard(old, pkg_params) for target in pkg_params: if target not in old: diff --git a/salt/utils/pkg/__init__.py b/salt/utils/pkg/__init__.py index 9a11e492a04..7092e7a5c77 100644 --- a/salt/utils/pkg/__init__.py +++ b/salt/utils/pkg/__init__.py @@ -3,6 +3,7 @@ Common functions for managing package refreshes during states """ import errno +import fnmatch import logging import os import re @@ -102,3 +103,33 @@ def check_bundled(): if getattr(sys, "frozen", False) and hasattr(sys, "_MEIPASS"): return True return False + + +def match_wildcard(current_pkgs, pkg_params): + """ + Loop through pkg_params looking for any which contains a wildcard and get + the real package names from the packages which are currently installed. + + current_pkgs + List of currently installed packages as output by ``list_pkgs`` + + pkg_params + List of packages as processed by ``pkg_resource.parse_targets`` + """ + pkg_matches = {} + + for pkg_param in list(pkg_params): + if "*" in pkg_param: + pkg_matches = { + pkg: pkg_params[pkg_param] + for pkg in current_pkgs + if fnmatch.fnmatch(pkg, pkg_param) + } + + # Remove previous pkg_param + pkg_params.pop(pkg_param) + + # Update pkg_params with the matches + pkg_params.update(pkg_matches) + + return pkg_params diff --git a/tests/pytests/functional/modules/test_aptpkg.py b/tests/pytests/functional/modules/test_aptpkg.py index 7d4933875d4..a9063e48b8b 100644 --- a/tests/pytests/functional/modules/test_aptpkg.py +++ b/tests/pytests/functional/modules/test_aptpkg.py @@ -11,6 +11,7 @@ import salt.modules.config as config import salt.modules.cp as cp import salt.modules.file as file import salt.modules.gpg as gpg +import salt.modules.pkg_resource as pkg_resource import salt.utils.files import salt.utils.stringutils from tests.support.mock import Mock, patch @@ -52,7 +53,9 @@ def get_key_file(request, state_tree, functional_files_dir): @pytest.fixture -def configure_loader_modules(minion_opts): +def configure_loader_modules(minion_opts, grains): + osarch = cmd.run("dpkg --print-architecture").strip() + grains.update({"osarch": osarch}) return { aptpkg: { "__salt__": { @@ -63,8 +66,15 @@ def configure_loader_modules(minion_opts): "file.grep": file.grep, "cp.cache_file": cp.cache_file, "config.get": config.get, + "cmd.run_stdout": cmd.run_stdout, + "pkg_resource.add_pkg": pkg_resource.add_pkg, + "pkg_resource.format_pkg_list": pkg_resource.format_pkg_list, + "pkg_resource.parse_targets": pkg_resource.parse_targets, + "pkg_resource.sort_pkglist": pkg_resource.sort_pkglist, + "pkg_resource.stringify": pkg_resource.stringify, }, "__opts__": minion_opts, + "__grains__": grains, }, file: { "__salt__": {"cmd.run_all": cmd.run_all}, @@ -81,6 +91,9 @@ def configure_loader_modules(minion_opts): config: { "__opts__": minion_opts, }, + pkg_resource: { + "__grains__": grains, + }, } @@ -374,3 +387,14 @@ def test_add_del_repo_key(get_key_file, aptkey): assert not keyfile.is_file() query_key = aptpkg.get_repo_keys(aptkey=aptkey) assert "0E08A149DE57BFBE" not in query_key + + +@pytest.mark.destructive_test +@pytest.mark.skip_if_not_root +def test_aptpkg_remove_wildcard(): + aptpkg.install(pkgs=["nginx-doc", "nginx-light"]) + ret = aptpkg.remove(name="nginx-*") + assert not ret["nginx-light"]["new"] + assert ret["nginx-light"]["old"] + assert not ret["nginx-doc"]["new"] + assert ret["nginx-doc"]["old"] diff --git a/tests/pytests/functional/modules/test_yumpkg.py b/tests/pytests/functional/modules/test_yumpkg.py index 36b357a6170..88dcf0ee56b 100644 --- a/tests/pytests/functional/modules/test_yumpkg.py +++ b/tests/pytests/functional/modules/test_yumpkg.py @@ -1,34 +1,49 @@ import pytest import salt.modules.cmdmod +import salt.modules.config import salt.modules.pkg_resource import salt.modules.yumpkg import salt.utils.pkg.rpm +pytestmark = [ + pytest.mark.skip_if_binaries_missing("rpm", "yum"), + pytest.mark.slow_test, +] + @pytest.fixture -def configure_loader_modules(minion_opts): +def configure_loader_modules(minion_opts, grains): + grains.update({"osarch": salt.utils.pkg.rpm.get_osarch()}) return { + salt.modules.config: { + "__grains__": grains, + }, + salt.modules.pkg_resource: { + "__grains__": grains, + }, salt.modules.yumpkg: { "__salt__": { "cmd.run": salt.modules.cmdmod.run, + "cmd.run_all": salt.modules.cmdmod.run_all, + "cmd.run_stdout": salt.modules.cmdmod.run_stdout, + "config.get": salt.modules.config.get, "pkg_resource.add_pkg": salt.modules.pkg_resource.add_pkg, "pkg_resource.format_pkg_list": salt.modules.pkg_resource.format_pkg_list, + "pkg_resource.parse_targets": salt.modules.pkg_resource.parse_targets, + "pkg_resource.sort_pkglist": salt.modules.pkg_resource.sort_pkglist, }, - "__grains__": {"osarch": salt.utils.pkg.rpm.get_osarch()}, + "__opts__": minion_opts, + "__grains__": grains, }, } -@pytest.mark.slow_test def test_yum_list_pkgs(grains): """ compare the output of rpm -qa vs the return of yumpkg.list_pkgs, make sure that any changes to ympkg.list_pkgs still returns. """ - - if grains["os_family"] != "RedHat": - pytest.skip("Skip if not RedHat") cmd = [ "rpm", "-qa", @@ -39,3 +54,14 @@ def test_yum_list_pkgs(grains): listed_pkgs = salt.modules.yumpkg.list_pkgs() for line in known_pkgs.splitlines(): assert any(line in d for d in listed_pkgs) + + +@pytest.mark.destructive_test +@pytest.mark.skip_if_not_root +def test_yumpkg_remove_wildcard(): + salt.modules.yumpkg.install(pkgs=["httpd-devel", "httpd-tools"]) + ret = salt.modules.yumpkg.remove(name="httpd-*") + assert not ret["httpd-devel"]["new"] + assert ret["httpd-devel"]["old"] + assert not ret["httpd-tools"]["new"] + assert ret["httpd-tools"]["old"] diff --git a/tests/pytests/unit/utils/test_pkg.py b/tests/pytests/unit/utils/test_pkg.py new file mode 100644 index 00000000000..d3543290909 --- /dev/null +++ b/tests/pytests/unit/utils/test_pkg.py @@ -0,0 +1,30 @@ +import pytest + +import salt.utils.pkg + +CURRENT_PKGS = { + "acl": "2.2.53-4", + "adduser": "3.118", + "apparmor": "2.13.2-10", + "apt": "1.8.2.3", + "apt-listchanges": "3.19", + "apt-transport-https": "1.8.2.3", + "apt-utils": "1.8.2.3", + "base-files": "10.3+deb10u13", + "base-passwd": "3.5.46", + "bash": "5.0-4", + "bash-completion": "1:2.8-6", +} + + +@pytest.mark.parametrize( + "current_pkgs,pkg_params,expected", + [ + [CURRENT_PKGS, {"apt": ""}, {"apt": ""}], + [CURRENT_PKGS, {"foo": ""}, {"foo": ""}], + [CURRENT_PKGS, {"bash*": ""}, {"bash": "", "bash-completion": ""}], + ], +) +def test_match_wildcard(current_pkgs, pkg_params, expected): + result = salt.utils.pkg.match_wildcard(current_pkgs, pkg_params) + assert result == expected