Merge 3006.x into 3007.x

This commit is contained in:
Pedro Algarvio 2024-02-19 13:10:20 +00:00
commit 34ab8c732b
No known key found for this signature in database
GPG key ID: BB36BF6584A298FF
62 changed files with 572 additions and 266 deletions

2
changelog/65154.fixed.md Normal file
View file

@ -0,0 +1,2 @@
Fix an issue where the minion would crash on Windows if some of the grains
failed to resolve

View file

@ -0,0 +1 @@
Bump to `cryptography==42.0.3` due to https://github.com/advisories/GHSA-3ww4-gg4f-jr7f

View file

@ -20,7 +20,7 @@ charset-normalizer==3.2.0
# via # via
# -c requirements/static/ci/py3.10/linux.txt # -c requirements/static/ci/py3.10/linux.txt
# requests # requests
cryptography==42.0.0 cryptography==42.0.3
# via # via
# -c requirements/static/ci/py3.10/linux.txt # -c requirements/static/ci/py3.10/linux.txt
# pyspnego # pyspnego

View file

@ -23,7 +23,7 @@ async-timeout==4.0.3
# via # via
# -c requirements/static/ci/../pkg/py3.10/darwin.txt # -c requirements/static/ci/../pkg/py3.10/darwin.txt
# aiohttp # aiohttp
attrs==23.1.0 attrs==23.2.0
# via # via
# -c requirements/static/ci/../pkg/py3.10/darwin.txt # -c requirements/static/ci/../pkg/py3.10/darwin.txt
# aiohttp # aiohttp
@ -97,7 +97,7 @@ contextvars==2.4
# -r requirements/base.txt # -r requirements/base.txt
croniter==1.3.15 ; sys_platform != "win32" croniter==1.3.15 ; sys_platform != "win32"
# via -r requirements/static/ci/common.in # via -r requirements/static/ci/common.in
cryptography==42.0.0 cryptography==42.0.3
# via # via
# -c requirements/static/ci/../pkg/py3.10/darwin.txt # -c requirements/static/ci/../pkg/py3.10/darwin.txt
# -r requirements/base.txt # -r requirements/base.txt

View file

@ -23,7 +23,7 @@ async-timeout==4.0.3
# via # via
# -c requirements/static/ci/../pkg/py3.10/freebsd.txt # -c requirements/static/ci/../pkg/py3.10/freebsd.txt
# aiohttp # aiohttp
attrs==23.1.0 attrs==23.2.0
# via # via
# -c requirements/static/ci/../pkg/py3.10/freebsd.txt # -c requirements/static/ci/../pkg/py3.10/freebsd.txt
# aiohttp # aiohttp
@ -96,7 +96,7 @@ contextvars==2.4
# -r requirements/base.txt # -r requirements/base.txt
croniter==1.3.15 ; sys_platform != "win32" croniter==1.3.15 ; sys_platform != "win32"
# via -r requirements/static/ci/common.in # via -r requirements/static/ci/common.in
cryptography==42.0.0 cryptography==42.0.3
# via # via
# -c requirements/static/ci/../pkg/py3.10/freebsd.txt # -c requirements/static/ci/../pkg/py3.10/freebsd.txt
# -r requirements/base.txt # -r requirements/base.txt

View file

@ -17,7 +17,7 @@ aiosignal==1.3.1
# via # via
# -c requirements/static/ci/../pkg/py3.10/linux.txt # -c requirements/static/ci/../pkg/py3.10/linux.txt
# aiohttp # aiohttp
ansible-core==2.16.2 ansible-core==2.16.3
# via ansible # via ansible
ansible==9.1.0 ; python_version >= "3.10" ansible==9.1.0 ; python_version >= "3.10"
# via -r requirements/static/ci/linux.in # via -r requirements/static/ci/linux.in
@ -33,7 +33,7 @@ async-timeout==4.0.3
# via # via
# -c requirements/static/ci/../pkg/py3.10/linux.txt # -c requirements/static/ci/../pkg/py3.10/linux.txt
# aiohttp # aiohttp
attrs==23.1.0 attrs==23.2.0
# via # via
# -c requirements/static/ci/../pkg/py3.10/linux.txt # -c requirements/static/ci/../pkg/py3.10/linux.txt
# aiohttp # aiohttp
@ -109,7 +109,7 @@ contextvars==2.4
# -r requirements/base.txt # -r requirements/base.txt
croniter==1.3.15 ; sys_platform != "win32" croniter==1.3.15 ; sys_platform != "win32"
# via -r requirements/static/ci/common.in # via -r requirements/static/ci/common.in
cryptography==42.0.0 cryptography==42.0.3
# via # via
# -c requirements/static/ci/../pkg/py3.10/linux.txt # -c requirements/static/ci/../pkg/py3.10/linux.txt
# -r requirements/base.txt # -r requirements/base.txt

View file

@ -4,7 +4,7 @@
# #
# pip-compile --no-emit-index-url --output-file=requirements/static/ci/py3.10/tools.txt requirements/static/ci/tools.in # pip-compile --no-emit-index-url --output-file=requirements/static/ci/py3.10/tools.txt requirements/static/ci/tools.in
# #
attrs==20.3.0 attrs==23.2.0
# via # via
# -r requirements/static/ci/tools.in # -r requirements/static/ci/tools.in
# python-tools-scripts # python-tools-scripts

View file

@ -17,7 +17,7 @@ async-timeout==4.0.3
# via # via
# -c requirements/static/ci/../pkg/py3.10/windows.txt # -c requirements/static/ci/../pkg/py3.10/windows.txt
# aiohttp # aiohttp
attrs==23.1.0 attrs==23.2.0
# via # via
# -c requirements/static/ci/../pkg/py3.10/windows.txt # -c requirements/static/ci/../pkg/py3.10/windows.txt
# aiohttp # aiohttp
@ -93,7 +93,7 @@ contextvars==2.4
# via # via
# -c requirements/static/ci/../pkg/py3.10/windows.txt # -c requirements/static/ci/../pkg/py3.10/windows.txt
# -r requirements/base.txt # -r requirements/base.txt
cryptography==42.0.0 cryptography==42.0.3
# via # via
# -c requirements/static/ci/../pkg/py3.10/windows.txt # -c requirements/static/ci/../pkg/py3.10/windows.txt
# -r requirements/base.txt # -r requirements/base.txt

View file

@ -20,7 +20,7 @@ charset-normalizer==3.2.0
# via # via
# -c requirements/static/ci/py3.11/linux.txt # -c requirements/static/ci/py3.11/linux.txt
# requests # requests
cryptography==42.0.0 cryptography==42.0.3
# via # via
# -c requirements/static/ci/py3.11/linux.txt # -c requirements/static/ci/py3.11/linux.txt
# pyspnego # pyspnego

View file

@ -23,12 +23,11 @@ asn1crypto==1.5.1
# via # via
# certvalidator # certvalidator
# oscrypto # oscrypto
attrs==23.1.0 attrs==23.2.0
# via # via
# -c requirements/static/ci/../pkg/py3.11/darwin.txt # -c requirements/static/ci/../pkg/py3.11/darwin.txt
# aiohttp # aiohttp
# jsonschema # jsonschema
# pytest
# pytest-salt-factories # pytest-salt-factories
# pytest-shell-utilities # pytest-shell-utilities
# pytest-skip-markers # pytest-skip-markers
@ -97,7 +96,7 @@ contextvars==2.4
# -r requirements/base.txt # -r requirements/base.txt
croniter==1.3.15 ; sys_platform != "win32" croniter==1.3.15 ; sys_platform != "win32"
# via -r requirements/static/ci/common.in # via -r requirements/static/ci/common.in
cryptography==42.0.0 cryptography==42.0.3
# via # via
# -c requirements/static/ci/../pkg/py3.11/darwin.txt # -c requirements/static/ci/../pkg/py3.11/darwin.txt
# -r requirements/base.txt # -r requirements/base.txt
@ -379,7 +378,7 @@ pytest-system-statistics==1.0.2
# via pytest-salt-factories # via pytest-salt-factories
pytest-timeout==1.4.2 pytest-timeout==1.4.2
# via -r requirements/pytest.txt # via -r requirements/pytest.txt
pytest==7.2.0 pytest==7.3.2
# via # via
# -r requirements/pytest.txt # -r requirements/pytest.txt
# pytest-custom-exit-code # pytest-custom-exit-code

View file

@ -23,12 +23,11 @@ asn1crypto==1.5.1
# via # via
# certvalidator # certvalidator
# oscrypto # oscrypto
attrs==23.1.0 attrs==23.2.0
# via # via
# -c requirements/static/ci/../pkg/py3.11/freebsd.txt # -c requirements/static/ci/../pkg/py3.11/freebsd.txt
# aiohttp # aiohttp
# jsonschema # jsonschema
# pytest
# pytest-salt-factories # pytest-salt-factories
# pytest-shell-utilities # pytest-shell-utilities
# pytest-skip-markers # pytest-skip-markers
@ -96,7 +95,7 @@ contextvars==2.4
# -r requirements/base.txt # -r requirements/base.txt
croniter==1.3.15 ; sys_platform != "win32" croniter==1.3.15 ; sys_platform != "win32"
# via -r requirements/static/ci/common.in # via -r requirements/static/ci/common.in
cryptography==42.0.0 cryptography==42.0.3
# via # via
# -c requirements/static/ci/../pkg/py3.11/freebsd.txt # -c requirements/static/ci/../pkg/py3.11/freebsd.txt
# -r requirements/base.txt # -r requirements/base.txt
@ -383,7 +382,7 @@ pytest-system-statistics==1.0.2
# via pytest-salt-factories # via pytest-salt-factories
pytest-timeout==1.4.2 pytest-timeout==1.4.2
# via -r requirements/pytest.txt # via -r requirements/pytest.txt
pytest==7.2.0 pytest==7.3.2
# via # via
# -r requirements/pytest.txt # -r requirements/pytest.txt
# pytest-custom-exit-code # pytest-custom-exit-code

View file

@ -21,7 +21,7 @@ annotated-types==0.6.0
# via # via
# -c requirements/static/ci/../pkg/py3.11/linux.txt # -c requirements/static/ci/../pkg/py3.11/linux.txt
# pydantic # pydantic
ansible-core==2.16.2 ansible-core==2.16.3
# via ansible # via ansible
ansible==9.1.0 ; python_version >= "3.10" ansible==9.1.0 ; python_version >= "3.10"
# via -r requirements/static/ci/linux.in # via -r requirements/static/ci/linux.in
@ -33,12 +33,11 @@ asn1crypto==1.5.1
# via # via
# certvalidator # certvalidator
# oscrypto # oscrypto
attrs==23.1.0 attrs==23.2.0
# via # via
# -c requirements/static/ci/../pkg/py3.11/linux.txt # -c requirements/static/ci/../pkg/py3.11/linux.txt
# aiohttp # aiohttp
# jsonschema # jsonschema
# pytest
# pytest-salt-factories # pytest-salt-factories
# pytest-shell-utilities # pytest-shell-utilities
# pytest-skip-markers # pytest-skip-markers
@ -109,7 +108,7 @@ contextvars==2.4
# -r requirements/base.txt # -r requirements/base.txt
croniter==1.3.15 ; sys_platform != "win32" croniter==1.3.15 ; sys_platform != "win32"
# via -r requirements/static/ci/common.in # via -r requirements/static/ci/common.in
cryptography==42.0.0 cryptography==42.0.3
# via # via
# -c requirements/static/ci/../pkg/py3.11/linux.txt # -c requirements/static/ci/../pkg/py3.11/linux.txt
# -r requirements/base.txt # -r requirements/base.txt
@ -415,7 +414,7 @@ pytest-system-statistics==1.0.2
# via pytest-salt-factories # via pytest-salt-factories
pytest-timeout==1.4.2 pytest-timeout==1.4.2
# via -r requirements/pytest.txt # via -r requirements/pytest.txt
pytest==7.2.0 pytest==7.3.2
# via # via
# -r requirements/pytest.txt # -r requirements/pytest.txt
# pytest-custom-exit-code # pytest-custom-exit-code

View file

@ -4,7 +4,7 @@
# #
# pip-compile --no-emit-index-url --output-file=requirements/static/ci/py3.11/tools.txt requirements/static/ci/tools.in # pip-compile --no-emit-index-url --output-file=requirements/static/ci/py3.11/tools.txt requirements/static/ci/tools.in
# #
attrs==23.1.0 attrs==23.2.0
# via # via
# -r requirements/static/ci/tools.in # -r requirements/static/ci/tools.in
# python-tools-scripts # python-tools-scripts

View file

@ -17,12 +17,11 @@ annotated-types==0.6.0
# via # via
# -c requirements/static/ci/../pkg/py3.11/windows.txt # -c requirements/static/ci/../pkg/py3.11/windows.txt
# pydantic # pydantic
attrs==23.1.0 attrs==23.2.0
# via # via
# -c requirements/static/ci/../pkg/py3.11/windows.txt # -c requirements/static/ci/../pkg/py3.11/windows.txt
# aiohttp # aiohttp
# jsonschema # jsonschema
# pytest
# pytest-salt-factories # pytest-salt-factories
# pytest-shell-utilities # pytest-shell-utilities
# pytest-skip-markers # pytest-skip-markers
@ -93,7 +92,7 @@ contextvars==2.4
# via # via
# -c requirements/static/ci/../pkg/py3.11/windows.txt # -c requirements/static/ci/../pkg/py3.11/windows.txt
# -r requirements/base.txt # -r requirements/base.txt
cryptography==42.0.0 cryptography==42.0.3
# via # via
# -c requirements/static/ci/../pkg/py3.11/windows.txt # -c requirements/static/ci/../pkg/py3.11/windows.txt
# -r requirements/base.txt # -r requirements/base.txt
@ -336,7 +335,7 @@ pytest-system-statistics==1.0.2
# via pytest-salt-factories # via pytest-salt-factories
pytest-timeout==2.1.0 pytest-timeout==2.1.0
# via -r requirements/pytest.txt # via -r requirements/pytest.txt
pytest==7.2.0 pytest==7.3.2
# via # via
# -r requirements/pytest.txt # -r requirements/pytest.txt
# pytest-custom-exit-code # pytest-custom-exit-code

View file

@ -30,13 +30,12 @@ asn1crypto==1.5.1
# -c requirements/static/ci/py3.12/linux.txt # -c requirements/static/ci/py3.12/linux.txt
# certvalidator # certvalidator
# oscrypto # oscrypto
attrs==23.1.0 attrs==23.2.0
# via # via
# -c requirements/static/ci/../pkg/py3.12/linux.txt # -c requirements/static/ci/../pkg/py3.12/linux.txt
# -c requirements/static/ci/py3.12/linux.txt # -c requirements/static/ci/py3.12/linux.txt
# aiohttp # aiohttp
# jsonschema # jsonschema
# pytest
# pytest-salt-factories # pytest-salt-factories
# pytest-shell-utilities # pytest-shell-utilities
# pytest-skip-markers # pytest-skip-markers
@ -130,7 +129,7 @@ croniter==1.3.15 ; sys_platform != "win32"
# via # via
# -c requirements/static/ci/py3.12/linux.txt # -c requirements/static/ci/py3.12/linux.txt
# -r requirements/static/ci/common.in # -r requirements/static/ci/common.in
cryptography==42.0.0 cryptography==42.0.3
# via # via
# -c requirements/static/ci/../pkg/py3.12/linux.txt # -c requirements/static/ci/../pkg/py3.12/linux.txt
# -c requirements/static/ci/py3.12/linux.txt # -c requirements/static/ci/py3.12/linux.txt
@ -548,7 +547,7 @@ pytest-timeout==1.4.2
# via # via
# -c requirements/static/ci/py3.12/linux.txt # -c requirements/static/ci/py3.12/linux.txt
# -r requirements/pytest.txt # -r requirements/pytest.txt
pytest==7.2.0 pytest==7.3.2
# via # via
# -c requirements/static/ci/py3.12/linux.txt # -c requirements/static/ci/py3.12/linux.txt
# -r requirements/pytest.txt # -r requirements/pytest.txt

View file

@ -28,7 +28,6 @@ attrs==23.2.0
# -c requirements/static/ci/../pkg/py3.12/darwin.txt # -c requirements/static/ci/../pkg/py3.12/darwin.txt
# aiohttp # aiohttp
# jsonschema # jsonschema
# pytest
# pytest-salt-factories # pytest-salt-factories
# pytest-shell-utilities # pytest-shell-utilities
# pytest-skip-markers # pytest-skip-markers
@ -97,7 +96,7 @@ contextvars==2.4
# -r requirements/base.txt # -r requirements/base.txt
croniter==1.3.15 ; sys_platform != "win32" croniter==1.3.15 ; sys_platform != "win32"
# via -r requirements/static/ci/common.in # via -r requirements/static/ci/common.in
cryptography==42.0.0 cryptography==42.0.3
# via # via
# -c requirements/static/ci/../pkg/py3.12/darwin.txt # -c requirements/static/ci/../pkg/py3.12/darwin.txt
# -r requirements/base.txt # -r requirements/base.txt
@ -379,7 +378,7 @@ pytest-system-statistics==1.0.2
# via pytest-salt-factories # via pytest-salt-factories
pytest-timeout==1.4.2 pytest-timeout==1.4.2
# via -r requirements/pytest.txt # via -r requirements/pytest.txt
pytest==7.2.0 pytest==7.3.2
# via # via
# -r requirements/pytest.txt # -r requirements/pytest.txt
# pytest-custom-exit-code # pytest-custom-exit-code

View file

@ -18,7 +18,7 @@ annotated-types==0.6.0
# via # via
# -c requirements/static/ci/py3.12/linux.txt # -c requirements/static/ci/py3.12/linux.txt
# pydantic # pydantic
attrs==23.1.0 attrs==23.2.0
# via # via
# -c requirements/static/ci/py3.12/linux.txt # -c requirements/static/ci/py3.12/linux.txt
# aiohttp # aiohttp
@ -53,7 +53,7 @@ contextvars==2.4
# via # via
# -c requirements/static/ci/py3.12/linux.txt # -c requirements/static/ci/py3.12/linux.txt
# -r requirements/base.txt # -r requirements/base.txt
cryptography==42.0.0 cryptography==42.0.3
# via # via
# -c requirements/static/ci/py3.12/linux.txt # -c requirements/static/ci/py3.12/linux.txt
# -r requirements/base.txt # -r requirements/base.txt

View file

@ -23,12 +23,11 @@ asn1crypto==1.5.1
# via # via
# certvalidator # certvalidator
# oscrypto # oscrypto
attrs==23.1.0 attrs==23.2.0
# via # via
# -c requirements/static/ci/../pkg/py3.12/freebsd.txt # -c requirements/static/ci/../pkg/py3.12/freebsd.txt
# aiohttp # aiohttp
# jsonschema # jsonschema
# pytest
# pytest-salt-factories # pytest-salt-factories
# pytest-shell-utilities # pytest-shell-utilities
# pytest-skip-markers # pytest-skip-markers
@ -96,7 +95,7 @@ contextvars==2.4
# -r requirements/base.txt # -r requirements/base.txt
croniter==1.3.15 ; sys_platform != "win32" croniter==1.3.15 ; sys_platform != "win32"
# via -r requirements/static/ci/common.in # via -r requirements/static/ci/common.in
cryptography==42.0.0 cryptography==42.0.3
# via # via
# -c requirements/static/ci/../pkg/py3.12/freebsd.txt # -c requirements/static/ci/../pkg/py3.12/freebsd.txt
# -r requirements/base.txt # -r requirements/base.txt
@ -383,7 +382,7 @@ pytest-system-statistics==1.0.2
# via pytest-salt-factories # via pytest-salt-factories
pytest-timeout==1.4.2 pytest-timeout==1.4.2
# via -r requirements/pytest.txt # via -r requirements/pytest.txt
pytest==7.2.0 pytest==7.3.2
# via # via
# -r requirements/pytest.txt # -r requirements/pytest.txt
# pytest-custom-exit-code # pytest-custom-exit-code

View file

@ -26,7 +26,7 @@ annotated-types==0.6.0
# -c requirements/static/ci/../pkg/py3.12/linux.txt # -c requirements/static/ci/../pkg/py3.12/linux.txt
# -c requirements/static/ci/py3.12/linux.txt # -c requirements/static/ci/py3.12/linux.txt
# pydantic # pydantic
ansible-core==2.16.2 ansible-core==2.16.3
# via # via
# -c requirements/static/ci/py3.12/linux.txt # -c requirements/static/ci/py3.12/linux.txt
# ansible # ansible
@ -49,7 +49,7 @@ asn1crypto==1.5.1
# oscrypto # oscrypto
astroid==2.3.3 astroid==2.3.3
# via pylint # via pylint
attrs==23.1.0 attrs==23.2.0
# via # via
# -c requirements/static/ci/../pkg/py3.12/linux.txt # -c requirements/static/ci/../pkg/py3.12/linux.txt
# -c requirements/static/ci/py3.12/linux.txt # -c requirements/static/ci/py3.12/linux.txt
@ -147,7 +147,7 @@ croniter==1.3.15 ; sys_platform != "win32"
# via # via
# -c requirements/static/ci/py3.12/linux.txt # -c requirements/static/ci/py3.12/linux.txt
# -r requirements/static/ci/common.in # -r requirements/static/ci/common.in
cryptography==42.0.0 cryptography==42.0.3
# via # via
# -c requirements/static/ci/../pkg/py3.12/linux.txt # -c requirements/static/ci/../pkg/py3.12/linux.txt
# -c requirements/static/ci/py3.12/linux.txt # -c requirements/static/ci/py3.12/linux.txt

View file

@ -21,7 +21,7 @@ annotated-types==0.6.0
# via # via
# -c requirements/static/ci/../pkg/py3.12/linux.txt # -c requirements/static/ci/../pkg/py3.12/linux.txt
# pydantic # pydantic
ansible-core==2.16.2 ansible-core==2.16.3
# via ansible # via ansible
ansible==9.1.0 ; python_version >= "3.10" ansible==9.1.0 ; python_version >= "3.10"
# via -r requirements/static/ci/linux.in # via -r requirements/static/ci/linux.in
@ -33,12 +33,11 @@ asn1crypto==1.5.1
# via # via
# certvalidator # certvalidator
# oscrypto # oscrypto
attrs==23.1.0 attrs==23.2.0
# via # via
# -c requirements/static/ci/../pkg/py3.12/linux.txt # -c requirements/static/ci/../pkg/py3.12/linux.txt
# aiohttp # aiohttp
# jsonschema # jsonschema
# pytest
# pytest-salt-factories # pytest-salt-factories
# pytest-shell-utilities # pytest-shell-utilities
# pytest-skip-markers # pytest-skip-markers
@ -109,7 +108,7 @@ contextvars==2.4
# -r requirements/base.txt # -r requirements/base.txt
croniter==1.3.15 ; sys_platform != "win32" croniter==1.3.15 ; sys_platform != "win32"
# via -r requirements/static/ci/common.in # via -r requirements/static/ci/common.in
cryptography==42.0.0 cryptography==42.0.3
# via # via
# -c requirements/static/ci/../pkg/py3.12/linux.txt # -c requirements/static/ci/../pkg/py3.12/linux.txt
# -r requirements/base.txt # -r requirements/base.txt
@ -415,7 +414,7 @@ pytest-system-statistics==1.0.2
# via pytest-salt-factories # via pytest-salt-factories
pytest-timeout==1.4.2 pytest-timeout==1.4.2
# via -r requirements/pytest.txt # via -r requirements/pytest.txt
pytest==7.2.0 pytest==7.3.2
# via # via
# -r requirements/pytest.txt # -r requirements/pytest.txt
# pytest-custom-exit-code # pytest-custom-exit-code

View file

@ -4,7 +4,7 @@
# #
# pip-compile --no-emit-index-url --output-file=requirements/static/ci/py3.12/tools.txt requirements/static/ci/tools.in # pip-compile --no-emit-index-url --output-file=requirements/static/ci/py3.12/tools.txt requirements/static/ci/tools.in
# #
attrs==23.1.0 attrs==23.2.0
# via # via
# -r requirements/static/ci/tools.in # -r requirements/static/ci/tools.in
# python-tools-scripts # python-tools-scripts

View file

@ -17,12 +17,11 @@ annotated-types==0.6.0
# via # via
# -c requirements/static/ci/../pkg/py3.12/windows.txt # -c requirements/static/ci/../pkg/py3.12/windows.txt
# pydantic # pydantic
attrs==23.1.0 attrs==23.2.0
# via # via
# -c requirements/static/ci/../pkg/py3.12/windows.txt # -c requirements/static/ci/../pkg/py3.12/windows.txt
# aiohttp # aiohttp
# jsonschema # jsonschema
# pytest
# pytest-salt-factories # pytest-salt-factories
# pytest-shell-utilities # pytest-shell-utilities
# pytest-skip-markers # pytest-skip-markers
@ -93,7 +92,7 @@ contextvars==2.4
# via # via
# -c requirements/static/ci/../pkg/py3.12/windows.txt # -c requirements/static/ci/../pkg/py3.12/windows.txt
# -r requirements/base.txt # -r requirements/base.txt
cryptography==42.0.0 cryptography==42.0.3
# via # via
# -c requirements/static/ci/../pkg/py3.12/windows.txt # -c requirements/static/ci/../pkg/py3.12/windows.txt
# -r requirements/base.txt # -r requirements/base.txt
@ -336,7 +335,7 @@ pytest-system-statistics==1.0.2
# via pytest-salt-factories # via pytest-salt-factories
pytest-timeout==2.1.0 pytest-timeout==2.1.0
# via -r requirements/pytest.txt # via -r requirements/pytest.txt
pytest==7.2.0 pytest==7.3.2
# via # via
# -r requirements/pytest.txt # -r requirements/pytest.txt
# pytest-custom-exit-code # pytest-custom-exit-code

View file

@ -20,7 +20,7 @@ charset-normalizer==3.2.0
# via # via
# -c requirements/static/ci/py3.8/linux.txt # -c requirements/static/ci/py3.8/linux.txt
# requests # requests
cryptography==42.0.0 cryptography==42.0.3
# via # via
# -c requirements/static/ci/py3.8/linux.txt # -c requirements/static/ci/py3.8/linux.txt
# pyspnego # pyspnego

View file

@ -23,7 +23,7 @@ async-timeout==4.0.3
# via # via
# -c requirements/static/ci/../pkg/py3.8/freebsd.txt # -c requirements/static/ci/../pkg/py3.8/freebsd.txt
# aiohttp # aiohttp
attrs==23.1.0 attrs==23.2.0
# via # via
# -c requirements/static/ci/../pkg/py3.8/freebsd.txt # -c requirements/static/ci/../pkg/py3.8/freebsd.txt
# aiohttp # aiohttp
@ -96,7 +96,7 @@ contextvars==2.4
# -r requirements/base.txt # -r requirements/base.txt
croniter==1.3.15 ; sys_platform != "win32" croniter==1.3.15 ; sys_platform != "win32"
# via -r requirements/static/ci/common.in # via -r requirements/static/ci/common.in
cryptography==42.0.0 cryptography==42.0.3
# via # via
# -c requirements/static/ci/../pkg/py3.8/freebsd.txt # -c requirements/static/ci/../pkg/py3.8/freebsd.txt
# -r requirements/base.txt # -r requirements/base.txt

View file

@ -29,7 +29,7 @@ async-timeout==4.0.3
# via # via
# -c requirements/static/ci/../pkg/py3.8/linux.txt # -c requirements/static/ci/../pkg/py3.8/linux.txt
# aiohttp # aiohttp
attrs==23.1.0 attrs==23.2.0
# via # via
# -c requirements/static/ci/../pkg/py3.8/linux.txt # -c requirements/static/ci/../pkg/py3.8/linux.txt
# aiohttp # aiohttp
@ -105,7 +105,7 @@ contextvars==2.4
# -r requirements/base.txt # -r requirements/base.txt
croniter==1.3.15 ; sys_platform != "win32" croniter==1.3.15 ; sys_platform != "win32"
# via -r requirements/static/ci/common.in # via -r requirements/static/ci/common.in
cryptography==42.0.0 cryptography==42.0.3
# via # via
# -c requirements/static/ci/../pkg/py3.8/linux.txt # -c requirements/static/ci/../pkg/py3.8/linux.txt
# -r requirements/base.txt # -r requirements/base.txt

View file

@ -17,7 +17,7 @@ async-timeout==4.0.3
# via # via
# -c requirements/static/ci/../pkg/py3.8/windows.txt # -c requirements/static/ci/../pkg/py3.8/windows.txt
# aiohttp # aiohttp
attrs==23.1.0 attrs==23.2.0
# via # via
# -c requirements/static/ci/../pkg/py3.8/windows.txt # -c requirements/static/ci/../pkg/py3.8/windows.txt
# aiohttp # aiohttp
@ -93,7 +93,7 @@ contextvars==2.4
# via # via
# -c requirements/static/ci/../pkg/py3.8/windows.txt # -c requirements/static/ci/../pkg/py3.8/windows.txt
# -r requirements/base.txt # -r requirements/base.txt
cryptography==42.0.0 cryptography==42.0.3
# via # via
# -c requirements/static/ci/../pkg/py3.8/windows.txt # -c requirements/static/ci/../pkg/py3.8/windows.txt
# -r requirements/base.txt # -r requirements/base.txt

View file

@ -20,7 +20,7 @@ charset-normalizer==3.2.0
# via # via
# -c requirements/static/ci/py3.9/linux.txt # -c requirements/static/ci/py3.9/linux.txt
# requests # requests
cryptography==42.0.0 cryptography==42.0.3
# via # via
# -c requirements/static/ci/py3.9/linux.txt # -c requirements/static/ci/py3.9/linux.txt
# pyspnego # pyspnego

View file

@ -23,7 +23,7 @@ async-timeout==4.0.3
# via # via
# -c requirements/static/ci/../pkg/py3.9/darwin.txt # -c requirements/static/ci/../pkg/py3.9/darwin.txt
# aiohttp # aiohttp
attrs==23.1.0 attrs==23.2.0
# via # via
# -c requirements/static/ci/../pkg/py3.9/darwin.txt # -c requirements/static/ci/../pkg/py3.9/darwin.txt
# aiohttp # aiohttp
@ -97,7 +97,7 @@ contextvars==2.4
# -r requirements/base.txt # -r requirements/base.txt
croniter==1.3.15 ; sys_platform != "win32" croniter==1.3.15 ; sys_platform != "win32"
# via -r requirements/static/ci/common.in # via -r requirements/static/ci/common.in
cryptography==42.0.0 cryptography==42.0.3
# via # via
# -c requirements/static/ci/../pkg/py3.9/darwin.txt # -c requirements/static/ci/../pkg/py3.9/darwin.txt
# -r requirements/base.txt # -r requirements/base.txt

View file

@ -23,7 +23,7 @@ async-timeout==4.0.3
# via # via
# -c requirements/static/ci/../pkg/py3.9/freebsd.txt # -c requirements/static/ci/../pkg/py3.9/freebsd.txt
# aiohttp # aiohttp
attrs==23.1.0 attrs==23.2.0
# via # via
# -c requirements/static/ci/../pkg/py3.9/freebsd.txt # -c requirements/static/ci/../pkg/py3.9/freebsd.txt
# aiohttp # aiohttp
@ -96,7 +96,7 @@ contextvars==2.4
# -r requirements/base.txt # -r requirements/base.txt
croniter==1.3.15 ; sys_platform != "win32" croniter==1.3.15 ; sys_platform != "win32"
# via -r requirements/static/ci/common.in # via -r requirements/static/ci/common.in
cryptography==42.0.0 cryptography==42.0.3
# via # via
# -c requirements/static/ci/../pkg/py3.9/freebsd.txt # -c requirements/static/ci/../pkg/py3.9/freebsd.txt
# -r requirements/base.txt # -r requirements/base.txt

View file

@ -29,7 +29,7 @@ async-timeout==4.0.3
# via # via
# -c requirements/static/ci/../pkg/py3.9/linux.txt # -c requirements/static/ci/../pkg/py3.9/linux.txt
# aiohttp # aiohttp
attrs==23.1.0 attrs==23.2.0
# via # via
# -c requirements/static/ci/../pkg/py3.9/linux.txt # -c requirements/static/ci/../pkg/py3.9/linux.txt
# aiohttp # aiohttp
@ -105,7 +105,7 @@ contextvars==2.4
# -r requirements/base.txt # -r requirements/base.txt
croniter==1.3.15 ; sys_platform != "win32" croniter==1.3.15 ; sys_platform != "win32"
# via -r requirements/static/ci/common.in # via -r requirements/static/ci/common.in
cryptography==42.0.0 cryptography==42.0.3
# via # via
# -c requirements/static/ci/../pkg/py3.9/linux.txt # -c requirements/static/ci/../pkg/py3.9/linux.txt
# -r requirements/base.txt # -r requirements/base.txt

View file

@ -4,7 +4,7 @@
# #
# pip-compile --no-emit-index-url --output-file=requirements/static/ci/py3.9/tools.txt requirements/static/ci/tools.in # pip-compile --no-emit-index-url --output-file=requirements/static/ci/py3.9/tools.txt requirements/static/ci/tools.in
# #
attrs==20.3.0 attrs==23.2.0
# via # via
# -r requirements/static/ci/tools.in # -r requirements/static/ci/tools.in
# python-tools-scripts # python-tools-scripts

View file

@ -17,7 +17,7 @@ async-timeout==4.0.3
# via # via
# -c requirements/static/ci/../pkg/py3.9/windows.txt # -c requirements/static/ci/../pkg/py3.9/windows.txt
# aiohttp # aiohttp
attrs==23.1.0 attrs==23.2.0
# via # via
# -c requirements/static/ci/../pkg/py3.9/windows.txt # -c requirements/static/ci/../pkg/py3.9/windows.txt
# aiohttp # aiohttp
@ -93,7 +93,7 @@ contextvars==2.4
# via # via
# -c requirements/static/ci/../pkg/py3.9/windows.txt # -c requirements/static/ci/../pkg/py3.9/windows.txt
# -r requirements/base.txt # -r requirements/base.txt
cryptography==42.0.0 cryptography==42.0.3
# via # via
# -c requirements/static/ci/../pkg/py3.9/windows.txt # -c requirements/static/ci/../pkg/py3.9/windows.txt
# -r requirements/base.txt # -r requirements/base.txt

View file

@ -10,7 +10,7 @@ aiosignal==1.3.1
# via aiohttp # via aiohttp
async-timeout==4.0.3 async-timeout==4.0.3
# via aiohttp # via aiohttp
attrs==23.1.0 attrs==23.2.0
# via aiohttp # via aiohttp
autocommand==2.2.2 autocommand==2.2.2
# via jaraco.text # via jaraco.text
@ -26,7 +26,7 @@ cherrypy==18.8.0
# via -r requirements/base.txt # via -r requirements/base.txt
contextvars==2.4 contextvars==2.4
# via -r requirements/base.txt # via -r requirements/base.txt
cryptography==42.0.0 cryptography==42.0.3
# via # via
# -r requirements/base.txt # -r requirements/base.txt
# pyopenssl # pyopenssl

View file

@ -10,7 +10,7 @@ aiosignal==1.3.1
# via aiohttp # via aiohttp
async-timeout==4.0.3 async-timeout==4.0.3
# via aiohttp # via aiohttp
attrs==23.1.0 attrs==23.2.0
# via aiohttp # via aiohttp
autocommand==2.2.2 autocommand==2.2.2
# via jaraco.text # via jaraco.text
@ -26,7 +26,7 @@ cherrypy==18.8.0
# via -r requirements/base.txt # via -r requirements/base.txt
contextvars==2.4 contextvars==2.4
# via -r requirements/base.txt # via -r requirements/base.txt
cryptography==42.0.0 cryptography==42.0.3
# via # via
# -r requirements/base.txt # -r requirements/base.txt
# pyopenssl # pyopenssl

View file

@ -10,7 +10,7 @@ aiosignal==1.3.1
# via aiohttp # via aiohttp
async-timeout==4.0.3 async-timeout==4.0.3
# via aiohttp # via aiohttp
attrs==23.1.0 attrs==23.2.0
# via aiohttp # via aiohttp
autocommand==2.2.2 autocommand==2.2.2
# via jaraco.text # via jaraco.text
@ -26,7 +26,7 @@ cherrypy==18.8.0
# via -r requirements/base.txt # via -r requirements/base.txt
contextvars==2.4 contextvars==2.4
# via -r requirements/base.txt # via -r requirements/base.txt
cryptography==42.0.0 cryptography==42.0.3
# via # via
# -r requirements/base.txt # -r requirements/base.txt
# pyopenssl # pyopenssl

View file

@ -10,7 +10,7 @@ aiosignal==1.3.1
# via aiohttp # via aiohttp
async-timeout==4.0.3 async-timeout==4.0.3
# via aiohttp # via aiohttp
attrs==23.1.0 attrs==23.2.0
# via aiohttp # via aiohttp
autocommand==2.2.2 autocommand==2.2.2
# via jaraco.text # via jaraco.text
@ -30,7 +30,7 @@ clr-loader==0.2.6
# via pythonnet # via pythonnet
contextvars==2.4 contextvars==2.4
# via -r requirements/base.txt # via -r requirements/base.txt
cryptography==42.0.0 cryptography==42.0.3
# via # via
# -r requirements/base.txt # -r requirements/base.txt
# pyopenssl # pyopenssl

View file

@ -10,7 +10,7 @@ aiosignal==1.3.1
# via aiohttp # via aiohttp
annotated-types==0.6.0 annotated-types==0.6.0
# via pydantic # via pydantic
attrs==23.1.0 attrs==23.2.0
# via aiohttp # via aiohttp
autocommand==2.2.2 autocommand==2.2.2
# via jaraco.text # via jaraco.text
@ -26,7 +26,7 @@ cherrypy==18.8.0
# via -r requirements/base.txt # via -r requirements/base.txt
contextvars==2.4 contextvars==2.4
# via -r requirements/base.txt # via -r requirements/base.txt
cryptography==42.0.0 cryptography==42.0.3
# via # via
# -r requirements/base.txt # -r requirements/base.txt
# pyopenssl # pyopenssl

View file

@ -10,7 +10,7 @@ aiosignal==1.3.1
# via aiohttp # via aiohttp
annotated-types==0.6.0 annotated-types==0.6.0
# via pydantic # via pydantic
attrs==23.1.0 attrs==23.2.0
# via aiohttp # via aiohttp
autocommand==2.2.2 autocommand==2.2.2
# via jaraco.text # via jaraco.text
@ -26,7 +26,7 @@ cherrypy==18.8.0
# via -r requirements/base.txt # via -r requirements/base.txt
contextvars==2.4 contextvars==2.4
# via -r requirements/base.txt # via -r requirements/base.txt
cryptography==42.0.0 cryptography==42.0.3
# via # via
# -r requirements/base.txt # -r requirements/base.txt
# pyopenssl # pyopenssl

View file

@ -10,7 +10,7 @@ aiosignal==1.3.1
# via aiohttp # via aiohttp
annotated-types==0.6.0 annotated-types==0.6.0
# via pydantic # via pydantic
attrs==23.1.0 attrs==23.2.0
# via aiohttp # via aiohttp
autocommand==2.2.2 autocommand==2.2.2
# via jaraco.text # via jaraco.text
@ -26,7 +26,7 @@ cherrypy==18.8.0
# via -r requirements/base.txt # via -r requirements/base.txt
contextvars==2.4 contextvars==2.4
# via -r requirements/base.txt # via -r requirements/base.txt
cryptography==42.0.0 cryptography==42.0.3
# via # via
# -r requirements/base.txt # -r requirements/base.txt
# pyopenssl # pyopenssl

View file

@ -10,7 +10,7 @@ aiosignal==1.3.1
# via aiohttp # via aiohttp
annotated-types==0.6.0 annotated-types==0.6.0
# via pydantic # via pydantic
attrs==23.1.0 attrs==23.2.0
# via aiohttp # via aiohttp
autocommand==2.2.2 autocommand==2.2.2
# via jaraco.text # via jaraco.text
@ -30,7 +30,7 @@ clr-loader==0.2.6
# via pythonnet # via pythonnet
contextvars==2.4 contextvars==2.4
# via -r requirements/base.txt # via -r requirements/base.txt
cryptography==42.0.0 cryptography==42.0.3
# via # via
# -r requirements/base.txt # -r requirements/base.txt
# pyopenssl # pyopenssl

View file

@ -26,7 +26,7 @@ cherrypy==18.8.0
# via -r requirements/base.txt # via -r requirements/base.txt
contextvars==2.4 contextvars==2.4
# via -r requirements/base.txt # via -r requirements/base.txt
cryptography==42.0.0 cryptography==42.0.3
# via # via
# -r requirements/base.txt # -r requirements/base.txt
# pyopenssl # pyopenssl

View file

@ -10,7 +10,7 @@ aiosignal==1.3.1
# via aiohttp # via aiohttp
annotated-types==0.6.0 annotated-types==0.6.0
# via pydantic # via pydantic
attrs==23.1.0 attrs==23.2.0
# via aiohttp # via aiohttp
autocommand==2.2.2 autocommand==2.2.2
# via jaraco.text # via jaraco.text
@ -26,7 +26,7 @@ cherrypy==18.8.0
# via -r requirements/base.txt # via -r requirements/base.txt
contextvars==2.4 contextvars==2.4
# via -r requirements/base.txt # via -r requirements/base.txt
cryptography==42.0.0 cryptography==42.0.3
# via # via
# -r requirements/base.txt # -r requirements/base.txt
# pyopenssl # pyopenssl

View file

@ -10,7 +10,7 @@ aiosignal==1.3.1
# via aiohttp # via aiohttp
annotated-types==0.6.0 annotated-types==0.6.0
# via pydantic # via pydantic
attrs==23.1.0 attrs==23.2.0
# via aiohttp # via aiohttp
autocommand==2.2.2 autocommand==2.2.2
# via jaraco.text # via jaraco.text
@ -26,7 +26,7 @@ cherrypy==18.8.0
# via -r requirements/base.txt # via -r requirements/base.txt
contextvars==2.4 contextvars==2.4
# via -r requirements/base.txt # via -r requirements/base.txt
cryptography==42.0.0 cryptography==42.0.3
# via # via
# -r requirements/base.txt # -r requirements/base.txt
# pyopenssl # pyopenssl

View file

@ -10,7 +10,7 @@ aiosignal==1.3.1
# via aiohttp # via aiohttp
annotated-types==0.6.0 annotated-types==0.6.0
# via pydantic # via pydantic
attrs==23.1.0 attrs==23.2.0
# via aiohttp # via aiohttp
autocommand==2.2.2 autocommand==2.2.2
# via jaraco.text # via jaraco.text
@ -30,7 +30,7 @@ clr-loader==0.2.6
# via pythonnet # via pythonnet
contextvars==2.4 contextvars==2.4
# via -r requirements/base.txt # via -r requirements/base.txt
cryptography==42.0.0 cryptography==42.0.3
# via # via
# -r requirements/base.txt # -r requirements/base.txt
# pyopenssl # pyopenssl

View file

@ -10,7 +10,7 @@ aiosignal==1.3.1
# via aiohttp # via aiohttp
async-timeout==4.0.3 async-timeout==4.0.3
# via aiohttp # via aiohttp
attrs==23.1.0 attrs==23.2.0
# via aiohttp # via aiohttp
autocommand==2.2.2 autocommand==2.2.2
# via jaraco.text # via jaraco.text
@ -26,7 +26,7 @@ cherrypy==18.8.0
# via -r requirements/base.txt # via -r requirements/base.txt
contextvars==2.4 contextvars==2.4
# via -r requirements/base.txt # via -r requirements/base.txt
cryptography==42.0.0 cryptography==42.0.3
# via # via
# -r requirements/base.txt # -r requirements/base.txt
# pyopenssl # pyopenssl

View file

@ -10,7 +10,7 @@ aiosignal==1.3.1
# via aiohttp # via aiohttp
async-timeout==4.0.3 async-timeout==4.0.3
# via aiohttp # via aiohttp
attrs==23.1.0 attrs==23.2.0
# via aiohttp # via aiohttp
autocommand==2.2.2 autocommand==2.2.2
# via jaraco.text # via jaraco.text
@ -26,7 +26,7 @@ cherrypy==18.8.0
# via -r requirements/base.txt # via -r requirements/base.txt
contextvars==2.4 contextvars==2.4
# via -r requirements/base.txt # via -r requirements/base.txt
cryptography==42.0.0 cryptography==42.0.3
# via # via
# -r requirements/base.txt # -r requirements/base.txt
# pyopenssl # pyopenssl

View file

@ -10,7 +10,7 @@ aiosignal==1.3.1
# via aiohttp # via aiohttp
async-timeout==4.0.3 async-timeout==4.0.3
# via aiohttp # via aiohttp
attrs==23.1.0 attrs==23.2.0
# via aiohttp # via aiohttp
autocommand==2.2.2 autocommand==2.2.2
# via jaraco.text # via jaraco.text
@ -30,7 +30,7 @@ clr-loader==0.2.6
# via pythonnet # via pythonnet
contextvars==2.4 contextvars==2.4
# via -r requirements/base.txt # via -r requirements/base.txt
cryptography==42.0.0 cryptography==42.0.3
# via # via
# -r requirements/base.txt # -r requirements/base.txt
# pyopenssl # pyopenssl

View file

@ -10,7 +10,7 @@ aiosignal==1.3.1
# via aiohttp # via aiohttp
async-timeout==4.0.3 async-timeout==4.0.3
# via aiohttp # via aiohttp
attrs==23.1.0 attrs==23.2.0
# via aiohttp # via aiohttp
autocommand==2.2.2 autocommand==2.2.2
# via jaraco.text # via jaraco.text
@ -26,7 +26,7 @@ cherrypy==18.8.0
# via -r requirements/base.txt # via -r requirements/base.txt
contextvars==2.4 contextvars==2.4
# via -r requirements/base.txt # via -r requirements/base.txt
cryptography==42.0.0 cryptography==42.0.3
# via # via
# -r requirements/base.txt # -r requirements/base.txt
# pyopenssl # pyopenssl

View file

@ -10,7 +10,7 @@ aiosignal==1.3.1
# via aiohttp # via aiohttp
async-timeout==4.0.3 async-timeout==4.0.3
# via aiohttp # via aiohttp
attrs==23.1.0 attrs==23.2.0
# via aiohttp # via aiohttp
autocommand==2.2.2 autocommand==2.2.2
# via jaraco.text # via jaraco.text
@ -26,7 +26,7 @@ cherrypy==18.8.0
# via -r requirements/base.txt # via -r requirements/base.txt
contextvars==2.4 contextvars==2.4
# via -r requirements/base.txt # via -r requirements/base.txt
cryptography==42.0.0 cryptography==42.0.3
# via # via
# -r requirements/base.txt # -r requirements/base.txt
# pyopenssl # pyopenssl

View file

@ -10,7 +10,7 @@ aiosignal==1.3.1
# via aiohttp # via aiohttp
async-timeout==4.0.3 async-timeout==4.0.3
# via aiohttp # via aiohttp
attrs==23.1.0 attrs==23.2.0
# via aiohttp # via aiohttp
autocommand==2.2.2 autocommand==2.2.2
# via jaraco.text # via jaraco.text
@ -26,7 +26,7 @@ cherrypy==18.8.0
# via -r requirements/base.txt # via -r requirements/base.txt
contextvars==2.4 contextvars==2.4
# via -r requirements/base.txt # via -r requirements/base.txt
cryptography==42.0.0 cryptography==42.0.3
# via # via
# -r requirements/base.txt # -r requirements/base.txt
# pyopenssl # pyopenssl

View file

@ -10,7 +10,7 @@ aiosignal==1.3.1
# via aiohttp # via aiohttp
async-timeout==4.0.3 async-timeout==4.0.3
# via aiohttp # via aiohttp
attrs==23.1.0 attrs==23.2.0
# via aiohttp # via aiohttp
autocommand==2.2.2 autocommand==2.2.2
# via jaraco.text # via jaraco.text
@ -30,7 +30,7 @@ clr-loader==0.2.6
# via pythonnet # via pythonnet
contextvars==2.4 contextvars==2.4
# via -r requirements/base.txt # via -r requirements/base.txt
cryptography==42.0.0 cryptography==42.0.3
# via # via
# -r requirements/base.txt # -r requirements/base.txt
# pyopenssl # pyopenssl

View file

@ -1,4 +1,4 @@
-r base.txt -r base.txt
-r crypto.txt -r crypto.txt
pyzmq>=24.0.0 pyzmq>=25.1.2

View file

@ -420,6 +420,7 @@ def set_logging_options_dict(opts):
except AttributeError: except AttributeError:
pass pass
set_logging_options_dict.__options_dict__ = opts set_logging_options_dict.__options_dict__ = opts
set_lowest_log_level_by_opts(opts)
def freeze_logging_options_dict(): def freeze_logging_options_dict():

View file

@ -730,46 +730,62 @@ def _windows_virtual(osdata):
if osdata["kernel"] != "Windows": if osdata["kernel"] != "Windows":
return grains return grains
grains["virtual"] = osdata.get("virtual", "physical") # Set the default virtual environment to physical, meaning not a VM
grains["virtual"] = "physical"
# It is possible that the 'manufacturer' and/or 'productname' grains # It is possible that the 'manufacturer' and/or 'productname' grains exist
# exist but have a value of None. # but have a value of None
manufacturer = osdata.get("manufacturer", "") manufacturer = osdata.get("manufacturer", "")
if manufacturer is None: if manufacturer is None:
manufacturer = "" manufacturer = ""
productname = osdata.get("productname", "") product_name = osdata.get("productname", "")
if productname is None: if product_name is None:
productname = "" product_name = ""
bios_string = osdata.get("biosstring", "")
if bios_string is None:
bios_string = ""
if "QEMU" in manufacturer: if "QEMU" in manufacturer:
# FIXME: Make this detect between kvm or qemu # FIXME: Make this detect between kvm or qemu
grains["virtual"] = "kvm" grains["virtual"] = "kvm"
if "Bochs" in manufacturer: elif "VRTUAL" in bios_string: # (not a typo)
grains["virtual"] = "HyperV"
elif "A M I" in bios_string:
grains["virtual"] = "VirtualPC"
elif "Xen" in bios_string:
grains["virtual"] = "Xen"
if "HVM domU" in product_name:
grains["virtual_subtype"] = "HVM domU"
elif "AMAZON" in bios_string:
grains["virtual"] = "EC2"
elif "Bochs" in manufacturer:
grains["virtual"] = "kvm" grains["virtual"] = "kvm"
# Product Name: (oVirt) www.ovirt.org # Product Name: (oVirt) www.ovirt.org
# Red Hat Community virtualization Project based on kvm # Red Hat Community virtualization Project based on kvm
elif "oVirt" in productname: elif "oVirt" in product_name:
grains["virtual"] = "kvm" grains["virtual"] = "kvm"
grains["virtual_subtype"] = "oVirt" grains["virtual_subtype"] = "oVirt"
# Red Hat Enterprise Virtualization # Red Hat Enterprise Virtualization
elif "RHEV Hypervisor" in productname: elif "RHEV Hypervisor" in product_name:
grains["virtual"] = "kvm" grains["virtual"] = "kvm"
grains["virtual_subtype"] = "rhev" grains["virtual_subtype"] = "rhev"
# Product Name: VirtualBox # Product Name: VirtualBox
elif "VirtualBox" in productname: elif "VirtualBox" in product_name:
grains["virtual"] = "VirtualBox" grains["virtual"] = "VirtualBox"
# Product Name: VMware Virtual Platform # Product Name: VMware Virtual Platform
elif "VMware" in productname: elif "VMware" in product_name:
grains["virtual"] = "VMware" grains["virtual"] = "VMware"
# Manufacturer: Microsoft Corporation # Manufacturer: Microsoft Corporation
# Product Name: Virtual Machine # Product Name: Virtual Machine
elif "Microsoft" in manufacturer and "Virtual Machine" in productname: elif "Microsoft" in manufacturer and "Virtual Machine" in product_name:
grains["virtual"] = "VirtualPC" grains["virtual"] = "VirtualPC"
elif "OpenStack" in product_name:
grains["virtual"] = "OpenStack"
# Manufacturer: Parallels Software International Inc. # Manufacturer: Parallels Software International Inc.
elif "Parallels" in manufacturer: elif "Parallels" in manufacturer:
grains["virtual"] = "Parallels" grains["virtual"] = "Parallels"
# Apache CloudStack # Apache CloudStack
elif "CloudStack KVM Hypervisor" in productname: elif "CloudStack KVM Hypervisor" in product_name:
grains["virtual"] = "kvm" grains["virtual"] = "kvm"
grains["virtual_subtype"] = "cloudstack" grains["virtual_subtype"] = "cloudstack"
return grains return grains
@ -1498,88 +1514,143 @@ def _windows_platform_data():
if not HAS_WMI: if not HAS_WMI:
return {} return {}
grains = {}
with salt.utils.winapi.Com(): with salt.utils.winapi.Com():
wmi_c = wmi.WMI() wmi_c = wmi.WMI()
# http://msdn.microsoft.com/en-us/library/windows/desktop/aa394102%28v=vs.85%29.aspx try:
systeminfo = wmi_c.Win32_ComputerSystem()[0] # http://msdn.microsoft.com/en-us/library/windows/desktop/aa394102%28v=vs.85%29.aspx
# https://msdn.microsoft.com/en-us/library/aa394239(v=vs.85).aspx systeminfo = wmi_c.Win32_ComputerSystem()[0]
osinfo = wmi_c.Win32_OperatingSystem()[0] grains.update(
# http://msdn.microsoft.com/en-us/library/windows/desktop/aa394077(v=vs.85).aspx {
biosinfo = wmi_c.Win32_BIOS()[0] "manufacturer": _clean_value(
# http://msdn.microsoft.com/en-us/library/windows/desktop/aa394498(v=vs.85).aspx "manufacturer", systeminfo.Manufacturer
timeinfo = wmi_c.Win32_TimeZone()[0] ),
# https://docs.microsoft.com/en-us/windows/win32/cimwin32prov/win32-computersystemproduct "productname": _clean_value("productname", systeminfo.Model),
csproductinfo = wmi_c.Win32_ComputerSystemProduct()[0] }
)
except IndexError:
grains.update({"manufacturer": None, "productname": None})
log.warning("Computer System info not available on this system")
try:
# https://msdn.microsoft.com/en-us/library/aa394239(v=vs.85).aspx
osinfo = wmi_c.Win32_OperatingSystem()[0]
os_release = _windows_os_release_grain(
caption=osinfo.Caption, product_type=osinfo.ProductType
)
grains.update(
{
"kernelrelease": _clean_value("kernelrelease", osinfo.Version),
"osfullname": _clean_value("osfullname", osinfo.Caption),
"osmanufacturer": _clean_value(
"osmanufacturer", osinfo.Manufacturer
),
"osrelease": _clean_value("osrelease", os_release),
"osversion": _clean_value("osversion", osinfo.Version),
}
)
except IndexError:
grains.update(
{
"kernelrelease": None,
"osfullname": None,
"osmanufacturer": None,
"osrelease": None,
"osversion": None,
}
)
log.warning("Operating System info not available on this system")
try:
# http://msdn.microsoft.com/en-us/library/windows/desktop/aa394077(v=vs.85).aspx
biosinfo = wmi_c.Win32_BIOS()[0]
grains.update(
{
# bios name had a bunch of whitespace appended to it in my testing
# 'PhoenixBIOS 4.0 Release 6.0 '
"biosversion": _clean_value("biosversion", biosinfo.Name.strip()),
"biosstring": _clean_value("string", biosinfo.Version),
"serialnumber": _clean_value("serialnumber", biosinfo.SerialNumber),
}
)
except IndexError:
grains.update(
{"biosstring": None, "biosversion": None, "serialnumber": None}
)
log.warning("BIOS info not available on this system")
try:
# http://msdn.microsoft.com/en-us/library/windows/desktop/aa394498(v=vs.85).aspx
timeinfo = wmi_c.Win32_TimeZone()[0]
grains.update(
{
"timezone": _clean_value("timezone", timeinfo.Description),
}
)
except IndexError:
grains.update({"timezone": None})
log.warning("TimeZone info not available on this system")
try:
# https://docs.microsoft.com/en-us/windows/win32/cimwin32prov/win32-computersystemproduct
csproductinfo = wmi_c.Win32_ComputerSystemProduct()[0]
grains.update(
{
"uuid": _clean_value("uuid", csproductinfo.UUID.lower()),
}
)
except IndexError:
grains.update({"uuid": None})
log.warning("Computer System Product info not available on this system")
# http://msdn.microsoft.com/en-us/library/windows/desktop/aa394072(v=vs.85).aspx # http://msdn.microsoft.com/en-us/library/windows/desktop/aa394072(v=vs.85).aspx
motherboard = {"product": None, "serial": None}
try: try:
motherboardinfo = wmi_c.Win32_BaseBoard()[0] motherboardinfo = wmi_c.Win32_BaseBoard()[0]
motherboard["product"] = motherboardinfo.Product grains.update(
motherboard["serial"] = motherboardinfo.SerialNumber {
"motherboard": {
"productname": _clean_value(
"motherboard.productname", motherboardinfo.Product
),
"serialnumber": _clean_value(
"motherboard.serialnumber", motherboardinfo.SerialNumber
),
},
}
)
except IndexError: except IndexError:
grains.update(
{
"motherboard": {"productname": None, "serialnumber": None},
}
)
log.debug("Motherboard info not available on this system") log.debug("Motherboard info not available on this system")
kernel_version = platform.version() grains.update(
info = salt.utils.win_osinfo.get_os_version_info() {
"kernelversion": _clean_value("kernelversion", platform.version()),
}
)
net_info = salt.utils.win_osinfo.get_join_info() net_info = salt.utils.win_osinfo.get_join_info()
grains.update(
service_pack = None {
if info["ServicePackMajor"] > 0: "windowsdomain": _clean_value("windowsdomain", net_info["Domain"]),
service_pack = "".join(["SP", str(info["ServicePackMajor"])]) "windowsdomaintype": _clean_value(
"windowsdomaintype", net_info["DomainType"]
os_release = _windows_os_release_grain( ),
caption=osinfo.Caption, product_type=osinfo.ProductType }
) )
grains = { info = salt.utils.win_osinfo.get_os_version_info()
"kernelrelease": _clean_value("kernelrelease", osinfo.Version), if info["ServicePackMajor"] > 0:
"kernelversion": _clean_value("kernelversion", kernel_version), service_pack = "".join(["SP", str(info["ServicePackMajor"])])
"osversion": _clean_value("osversion", osinfo.Version), grains.update(
"osrelease": _clean_value("osrelease", os_release), {
"osservicepack": _clean_value("osservicepack", service_pack), "osservicepack": _clean_value("osservicepack", service_pack),
"osmanufacturer": _clean_value("osmanufacturer", osinfo.Manufacturer), }
"manufacturer": _clean_value("manufacturer", systeminfo.Manufacturer), )
"productname": _clean_value("productname", systeminfo.Model), else:
# bios name had a bunch of whitespace appended to it in my testing grains.update({"osservicepack": None})
# 'PhoenixBIOS 4.0 Release 6.0 '
"biosversion": _clean_value("biosversion", biosinfo.Name.strip()),
"serialnumber": _clean_value("serialnumber", biosinfo.SerialNumber),
"osfullname": _clean_value("osfullname", osinfo.Caption),
"timezone": _clean_value("timezone", timeinfo.Description),
"uuid": _clean_value("uuid", csproductinfo.UUID.lower()),
"windowsdomain": _clean_value("windowsdomain", net_info["Domain"]),
"windowsdomaintype": _clean_value(
"windowsdomaintype", net_info["DomainType"]
),
"motherboard": {
"productname": _clean_value(
"motherboard.productname", motherboard["product"]
),
"serialnumber": _clean_value(
"motherboard.serialnumber", motherboard["serial"]
),
},
}
# test for virtualized environments
# I only had VMware available so the rest are unvalidated
if "VRTUAL" in biosinfo.Version: # (not a typo)
grains["virtual"] = "HyperV"
elif "A M I" in biosinfo.Version:
grains["virtual"] = "VirtualPC"
elif "VMware" in systeminfo.Model:
grains["virtual"] = "VMware"
elif "VirtualBox" in systeminfo.Model:
grains["virtual"] = "VirtualBox"
elif "Xen" in biosinfo.Version:
grains["virtual"] = "Xen"
if "HVM domU" in systeminfo.Model:
grains["virtual_subtype"] = "HVM domU"
elif "OpenStack" in systeminfo.Model:
grains["virtual"] = "OpenStack"
elif "AMAZON" in biosinfo.Version:
grains["virtual"] = "EC2"
return grains return grains

View file

@ -72,12 +72,12 @@ def install(app_id, enable=True, tries=3, wait=10):
f"Error installing app({app_id}): {exc}" f"Error installing app({app_id}): {exc}"
) )
elif num_tries < tries: elif num_tries < tries:
time.sleep(wait)
num_tries += 1 num_tries += 1
else: else:
raise CommandExecutionError( raise CommandExecutionError(
f"Error installing app({app_id}): {exc}" f"Error installing app({app_id}): {exc}"
) )
time.sleep(wait)
def installed(app_id): def installed(app_id):

View file

@ -48,7 +48,7 @@ def log_nameToLevel(name):
def test_lowest_log_level(): def test_lowest_log_level():
ret = log_impl.get_lowest_log_level() ret = log_impl.get_lowest_log_level()
assert ret is None assert ret is not None
log_impl.set_lowest_log_level(log_nameToLevel("DEBUG")) log_impl.set_lowest_log_level(log_nameToLevel("DEBUG"))
ret = log_impl.get_lowest_log_level() ret = log_impl.get_lowest_log_level()

View file

@ -9,6 +9,7 @@ import pytest
from pytestshellutils.utils.processes import terminate_process from pytestshellutils.utils.processes import terminate_process
from salt._logging.handlers import DeferredStreamHandler from salt._logging.handlers import DeferredStreamHandler
from salt._logging.impl import set_lowest_log_level
from salt.utils.nb_popen import NonBlockingPopen from salt.utils.nb_popen import NonBlockingPopen
from tests.support.helpers import CaptureOutput, dedent from tests.support.helpers import CaptureOutput, dedent
from tests.support.runtests import RUNTIME_VARS from tests.support.runtests import RUNTIME_VARS
@ -20,7 +21,7 @@ def _sync_with_handlers_proc_target():
with CaptureOutput() as stds: with CaptureOutput() as stds:
handler = DeferredStreamHandler(sys.stderr) handler = DeferredStreamHandler(sys.stderr)
handler.setLevel(logging.DEBUG) set_lowest_log_level(logging.DEBUG)
formatter = logging.Formatter("%(message)s") formatter = logging.Formatter("%(message)s")
handler.setFormatter(formatter) handler.setFormatter(formatter)
logging.root.addHandler(handler) logging.root.addHandler(handler)
@ -45,7 +46,7 @@ def _deferred_write_on_flush_proc_target():
with CaptureOutput() as stds: with CaptureOutput() as stds:
handler = DeferredStreamHandler(sys.stderr) handler = DeferredStreamHandler(sys.stderr)
handler.setLevel(logging.DEBUG) set_lowest_log_level(logging.DEBUG)
formatter = logging.Formatter("%(message)s") formatter = logging.Formatter("%(message)s")
handler.setFormatter(formatter) handler.setFormatter(formatter)
logging.root.addHandler(handler) logging.root.addHandler(handler)
@ -126,7 +127,7 @@ def test_deferred_write_on_atexit(tmp_path):
# Just loop consuming output # Just loop consuming output
while True: while True:
if time.time() > max_time: if time.time() > max_time:
pytest.fail("Script didn't exit after {} second".format(execution_time)) pytest.fail(f"Script didn't exit after {execution_time} second")
time.sleep(0.125) time.sleep(0.125)
_out = proc.recv() _out = proc.recv()
@ -146,7 +147,7 @@ def test_deferred_write_on_atexit(tmp_path):
finally: finally:
terminate_process(proc.pid, kill_children=True) terminate_process(proc.pid, kill_children=True)
if b"Foo" not in err: if b"Foo" not in err:
pytest.fail("'Foo' should be in stderr and it's not: {}".format(err)) pytest.fail(f"'Foo' should be in stderr and it's not: {err}")
@pytest.mark.skip_on_windows(reason="Windows does not support SIGINT") @pytest.mark.skip_on_windows(reason="Windows does not support SIGINT")

View file

@ -2866,6 +2866,10 @@ def test_virtual_has_virtual_grain():
assert virtual_grains["virtual"] != "physical" assert virtual_grains["virtual"] != "physical"
def test__windows_platform_data():
pass
@pytest.mark.skip_unless_on_windows @pytest.mark.skip_unless_on_windows
@pytest.mark.parametrize( @pytest.mark.parametrize(
("osdata", "expected"), ("osdata", "expected"),
@ -2873,6 +2877,13 @@ def test_virtual_has_virtual_grain():
({"kernel": "Not Windows"}, {}), ({"kernel": "Not Windows"}, {}),
({"kernel": "Windows"}, {"virtual": "physical"}), ({"kernel": "Windows"}, {"virtual": "physical"}),
({"kernel": "Windows", "manufacturer": "QEMU"}, {"virtual": "kvm"}), ({"kernel": "Windows", "manufacturer": "QEMU"}, {"virtual": "kvm"}),
({"kernel": "Windows", "biosstring": "VRTUAL"}, {"virtual": "HyperV"}),
({"kernel": "Windows", "biosstring": "A M I"}, {"virtual": "VirtualPC"}),
(
{"kernel": "Windows", "biosstring": "Xen", "productname": "HVM domU"},
{"virtual": "Xen", "virtual_subtype": "HVM domU"},
),
({"kernel": "Windows", "biosstring": "AMAZON"}, {"virtual": "EC2"}),
({"kernel": "Windows", "manufacturer": "Bochs"}, {"virtual": "kvm"}), ({"kernel": "Windows", "manufacturer": "Bochs"}, {"virtual": "kvm"}),
( (
{"kernel": "Windows", "productname": "oVirt"}, {"kernel": "Windows", "productname": "oVirt"},
@ -2882,10 +2893,6 @@ def test_virtual_has_virtual_grain():
{"kernel": "Windows", "productname": "RHEV Hypervisor"}, {"kernel": "Windows", "productname": "RHEV Hypervisor"},
{"virtual": "kvm", "virtual_subtype": "rhev"}, {"virtual": "kvm", "virtual_subtype": "rhev"},
), ),
(
{"kernel": "Windows", "productname": "CloudStack KVM Hypervisor"},
{"virtual": "kvm", "virtual_subtype": "cloudstack"},
),
( (
{"kernel": "Windows", "productname": "VirtualBox"}, {"kernel": "Windows", "productname": "VirtualBox"},
{"virtual": "VirtualBox"}, {"virtual": "VirtualBox"},
@ -2913,6 +2920,7 @@ def test_virtual_has_virtual_grain():
}, },
{"virtual": "VirtualPC"}, {"virtual": "VirtualPC"},
), ),
({"kernel": "Windows", "productname": "OpenStack"}, {"virtual": "OpenStack"}),
( (
{"kernel": "Windows", "manufacturer": "Parallels Software"}, {"kernel": "Windows", "manufacturer": "Parallels Software"},
{"virtual": "Parallels"}, {"virtual": "Parallels"},
@ -2921,6 +2929,10 @@ def test_virtual_has_virtual_grain():
{"kernel": "Windows", "manufacturer": None, "productname": None}, {"kernel": "Windows", "manufacturer": None, "productname": None},
{"virtual": "physical"}, {"virtual": "physical"},
), ),
(
{"kernel": "Windows", "productname": "CloudStack KVM Hypervisor"},
{"virtual": "kvm", "virtual_subtype": "cloudstack"},
),
], ],
) )
def test__windows_virtual(osdata, expected): def test__windows_virtual(osdata, expected):
@ -2941,17 +2953,7 @@ def test_windows_virtual_set_virtual_grain():
_, _,
) = platform.uname() ) = platform.uname()
with patch.dict( virtual_grains = core._windows_virtual(osdata)
core.__salt__,
{
"cmd.run": salt.modules.cmdmod.run,
"cmd.run_all": salt.modules.cmdmod.run_all,
"cmd.retcode": salt.modules.cmdmod.retcode,
"smbios.get": salt.modules.smbios.get,
},
):
virtual_grains = core._windows_virtual(osdata)
assert "virtual" in virtual_grains assert "virtual" in virtual_grains
@ -2969,46 +2971,15 @@ def test_windows_virtual_has_virtual_grain():
_, _,
) = platform.uname() ) = platform.uname()
with patch.dict( virtual_grains = core._windows_virtual(osdata)
core.__salt__,
{
"cmd.run": salt.modules.cmdmod.run,
"cmd.run_all": salt.modules.cmdmod.run_all,
"cmd.retcode": salt.modules.cmdmod.retcode,
"smbios.get": salt.modules.smbios.get,
},
):
virtual_grains = core._windows_virtual(osdata)
assert "virtual" in virtual_grains assert "virtual" in virtual_grains
assert virtual_grains["virtual"] != "physical"
@pytest.mark.skip_unless_on_windows @pytest.mark.skip_unless_on_windows
def test_osdata_virtual_key_win(): def test_osdata_virtual_key_win():
with patch.dict( osdata_grains = core.os_data()
core.__salt__, assert "virtual" in osdata_grains
{
"cmd.run": salt.modules.cmdmod.run,
"cmd.run_all": salt.modules.cmdmod.run_all,
"cmd.retcode": salt.modules.cmdmod.retcode,
"smbios.get": salt.modules.smbios.get,
},
):
_windows_platform_data_ret = core.os_data()
_windows_platform_data_ret["virtual"] = "something"
with patch.object(
core, "_windows_platform_data", return_value=_windows_platform_data_ret
) as _windows_platform_data:
osdata_grains = core.os_data()
_windows_platform_data.assert_called_once()
assert "virtual" in osdata_grains
assert osdata_grains["virtual"] != "physical"
@pytest.mark.skip_unless_on_linux @pytest.mark.skip_unless_on_linux

View file

@ -0,0 +1,258 @@
import pytest
import salt.grains.core as core
from tests.support.mock import MagicMock, Mock, patch
pytestmark = [
pytest.mark.skip_unless_on_windows,
]
wmi = pytest.importorskip("wmi", reason="WMI only available on Windows")
def test__windows_platform_data_index_errors():
# mock = [MagicMock(Manufacturer="Dell Inc.", Model="Precision 5820 Tower")]
# mock = [MagicMock(
# Version="10.0.22631",
# Caption="Microsoft Windows 11 Enterprise",
# Manufacturer="Microsoft Corporation",
# ProductType=1,
# )]
WMI = Mock()
platform_version = "1.2.3"
os_version_info = {"Domain": "test", "DomainType": "test_type"}
with patch("salt.utils.winapi.Com", MagicMock()), patch.object(
wmi, "WMI", Mock(return_value=WMI)
), patch.object(WMI, "Win32_ComputerSystem", return_value=[]), patch.object(
WMI, "Win32_OperatingSystem", return_value=[]
), patch.object(
WMI, "Win32_BIOS", return_value=[]
), patch.object(
WMI, "Win32_TimeZone", return_value=[]
), patch.object(
WMI, "Win32_ComputerSystemProduct", return_value=[]
), patch.object(
WMI, "Win32_BaseBoard", return_value=[]
), patch(
"platform.version", return_value=platform_version
), patch(
"salt.utils.win_osinfo.get_join_info", return_value=os_version_info
):
result = core._windows_platform_data()
expected = {
"biosstring": None,
"biosversion": None,
"kernelrelease": None,
"kernelversion": platform_version,
"manufacturer": None,
"motherboard": {"productname": None, "serialnumber": None},
"osfullname": None,
"osmanufacturer": None,
"osrelease": None,
"osservicepack": None,
"osversion": None,
"productname": None,
"serialnumber": None,
"timezone": None,
"uuid": None,
"windowsdomain": os_version_info["Domain"],
"windowsdomaintype": os_version_info["DomainType"],
}
assert result == expected
def test__windows_platform_data_computer_system():
mock = [MagicMock(Manufacturer="Dell Inc.", Model="Precision 5820 Tower")]
WMI = Mock()
platform_version = "1.2.3"
os_version_info = {"Domain": "test", "DomainType": "test_type"}
with patch("salt.utils.winapi.Com", MagicMock()), patch.object(
wmi, "WMI", Mock(return_value=WMI)
), patch.object(WMI, "Win32_ComputerSystem", return_value=mock), patch.object(
WMI, "Win32_OperatingSystem", return_value=[]
), patch.object(
WMI, "Win32_BIOS", return_value=[]
), patch.object(
WMI, "Win32_TimeZone", return_value=[]
), patch.object(
WMI, "Win32_ComputerSystemProduct", return_value=[]
), patch.object(
WMI, "Win32_BaseBoard", return_value=[]
), patch(
"platform.version", return_value=platform_version
), patch(
"salt.utils.win_osinfo.get_join_info", return_value=os_version_info
):
result = core._windows_platform_data()
assert result["manufacturer"] == "Dell Inc."
assert result["productname"] == "Precision 5820 Tower"
def test__windows_platform_data_operating_system():
mock = [
MagicMock(
Version="10.0.22631",
Caption="Microsoft Windows 11 Enterprise",
Manufacturer="Microsoft Corporation",
ProductType=1,
)
]
WMI = Mock()
platform_version = "1.2.3"
os_version_info = {"Domain": "test", "DomainType": "test_type"}
with patch("salt.utils.winapi.Com", MagicMock()), patch.object(
wmi, "WMI", Mock(return_value=WMI)
), patch.object(WMI, "Win32_ComputerSystem", return_value=[]), patch.object(
WMI, "Win32_OperatingSystem", return_value=mock
), patch.object(
WMI, "Win32_BIOS", return_value=[]
), patch.object(
WMI, "Win32_TimeZone", return_value=[]
), patch.object(
WMI, "Win32_ComputerSystemProduct", return_value=[]
), patch.object(
WMI, "Win32_BaseBoard", return_value=[]
), patch(
"platform.version", return_value=platform_version
), patch(
"salt.utils.win_osinfo.get_join_info", return_value=os_version_info
):
result = core._windows_platform_data()
assert result["kernelrelease"] == "10.0.22631"
assert result["osfullname"] == "Microsoft Windows 11 Enterprise"
assert result["osmanufacturer"] == "Microsoft Corporation"
assert result["osrelease"] == "11"
assert result["osversion"] == "10.0.22631"
def test__windows_platform_data_bios():
mock = [
MagicMock(
Name="11.22.33",
Version="DELL - 1072009",
SerialNumber="BCF3H13",
)
]
WMI = Mock()
platform_version = "1.2.3"
os_version_info = {"Domain": "test", "DomainType": "test_type"}
with patch("salt.utils.winapi.Com", MagicMock()), patch.object(
wmi, "WMI", Mock(return_value=WMI)
), patch.object(WMI, "Win32_ComputerSystem", return_value=[]), patch.object(
WMI, "Win32_OperatingSystem", return_value=[]
), patch.object(
WMI, "Win32_BIOS", return_value=mock
), patch.object(
WMI, "Win32_TimeZone", return_value=[]
), patch.object(
WMI, "Win32_ComputerSystemProduct", return_value=[]
), patch.object(
WMI, "Win32_BaseBoard", return_value=[]
), patch(
"platform.version", return_value=platform_version
), patch(
"salt.utils.win_osinfo.get_join_info", return_value=os_version_info
):
result = core._windows_platform_data()
assert result["biosversion"] == "11.22.33"
assert result["biosstring"] == "DELL - 1072009"
assert result["serialnumber"] == "BCF3H13"
def test__windows_platform_data_timezone():
mock = [
MagicMock(
Description="(UTC-07:00) Mountain Time (US & Canada)",
)
]
WMI = Mock()
platform_version = "1.2.3"
os_version_info = {"Domain": "test", "DomainType": "test_type"}
with patch("salt.utils.winapi.Com", MagicMock()), patch.object(
wmi, "WMI", Mock(return_value=WMI)
), patch.object(WMI, "Win32_ComputerSystem", return_value=[]), patch.object(
WMI, "Win32_OperatingSystem", return_value=[]
), patch.object(
WMI, "Win32_BIOS", return_value=[]
), patch.object(
WMI, "Win32_TimeZone", return_value=mock
), patch.object(
WMI, "Win32_ComputerSystemProduct", return_value=[]
), patch.object(
WMI, "Win32_BaseBoard", return_value=[]
), patch(
"platform.version", return_value=platform_version
), patch(
"salt.utils.win_osinfo.get_join_info", return_value=os_version_info
):
result = core._windows_platform_data()
assert result["timezone"] == "(UTC-07:00) Mountain Time (US & Canada)"
def test__windows_platform_data_computer_system_product():
mock = [
MagicMock(
UUID="4C4C4544-0043-4610-8030-C2C04F483033",
)
]
WMI = Mock()
platform_version = "1.2.3"
os_version_info = {"Domain": "test", "DomainType": "test_type"}
with patch("salt.utils.winapi.Com", MagicMock()), patch.object(
wmi, "WMI", Mock(return_value=WMI)
), patch.object(WMI, "Win32_ComputerSystem", return_value=[]), patch.object(
WMI, "Win32_OperatingSystem", return_value=[]
), patch.object(
WMI, "Win32_BIOS", return_value=[]
), patch.object(
WMI, "Win32_TimeZone", return_value=[]
), patch.object(
WMI, "Win32_ComputerSystemProduct", return_value=mock
), patch.object(
WMI, "Win32_BaseBoard", return_value=[]
), patch(
"platform.version", return_value=platform_version
), patch(
"salt.utils.win_osinfo.get_join_info", return_value=os_version_info
):
result = core._windows_platform_data()
assert result["uuid"] == "4c4c4544-0043-4610-8030-c2c04f483033"
def test__windows_platform_data_baseboard():
mock = [
MagicMock(
Product="002KVM",
SerialNumber="/BCF0H03/CNFCW0097F00TM/",
)
]
WMI = Mock()
platform_version = "1.2.3"
os_version_info = {"Domain": "test", "DomainType": "test_type"}
with patch("salt.utils.winapi.Com", MagicMock()), patch.object(
wmi, "WMI", Mock(return_value=WMI)
), patch.object(WMI, "Win32_ComputerSystem", return_value=[]), patch.object(
WMI, "Win32_OperatingSystem", return_value=[]
), patch.object(
WMI, "Win32_BIOS", return_value=[]
), patch.object(
WMI, "Win32_TimeZone", return_value=[]
), patch.object(
WMI, "Win32_ComputerSystemProduct", return_value=[]
), patch.object(
WMI, "Win32_BaseBoard", return_value=mock
), patch(
"platform.version", return_value=platform_version
), patch(
"salt.utils.win_osinfo.get_join_info", return_value=os_version_info
):
result = core._windows_platform_data()
assert result["motherboard"]["productname"] == "002KVM"
assert result["motherboard"]["serialnumber"] == "/BCF0H03/CNFCW0097F00TM/"

View file

@ -1,3 +1,5 @@
import logging
import pytest import pytest
import salt.modules.win_file as win_file import salt.modules.win_file as win_file
@ -158,11 +160,14 @@ def test_set_value_log_messages(caplog):
mock_set_file_data = MagicMock(return_value=True) mock_set_file_data = MagicMock(return_value=True)
mock_set_pol_data = MagicMock(return_value=False) mock_set_pol_data = MagicMock(return_value=False)
mock_context = {"lgpo.adv_audit_data": {"test_option": "test_value"}} mock_context = {"lgpo.adv_audit_data": {"test_option": "test_value"}}
with patch.object( with caplog.at_level(logging.DEBUG):
win_lgpo, "_set_advaudit_file_data", mock_set_file_data with patch.object(
), patch.object(win_lgpo, "_set_advaudit_pol_data", mock_set_pol_data), patch.dict( win_lgpo, "_set_advaudit_file_data", mock_set_file_data
win_lgpo.__context__, mock_context ), patch.object(
): win_lgpo, "_set_advaudit_pol_data", mock_set_pol_data
win_lgpo._set_advaudit_value("test_option", None) ), patch.dict(
assert "Failed to apply audit setting:" in caplog.text win_lgpo.__context__, mock_context
):
win_lgpo._set_advaudit_value("test_option", None)
assert "Failed to apply audit setting:" in caplog.text
assert "LGPO: Removing Advanced Audit data:" in caplog.text assert "LGPO: Removing Advanced Audit data:" in caplog.text

View file

@ -1,3 +1,5 @@
import logging
import pytest import pytest
import salt.modules.cmdmod as cmd import salt.modules.cmdmod as cmd
@ -69,15 +71,17 @@ def test_write_secedit_data_import_fail(caplog):
patch_cmd_retcode = patch.dict( patch_cmd_retcode = patch.dict(
win_lgpo.__salt__, {"cmd.retcode": MagicMock(return_value=1)} win_lgpo.__salt__, {"cmd.retcode": MagicMock(return_value=1)}
) )
with patch_cmd_retcode: with caplog.at_level(logging.DEBUG):
assert win_lgpo._write_secedit_data("spongebob") is False with patch_cmd_retcode:
assert "Secedit failed to import template data" in caplog.text assert win_lgpo._write_secedit_data("spongebob") is False
assert "Secedit failed to import template data" in caplog.text
def test_write_secedit_data_configure_fail(caplog): def test_write_secedit_data_configure_fail(caplog):
patch_cmd_retcode = patch.dict( patch_cmd_retcode = patch.dict(
win_lgpo.__salt__, {"cmd.retcode": MagicMock(side_effect=[0, 1])} win_lgpo.__salt__, {"cmd.retcode": MagicMock(side_effect=[0, 1])}
) )
with patch_cmd_retcode: with caplog.at_level(logging.DEBUG):
assert win_lgpo._write_secedit_data("spongebob") is False with patch_cmd_retcode:
assert "Secedit failed to apply security database" in caplog.text assert win_lgpo._write_secedit_data("spongebob") is False
assert "Secedit failed to apply security database" in caplog.text

View file

@ -42,10 +42,11 @@ def test_format_log_list(caplog):
""" """
Test running format_log when ret is not a dictionary Test running format_log when ret is not a dictionary
""" """
ret = ["test1", "test2"] with caplog.at_level(logging.INFO):
salt.state.format_log(ret) ret = ["test1", "test2"]
assert "INFO" in caplog.text salt.state.format_log(ret)
assert f"{ret}" in caplog.text assert "INFO" in caplog.text
assert f"{ret}" in caplog.text
def test_render_error_on_invalid_requisite(minion_opts): def test_render_error_on_invalid_requisite(minion_opts):