mirror of
https://github.com/saltstack/salt.git
synced 2025-04-16 17:50:20 +00:00
Merge 3006.x into 3007.x
This commit is contained in:
commit
5ea370c1fb
43 changed files with 446 additions and 267 deletions
|
@ -129,22 +129,9 @@ jobs:
|
|||
run: |
|
||||
tools --timestamps vm decompress-dependencies ${{ matrix.distro-slug }}
|
||||
|
||||
- name: Show System Info & Test Plan
|
||||
env:
|
||||
SALT_RELEASE: "${{ inputs.salt-version }}"
|
||||
SALT_REPO_ARCH: ${{ matrix.arch }}
|
||||
SALT_REPO_TYPE: ${{ inputs.environment }}
|
||||
SALT_REPO_USER: ${{ secrets.SALT_REPO_USER }}
|
||||
SALT_REPO_PASS: ${{ secrets.SALT_REPO_PASS }}
|
||||
SALT_REPO_DOMAIN_RELEASE: ${{ vars.SALT_REPO_DOMAIN_RELEASE || 'repo.saltproject.io' }}
|
||||
SALT_REPO_DOMAIN_STAGING: ${{ vars.SALT_REPO_DOMAIN_STAGING || 'staging.repo.saltproject.io' }}
|
||||
SKIP_CODE_COVERAGE: "${{ inputs.skip-code-coverage && '1' || '0' }}"
|
||||
LATEST_SALT_RELEASE: "${{ inputs.latest-release }}"
|
||||
DOWNLOAD_TEST_PACKAGE_TYPE: ${{ matrix.pkg-type }}
|
||||
- name: Show System Info
|
||||
run: |
|
||||
tools --timestamps --timeout-secs=1800 vm testplan --skip-requirements-install \
|
||||
-E SALT_RELEASE -E SALT_REPO_ARCH -E SALT_REPO_TYPE -E SALT_REPO_USER -E SALT_REPO_PASS \
|
||||
-E SALT_REPO_DOMAIN_RELEASE -E SALT_REPO_DOMAIN_STAGING -E LATEST_SALT_RELEASE -E DOWNLOAD_TEST_PACKAGE_TYPE \
|
||||
tools --timestamps --timeout-secs=1800 vm test --skip-requirements-install --print-system-information-only \
|
||||
--nox-session=${{ inputs.nox-session }}-pkgs ${{ matrix.distro-slug }} -- download-pkgs
|
||||
|
||||
- name: Run Package Download Tests
|
||||
|
@ -341,18 +328,10 @@ jobs:
|
|||
run: |
|
||||
nox --force-color -e decompress-dependencies -- macos ${{ matrix.arch }}
|
||||
|
||||
- name: Show System Info & Test Plan
|
||||
- name: Show System Info
|
||||
env:
|
||||
SALT_RELEASE: "${{ inputs.salt-version }}"
|
||||
SKIP_REQUIREMENTS_INSTALL: "1"
|
||||
PRINT_TEST_SELECTION: "1"
|
||||
PRINT_TEST_PLAN_ONLY: "1"
|
||||
PRINT_SYSTEM_INFO: "1"
|
||||
GITHUB_ACTIONS_PIPELINE: "1"
|
||||
SKIP_INITIAL_GH_ACTIONS_FAILURES: "1"
|
||||
SKIP_CODE_COVERAGE: "${{ inputs.skip-code-coverage && '1' || '0' }}"
|
||||
LATEST_SALT_RELEASE: "${{ inputs.latest-release }}"
|
||||
DOWNLOAD_TEST_PACKAGE_TYPE: ${{ matrix.pkg-type }}
|
||||
PRINT_SYSTEM_INFO_ONLY: "1"
|
||||
run: |
|
||||
sudo -E nox --force-color -e ${{ inputs.nox-session }}-pkgs -- download-pkgs
|
||||
|
||||
|
@ -556,22 +535,9 @@ jobs:
|
|||
run: |
|
||||
tools --timestamps vm decompress-dependencies ${{ matrix.distro-slug }}
|
||||
|
||||
- name: Show System Info & Test Plan
|
||||
env:
|
||||
SALT_RELEASE: "${{ inputs.salt-version }}"
|
||||
SALT_REPO_ARCH: ${{ matrix.arch }}
|
||||
LATEST_SALT_RELEASE: "${{ inputs.latest-release }}"
|
||||
SALT_REPO_TYPE: ${{ inputs.environment }}
|
||||
SALT_REPO_USER: ${{ secrets.SALT_REPO_USER }}
|
||||
SALT_REPO_PASS: ${{ secrets.SALT_REPO_PASS }}
|
||||
SALT_REPO_DOMAIN_RELEASE: ${{ vars.SALT_REPO_DOMAIN_RELEASE || 'repo.saltproject.io' }}
|
||||
SALT_REPO_DOMAIN_STAGING: ${{ vars.SALT_REPO_DOMAIN_STAGING || 'staging.repo.saltproject.io' }}
|
||||
SKIP_CODE_COVERAGE: "${{ inputs.skip-code-coverage && '1' || '0' }}"
|
||||
DOWNLOAD_TEST_PACKAGE_TYPE: ${{ matrix.pkg-type }}
|
||||
- name: Show System Info
|
||||
run: |
|
||||
tools --timestamps --timeout-secs=1800 vm testplan --skip-requirements-install \
|
||||
-E SALT_RELEASE -E SALT_REPO_ARCH -E SALT_REPO_TYPE -E SALT_REPO_USER -E SALT_REPO_PASS \
|
||||
-E SALT_REPO_DOMAIN_RELEASE -E SALT_REPO_DOMAIN_STAGING -E LATEST_SALT_RELEASE -E DOWNLOAD_TEST_PACKAGE_TYPE \
|
||||
tools --timestamps --timeout-secs=1800 vm test --skip-requirements-install --print-system-information-only \
|
||||
--nox-session=${{ inputs.nox-session }}-pkgs ${{ matrix.distro-slug }} -- download-pkgs
|
||||
|
||||
- name: Run Package Download Tests
|
||||
|
|
4
.github/workflows/test-action-linux.yml
vendored
4
.github/workflows/test-action-linux.yml
vendored
|
@ -191,9 +191,9 @@ jobs:
|
|||
run: |
|
||||
tools --timestamps vm decompress-dependencies ${{ inputs.distro-slug }}
|
||||
|
||||
- name: Show System Info & Test Plan
|
||||
- name: Show System Info
|
||||
run: |
|
||||
tools --timestamps --timeout-secs=1800 vm testplan --skip-requirements-install \
|
||||
tools --timestamps --timeout-secs=1800 vm test --skip-requirements-install --print-system-information-only \
|
||||
--nox-session=${{ inputs.nox-session }} ${{ inputs.distro-slug }} \
|
||||
${{ matrix.tests-chunk }}
|
||||
|
||||
|
|
11
.github/workflows/test-action-macos.yml
vendored
11
.github/workflows/test-action-macos.yml
vendored
|
@ -163,17 +163,12 @@ jobs:
|
|||
with:
|
||||
name: testrun-changed-files.txt
|
||||
|
||||
- name: Show System Info & Test Plan
|
||||
- name: Show System Info
|
||||
env:
|
||||
SKIP_REQUIREMENTS_INSTALL: "1"
|
||||
PRINT_TEST_SELECTION: "1"
|
||||
PRINT_TEST_PLAN_ONLY: "1"
|
||||
PRINT_SYSTEM_INFO: "1"
|
||||
GITHUB_ACTIONS_PIPELINE: "1"
|
||||
SKIP_INITIAL_GH_ACTIONS_FAILURES: "1"
|
||||
SKIP_CODE_COVERAGE: "1"
|
||||
PRINT_SYSTEM_INFO_ONLY: "1"
|
||||
run: |
|
||||
sudo -E nox --force-color -e ${{ inputs.nox-session }} -- ${{ matrix.tests-chunk }} -- -k "mac or darwin"
|
||||
sudo -E nox --force-color -e ${{ inputs.nox-session }} -- ${{ matrix.tests-chunk }}
|
||||
|
||||
- name: Run Changed Tests
|
||||
id: run-fast-changed-tests
|
||||
|
|
4
.github/workflows/test-action-windows.yml
vendored
4
.github/workflows/test-action-windows.yml
vendored
|
@ -191,9 +191,9 @@ jobs:
|
|||
run: |
|
||||
tools --timestamps vm decompress-dependencies ${{ inputs.distro-slug }}
|
||||
|
||||
- name: Show System Info & Test Plan
|
||||
- name: Show System Info
|
||||
run: |
|
||||
tools --timestamps --timeout-secs=1800 vm testplan --skip-requirements-install \
|
||||
tools --timestamps --timeout-secs=1800 vm test --skip-requirements-install --print-system-information-only \
|
||||
--nox-session=${{ inputs.nox-session }} ${{ inputs.distro-slug }} \
|
||||
${{ matrix.tests-chunk }}
|
||||
|
||||
|
|
|
@ -274,22 +274,9 @@ jobs:
|
|||
run: |
|
||||
tools --timestamps vm decompress-dependencies ${{ matrix.distro-slug }}
|
||||
|
||||
- name: Show System Info & Test Plan
|
||||
env:
|
||||
SALT_RELEASE: "${{ inputs.salt-version }}"
|
||||
SALT_REPO_ARCH: ${{ matrix.arch }}
|
||||
SALT_REPO_TYPE: ${{ inputs.environment }}
|
||||
SALT_REPO_USER: ${{ secrets.SALT_REPO_USER }}
|
||||
SALT_REPO_PASS: ${{ secrets.SALT_REPO_PASS }}
|
||||
SALT_REPO_DOMAIN_RELEASE: ${{ vars.SALT_REPO_DOMAIN_RELEASE || 'repo.saltproject.io' }}
|
||||
SALT_REPO_DOMAIN_STAGING: ${{ vars.SALT_REPO_DOMAIN_STAGING || 'staging.repo.saltproject.io' }}
|
||||
SKIP_CODE_COVERAGE: "${{ inputs.skip-code-coverage && '1' || '0' }}"
|
||||
LATEST_SALT_RELEASE: "${{ inputs.latest-release }}"
|
||||
DOWNLOAD_TEST_PACKAGE_TYPE: ${{ matrix.pkg-type }}
|
||||
- name: Show System Info
|
||||
run: |
|
||||
tools --timestamps --timeout-secs=1800 vm testplan --skip-requirements-install \
|
||||
-E SALT_RELEASE -E SALT_REPO_ARCH -E SALT_REPO_TYPE -E SALT_REPO_USER -E SALT_REPO_PASS \
|
||||
-E SALT_REPO_DOMAIN_RELEASE -E SALT_REPO_DOMAIN_STAGING -E LATEST_SALT_RELEASE -E DOWNLOAD_TEST_PACKAGE_TYPE \
|
||||
tools --timestamps --timeout-secs=1800 vm test --skip-requirements-install --print-system-information-only \
|
||||
--nox-session=${{ inputs.nox-session }}-pkgs ${{ matrix.distro-slug }} -- download-pkgs
|
||||
|
||||
- name: Run Package Download Tests
|
||||
|
@ -493,18 +480,10 @@ jobs:
|
|||
run: |
|
||||
nox --force-color -e decompress-dependencies -- macos ${{ matrix.arch }}
|
||||
|
||||
- name: Show System Info & Test Plan
|
||||
- name: Show System Info
|
||||
env:
|
||||
SALT_RELEASE: "${{ inputs.salt-version }}"
|
||||
SKIP_REQUIREMENTS_INSTALL: "1"
|
||||
PRINT_TEST_SELECTION: "1"
|
||||
PRINT_TEST_PLAN_ONLY: "1"
|
||||
PRINT_SYSTEM_INFO: "1"
|
||||
GITHUB_ACTIONS_PIPELINE: "1"
|
||||
SKIP_INITIAL_GH_ACTIONS_FAILURES: "1"
|
||||
SKIP_CODE_COVERAGE: "${{ inputs.skip-code-coverage && '1' || '0' }}"
|
||||
LATEST_SALT_RELEASE: "${{ inputs.latest-release }}"
|
||||
DOWNLOAD_TEST_PACKAGE_TYPE: ${{ matrix.pkg-type }}
|
||||
PRINT_SYSTEM_INFO_ONLY: "1"
|
||||
run: |
|
||||
sudo -E nox --force-color -e ${{ inputs.nox-session }}-pkgs -- download-pkgs
|
||||
|
||||
|
@ -712,22 +691,9 @@ jobs:
|
|||
run: |
|
||||
tools --timestamps vm decompress-dependencies ${{ matrix.distro-slug }}
|
||||
|
||||
- name: Show System Info & Test Plan
|
||||
env:
|
||||
SALT_RELEASE: "${{ inputs.salt-version }}"
|
||||
SALT_REPO_ARCH: ${{ matrix.arch }}
|
||||
LATEST_SALT_RELEASE: "${{ inputs.latest-release }}"
|
||||
SALT_REPO_TYPE: ${{ inputs.environment }}
|
||||
SALT_REPO_USER: ${{ secrets.SALT_REPO_USER }}
|
||||
SALT_REPO_PASS: ${{ secrets.SALT_REPO_PASS }}
|
||||
SALT_REPO_DOMAIN_RELEASE: ${{ vars.SALT_REPO_DOMAIN_RELEASE || 'repo.saltproject.io' }}
|
||||
SALT_REPO_DOMAIN_STAGING: ${{ vars.SALT_REPO_DOMAIN_STAGING || 'staging.repo.saltproject.io' }}
|
||||
SKIP_CODE_COVERAGE: "${{ inputs.skip-code-coverage && '1' || '0' }}"
|
||||
DOWNLOAD_TEST_PACKAGE_TYPE: ${{ matrix.pkg-type }}
|
||||
- name: Show System Info
|
||||
run: |
|
||||
tools --timestamps --timeout-secs=1800 vm testplan --skip-requirements-install \
|
||||
-E SALT_RELEASE -E SALT_REPO_ARCH -E SALT_REPO_TYPE -E SALT_REPO_USER -E SALT_REPO_PASS \
|
||||
-E SALT_REPO_DOMAIN_RELEASE -E SALT_REPO_DOMAIN_STAGING -E LATEST_SALT_RELEASE -E DOWNLOAD_TEST_PACKAGE_TYPE \
|
||||
tools --timestamps --timeout-secs=1800 vm test --skip-requirements-install --print-system-information-only \
|
||||
--nox-session=${{ inputs.nox-session }}-pkgs ${{ matrix.distro-slug }} -- download-pkgs
|
||||
|
||||
- name: Run Package Download Tests
|
||||
|
|
|
@ -190,11 +190,10 @@ jobs:
|
|||
# This step can go away once we stop testing classic packages upgrade/downgrades to/from 3005.x
|
||||
tools --timestamps vm ssh ${{ inputs.distro-slug }} -- "sudo python3 -m pip install -U 'importlib-metadata<=4.13.0' 'virtualenv<=20.21.1'"
|
||||
|
||||
- name: Show System Info & Test Plan
|
||||
- name: Show System Info
|
||||
run: |
|
||||
tools --timestamps --timeout-secs=1800 vm testplan --skip-requirements-install \
|
||||
--nox-session=${{ inputs.nox-session }}-pkgs ${{ inputs.distro-slug }} -- ${{ matrix.tests-chunk }} \
|
||||
${{ matrix.version && format('--prev-version {0}', matrix.version) || ''}}
|
||||
tools --timestamps --timeout-secs=1800 vm test --skip-requirements-install --print-system-information-only \
|
||||
--nox-session=${{ inputs.nox-session }}-pkgs ${{ inputs.distro-slug }} -- ${{ matrix.tests-chunk }}
|
||||
|
||||
- name: Run Package Tests
|
||||
run: |
|
||||
|
|
11
.github/workflows/test-packages-action-macos.yml
vendored
11
.github/workflows/test-packages-action-macos.yml
vendored
|
@ -162,17 +162,12 @@ jobs:
|
|||
run: |
|
||||
nox --force-color -e decompress-dependencies -- macos ${{ inputs.arch }}
|
||||
|
||||
- name: Show System Info & Test Plan
|
||||
- name: Show System Info
|
||||
env:
|
||||
SKIP_REQUIREMENTS_INSTALL: "1"
|
||||
PRINT_TEST_SELECTION: "1"
|
||||
PRINT_TEST_PLAN_ONLY: "1"
|
||||
PRINT_SYSTEM_INFO: "1"
|
||||
GITHUB_ACTIONS_PIPELINE: "1"
|
||||
SKIP_INITIAL_GH_ACTIONS_FAILURES: "1"
|
||||
PRINT_SYSTEM_INFO_ONLY: "1"
|
||||
run: |
|
||||
sudo -E nox --force-color -e ${{ inputs.nox-session }}-pkgs -- ${{ matrix.tests-chunk }} \
|
||||
${{ matrix.version && format('--prev-version {0}', matrix.version) || ''}}
|
||||
sudo -E nox --force-color -e ${{ inputs.nox-session }}-pkgs -- ${{ matrix.tests-chunk }}
|
||||
|
||||
- name: Run Package Tests
|
||||
env:
|
||||
|
|
|
@ -190,11 +190,10 @@ jobs:
|
|||
# This step can go away once we stop testing classic packages upgrade/downgrades to/from 3005.x
|
||||
tools --timestamps vm ssh ${{ inputs.distro-slug }} -- "sudo python3 -m pip install -U 'importlib-metadata<=4.13.0' 'virtualenv<=20.21.1'"
|
||||
|
||||
- name: Show System Info & Test Plan
|
||||
- name: Show System Info
|
||||
run: |
|
||||
tools --timestamps --timeout-secs=1800 vm testplan --skip-requirements-install \
|
||||
--nox-session=${{ inputs.nox-session }}-pkgs ${{ inputs.distro-slug }} -- ${{ matrix.tests-chunk }} \
|
||||
${{ matrix.version && format('--prev-version {0}', matrix.version) || ''}}
|
||||
tools --timestamps --timeout-secs=1800 vm test --skip-requirements-install --print-system-information-only \
|
||||
--nox-session=${{ inputs.nox-session }}-pkgs ${{ inputs.distro-slug }} -- ${{ matrix.tests-chunk }}
|
||||
|
||||
- name: Run Package Tests
|
||||
run: |
|
||||
|
|
1
changelog/65018.fixed.md
Normal file
1
changelog/65018.fixed.md
Normal file
|
@ -0,0 +1 @@
|
|||
Use `send_multipart` instead of `send` when sending multipart message.
|
|
@ -62,6 +62,7 @@ if PRINT_SYSTEM_INFO is None:
|
|||
PRINT_SYSTEM_INFO = CI_RUN
|
||||
else:
|
||||
PRINT_SYSTEM_INFO = PRINT_SYSTEM_INFO == "1"
|
||||
PRINT_SYSTEM_INFO_ONLY = os.environ.get("PRINT_SYSTEM_INFO_ONLY", "0") == "1"
|
||||
SKIP_REQUIREMENTS_INSTALL = os.environ.get("SKIP_REQUIREMENTS_INSTALL", "0") == "1"
|
||||
EXTRA_REQUIREMENTS_INSTALL = os.environ.get("EXTRA_REQUIREMENTS_INSTALL")
|
||||
COVERAGE_REQUIREMENT = os.environ.get("COVERAGE_REQUIREMENT")
|
||||
|
@ -1022,6 +1023,11 @@ def _pytest(session, coverage, cmd_args, env=None, on_rerun=False):
|
|||
args.append(f"--log-file={RUNTESTS_LOGFILE}")
|
||||
args.extend(cmd_args)
|
||||
|
||||
if PRINT_SYSTEM_INFO_ONLY and "--sys-info-and-exit" not in args:
|
||||
args.append("--sys-info-and-exit")
|
||||
session.run("python", "-m", "pytest", *args, env=env)
|
||||
return
|
||||
|
||||
if PRINT_SYSTEM_INFO and "--sysinfo" not in args:
|
||||
args.append("--sysinfo")
|
||||
|
||||
|
|
|
@ -36,3 +36,4 @@ 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'
|
||||
xmltodict>=0.13.0; sys_platform == 'win32'
|
||||
|
|
|
@ -2,7 +2,7 @@ mock >= 3.0.0
|
|||
# PyTest
|
||||
docker
|
||||
pytest >= 7.2.0
|
||||
pytest-salt-factories >= 1.0.0rc28
|
||||
pytest-salt-factories >= 1.0.0rc29
|
||||
pytest-helpers-namespace >= 2019.1.8
|
||||
pytest-subtests
|
||||
pytest-timeout
|
||||
|
|
|
@ -145,7 +145,7 @@ gitdb==4.0.10
|
|||
# via gitpython
|
||||
gitpython==3.1.41
|
||||
# via -r requirements/static/ci/common.in
|
||||
google-auth==2.19.1
|
||||
google-auth==2.27.0
|
||||
# via kubernetes
|
||||
hglib==2.6.2
|
||||
# via -r requirements/static/ci/darwin.in
|
||||
|
@ -314,7 +314,7 @@ psutil==5.9.6
|
|||
# pytest-system-statistics
|
||||
pyasn1-modules==0.3.0
|
||||
# via google-auth
|
||||
pyasn1==0.4.8
|
||||
pyasn1==0.5.1
|
||||
# via
|
||||
# pyasn1-modules
|
||||
# rsa
|
||||
|
@ -362,7 +362,7 @@ pytest-helpers-namespace==2021.12.29
|
|||
# pytest-shell-utilities
|
||||
pytest-httpserver==1.0.8
|
||||
# via -r requirements/pytest.txt
|
||||
pytest-salt-factories==1.0.0rc28
|
||||
pytest-salt-factories==1.0.0rc29
|
||||
# via -r requirements/pytest.txt
|
||||
pytest-shell-utilities==1.8.0
|
||||
# via pytest-salt-factories
|
||||
|
@ -466,7 +466,6 @@ six==1.16.0
|
|||
# etcd3-py
|
||||
# genshi
|
||||
# geomet
|
||||
# google-auth
|
||||
# jsonschema
|
||||
# junit-xml
|
||||
# junos-eznc
|
||||
|
@ -529,7 +528,6 @@ urllib3==1.26.18
|
|||
# -c requirements/static/ci/../pkg/py3.10/darwin.txt
|
||||
# botocore
|
||||
# docker
|
||||
# google-auth
|
||||
# kubernetes
|
||||
# python-etcd
|
||||
# requests
|
||||
|
|
|
@ -144,7 +144,7 @@ gitdb==4.0.10
|
|||
# via gitpython
|
||||
gitpython==3.1.41
|
||||
# via -r requirements/static/ci/common.in
|
||||
google-auth==2.19.1
|
||||
google-auth==2.27.0
|
||||
# via kubernetes
|
||||
hglib==2.6.2
|
||||
# via -r requirements/static/ci/freebsd.in
|
||||
|
@ -318,7 +318,7 @@ psutil==5.9.6
|
|||
# pytest-system-statistics
|
||||
pyasn1-modules==0.3.0
|
||||
# via google-auth
|
||||
pyasn1==0.5.0
|
||||
pyasn1==0.5.1
|
||||
# via
|
||||
# pyasn1-modules
|
||||
# rsa
|
||||
|
@ -366,7 +366,7 @@ pytest-helpers-namespace==2021.12.29
|
|||
# pytest-shell-utilities
|
||||
pytest-httpserver==1.0.8
|
||||
# via -r requirements/pytest.txt
|
||||
pytest-salt-factories==1.0.0rc28
|
||||
pytest-salt-factories==1.0.0rc29
|
||||
# via -r requirements/pytest.txt
|
||||
pytest-shell-utilities==1.8.0
|
||||
# via pytest-salt-factories
|
||||
|
@ -470,7 +470,6 @@ six==1.16.0
|
|||
# etcd3-py
|
||||
# genshi
|
||||
# geomet
|
||||
# google-auth
|
||||
# jsonschema
|
||||
# junit-xml
|
||||
# junos-eznc
|
||||
|
@ -534,7 +533,6 @@ urllib3==1.26.18
|
|||
# -c requirements/static/ci/../pkg/py3.10/freebsd.txt
|
||||
# botocore
|
||||
# docker
|
||||
# google-auth
|
||||
# kubernetes
|
||||
# python-etcd
|
||||
# requests
|
||||
|
|
|
@ -160,7 +160,7 @@ gitdb==4.0.10
|
|||
# via gitpython
|
||||
gitpython==3.1.41
|
||||
# via -r requirements/static/ci/common.in
|
||||
google-auth==2.19.1
|
||||
google-auth==2.27.0
|
||||
# via kubernetes
|
||||
h11==0.14.0
|
||||
# via httpcore
|
||||
|
@ -344,7 +344,7 @@ psutil==5.9.6
|
|||
# pytest-system-statistics
|
||||
pyasn1-modules==0.3.0
|
||||
# via google-auth
|
||||
pyasn1==0.5.0
|
||||
pyasn1==0.5.1
|
||||
# via
|
||||
# pyasn1-modules
|
||||
# rsa
|
||||
|
@ -400,7 +400,7 @@ pytest-helpers-namespace==2021.12.29
|
|||
# pytest-shell-utilities
|
||||
pytest-httpserver==1.0.8
|
||||
# via -r requirements/pytest.txt
|
||||
pytest-salt-factories==1.0.0rc28
|
||||
pytest-salt-factories==1.0.0rc29
|
||||
# via -r requirements/pytest.txt
|
||||
pytest-shell-utilities==1.8.0
|
||||
# via pytest-salt-factories
|
||||
|
@ -522,7 +522,6 @@ six==1.16.0
|
|||
# etcd3-py
|
||||
# genshi
|
||||
# geomet
|
||||
# google-auth
|
||||
# jsonschema
|
||||
# junit-xml
|
||||
# junos-eznc
|
||||
|
@ -598,7 +597,6 @@ urllib3==1.26.18
|
|||
# -c requirements/static/ci/../pkg/py3.10/linux.txt
|
||||
# botocore
|
||||
# docker
|
||||
# google-auth
|
||||
# kubernetes
|
||||
# python-etcd
|
||||
# requests
|
||||
|
|
|
@ -135,11 +135,11 @@ genshi==0.7.7
|
|||
# via -r requirements/static/ci/common.in
|
||||
geomet==0.2.1.post1
|
||||
# via cassandra-driver
|
||||
gitdb==4.0.10
|
||||
gitdb==4.0.11
|
||||
# via gitpython
|
||||
gitpython==3.1.41
|
||||
# via -r requirements/static/ci/common.in
|
||||
google-auth==2.19.1
|
||||
google-auth==2.27.0
|
||||
# via kubernetes
|
||||
idna==3.4
|
||||
# via
|
||||
|
@ -271,7 +271,7 @@ psutil==5.9.6
|
|||
# pytest-system-statistics
|
||||
pyasn1-modules==0.3.0
|
||||
# via google-auth
|
||||
pyasn1==0.4.8
|
||||
pyasn1==0.5.1
|
||||
# via
|
||||
# pyasn1-modules
|
||||
# rsa
|
||||
|
@ -319,7 +319,7 @@ pytest-helpers-namespace==2021.12.29
|
|||
# pytest-shell-utilities
|
||||
pytest-httpserver==1.0.8
|
||||
# via -r requirements/pytest.txt
|
||||
pytest-salt-factories==1.0.0rc28
|
||||
pytest-salt-factories==1.0.0rc29
|
||||
# via -r requirements/pytest.txt
|
||||
pytest-shell-utilities==1.8.0
|
||||
# via pytest-salt-factories
|
||||
|
@ -428,7 +428,6 @@ six==1.15.0
|
|||
# etcd3-py
|
||||
# genshi
|
||||
# geomet
|
||||
# google-auth
|
||||
# jsonschema
|
||||
# junit-xml
|
||||
# kubernetes
|
||||
|
@ -436,7 +435,7 @@ six==1.15.0
|
|||
# pyvmomi
|
||||
# pywinrm
|
||||
# websocket-client
|
||||
smmap==5.0.0
|
||||
smmap==5.0.1
|
||||
# via gitdb
|
||||
sqlparse==0.4.4
|
||||
# via -r requirements/static/ci/common.in
|
||||
|
@ -473,7 +472,6 @@ urllib3==1.26.18
|
|||
# -c requirements/static/ci/../pkg/py3.10/windows.txt
|
||||
# botocore
|
||||
# docker
|
||||
# google-auth
|
||||
# kubernetes
|
||||
# python-etcd
|
||||
# requests
|
||||
|
@ -500,8 +498,10 @@ wmi==1.5.1 ; sys_platform == "win32"
|
|||
# -r requirements/base.txt
|
||||
xmldiff==2.6.3
|
||||
# via -r requirements/static/ci/common.in
|
||||
xmltodict==0.13.0
|
||||
xmltodict==0.13.0 ; sys_platform == "win32"
|
||||
# via
|
||||
# -c requirements/static/ci/../pkg/py3.10/windows.txt
|
||||
# -r requirements/base.txt
|
||||
# moto
|
||||
# pywinrm
|
||||
yamllint==1.32.0
|
||||
|
|
|
@ -143,7 +143,7 @@ gitdb==4.0.10
|
|||
# via gitpython
|
||||
gitpython==3.1.41
|
||||
# via -r requirements/static/ci/common.in
|
||||
google-auth==2.19.1
|
||||
google-auth==2.27.0
|
||||
# via kubernetes
|
||||
hglib==2.6.2
|
||||
# via -r requirements/static/ci/darwin.in
|
||||
|
@ -310,9 +310,9 @@ psutil==5.9.6
|
|||
# pytest-salt-factories
|
||||
# pytest-shell-utilities
|
||||
# pytest-system-statistics
|
||||
pyasn1-modules==0.2.4
|
||||
pyasn1-modules==0.3.0
|
||||
# via google-auth
|
||||
pyasn1==0.4.8
|
||||
pyasn1==0.5.1
|
||||
# via
|
||||
# pyasn1-modules
|
||||
# rsa
|
||||
|
@ -364,7 +364,7 @@ pytest-helpers-namespace==2021.12.29
|
|||
# pytest-shell-utilities
|
||||
pytest-httpserver==1.0.8
|
||||
# via -r requirements/pytest.txt
|
||||
pytest-salt-factories==1.0.0rc28
|
||||
pytest-salt-factories==1.0.0rc29
|
||||
# via -r requirements/pytest.txt
|
||||
pytest-shell-utilities==1.8.0
|
||||
# via pytest-salt-factories
|
||||
|
@ -468,7 +468,6 @@ six==1.16.0
|
|||
# etcd3-py
|
||||
# genshi
|
||||
# geomet
|
||||
# google-auth
|
||||
# jsonschema
|
||||
# junit-xml
|
||||
# junos-eznc
|
||||
|
@ -531,7 +530,6 @@ urllib3==1.26.18
|
|||
# -c requirements/static/ci/../pkg/py3.11/darwin.txt
|
||||
# botocore
|
||||
# docker
|
||||
# google-auth
|
||||
# kubernetes
|
||||
# python-etcd
|
||||
# requests
|
||||
|
|
|
@ -142,7 +142,7 @@ gitdb==4.0.10
|
|||
# via gitpython
|
||||
gitpython==3.1.41
|
||||
# via -r requirements/static/ci/common.in
|
||||
google-auth==2.19.1
|
||||
google-auth==2.27.0
|
||||
# via kubernetes
|
||||
hglib==2.6.2
|
||||
# via -r requirements/static/ci/freebsd.in
|
||||
|
@ -314,9 +314,9 @@ psutil==5.9.6
|
|||
# pytest-salt-factories
|
||||
# pytest-shell-utilities
|
||||
# pytest-system-statistics
|
||||
pyasn1-modules==0.2.4
|
||||
pyasn1-modules==0.3.0
|
||||
# via google-auth
|
||||
pyasn1==0.4.8
|
||||
pyasn1==0.5.1
|
||||
# via
|
||||
# pyasn1-modules
|
||||
# rsa
|
||||
|
@ -368,7 +368,7 @@ pytest-helpers-namespace==2021.12.29
|
|||
# pytest-shell-utilities
|
||||
pytest-httpserver==1.0.8
|
||||
# via -r requirements/pytest.txt
|
||||
pytest-salt-factories==1.0.0rc28
|
||||
pytest-salt-factories==1.0.0rc29
|
||||
# via -r requirements/pytest.txt
|
||||
pytest-shell-utilities==1.8.0
|
||||
# via pytest-salt-factories
|
||||
|
@ -472,7 +472,6 @@ six==1.16.0
|
|||
# etcd3-py
|
||||
# genshi
|
||||
# geomet
|
||||
# google-auth
|
||||
# jsonschema
|
||||
# junit-xml
|
||||
# junos-eznc
|
||||
|
@ -537,7 +536,6 @@ urllib3==1.26.18
|
|||
# -c requirements/static/ci/../pkg/py3.11/freebsd.txt
|
||||
# botocore
|
||||
# docker
|
||||
# google-auth
|
||||
# kubernetes
|
||||
# python-etcd
|
||||
# requests
|
||||
|
|
|
@ -156,7 +156,7 @@ gitdb==4.0.10
|
|||
# via gitpython
|
||||
gitpython==3.1.41
|
||||
# via -r requirements/static/ci/common.in
|
||||
google-auth==2.19.1
|
||||
google-auth==2.27.0
|
||||
# via kubernetes
|
||||
h11==0.14.0
|
||||
# via httpcore
|
||||
|
@ -338,9 +338,9 @@ psutil==5.9.6
|
|||
# pytest-salt-factories
|
||||
# pytest-shell-utilities
|
||||
# pytest-system-statistics
|
||||
pyasn1-modules==0.2.4
|
||||
pyasn1-modules==0.3.0
|
||||
# via google-auth
|
||||
pyasn1==0.4.8
|
||||
pyasn1==0.5.1
|
||||
# via
|
||||
# pyasn1-modules
|
||||
# rsa
|
||||
|
@ -400,7 +400,7 @@ pytest-helpers-namespace==2021.12.29
|
|||
# pytest-shell-utilities
|
||||
pytest-httpserver==1.0.8
|
||||
# via -r requirements/pytest.txt
|
||||
pytest-salt-factories==1.0.0rc28
|
||||
pytest-salt-factories==1.0.0rc29
|
||||
# via -r requirements/pytest.txt
|
||||
pytest-shell-utilities==1.8.0
|
||||
# via pytest-salt-factories
|
||||
|
@ -522,7 +522,6 @@ six==1.16.0
|
|||
# etcd3-py
|
||||
# genshi
|
||||
# geomet
|
||||
# google-auth
|
||||
# jsonschema
|
||||
# junit-xml
|
||||
# junos-eznc
|
||||
|
@ -599,7 +598,6 @@ urllib3==1.26.18
|
|||
# -c requirements/static/ci/../pkg/py3.11/linux.txt
|
||||
# botocore
|
||||
# docker
|
||||
# google-auth
|
||||
# kubernetes
|
||||
# python-etcd
|
||||
# requests
|
||||
|
|
|
@ -133,11 +133,11 @@ genshi==0.7.7
|
|||
# via -r requirements/static/ci/common.in
|
||||
geomet==0.2.1.post1
|
||||
# via cassandra-driver
|
||||
gitdb==4.0.10
|
||||
gitdb==4.0.11
|
||||
# via gitpython
|
||||
gitpython==3.1.41
|
||||
# via -r requirements/static/ci/common.in
|
||||
google-auth==2.19.1
|
||||
google-auth==2.27.0
|
||||
# via kubernetes
|
||||
idna==3.4
|
||||
# via
|
||||
|
@ -267,9 +267,9 @@ psutil==5.9.6
|
|||
# pytest-salt-factories
|
||||
# pytest-shell-utilities
|
||||
# pytest-system-statistics
|
||||
pyasn1-modules==0.2.4
|
||||
pyasn1-modules==0.3.0
|
||||
# via google-auth
|
||||
pyasn1==0.4.8
|
||||
pyasn1==0.5.1
|
||||
# via
|
||||
# pyasn1-modules
|
||||
# rsa
|
||||
|
@ -321,7 +321,7 @@ pytest-helpers-namespace==2021.12.29
|
|||
# pytest-shell-utilities
|
||||
pytest-httpserver==1.0.8
|
||||
# via -r requirements/pytest.txt
|
||||
pytest-salt-factories==1.0.0rc28
|
||||
pytest-salt-factories==1.0.0rc29
|
||||
# via -r requirements/pytest.txt
|
||||
pytest-shell-utilities==1.8.0
|
||||
# via pytest-salt-factories
|
||||
|
@ -430,7 +430,6 @@ six==1.15.0
|
|||
# etcd3-py
|
||||
# genshi
|
||||
# geomet
|
||||
# google-auth
|
||||
# jsonschema
|
||||
# junit-xml
|
||||
# kubernetes
|
||||
|
@ -438,7 +437,7 @@ six==1.15.0
|
|||
# pyvmomi
|
||||
# pywinrm
|
||||
# websocket-client
|
||||
smmap==5.0.0
|
||||
smmap==5.0.1
|
||||
# via gitdb
|
||||
sqlparse==0.4.4
|
||||
# via -r requirements/static/ci/common.in
|
||||
|
@ -475,7 +474,6 @@ urllib3==1.26.18
|
|||
# -c requirements/static/ci/../pkg/py3.11/windows.txt
|
||||
# botocore
|
||||
# docker
|
||||
# google-auth
|
||||
# kubernetes
|
||||
# python-etcd
|
||||
# requests
|
||||
|
@ -502,8 +500,10 @@ wmi==1.5.1 ; sys_platform == "win32"
|
|||
# -r requirements/base.txt
|
||||
xmldiff==2.6.3
|
||||
# via -r requirements/static/ci/common.in
|
||||
xmltodict==0.13.0
|
||||
xmltodict==0.13.0 ; sys_platform == "win32"
|
||||
# via
|
||||
# -c requirements/static/ci/../pkg/py3.11/windows.txt
|
||||
# -r requirements/base.txt
|
||||
# moto
|
||||
# pywinrm
|
||||
yamllint==1.32.0
|
||||
|
|
|
@ -202,7 +202,7 @@ gitpython==3.1.41
|
|||
# via
|
||||
# -c requirements/static/ci/py3.12/linux.txt
|
||||
# -r requirements/static/ci/common.in
|
||||
google-auth==2.19.1
|
||||
google-auth==2.27.0
|
||||
# via
|
||||
# -c requirements/static/ci/py3.12/linux.txt
|
||||
# kubernetes
|
||||
|
@ -436,11 +436,11 @@ psutil==5.9.6
|
|||
# pytest-salt-factories
|
||||
# pytest-shell-utilities
|
||||
# pytest-system-statistics
|
||||
pyasn1-modules==0.2.4
|
||||
pyasn1-modules==0.3.0
|
||||
# via
|
||||
# -c requirements/static/ci/py3.12/linux.txt
|
||||
# google-auth
|
||||
pyasn1==0.4.8
|
||||
pyasn1==0.5.1
|
||||
# via
|
||||
# -c requirements/static/ci/py3.12/linux.txt
|
||||
# pyasn1-modules
|
||||
|
@ -522,7 +522,7 @@ pytest-httpserver==1.0.8
|
|||
# via
|
||||
# -c requirements/static/ci/py3.12/linux.txt
|
||||
# -r requirements/pytest.txt
|
||||
pytest-salt-factories==1.0.0rc28
|
||||
pytest-salt-factories==1.0.0rc29
|
||||
# via
|
||||
# -c requirements/static/ci/py3.12/linux.txt
|
||||
# -r requirements/pytest.txt
|
||||
|
@ -672,7 +672,6 @@ six==1.16.0
|
|||
# etcd3-py
|
||||
# genshi
|
||||
# geomet
|
||||
# google-auth
|
||||
# jsonschema
|
||||
# junit-xml
|
||||
# junos-eznc
|
||||
|
@ -766,7 +765,6 @@ urllib3==1.26.18
|
|||
# -c requirements/static/ci/py3.12/linux.txt
|
||||
# botocore
|
||||
# docker
|
||||
# google-auth
|
||||
# kubernetes
|
||||
# python-etcd
|
||||
# requests
|
||||
|
|
|
@ -143,7 +143,7 @@ gitdb==4.0.10
|
|||
# via gitpython
|
||||
gitpython==3.1.41
|
||||
# via -r requirements/static/ci/common.in
|
||||
google-auth==2.19.1
|
||||
google-auth==2.27.0
|
||||
# via kubernetes
|
||||
hglib==2.6.2
|
||||
# via -r requirements/static/ci/darwin.in
|
||||
|
@ -310,9 +310,9 @@ psutil==5.9.6
|
|||
# pytest-salt-factories
|
||||
# pytest-shell-utilities
|
||||
# pytest-system-statistics
|
||||
pyasn1-modules==0.2.4
|
||||
pyasn1-modules==0.3.0
|
||||
# via google-auth
|
||||
pyasn1==0.4.8
|
||||
pyasn1==0.5.1
|
||||
# via
|
||||
# pyasn1-modules
|
||||
# rsa
|
||||
|
@ -364,7 +364,7 @@ pytest-helpers-namespace==2021.12.29
|
|||
# pytest-shell-utilities
|
||||
pytest-httpserver==1.0.8
|
||||
# via -r requirements/pytest.txt
|
||||
pytest-salt-factories==1.0.0rc28
|
||||
pytest-salt-factories==1.0.0rc29
|
||||
# via -r requirements/pytest.txt
|
||||
pytest-shell-utilities==1.8.0
|
||||
# via pytest-salt-factories
|
||||
|
@ -468,7 +468,6 @@ six==1.16.0
|
|||
# etcd3-py
|
||||
# genshi
|
||||
# geomet
|
||||
# google-auth
|
||||
# jsonschema
|
||||
# junit-xml
|
||||
# junos-eznc
|
||||
|
@ -531,7 +530,6 @@ urllib3==1.26.18
|
|||
# -c requirements/static/ci/../pkg/py3.12/darwin.txt
|
||||
# botocore
|
||||
# docker
|
||||
# google-auth
|
||||
# kubernetes
|
||||
# python-etcd
|
||||
# requests
|
||||
|
|
|
@ -142,7 +142,7 @@ gitdb==4.0.10
|
|||
# via gitpython
|
||||
gitpython==3.1.41
|
||||
# via -r requirements/static/ci/common.in
|
||||
google-auth==2.19.1
|
||||
google-auth==2.27.0
|
||||
# via kubernetes
|
||||
hglib==2.6.2
|
||||
# via -r requirements/static/ci/freebsd.in
|
||||
|
@ -314,9 +314,9 @@ psutil==5.9.6
|
|||
# pytest-salt-factories
|
||||
# pytest-shell-utilities
|
||||
# pytest-system-statistics
|
||||
pyasn1-modules==0.2.4
|
||||
pyasn1-modules==0.3.0
|
||||
# via google-auth
|
||||
pyasn1==0.4.8
|
||||
pyasn1==0.5.1
|
||||
# via
|
||||
# pyasn1-modules
|
||||
# rsa
|
||||
|
@ -368,7 +368,7 @@ pytest-helpers-namespace==2021.12.29
|
|||
# pytest-shell-utilities
|
||||
pytest-httpserver==1.0.8
|
||||
# via -r requirements/pytest.txt
|
||||
pytest-salt-factories==1.0.0rc28
|
||||
pytest-salt-factories==1.0.0rc29
|
||||
# via -r requirements/pytest.txt
|
||||
pytest-shell-utilities==1.8.0
|
||||
# via pytest-salt-factories
|
||||
|
@ -472,7 +472,6 @@ six==1.16.0
|
|||
# etcd3-py
|
||||
# genshi
|
||||
# geomet
|
||||
# google-auth
|
||||
# jsonschema
|
||||
# junit-xml
|
||||
# junos-eznc
|
||||
|
@ -537,7 +536,6 @@ urllib3==1.26.18
|
|||
# -c requirements/static/ci/../pkg/py3.12/freebsd.txt
|
||||
# botocore
|
||||
# docker
|
||||
# google-auth
|
||||
# kubernetes
|
||||
# python-etcd
|
||||
# requests
|
||||
|
|
|
@ -207,7 +207,7 @@ gitpython==3.1.41
|
|||
# via
|
||||
# -c requirements/static/ci/py3.12/linux.txt
|
||||
# -r requirements/static/ci/common.in
|
||||
google-auth==2.19.1
|
||||
google-auth==2.27.0
|
||||
# via
|
||||
# -c requirements/static/ci/py3.12/linux.txt
|
||||
# kubernetes
|
||||
|
@ -454,11 +454,11 @@ psutil==5.9.6
|
|||
# -c requirements/static/ci/../pkg/py3.12/linux.txt
|
||||
# -c requirements/static/ci/py3.12/linux.txt
|
||||
# -r requirements/base.txt
|
||||
pyasn1-modules==0.2.4
|
||||
pyasn1-modules==0.3.0
|
||||
# via
|
||||
# -c requirements/static/ci/py3.12/linux.txt
|
||||
# google-auth
|
||||
pyasn1==0.4.8
|
||||
pyasn1==0.5.1
|
||||
# via
|
||||
# -c requirements/static/ci/py3.12/linux.txt
|
||||
# pyasn1-modules
|
||||
|
@ -667,7 +667,6 @@ six==1.16.0
|
|||
# etcd3-py
|
||||
# genshi
|
||||
# geomet
|
||||
# google-auth
|
||||
# jsonschema
|
||||
# junit-xml
|
||||
# junos-eznc
|
||||
|
@ -768,7 +767,6 @@ urllib3==1.26.18
|
|||
# -c requirements/static/ci/../pkg/py3.12/linux.txt
|
||||
# -c requirements/static/ci/py3.12/linux.txt
|
||||
# botocore
|
||||
# google-auth
|
||||
# kubernetes
|
||||
# python-etcd
|
||||
# requests
|
||||
|
|
|
@ -156,7 +156,7 @@ gitdb==4.0.10
|
|||
# via gitpython
|
||||
gitpython==3.1.41
|
||||
# via -r requirements/static/ci/common.in
|
||||
google-auth==2.19.1
|
||||
google-auth==2.27.0
|
||||
# via kubernetes
|
||||
h11==0.14.0
|
||||
# via httpcore
|
||||
|
@ -338,9 +338,9 @@ psutil==5.9.6
|
|||
# pytest-salt-factories
|
||||
# pytest-shell-utilities
|
||||
# pytest-system-statistics
|
||||
pyasn1-modules==0.2.4
|
||||
pyasn1-modules==0.3.0
|
||||
# via google-auth
|
||||
pyasn1==0.4.8
|
||||
pyasn1==0.5.1
|
||||
# via
|
||||
# pyasn1-modules
|
||||
# rsa
|
||||
|
@ -400,7 +400,7 @@ pytest-helpers-namespace==2021.12.29
|
|||
# pytest-shell-utilities
|
||||
pytest-httpserver==1.0.8
|
||||
# via -r requirements/pytest.txt
|
||||
pytest-salt-factories==1.0.0rc28
|
||||
pytest-salt-factories==1.0.0rc29
|
||||
# via -r requirements/pytest.txt
|
||||
pytest-shell-utilities==1.8.0
|
||||
# via pytest-salt-factories
|
||||
|
@ -522,7 +522,6 @@ six==1.16.0
|
|||
# etcd3-py
|
||||
# genshi
|
||||
# geomet
|
||||
# google-auth
|
||||
# jsonschema
|
||||
# junit-xml
|
||||
# junos-eznc
|
||||
|
@ -599,7 +598,6 @@ urllib3==1.26.18
|
|||
# -c requirements/static/ci/../pkg/py3.12/linux.txt
|
||||
# botocore
|
||||
# docker
|
||||
# google-auth
|
||||
# kubernetes
|
||||
# python-etcd
|
||||
# requests
|
||||
|
|
|
@ -133,11 +133,11 @@ genshi==0.7.7
|
|||
# via -r requirements/static/ci/common.in
|
||||
geomet==0.2.1.post1
|
||||
# via cassandra-driver
|
||||
gitdb==4.0.10
|
||||
gitdb==4.0.11
|
||||
# via gitpython
|
||||
gitpython==3.1.41
|
||||
# via -r requirements/static/ci/common.in
|
||||
google-auth==2.19.1
|
||||
google-auth==2.27.0
|
||||
# via kubernetes
|
||||
idna==3.4
|
||||
# via
|
||||
|
@ -267,9 +267,9 @@ psutil==5.9.6
|
|||
# pytest-salt-factories
|
||||
# pytest-shell-utilities
|
||||
# pytest-system-statistics
|
||||
pyasn1-modules==0.2.4
|
||||
pyasn1-modules==0.3.0
|
||||
# via google-auth
|
||||
pyasn1==0.4.8
|
||||
pyasn1==0.5.1
|
||||
# via
|
||||
# pyasn1-modules
|
||||
# rsa
|
||||
|
@ -321,7 +321,7 @@ pytest-helpers-namespace==2021.12.29
|
|||
# pytest-shell-utilities
|
||||
pytest-httpserver==1.0.8
|
||||
# via -r requirements/pytest.txt
|
||||
pytest-salt-factories==1.0.0rc28
|
||||
pytest-salt-factories==1.0.0rc29
|
||||
# via -r requirements/pytest.txt
|
||||
pytest-shell-utilities==1.8.0
|
||||
# via pytest-salt-factories
|
||||
|
@ -430,7 +430,6 @@ six==1.15.0
|
|||
# etcd3-py
|
||||
# genshi
|
||||
# geomet
|
||||
# google-auth
|
||||
# jsonschema
|
||||
# junit-xml
|
||||
# kubernetes
|
||||
|
@ -438,7 +437,7 @@ six==1.15.0
|
|||
# pyvmomi
|
||||
# pywinrm
|
||||
# websocket-client
|
||||
smmap==5.0.0
|
||||
smmap==5.0.1
|
||||
# via gitdb
|
||||
sqlparse==0.4.4
|
||||
# via -r requirements/static/ci/common.in
|
||||
|
@ -475,7 +474,6 @@ urllib3==1.26.18
|
|||
# -c requirements/static/ci/../pkg/py3.12/windows.txt
|
||||
# botocore
|
||||
# docker
|
||||
# google-auth
|
||||
# kubernetes
|
||||
# python-etcd
|
||||
# requests
|
||||
|
@ -502,8 +500,10 @@ wmi==1.5.1 ; sys_platform == "win32"
|
|||
# -r requirements/base.txt
|
||||
xmldiff==2.6.3
|
||||
# via -r requirements/static/ci/common.in
|
||||
xmltodict==0.13.0
|
||||
xmltodict==0.13.0 ; sys_platform == "win32"
|
||||
# via
|
||||
# -c requirements/static/ci/../pkg/py3.12/windows.txt
|
||||
# -r requirements/base.txt
|
||||
# moto
|
||||
# pywinrm
|
||||
yamllint==1.32.0
|
||||
|
|
|
@ -144,7 +144,7 @@ gitdb==4.0.10
|
|||
# via gitpython
|
||||
gitpython==3.1.41
|
||||
# via -r requirements/static/ci/common.in
|
||||
google-auth==2.19.1
|
||||
google-auth==2.27.0
|
||||
# via kubernetes
|
||||
hglib==2.6.2
|
||||
# via -r requirements/static/ci/freebsd.in
|
||||
|
@ -322,7 +322,7 @@ psutil==5.9.6
|
|||
# pytest-system-statistics
|
||||
pyasn1-modules==0.3.0
|
||||
# via google-auth
|
||||
pyasn1==0.5.0
|
||||
pyasn1==0.5.1
|
||||
# via
|
||||
# pyasn1-modules
|
||||
# rsa
|
||||
|
@ -370,7 +370,7 @@ pytest-helpers-namespace==2021.12.29
|
|||
# pytest-shell-utilities
|
||||
pytest-httpserver==1.0.8
|
||||
# via -r requirements/pytest.txt
|
||||
pytest-salt-factories==1.0.0rc28
|
||||
pytest-salt-factories==1.0.0rc29
|
||||
# via -r requirements/pytest.txt
|
||||
pytest-shell-utilities==1.8.0
|
||||
# via pytest-salt-factories
|
||||
|
@ -474,7 +474,6 @@ six==1.16.0
|
|||
# etcd3-py
|
||||
# genshi
|
||||
# geomet
|
||||
# google-auth
|
||||
# jsonschema
|
||||
# junit-xml
|
||||
# junos-eznc
|
||||
|
@ -538,7 +537,6 @@ urllib3==1.26.18
|
|||
# -c requirements/static/ci/../pkg/py3.8/freebsd.txt
|
||||
# botocore
|
||||
# docker
|
||||
# google-auth
|
||||
# kubernetes
|
||||
# python-etcd
|
||||
# requests
|
||||
|
|
|
@ -155,7 +155,7 @@ gitdb==4.0.10
|
|||
# via gitpython
|
||||
gitpython==3.1.41
|
||||
# via -r requirements/static/ci/common.in
|
||||
google-auth==2.19.1
|
||||
google-auth==2.27.0
|
||||
# via kubernetes
|
||||
h11==0.14.0
|
||||
# via httpcore
|
||||
|
@ -341,7 +341,7 @@ psutil==5.9.6
|
|||
# pytest-system-statistics
|
||||
pyasn1-modules==0.3.0
|
||||
# via google-auth
|
||||
pyasn1==0.5.0
|
||||
pyasn1==0.5.1
|
||||
# via
|
||||
# pyasn1-modules
|
||||
# rsa
|
||||
|
@ -397,7 +397,7 @@ pytest-helpers-namespace==2021.12.29
|
|||
# pytest-shell-utilities
|
||||
pytest-httpserver==1.0.8
|
||||
# via -r requirements/pytest.txt
|
||||
pytest-salt-factories==1.0.0rc28
|
||||
pytest-salt-factories==1.0.0rc29
|
||||
# via -r requirements/pytest.txt
|
||||
pytest-shell-utilities==1.8.0
|
||||
# via pytest-salt-factories
|
||||
|
@ -516,7 +516,6 @@ six==1.16.0
|
|||
# etcd3-py
|
||||
# genshi
|
||||
# geomet
|
||||
# google-auth
|
||||
# jsonschema
|
||||
# junit-xml
|
||||
# junos-eznc
|
||||
|
@ -590,7 +589,6 @@ urllib3==1.26.18
|
|||
# -c requirements/static/ci/../pkg/py3.8/linux.txt
|
||||
# botocore
|
||||
# docker
|
||||
# google-auth
|
||||
# kubernetes
|
||||
# python-etcd
|
||||
# requests
|
||||
|
|
|
@ -135,11 +135,11 @@ genshi==0.7.7
|
|||
# via -r requirements/static/ci/common.in
|
||||
geomet==0.2.1.post1
|
||||
# via cassandra-driver
|
||||
gitdb==4.0.10
|
||||
gitdb==4.0.11
|
||||
# via gitpython
|
||||
gitpython==3.1.41
|
||||
# via -r requirements/static/ci/common.in
|
||||
google-auth==2.19.1
|
||||
google-auth==2.27.0
|
||||
# via kubernetes
|
||||
idna==3.4
|
||||
# via
|
||||
|
@ -275,7 +275,7 @@ psutil==5.9.6
|
|||
# pytest-system-statistics
|
||||
pyasn1-modules==0.3.0
|
||||
# via google-auth
|
||||
pyasn1==0.4.8
|
||||
pyasn1==0.5.1
|
||||
# via
|
||||
# pyasn1-modules
|
||||
# rsa
|
||||
|
@ -323,7 +323,7 @@ pytest-helpers-namespace==2021.12.29
|
|||
# pytest-shell-utilities
|
||||
pytest-httpserver==1.0.8
|
||||
# via -r requirements/pytest.txt
|
||||
pytest-salt-factories==1.0.0rc28
|
||||
pytest-salt-factories==1.0.0rc29
|
||||
# via -r requirements/pytest.txt
|
||||
pytest-shell-utilities==1.8.0
|
||||
# via pytest-salt-factories
|
||||
|
@ -433,7 +433,6 @@ six==1.15.0
|
|||
# etcd3-py
|
||||
# genshi
|
||||
# geomet
|
||||
# google-auth
|
||||
# jsonschema
|
||||
# junit-xml
|
||||
# kubernetes
|
||||
|
@ -441,7 +440,7 @@ six==1.15.0
|
|||
# pyvmomi
|
||||
# pywinrm
|
||||
# websocket-client
|
||||
smmap==5.0.0
|
||||
smmap==5.0.1
|
||||
# via gitdb
|
||||
sqlparse==0.4.4
|
||||
# via -r requirements/static/ci/common.in
|
||||
|
@ -478,7 +477,6 @@ urllib3==1.26.18
|
|||
# -c requirements/static/ci/../pkg/py3.8/windows.txt
|
||||
# botocore
|
||||
# docker
|
||||
# google-auth
|
||||
# kubernetes
|
||||
# python-etcd
|
||||
# requests
|
||||
|
@ -505,8 +503,10 @@ wmi==1.5.1 ; sys_platform == "win32"
|
|||
# -r requirements/base.txt
|
||||
xmldiff==2.6.3
|
||||
# via -r requirements/static/ci/common.in
|
||||
xmltodict==0.13.0
|
||||
xmltodict==0.13.0 ; sys_platform == "win32"
|
||||
# via
|
||||
# -c requirements/static/ci/../pkg/py3.8/windows.txt
|
||||
# -r requirements/base.txt
|
||||
# moto
|
||||
# pywinrm
|
||||
yamllint==1.32.0
|
||||
|
|
|
@ -145,7 +145,7 @@ gitdb==4.0.10
|
|||
# via gitpython
|
||||
gitpython==3.1.41
|
||||
# via -r requirements/static/ci/common.in
|
||||
google-auth==2.19.1
|
||||
google-auth==2.27.0
|
||||
# via kubernetes
|
||||
hglib==2.6.2
|
||||
# via -r requirements/static/ci/darwin.in
|
||||
|
@ -314,7 +314,7 @@ psutil==5.9.6
|
|||
# pytest-system-statistics
|
||||
pyasn1-modules==0.3.0
|
||||
# via google-auth
|
||||
pyasn1==0.4.8
|
||||
pyasn1==0.5.1
|
||||
# via
|
||||
# pyasn1-modules
|
||||
# rsa
|
||||
|
@ -362,7 +362,7 @@ pytest-helpers-namespace==2021.12.29
|
|||
# pytest-shell-utilities
|
||||
pytest-httpserver==1.0.8
|
||||
# via -r requirements/pytest.txt
|
||||
pytest-salt-factories==1.0.0rc28
|
||||
pytest-salt-factories==1.0.0rc29
|
||||
# via -r requirements/pytest.txt
|
||||
pytest-shell-utilities==1.8.0
|
||||
# via pytest-salt-factories
|
||||
|
@ -466,7 +466,6 @@ six==1.16.0
|
|||
# etcd3-py
|
||||
# genshi
|
||||
# geomet
|
||||
# google-auth
|
||||
# jsonschema
|
||||
# junit-xml
|
||||
# junos-eznc
|
||||
|
@ -529,7 +528,6 @@ urllib3==1.26.18
|
|||
# -c requirements/static/ci/../pkg/py3.9/darwin.txt
|
||||
# botocore
|
||||
# docker
|
||||
# google-auth
|
||||
# kubernetes
|
||||
# python-etcd
|
||||
# requests
|
||||
|
|
|
@ -144,7 +144,7 @@ gitdb==4.0.10
|
|||
# via gitpython
|
||||
gitpython==3.1.41
|
||||
# via -r requirements/static/ci/common.in
|
||||
google-auth==2.19.1
|
||||
google-auth==2.27.0
|
||||
# via kubernetes
|
||||
hglib==2.6.2
|
||||
# via -r requirements/static/ci/freebsd.in
|
||||
|
@ -318,7 +318,7 @@ psutil==5.9.6
|
|||
# pytest-system-statistics
|
||||
pyasn1-modules==0.3.0
|
||||
# via google-auth
|
||||
pyasn1==0.5.0
|
||||
pyasn1==0.5.1
|
||||
# via
|
||||
# pyasn1-modules
|
||||
# rsa
|
||||
|
@ -366,7 +366,7 @@ pytest-helpers-namespace==2021.12.29
|
|||
# pytest-shell-utilities
|
||||
pytest-httpserver==1.0.8
|
||||
# via -r requirements/pytest.txt
|
||||
pytest-salt-factories==1.0.0rc28
|
||||
pytest-salt-factories==1.0.0rc29
|
||||
# via -r requirements/pytest.txt
|
||||
pytest-shell-utilities==1.8.0
|
||||
# via pytest-salt-factories
|
||||
|
@ -470,7 +470,6 @@ six==1.16.0
|
|||
# etcd3-py
|
||||
# genshi
|
||||
# geomet
|
||||
# google-auth
|
||||
# jsonschema
|
||||
# junit-xml
|
||||
# junos-eznc
|
||||
|
@ -534,7 +533,6 @@ urllib3==1.26.18
|
|||
# -c requirements/static/ci/../pkg/py3.9/freebsd.txt
|
||||
# botocore
|
||||
# docker
|
||||
# google-auth
|
||||
# kubernetes
|
||||
# python-etcd
|
||||
# requests
|
||||
|
|
|
@ -155,7 +155,7 @@ gitdb==4.0.10
|
|||
# via gitpython
|
||||
gitpython==3.1.41
|
||||
# via -r requirements/static/ci/common.in
|
||||
google-auth==2.19.1
|
||||
google-auth==2.27.0
|
||||
# via kubernetes
|
||||
h11==0.14.0
|
||||
# via httpcore
|
||||
|
@ -337,7 +337,7 @@ psutil==5.9.6
|
|||
# pytest-system-statistics
|
||||
pyasn1-modules==0.3.0
|
||||
# via google-auth
|
||||
pyasn1==0.5.0
|
||||
pyasn1==0.5.1
|
||||
# via
|
||||
# pyasn1-modules
|
||||
# rsa
|
||||
|
@ -393,7 +393,7 @@ pytest-helpers-namespace==2021.12.29
|
|||
# pytest-shell-utilities
|
||||
pytest-httpserver==1.0.8
|
||||
# via -r requirements/pytest.txt
|
||||
pytest-salt-factories==1.0.0rc28
|
||||
pytest-salt-factories==1.0.0rc29
|
||||
# via -r requirements/pytest.txt
|
||||
pytest-shell-utilities==1.8.0
|
||||
# via pytest-salt-factories
|
||||
|
@ -512,7 +512,6 @@ six==1.16.0
|
|||
# etcd3-py
|
||||
# genshi
|
||||
# geomet
|
||||
# google-auth
|
||||
# jsonschema
|
||||
# junit-xml
|
||||
# junos-eznc
|
||||
|
@ -586,7 +585,6 @@ urllib3==1.26.18
|
|||
# -c requirements/static/ci/../pkg/py3.9/linux.txt
|
||||
# botocore
|
||||
# docker
|
||||
# google-auth
|
||||
# kubernetes
|
||||
# python-etcd
|
||||
# requests
|
||||
|
|
|
@ -135,11 +135,11 @@ genshi==0.7.7
|
|||
# via -r requirements/static/ci/common.in
|
||||
geomet==0.2.1.post1
|
||||
# via cassandra-driver
|
||||
gitdb==4.0.10
|
||||
gitdb==4.0.11
|
||||
# via gitpython
|
||||
gitpython==3.1.41
|
||||
# via -r requirements/static/ci/common.in
|
||||
google-auth==2.19.1
|
||||
google-auth==2.27.0
|
||||
# via kubernetes
|
||||
idna==3.4
|
||||
# via
|
||||
|
@ -271,7 +271,7 @@ psutil==5.9.6
|
|||
# pytest-system-statistics
|
||||
pyasn1-modules==0.3.0
|
||||
# via google-auth
|
||||
pyasn1==0.4.8
|
||||
pyasn1==0.5.1
|
||||
# via
|
||||
# pyasn1-modules
|
||||
# rsa
|
||||
|
@ -319,7 +319,7 @@ pytest-helpers-namespace==2021.12.29
|
|||
# pytest-shell-utilities
|
||||
pytest-httpserver==1.0.8
|
||||
# via -r requirements/pytest.txt
|
||||
pytest-salt-factories==1.0.0rc28
|
||||
pytest-salt-factories==1.0.0rc29
|
||||
# via -r requirements/pytest.txt
|
||||
pytest-shell-utilities==1.8.0
|
||||
# via pytest-salt-factories
|
||||
|
@ -429,7 +429,6 @@ six==1.15.0
|
|||
# etcd3-py
|
||||
# genshi
|
||||
# geomet
|
||||
# google-auth
|
||||
# jsonschema
|
||||
# junit-xml
|
||||
# kubernetes
|
||||
|
@ -437,7 +436,7 @@ six==1.15.0
|
|||
# pyvmomi
|
||||
# pywinrm
|
||||
# websocket-client
|
||||
smmap==5.0.0
|
||||
smmap==5.0.1
|
||||
# via gitdb
|
||||
sqlparse==0.4.4
|
||||
# via -r requirements/static/ci/common.in
|
||||
|
@ -474,7 +473,6 @@ urllib3==1.26.18
|
|||
# -c requirements/static/ci/../pkg/py3.9/windows.txt
|
||||
# botocore
|
||||
# docker
|
||||
# google-auth
|
||||
# kubernetes
|
||||
# python-etcd
|
||||
# requests
|
||||
|
@ -501,8 +499,10 @@ wmi==1.5.1 ; sys_platform == "win32"
|
|||
# -r requirements/base.txt
|
||||
xmldiff==2.6.3
|
||||
# via -r requirements/static/ci/common.in
|
||||
xmltodict==0.13.0
|
||||
xmltodict==0.13.0 ; sys_platform == "win32"
|
||||
# via
|
||||
# -c requirements/static/ci/../pkg/py3.9/windows.txt
|
||||
# -r requirements/base.txt
|
||||
# moto
|
||||
# pywinrm
|
||||
yamllint==1.32.0
|
||||
|
|
|
@ -137,6 +137,8 @@ urllib3==1.26.18
|
|||
# via requests
|
||||
wmi==1.5.1 ; sys_platform == "win32"
|
||||
# via -r requirements/base.txt
|
||||
xmltodict==0.13.0 ; sys_platform == "win32"
|
||||
# via -r requirements/base.txt
|
||||
yarl==1.9.4
|
||||
# via aiohttp
|
||||
zc.lockfile==3.0.post1
|
||||
|
|
|
@ -142,6 +142,8 @@ urllib3==1.26.18
|
|||
# via requests
|
||||
wmi==1.5.1 ; sys_platform == "win32"
|
||||
# via -r requirements/base.txt
|
||||
xmltodict==0.13.0 ; sys_platform == "win32"
|
||||
# via -r requirements/base.txt
|
||||
yarl==1.9.4
|
||||
# via aiohttp
|
||||
zc.lockfile==3.0.post1
|
||||
|
|
|
@ -142,6 +142,8 @@ urllib3==1.26.18
|
|||
# via requests
|
||||
wmi==1.5.1 ; sys_platform == "win32"
|
||||
# via -r requirements/base.txt
|
||||
xmltodict==0.13.0 ; sys_platform == "win32"
|
||||
# via -r requirements/base.txt
|
||||
yarl==1.9.4
|
||||
# via aiohttp
|
||||
zc.lockfile==3.0.post1
|
||||
|
|
|
@ -140,6 +140,8 @@ urllib3==1.26.18
|
|||
# via requests
|
||||
wmi==1.5.1 ; sys_platform == "win32"
|
||||
# via -r requirements/base.txt
|
||||
xmltodict==0.13.0 ; sys_platform == "win32"
|
||||
# via -r requirements/base.txt
|
||||
yarl==1.9.4
|
||||
# via aiohttp
|
||||
zc.lockfile==3.0.post1
|
||||
|
|
|
@ -138,6 +138,8 @@ urllib3==1.26.18
|
|||
# via requests
|
||||
wmi==1.5.1 ; sys_platform == "win32"
|
||||
# via -r requirements/base.txt
|
||||
xmltodict==0.13.0 ; sys_platform == "win32"
|
||||
# via -r requirements/base.txt
|
||||
yarl==1.9.4
|
||||
# via aiohttp
|
||||
zc.lockfile==3.0.post1
|
||||
|
|
|
@ -968,21 +968,18 @@ class PublishServer(salt.transport.base.DaemonizedPublishServer):
|
|||
htopic = salt.utils.stringutils.to_bytes(
|
||||
hashlib.sha1(salt.utils.stringutils.to_bytes(topic)).hexdigest()
|
||||
)
|
||||
await self.dpub_sock.send(htopic, flags=zmq.SNDMORE)
|
||||
await self.dpub_sock.send(payload)
|
||||
yield self.dpub_sock.send_multipart([htopic, payload])
|
||||
log.trace("Filtered data has been sent")
|
||||
# Syndic broadcast
|
||||
if self.opts.get("order_masters"):
|
||||
log.trace("Sending filtered data to syndic")
|
||||
await self.dpub_sock.send(b"syndic", flags=zmq.SNDMORE)
|
||||
await self.dpub_sock.send(payload)
|
||||
yield self.dpub_sock.send_multipart([b"syndic", payload])
|
||||
log.trace("Filtered data has been sent to syndic")
|
||||
# otherwise its a broadcast
|
||||
else:
|
||||
# TODO: constants file for "broadcast"
|
||||
log.trace("Sending broadcasted data over publisher %s", self.pub_uri)
|
||||
await self.dpub_sock.send(b"broadcast", flags=zmq.SNDMORE)
|
||||
await self.dpub_sock.send(payload)
|
||||
yield self.dpub_sock.send_multipart([b"broadcast", payload])
|
||||
log.trace("Broadcasted data has been sent")
|
||||
else:
|
||||
log.trace("Sending ZMQ-unfiltered data over publisher %s", self.pub_uri)
|
||||
|
|
|
@ -1,11 +1,16 @@
|
|||
import asyncio
|
||||
import copy
|
||||
import logging
|
||||
import os
|
||||
import random
|
||||
import time
|
||||
from contextlib import contextmanager
|
||||
|
||||
import pytest
|
||||
from saltfactories.utils import random_string
|
||||
|
||||
import salt.transport.zeromq
|
||||
import salt.utils.process
|
||||
from tests.support.mock import MagicMock, patch
|
||||
from tests.support.pytest.transport import PubServerChannelProcess
|
||||
|
||||
|
@ -21,9 +26,163 @@ pytestmark = [
|
|||
]
|
||||
|
||||
|
||||
class PubServerChannelSender:
|
||||
def __init__(self, pub_server_channel, payload_list):
|
||||
self.pub_server_channel = pub_server_channel
|
||||
self.payload_list = payload_list
|
||||
|
||||
def run(self):
|
||||
for payload in self.payload_list:
|
||||
self.pub_server_channel.publish(payload)
|
||||
time.sleep(2)
|
||||
|
||||
|
||||
def generate_msg_list(msg_cnt, minions_list, broadcast):
|
||||
msg_list = []
|
||||
for i in range(msg_cnt):
|
||||
for idx, minion_id in enumerate(minions_list):
|
||||
if broadcast:
|
||||
msg_list.append(
|
||||
{"tgt_type": "grain", "tgt": "id:*", "jid": msg_cnt * idx + i}
|
||||
)
|
||||
else:
|
||||
msg_list.append(
|
||||
{"tgt_type": "list", "tgt": [minion_id], "jid": msg_cnt * idx + i}
|
||||
)
|
||||
return msg_list
|
||||
|
||||
|
||||
@contextmanager
|
||||
def channel_publisher_manager(msg_list, p_cnt, pub_server_channel):
|
||||
process_list = []
|
||||
msg_list = copy.deepcopy(msg_list)
|
||||
random.shuffle(msg_list)
|
||||
batch_size = len(msg_list) // p_cnt
|
||||
list_batch = [
|
||||
[x * batch_size, x * batch_size + batch_size] for x in range(0, p_cnt)
|
||||
]
|
||||
list_batch[-1][1] = list_batch[-1][1] + 1
|
||||
try:
|
||||
for i, j in list_batch:
|
||||
c = PubServerChannelSender(pub_server_channel, msg_list[i:j])
|
||||
p = salt.utils.process.Process(target=c.run)
|
||||
process_list.append(p)
|
||||
for p in process_list:
|
||||
p.start()
|
||||
yield
|
||||
finally:
|
||||
for p in process_list:
|
||||
p.join()
|
||||
|
||||
|
||||
@pytest.mark.skip_on_windows
|
||||
@pytest.mark.slow_test
|
||||
def test_zeromq_filtering(salt_master, salt_minion):
|
||||
def test_zeromq_filtering_minion(salt_master, salt_minion):
|
||||
opts = dict(
|
||||
salt_master.config.copy(),
|
||||
ipc_mode="ipc",
|
||||
pub_hwm=0,
|
||||
zmq_filtering=True,
|
||||
acceptance_wait_time=5,
|
||||
)
|
||||
minion_opts = dict(
|
||||
salt_minion.config.copy(),
|
||||
zmq_filtering=True,
|
||||
)
|
||||
messages = 200
|
||||
workers = 5
|
||||
minions = 3
|
||||
expect = set(range(messages))
|
||||
target_minion_id = salt_minion.id
|
||||
minions_list = [target_minion_id]
|
||||
for _ in range(minions - 1):
|
||||
minions_list.append(random_string("zeromq-minion-"))
|
||||
msg_list = generate_msg_list(messages, minions_list, False)
|
||||
with patch(
|
||||
"salt.utils.minions.CkMinions.check_minions",
|
||||
MagicMock(
|
||||
return_value={
|
||||
"minions": minions_list,
|
||||
"missing": [],
|
||||
"ssh_minions": False,
|
||||
}
|
||||
),
|
||||
):
|
||||
with PubServerChannelProcess(opts, minion_opts) as server_channel:
|
||||
with channel_publisher_manager(
|
||||
msg_list, workers, server_channel.pub_server_channel
|
||||
):
|
||||
cnt = 0
|
||||
last_results_len = 0
|
||||
while cnt < 20:
|
||||
time.sleep(2)
|
||||
results_len = len(server_channel.collector.results)
|
||||
if last_results_len == results_len:
|
||||
break
|
||||
last_results_len = results_len
|
||||
cnt += 1
|
||||
results = set(server_channel.collector.results)
|
||||
assert (
|
||||
results == expect
|
||||
), f"{len(results)}, != {len(expect)}, difference: {expect.difference(results)} {results}"
|
||||
|
||||
|
||||
@pytest.mark.skip_on_windows
|
||||
@pytest.mark.slow_test
|
||||
def test_zeromq_filtering_syndic(salt_master, salt_minion):
|
||||
opts = dict(
|
||||
salt_master.config.copy(),
|
||||
ipc_mode="ipc",
|
||||
pub_hwm=0,
|
||||
zmq_filtering=True,
|
||||
acceptance_wait_time=5,
|
||||
order_masters=True,
|
||||
)
|
||||
minion_opts = dict(
|
||||
salt_minion.config.copy(),
|
||||
zmq_filtering=True,
|
||||
__role="syndic",
|
||||
)
|
||||
messages = 200
|
||||
workers = 5
|
||||
minions = 3
|
||||
expect = set(range(messages * minions))
|
||||
minions_list = []
|
||||
for _ in range(minions):
|
||||
minions_list.append(random_string("zeromq-minion-"))
|
||||
msg_list = generate_msg_list(messages, minions_list, False)
|
||||
with patch(
|
||||
"salt.utils.minions.CkMinions.check_minions",
|
||||
MagicMock(
|
||||
return_value={
|
||||
"minions": minions_list,
|
||||
"missing": [],
|
||||
"ssh_minions": False,
|
||||
}
|
||||
),
|
||||
):
|
||||
with PubServerChannelProcess(opts, minion_opts) as server_channel:
|
||||
with channel_publisher_manager(
|
||||
msg_list, workers, server_channel.pub_server_channel
|
||||
):
|
||||
cnt = 0
|
||||
last_results_len = 0
|
||||
while cnt < 20:
|
||||
time.sleep(2)
|
||||
results_len = len(server_channel.collector.results)
|
||||
if last_results_len == results_len:
|
||||
break
|
||||
last_results_len = results_len
|
||||
cnt += 1
|
||||
results = set(server_channel.collector.results)
|
||||
assert (
|
||||
results == expect
|
||||
), f"{len(results)}, != {len(expect)}, difference: {expect.difference(results)} {results}"
|
||||
|
||||
|
||||
@pytest.mark.skip_on_windows
|
||||
@pytest.mark.slow_test
|
||||
def test_zeromq_filtering_broadcast(salt_master, salt_minion):
|
||||
"""
|
||||
Test sending messages to publisher using UDP with zeromq_filtering enabled
|
||||
"""
|
||||
|
@ -34,28 +193,46 @@ def test_zeromq_filtering(salt_master, salt_minion):
|
|||
zmq_filtering=True,
|
||||
acceptance_wait_time=5,
|
||||
)
|
||||
send_num = 1
|
||||
expect = []
|
||||
minion_opts = dict(
|
||||
salt_minion.config.copy(),
|
||||
zmq_filtering=True,
|
||||
)
|
||||
messages = 200
|
||||
workers = 5
|
||||
minions = 3
|
||||
expect = set(range(messages * minions))
|
||||
target_minion_id = salt_minion.id
|
||||
minions_list = [target_minion_id]
|
||||
for _ in range(minions - 1):
|
||||
minions_list.append(random_string("zeromq-minion-"))
|
||||
msg_list = generate_msg_list(messages, minions_list, True)
|
||||
with patch(
|
||||
"salt.utils.minions.CkMinions.check_minions",
|
||||
MagicMock(
|
||||
return_value={
|
||||
"minions": [salt_minion.id],
|
||||
"minions": minions_list,
|
||||
"missing": [],
|
||||
"ssh_minions": False,
|
||||
}
|
||||
),
|
||||
):
|
||||
with PubServerChannelProcess(
|
||||
opts, salt_minion.config.copy(), zmq_filtering=True
|
||||
) as server_channel:
|
||||
expect.append(send_num)
|
||||
load = {"tgt_type": "glob", "tgt": "*", "jid": send_num}
|
||||
server_channel.publish(load)
|
||||
results = server_channel.collector.results
|
||||
assert len(results) == send_num, "{} != {}, difference: {}".format(
|
||||
len(results), send_num, set(expect).difference(results)
|
||||
)
|
||||
with PubServerChannelProcess(opts, minion_opts) as server_channel:
|
||||
with channel_publisher_manager(
|
||||
msg_list, workers, server_channel.pub_server_channel
|
||||
):
|
||||
cnt = 0
|
||||
last_results_len = 0
|
||||
while cnt < 20:
|
||||
time.sleep(2)
|
||||
results_len = len(server_channel.collector.results)
|
||||
if last_results_len == results_len:
|
||||
break
|
||||
last_results_len = results_len
|
||||
cnt += 1
|
||||
results = set(server_channel.collector.results)
|
||||
assert (
|
||||
results == expect
|
||||
), f"{len(results)}, != {len(expect)}, difference: {expect.difference(results)} {results}"
|
||||
|
||||
|
||||
async def test_pub_channel(master_opts, io_loop):
|
||||
|
|
|
@ -15,6 +15,7 @@ log = logging.getLogger(__name__)
|
|||
CHECK_IMPORTS_SLS_CONTENTS = """
|
||||
#!py
|
||||
import importlib
|
||||
import sys
|
||||
|
||||
def run():
|
||||
config = {}
|
||||
|
@ -81,7 +82,12 @@ def run():
|
|||
]
|
||||
}
|
||||
|
||||
for import_name in ["telnetlib"]:
|
||||
# Import required for all OS'es
|
||||
for import_name in [
|
||||
"jinja2",
|
||||
"telnetlib",
|
||||
"yaml",
|
||||
]:
|
||||
try:
|
||||
importlib.import_module(import_name)
|
||||
config[import_name] = {
|
||||
|
@ -101,6 +107,40 @@ def run():
|
|||
}
|
||||
]
|
||||
}
|
||||
|
||||
# Windows specific requirements (I think, there may be some for other OSes in here)
|
||||
if sys.platform == "win32":
|
||||
for import_name in [
|
||||
"cffi",
|
||||
"clr_loader",
|
||||
"lxml",
|
||||
"pythonnet",
|
||||
"pytz",
|
||||
"pywintypes",
|
||||
"timelib",
|
||||
"win32",
|
||||
"wmi",
|
||||
"xmltodict",
|
||||
]:
|
||||
try:
|
||||
importlib.import_module(import_name)
|
||||
config[import_name] = {
|
||||
'test.succeed_without_changes': [
|
||||
{
|
||||
"name": import_name,
|
||||
'comment': "The '{}' import succeeded.".format(import_name)
|
||||
}
|
||||
]
|
||||
}
|
||||
except ModuleNotFoundError as err:
|
||||
config[import_name] = {
|
||||
'test.fail_without_changes': [
|
||||
{
|
||||
"name": import_name,
|
||||
'comment': "The '{}' import failed. The error was: {}".format(import_name, err)
|
||||
}
|
||||
]
|
||||
}
|
||||
return config
|
||||
"""
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
import ctypes
|
||||
import hashlib
|
||||
import logging
|
||||
import multiprocessing
|
||||
import queue
|
||||
|
@ -13,8 +14,10 @@ import zmq
|
|||
from pytestshellutils.utils.processes import terminate_process
|
||||
|
||||
import salt.channel.server
|
||||
import salt.crypt
|
||||
import salt.exceptions
|
||||
import salt.master
|
||||
import salt.payload
|
||||
import salt.utils.msgpack
|
||||
import salt.utils.process
|
||||
import salt.utils.stringutils
|
||||
|
@ -37,10 +40,12 @@ class Collector(salt.utils.process.SignalHandlingProcess):
|
|||
port,
|
||||
aes_key,
|
||||
timeout=300,
|
||||
zmq_filtering=False,
|
||||
):
|
||||
super().__init__()
|
||||
self.minion_config = minion_config
|
||||
self.hexid = hashlib.sha1(
|
||||
salt.utils.stringutils.to_bytes(self.minion_config["id"])
|
||||
).hexdigest()
|
||||
self.interface = interface
|
||||
self.port = port
|
||||
self.aes_key = aes_key
|
||||
|
@ -49,10 +54,11 @@ class Collector(salt.utils.process.SignalHandlingProcess):
|
|||
self.hard_timeout = time.time() + timeout + 120
|
||||
self.manager = multiprocessing.Manager()
|
||||
self.results = self.manager.list()
|
||||
self.zmq_filtering = zmq_filtering
|
||||
self.zmq_filtering = minion_config["zmq_filtering"]
|
||||
self.stopped = multiprocessing.Event()
|
||||
self.started = multiprocessing.Event()
|
||||
self.running = multiprocessing.Event()
|
||||
self.stop_running = multiprocessing.Event()
|
||||
self.unpacker = salt.utils.msgpack.Unpacker(raw=False)
|
||||
|
||||
@property
|
||||
|
@ -86,9 +92,17 @@ class Collector(salt.utils.process.SignalHandlingProcess):
|
|||
self.ctx = zmq.Context()
|
||||
self.sock = self.ctx.socket(zmq.SUB)
|
||||
self.sock.setsockopt(zmq.LINGER, -1)
|
||||
self.sock.setsockopt(zmq.SUBSCRIBE, b"")
|
||||
if self.zmq_filtering:
|
||||
self.sock.setsockopt(zmq.SUBSCRIBE, b"broadcast")
|
||||
if self.minion_config.get("__role") == "syndic":
|
||||
self.sock.setsockopt(zmq.SUBSCRIBE, b"syndic")
|
||||
else:
|
||||
self.sock.setsockopt(
|
||||
zmq.SUBSCRIBE, salt.utils.stringutils.to_bytes(self.hexid)
|
||||
)
|
||||
else:
|
||||
self.sock.setsockopt(zmq.SUBSCRIBE, b"")
|
||||
pub_uri = f"tcp://{self.interface}:{self.port}"
|
||||
log.info("Collector listen %s", pub_uri)
|
||||
self.sock.connect(pub_uri)
|
||||
else:
|
||||
end = time.time() + 120
|
||||
|
@ -110,9 +124,25 @@ class Collector(salt.utils.process.SignalHandlingProcess):
|
|||
# test_zeromq_filtering requires catching the
|
||||
# SaltDeserializationError in order to pass.
|
||||
try:
|
||||
payload = self.sock.recv(zmq.NOBLOCK)
|
||||
serial_payload = salt.payload.loads(payload)
|
||||
raise tornado.gen.Return(serial_payload)
|
||||
messages = self.sock.recv_multipart(flags=zmq.NOBLOCK, copy=True)
|
||||
messages_len = len(messages)
|
||||
if messages_len == 1:
|
||||
serial_payload = salt.payload.loads(messages[0])
|
||||
elif messages_len == 2:
|
||||
message_target = salt.utils.stringutils.to_str(messages[0])
|
||||
is_syndic = self.minion_config.get("__role") == "syndic"
|
||||
if (
|
||||
not is_syndic
|
||||
and message_target not in ("broadcast", self.hexid)
|
||||
) or (is_syndic and message_target not in ("broadcast", "syndic")):
|
||||
log.debug(
|
||||
"Publish received for not this minion: %s", message_target
|
||||
)
|
||||
raise salt.ext.tornado.gen.Return(None)
|
||||
serial_payload = salt.payload.loads(messages[1])
|
||||
else:
|
||||
raise Exception("Invalid number of messages")
|
||||
raise salt.ext.tornado.gen.Return(serial_payload)
|
||||
except (zmq.ZMQError, salt.exceptions.SaltDeserializationError):
|
||||
raise RecvError("ZMQ Error")
|
||||
else:
|
||||
|
@ -164,6 +194,7 @@ class Collector(salt.utils.process.SignalHandlingProcess):
|
|||
continue
|
||||
if "stop" in payload:
|
||||
log.info("Collector stopped")
|
||||
self.stop_running.set()
|
||||
break
|
||||
last_msg = time.time()
|
||||
self.results.append(payload["jid"])
|
||||
|
@ -304,7 +335,14 @@ class PubServerChannelProcess(salt.utils.process.SignalHandlingProcess):
|
|||
|
||||
def __exit__(self, *args):
|
||||
# Publish a payload to tell the collection it's done processing
|
||||
self.publish({"tgt_type": "glob", "tgt": "*", "jid": -1, "stop": True})
|
||||
attempts = 300
|
||||
while attempts > 0:
|
||||
self.publish({"tgt_type": "glob", "tgt": "*", "jid": -1, "stop": True})
|
||||
if self.collector.stop_running.wait(1) is True:
|
||||
break
|
||||
attempts -= 1
|
||||
else:
|
||||
pytest.fail("Failed to confirm the collector has stopped")
|
||||
# Now trigger the collector to also exit
|
||||
self.collector.__exit__(*args)
|
||||
# We can safely wait here without a timeout because the Collector instance has a
|
||||
|
|
21
tools/vm.py
21
tools/vm.py
|
@ -263,6 +263,22 @@ def rsync(ctx: Context, name: str, download: bool = False):
|
|||
"--print-tests-selection",
|
||||
],
|
||||
},
|
||||
"print_system_info": {
|
||||
"help": "Print the system information",
|
||||
"action": "store_true",
|
||||
"flags": [
|
||||
"--psi",
|
||||
"--print-system-information",
|
||||
],
|
||||
},
|
||||
"print_system_info_only": {
|
||||
"help": "Print the system information and exit",
|
||||
"action": "store_true",
|
||||
"flags": [
|
||||
"--psio",
|
||||
"--print-system-information-only",
|
||||
],
|
||||
},
|
||||
"skip_code_coverage": {
|
||||
"help": "Skip tracking code coverage",
|
||||
"action": "store_true",
|
||||
|
@ -293,6 +309,7 @@ def test(
|
|||
skip_requirements_install: bool = False,
|
||||
print_tests_selection: bool = False,
|
||||
print_system_info: bool = False,
|
||||
print_system_info_only: bool = False,
|
||||
skip_code_coverage: bool = False,
|
||||
envvars: list[str] = None,
|
||||
fips: bool = False,
|
||||
|
@ -323,6 +340,10 @@ def test(
|
|||
env["PRINT_SYSTEM_INFO"] = "1"
|
||||
else:
|
||||
env["PRINT_SYSTEM_INFO"] = "0"
|
||||
if print_system_info_only:
|
||||
env["PRINT_SYSTEM_INFO_ONLY"] = "1"
|
||||
else:
|
||||
env["PRINT_SYSTEM_INFO_ONLY"] = "0"
|
||||
if (
|
||||
skip_requirements_install
|
||||
or os.environ.get("SKIP_REQUIREMENTS_INSTALL", "0") == "1"
|
||||
|
|
Loading…
Add table
Reference in a new issue