Compare commits

...

31 Commits

Author SHA1 Message Date
Felix Fontein
7f63f47efc Release 10.7.6. 2025-11-02 13:02:24 +01:00
patchback[bot]
be65a9f345 [PR #11001/eb6337c0 backport][stable-10] omapi_host: fix bytes vs. str confusion (#11021)
omapi_host: fix bytes vs. str confusion (#11001)

* omapi_host: fix bytes vs. str confusion

After an update of the control node from Debian
bookworm to trixie, the omapi_host module fails to
work with the error message:

Key of type 'bytes' is not JSON serializable by the
'module_legacy_m2c' profile.

https://github.com/ansible/ansible/issues/85937 had the
same error, but the fix is a bit more intricate here
because the result dict is dynamically generated from
an API response object.

This also fixes unpacking the MAC and IP address and
hardware type, which were broken for Python3.

* Merge suggestion for changelog fragment



* do not unpack_ip twice

Noticed by Felix Fontein <felix@fontein.de>

* mention py3k in changelog fragment, too

---------


(cherry picked from commit eb6337c0c9)

Co-authored-by: mirabilos <tg@mirbsd.org>
Co-authored-by: Felix Fontein <felix@fontein.de>
2025-10-30 20:27:54 +01:00
patchback[bot]
044831904c [PR #11005/54af64ad backport][stable-10] keycloak_user: mark credentials[].value as no_log=True (#11011)
keycloak_user: mark credentials[].value as no_log=True (#11005)

Mark credentials[].value as no_log=True.

(cherry picked from commit 54af64ad36)

Co-authored-by: Felix Fontein <felix@fontein.de>
2025-10-29 17:15:33 +00:00
patchback[bot]
0ed510a050 [PR #10955/e84f59a6 backport][stable-10] fix(pritunl_user): improve resilience to null or missing user parameters (#11013)
fix(pritunl_user): improve resilience to null or missing user parameters (#10955)

* fix(pritunl_user): improve resilience to null or missing user parameters

* added changelog fragment - 10955

* standardize 10955 changelog fragment content



* simplify user params comparison



* simplify list fetch



* simplify remote value retrieval



---------



(cherry picked from commit e84f59a62d)

Co-authored-by: David Jenkins <david.jenkins@twosixtech.com>
Co-authored-by: djenkins <djenkins@twosix.net>
Co-authored-by: Felix Fontein <felix@fontein.de>
2025-10-29 17:15:21 +00:00
patchback[bot]
103bde7764 [PR #10965/ce0d06b3 backport][stable-10] onepassword: extend CLI class initialization with additional parameters (#11006)
onepassword: extend CLI class initialization with additional parameters (#10965)

* onepassword: extend CLI class initialization with additional parameters

* add changelog fragment 10965-onepassword-bugfix.yml

* Update changelogs/fragments/10965-onepassword-bugfix.yml



---------


(cherry picked from commit ce0d06b306)

Co-authored-by: Matthew <mjmjelde@gmail.com>
Co-authored-by: Felix Fontein <felix@fontein.de>
2025-10-28 21:38:27 +01:00
patchback[bot]
b8f55cccdf [PR #11003/9cb619ff backport][stable-10] [stable-11] terraform: Fix bug when None values aren't processed correctly (#10961) (#11004)
[stable-11] terraform: Fix bug when None values aren't processed correctly (#10961) (#11003)

terraform: Fix bug when None values aren't processed correctly (#10961)

* terraform: Fix bug when None values aren't processed correctly

Just found that i can't pass null values as complex variables into terraform using this module, while i can do that with terraform itself. Fixed undesired behavior.

* chore: changelog fragment 10961-terraform-complexvars-null-bugfix.yaml

* Update changelogs/fragments/10961-terraform-complexvars-null-bugfix.yaml

* Update plugins/modules/terraform.py

* Update plugins/modules/terraform.py

* Fix condition to check for None type in terraform.py

---------

(cherry picked from commit af8c4fb95e)


(cherry picked from commit 9cb619ff6c)

Co-authored-by: Felix Fontein <felix@fontein.de>
Co-authored-by: nbragin4 <139489942+nbragin4@users.noreply.github.com>
2025-10-28 21:23:35 +01:00
Felix Fontein
b5abccfe31 Prepare 10.7.6. 2025-10-27 19:40:44 +01:00
Felix Fontein
335f6606fe [stable-10] Move ansible-core 2.16 to EOL CI (#10995)
Remove ansible-core 2.16 to EOL CI.
2025-10-27 19:16:21 +01:00
patchback[bot]
5bdbbd1f4f [PR #10988/f6781f65 backport][stable-10] CI: temporarily disable tests for copr (#10990)
CI: temporarily disable tests for copr (#10988)

Temporarily disable tests for copr.

(cherry picked from commit f6781f654e)

Co-authored-by: Felix Fontein <felix@fontein.de>
2025-10-26 21:57:02 +01:00
patchback[bot]
3f67766bac [PR #10948/7572b46c backport][stable-10] filesystem: docs adjustments (#10951)
filesystem: docs adjustments (#10948)

(cherry picked from commit 7572b46c7b)

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2025-10-21 06:45:32 +02:00
patchback[bot]
6848d6a302 [PR #10918/7e666a9c backport][stable-10] fix(modules/gitlab_runner): Fix exception in check mode on new runners (#10943)
fix(modules/gitlab_runner): Fix exception in check mode on new runners (#10918)

* fix(modules/gitlab_runner): Fix exception in check mode on new runners

When a new runner is added in check mode, the role used to throw an
exception. Fix this by returning a valid runner object instead of a
boolean.

Fixes #8854

* docs: Add changelog fragment

(cherry picked from commit 7e666a9c31)

Co-authored-by: carlfriedrich <carlfriedrich@posteo.de>
2025-10-19 09:31:21 +02:00
patchback[bot]
0f8dd60627 [PR #10926/9dedd774 backport][stable-10] Add __init__.py to work around ansible-test/pylint bug (#10927)
Add __init__.py to work around ansible-test/pylint bug (#10926)

Add __init__.py to work around ansible-test/pylint bug.

(cherry picked from commit 9dedd77459)

Co-authored-by: Felix Fontein <felix@fontein.de>
2025-10-15 21:55:29 +02:00
Felix Fontein
4190629e61 [stable-10] Replace devel with stable-2.20 (#10925)
Replace devel with stable-2.20.
2025-10-15 13:36:06 +02:00
patchback[bot]
38d719da07 [PR #10914/c5253c50 backport][stable-10] build(deps): bump github/codeql-action from 3 to 4 in the ci group (#10916)
build(deps): bump github/codeql-action from 3 to 4 in the ci group (#10914)

Bumps the ci group with 1 update: [github/codeql-action](https://github.com/github/codeql-action).

Updates `github/codeql-action` from 3 to 4
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/github/codeql-action/compare/v3...v4)

---
updated-dependencies:
- dependency-name: github/codeql-action
  dependency-version: '4'
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: ci
...



(cherry picked from commit c5253c5007)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-10-13 09:57:46 +02:00
Felix Fontein
ea40a39a09 [stable-10] random_string: replace random.SystemRandom() with secrets.SystemRandom() (#10896)
random_string: replace random.SystemRandom() with secrets.SystemRandom() (#10893)

* random_string: replace random.SystemRandom() with secrets.SystemRandom()



* add the forgotten blank line



* Update changelogs/fragments/replace-random-with-secrets.yml



* readd the description



* Update changelogs/fragments/replace-random-with-secrets.yml



---------



(cherry picked from commit 14a858fd9c)

Signed-off-by: Thomas Sjögren <konstruktoid@users.noreply.github.com>
Co-authored-by: Thomas Sjögren <konstruktoid@users.noreply.github.com>
2025-10-10 19:55:47 +02:00
patchback[bot]
67562860e2 [PR #10887/68b83451 backport][stable-10] pacman: link to yay bug report (#10889)
pacman: link to yay bug report (#10887)

Link to yay bug report.

(cherry picked from commit 68b8345199)

Co-authored-by: Felix Fontein <felix@fontein.de>
2025-10-10 08:10:26 +02:00
Felix Fontein
0ece2053f8 The next release will be 10.7.6. 2025-10-06 18:56:05 +02:00
Felix Fontein
3653dff68c Release 10.7.5. 2025-10-06 18:20:18 +02:00
Felix Fontein
171a028ef8 [stable-10] Avoid six in plugin code (#10873) (#10877)
Avoid six in plugin code (#10873)

Avoid six in plugin code.

(cherry picked from commit 6cd4665412)
2025-10-05 07:42:27 +02:00
Felix Fontein
4ab8f79eae [stable-10] Fix typos: s/the the/the/ (#10867) (#10869)
Fix typos: s/the the/the/ (#10867)

(cherry picked from commit 41b65161bd)

Co-authored-by: Pierre Riteau <pierre@stackhpc.com>
2025-09-30 21:58:26 +02:00
Felix Fontein
871e2809ed Add repository configuration to antsibull-nox.toml.
(cherry picked from commit e9b1788bb9)
2025-09-26 07:04:22 +02:00
patchback[bot]
ebf5dd9007 [PR #10857/68684a7a backport][stable-10] github_deploy_key: make sure variable exists before use (#10859)
github_deploy_key: make sure variable exists before use (#10857)

Make sure variable exists before use.

(cherry picked from commit 68684a7a4c)

Co-authored-by: Felix Fontein <felix@fontein.de>
2025-09-25 20:49:00 +02:00
patchback[bot]
054b369740 [PR #10852/648ff7db backport][stable-10] yaml cache plugin: make compatible with ansible-core 2.19 (#10855)
yaml cache plugin: make compatible with ansible-core 2.19 (#10852)

Make compatible with ansible-core 2.19.

(cherry picked from commit 648ff7db02)

Co-authored-by: Felix Fontein <felix@fontein.de>
2025-09-25 20:34:40 +02:00
Felix Fontein
f9598c8586 Prepare 10.7.5. 2025-09-21 20:45:23 +02:00
patchback[bot]
0b116fa1dc [PR #10840/b865bf57 backport][stable-10] Fix keycloak sub-group search (#10845)
Fix keycloak sub-group search (#10840)

* fix bug in missing realm argument when searching for groups

* MR change fragment

* 39+1=40

(cherry picked from commit b865bf5751)

Co-authored-by: Jakub Danek <danekja@users.noreply.github.com>
2025-09-21 20:44:25 +02:00
patchback[bot]
01d0f3ccb7 [PR #10832/0f23b9e3 backport][stable-10] Force Content-type header to application/json if is_pre740 is false (#10847)
Force Content-type header to application/json if is_pre740 is false (#10832)

* Force Content-type header to application/json if is_pre740 is false

* Remove response variable from fail_json module

* Add a missing blank line to match pep8 requirement

* Add changelog fragment of issue #10796

* Rename fragment section

* Improve fragment readability



---------



(cherry picked from commit 0f23b9e391)

Co-authored-by: X <2465124+broferek@users.noreply.github.com>
Co-authored-by: ludovic <ludovic.petetin@aleph-networks.com>
Co-authored-by: Felix Fontein <felix@fontein.de>
2025-09-21 20:44:08 +02:00
patchback[bot]
7a8c3346ff [PR #10829/7c40c6b6 backport][stable-10] Keycloak role fix changed status (#10838)
Keycloak role fix changed status (#10829)

* Exclude aliases before comparison

* add test

* fragment

* Update changelogs/fragments/10829-fix-keycloak-role-changed-status.yml



---------



(cherry picked from commit 7c40c6b6b5)

Co-authored-by: desand01 <desrosiers.a@hotmail.com>
Co-authored-by: Andre Desrosiers <andre.desrosiers@ssss.gouv.qc.ca>
Co-authored-by: Felix Fontein <felix@fontein.de>
2025-09-18 22:15:06 +02:00
patchback[bot]
f8acda70d2 [PR #10830/2bf8ae88 backport][stable-10] timezone: mention that Debian 13 also needs util-linux-extra (#10836)
timezone: mention that Debian 13 also needs util-linux-extra (#10830)

Mention that Debian 13 also needs util-linux-extra.

(cherry picked from commit 2bf8ae88be)

Co-authored-by: Felix Fontein <felix@fontein.de>
2025-09-18 22:14:54 +02:00
patchback[bot]
2eedbdc928 [PR #10822/0911db45 backport][stable-10] pipx: review tests (#10825)
pipx: review tests (#10822)

(cherry picked from commit 0911db457e)

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2025-09-13 10:30:45 +02:00
patchback[bot]
c251868e55 [PR #10818/d2e2395a backport][stable-10] Speed up tests in android_sdk module (#10820)
Speed up tests in android_sdk module (#10818)

changed the dependency that is used to test the functionality in android_sdk module. The previous dependency was ~100MB, the current one is ~6MB. This should speed up the tests a bit and reduce the traffic.

(cherry picked from commit d2e2395ae3)

Co-authored-by: Stanislav Shamilov <shamilovstas@protonmail.com>
2025-09-12 19:36:21 +02:00
patchback[bot]
e501974a9e [PR #10813/a7e4cee4 backport][stable-10] Remove obsolete test conditions (#10814)
Remove obsolete test conditions (#10813)

* Fedora 31 and 32 are EOL, remove conditions related


(cherry picked from commit a7e4cee47d)

Signed-off-by: Abhijeet Kasurde <Akasurde@redhat.com>
Co-authored-by: Abhijeet Kasurde <akasurde@redhat.com>
2025-09-12 06:41:17 +02:00
79 changed files with 520 additions and 491 deletions

View File

@@ -57,14 +57,14 @@ pool: Standard
stages:
### Sanity
- stage: Sanity_devel
displayName: Sanity devel
- stage: Sanity_2_20
displayName: Sanity 2.20
dependsOn: []
jobs:
- template: templates/matrix.yml
parameters:
nameFormat: Test {0}
testFormat: devel/sanity/{0}
testFormat: 2.20/sanity/{0}
targets:
- test: 1
- test: 2
@@ -109,28 +109,15 @@ stages:
- test: 2
- test: 3
- test: 4
- stage: Sanity_2_16
displayName: Sanity 2.16
dependsOn: []
jobs:
- template: templates/matrix.yml
parameters:
nameFormat: Test {0}
testFormat: 2.16/sanity/{0}
targets:
- test: 1
- test: 2
- test: 3
- test: 4
### Units
- stage: Units_devel
displayName: Units devel
- stage: Units_2_20
displayName: Units 2.20
dependsOn: []
jobs:
- template: templates/matrix.yml
parameters:
nameFormat: Python {0}
testFormat: devel/units/{0}/1
testFormat: 2.20/units/{0}/1
targets:
- test: 3.9
- test: '3.10'
@@ -174,27 +161,15 @@ stages:
- test: 3.7
- test: "3.10"
- test: "3.12"
- stage: Units_2_16
displayName: Units 2.16
dependsOn: []
jobs:
- template: templates/matrix.yml
parameters:
nameFormat: Python {0}
testFormat: 2.16/units/{0}/1
targets:
- test: 2.7
- test: 3.6
- test: "3.11"
## Remote
- stage: Remote_devel_extra_vms
displayName: Remote devel extra VMs
- stage: Remote_2_20_extra_vms
displayName: Remote 2.20 extra VMs
dependsOn: []
jobs:
- template: templates/matrix.yml
parameters:
testFormat: devel/{0}
testFormat: 2.20/{0}
targets:
- name: Alpine 3.22
test: alpine/3.22
@@ -206,13 +181,13 @@ stages:
test: ubuntu/24.04
groups:
- vm
- stage: Remote_devel
displayName: Remote devel
- stage: Remote_2_20
displayName: Remote 2.20
dependsOn: []
jobs:
- template: templates/matrix.yml
parameters:
testFormat: devel/{0}
testFormat: 2.20/{0}
targets:
- name: macOS 15.3
test: macos/15.3
@@ -280,37 +255,15 @@ stages:
- 1
- 2
- 3
- stage: Remote_2_16
displayName: Remote 2.16
dependsOn: []
jobs:
- template: templates/matrix.yml
parameters:
testFormat: 2.16/{0}
targets:
- name: macOS 13.2
test: macos/13.2
- name: RHEL 9.2
test: rhel/9.2
- name: RHEL 8.8
test: rhel/8.8
- name: RHEL 7.9
test: rhel/7.9
# - name: FreeBSD 13.2
# test: freebsd/13.2
groups:
- 1
- 2
- 3
### Docker
- stage: Docker_devel
displayName: Docker devel
- stage: Docker_2_20
displayName: Docker 2.20
dependsOn: []
jobs:
- template: templates/matrix.yml
parameters:
testFormat: devel/linux/{0}
testFormat: 2.20/linux/{0}
targets:
- name: Fedora 42
test: fedora42
@@ -376,35 +329,15 @@ stages:
- 1
- 2
- 3
- stage: Docker_2_16
displayName: Docker 2.16
dependsOn: []
jobs:
- template: templates/matrix.yml
parameters:
testFormat: 2.16/linux/{0}
targets:
- name: Fedora 38
test: fedora38
- name: openSUSE 15
test: opensuse15
- name: Alpine 3
test: alpine3
- name: CentOS 7
test: centos7
groups:
- 1
- 2
- 3
### Community Docker
- stage: Docker_community_devel
displayName: Docker (community images) devel
- stage: Docker_community_2_20
displayName: Docker (community images) 2.20
dependsOn: []
jobs:
- template: templates/matrix.yml
parameters:
testFormat: devel/linux-community/{0}
testFormat: 2.20/linux-community/{0}
targets:
- name: Debian 11 Bullseye
test: debian-bullseye/3.9
@@ -421,14 +354,14 @@ stages:
### Generic
# Right now all generic tests are disabled. Uncomment when at least one of them is re-enabled.
# - stage: Generic_devel
# displayName: Generic devel
# - stage: Generic_2_20
# displayName: Generic 2.20
# dependsOn: []
# jobs:
# - template: templates/matrix.yml
# parameters:
# nameFormat: Python {0}
# testFormat: devel/generic/{0}/1
# testFormat: 2.20/generic/{0}/1
# targets:
# - test: '3.9'
# - test: '3.12'
@@ -466,49 +399,32 @@ stages:
# targets:
# - test: '3.7'
# - test: '3.12'
# - stage: Generic_2_16
# displayName: Generic 2.16
# dependsOn: []
# jobs:
# - template: templates/matrix.yml
# parameters:
# nameFormat: Python {0}
# testFormat: 2.16/generic/{0}/1
# targets:
# - test: '2.7'
# - test: '3.6'
# - test: '3.11'
- stage: Summary
condition: succeededOrFailed()
dependsOn:
- Sanity_devel
- Sanity_2_20
- Sanity_2_19
- Sanity_2_18
- Sanity_2_17
- Sanity_2_16
- Units_devel
- Units_2_20
- Units_2_19
- Units_2_18
- Units_2_17
- Units_2_16
- Remote_devel_extra_vms
- Remote_devel
- Remote_2_20_extra_vms
- Remote_2_20
- Remote_2_19
- Remote_2_18
- Remote_2_17
- Remote_2_16
- Docker_devel
- Docker_2_20
- Docker_2_19
- Docker_2_18
- Docker_2_17
- Docker_2_16
- Docker_community_devel
- Docker_community_2_20
# Right now all generic tests are disabled. Uncomment when at least one of them is re-enabled.
# - Generic_devel
# - Generic_2_20
# - Generic_2_19
# - Generic_2_18
# - Generic_2_17
# - Generic_2_16
jobs:
- template: templates/coverage.yml

View File

@@ -30,6 +30,7 @@ jobs:
matrix:
ansible:
- '2.15'
- '2.16'
# Ansible-test on various stable branches does not yet work well with cgroups v2.
# Since ubuntu-latest now uses Ubuntu 22.04, we need to fall back to the ubuntu-20.04
# image for these stable branches. The list of branches where this is necessary will
@@ -73,6 +74,12 @@ jobs:
python: '3.5'
- ansible: '2.15'
python: '3.10'
- ansible: '2.16'
python: '2.7'
- ansible: '2.16'
python: '3.6'
- ansible: '2.16'
python: '3.11'
steps:
- name: >-
@@ -138,19 +145,43 @@ jobs:
docker: fedora37
python: ''
target: azp/posix/3/
# Right now all generic tests are disabled. Uncomment when at least one of them is re-enabled.
# - ansible: '2.13'
# docker: default
# python: '3.9'
# target: azp/generic/1/
# - ansible: '2.14'
# docker: default
# python: '3.10'
# target: azp/generic/1/
# - ansible: '2.15'
# docker: default
# python: '3.9'
# target: azp/generic/1/
# 2.16
- ansible: '2.16'
docker: alpine3
python: ''
target: azp/posix/1/
- ansible: '2.16'
docker: alpine3
python: ''
target: azp/posix/2/
- ansible: '2.16'
docker: alpine3
python: ''
target: azp/posix/3/
- ansible: '2.16'
docker: fedora38
python: ''
target: azp/posix/1/
- ansible: '2.16'
docker: fedora38
python: ''
target: azp/posix/2/
- ansible: '2.16'
docker: fedora38
python: ''
target: azp/posix/3/
- ansible: '2.16'
docker: opensuse15
python: ''
target: azp/posix/1/
- ansible: '2.16'
docker: opensuse15
python: ''
target: azp/posix/2/
- ansible: '2.16'
docker: opensuse15
python: ''
target: azp/posix/3/
steps:
- name: >-

View File

@@ -30,9 +30,9 @@ jobs:
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v3
uses: github/codeql-action/init@v4
with:
languages: python
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v3
uses: github/codeql-action/analyze@v4

View File

@@ -2,90 +2,97 @@
**Topics**
- <a href="#v10-7-4">v10\.7\.4</a>
- <a href="#v10-7-6">v10\.7\.6</a>
- <a href="#release-summary">Release Summary</a>
- <a href="#security-fixes">Security Fixes</a>
- <a href="#bugfixes">Bugfixes</a>
- <a href="#v10-7-3">v10\.7\.3</a>
- <a href="#v10-7-5">v10\.7\.5</a>
- <a href="#release-summary-1">Release Summary</a>
- <a href="#bugfixes-1">Bugfixes</a>
- <a href="#v10-7-2">v10\.7\.2</a>
- <a href="#v10-7-4">v10\.7\.4</a>
- <a href="#release-summary-2">Release Summary</a>
- <a href="#bugfixes-2">Bugfixes</a>
- <a href="#v10-7-1">v10\.7\.1</a>
- <a href="#v10-7-3">v10\.7\.3</a>
- <a href="#release-summary-3">Release Summary</a>
- <a href="#bugfixes-3">Bugfixes</a>
- <a href="#v10-7-2">v10\.7\.2</a>
- <a href="#release-summary-4">Release Summary</a>
- <a href="#bugfixes-4">Bugfixes</a>
- <a href="#v10-7-1">v10\.7\.1</a>
- <a href="#release-summary-5">Release Summary</a>
- <a href="#minor-changes">Minor Changes</a>
- <a href="#deprecated-features">Deprecated Features</a>
- <a href="#bugfixes-3">Bugfixes</a>
- <a href="#bugfixes-5">Bugfixes</a>
- <a href="#v10-7-0">v10\.7\.0</a>
- <a href="#release-summary-4">Release Summary</a>
- <a href="#release-summary-6">Release Summary</a>
- <a href="#minor-changes-1">Minor Changes</a>
- <a href="#deprecated-features-1">Deprecated Features</a>
- <a href="#bugfixes-4">Bugfixes</a>
- <a href="#bugfixes-6">Bugfixes</a>
- <a href="#new-plugins">New Plugins</a>
- <a href="#callback">Callback</a>
- <a href="#filter">Filter</a>
- <a href="#new-modules">New Modules</a>
- <a href="#v10-6-0">v10\.6\.0</a>
- <a href="#release-summary-5">Release Summary</a>
- <a href="#release-summary-7">Release Summary</a>
- <a href="#minor-changes-2">Minor Changes</a>
- <a href="#deprecated-features-2">Deprecated Features</a>
- <a href="#bugfixes-5">Bugfixes</a>
- <a href="#bugfixes-7">Bugfixes</a>
- <a href="#known-issues">Known Issues</a>
- <a href="#new-plugins-1">New Plugins</a>
- <a href="#connection">Connection</a>
- <a href="#v10-5-0">v10\.5\.0</a>
- <a href="#release-summary-6">Release Summary</a>
- <a href="#release-summary-8">Release Summary</a>
- <a href="#minor-changes-3">Minor Changes</a>
- <a href="#bugfixes-6">Bugfixes</a>
- <a href="#bugfixes-8">Bugfixes</a>
- <a href="#new-modules-1">New Modules</a>
- <a href="#v10-4-0">v10\.4\.0</a>
- <a href="#release-summary-7">Release Summary</a>
- <a href="#release-summary-9">Release Summary</a>
- <a href="#minor-changes-4">Minor Changes</a>
- <a href="#deprecated-features-3">Deprecated Features</a>
- <a href="#bugfixes-7">Bugfixes</a>
- <a href="#bugfixes-9">Bugfixes</a>
- <a href="#new-modules-2">New Modules</a>
- <a href="#v10-3-1">v10\.3\.1</a>
- <a href="#release-summary-8">Release Summary</a>
- <a href="#release-summary-10">Release Summary</a>
- <a href="#minor-changes-5">Minor Changes</a>
- <a href="#bugfixes-8">Bugfixes</a>
- <a href="#bugfixes-10">Bugfixes</a>
- <a href="#v10-3-0">v10\.3\.0</a>
- <a href="#release-summary-9">Release Summary</a>
- <a href="#release-summary-11">Release Summary</a>
- <a href="#minor-changes-6">Minor Changes</a>
- <a href="#deprecated-features-4">Deprecated Features</a>
- <a href="#security-fixes">Security Fixes</a>
- <a href="#bugfixes-9">Bugfixes</a>
- <a href="#security-fixes-1">Security Fixes</a>
- <a href="#bugfixes-11">Bugfixes</a>
- <a href="#new-plugins-2">New Plugins</a>
- <a href="#connection-1">Connection</a>
- <a href="#filter-1">Filter</a>
- <a href="#lookup">Lookup</a>
- <a href="#new-modules-3">New Modules</a>
- <a href="#v10-2-0">v10\.2\.0</a>
- <a href="#release-summary-10">Release Summary</a>
- <a href="#release-summary-12">Release Summary</a>
- <a href="#minor-changes-7">Minor Changes</a>
- <a href="#deprecated-features-5">Deprecated Features</a>
- <a href="#security-fixes-1">Security Fixes</a>
- <a href="#bugfixes-10">Bugfixes</a>
- <a href="#security-fixes-2">Security Fixes</a>
- <a href="#bugfixes-12">Bugfixes</a>
- <a href="#new-plugins-3">New Plugins</a>
- <a href="#inventory">Inventory</a>
- <a href="#new-modules-4">New Modules</a>
- <a href="#v10-1-0">v10\.1\.0</a>
- <a href="#release-summary-11">Release Summary</a>
- <a href="#release-summary-13">Release Summary</a>
- <a href="#minor-changes-8">Minor Changes</a>
- <a href="#deprecated-features-6">Deprecated Features</a>
- <a href="#bugfixes-11">Bugfixes</a>
- <a href="#bugfixes-13">Bugfixes</a>
- <a href="#new-plugins-4">New Plugins</a>
- <a href="#filter-2">Filter</a>
- <a href="#new-modules-5">New Modules</a>
- <a href="#v10-0-1">v10\.0\.1</a>
- <a href="#release-summary-12">Release Summary</a>
- <a href="#bugfixes-12">Bugfixes</a>
- <a href="#release-summary-14">Release Summary</a>
- <a href="#bugfixes-14">Bugfixes</a>
- <a href="#v10-0-0">v10\.0\.0</a>
- <a href="#release-summary-13">Release Summary</a>
- <a href="#release-summary-15">Release Summary</a>
- <a href="#minor-changes-9">Minor Changes</a>
- <a href="#breaking-changes--porting-guide">Breaking Changes / Porting Guide</a>
- <a href="#deprecated-features-7">Deprecated Features</a>
- <a href="#removed-features-previously-deprecated">Removed Features \(previously deprecated\)</a>
- <a href="#bugfixes-13">Bugfixes</a>
- <a href="#bugfixes-15">Bugfixes</a>
- <a href="#known-issues-1">Known Issues</a>
- <a href="#new-plugins-5">New Plugins</a>
- <a href="#filter-3">Filter</a>
@@ -93,17 +100,58 @@
- <a href="#new-modules-6">New Modules</a>
This changelog describes changes after version 9\.0\.0\.
<a id="v10-7-4"></a>
## v10\.7\.4
<a id="v10-7-6"></a>
## v10\.7\.6
<a id="release-summary"></a>
### Release Summary
Regular bugfix release\.
<a id="security-fixes"></a>
### Security Fixes
* keycloak\_user \- the parameter <code>credentials\[\]\.value</code> is now marked as <code>no\_log\=true</code>\. Before it was logged by Ansible\, unless the task was marked as <code>no\_log\: true</code>\. Since this parameter can be used for passwords\, this resulted in credential leaking \([https\://github\.com/ansible\-collections/community\.general/issues/11000](https\://github\.com/ansible\-collections/community\.general/issues/11000)\, [https\://github\.com/ansible\-collections/community\.general/pull/11005](https\://github\.com/ansible\-collections/community\.general/pull/11005)\)\.
<a id="bugfixes"></a>
### Bugfixes
* gitlab\_runner \- fix exception in check mode when a new runner is created \([https\://github\.com/ansible\-collections/community\.general/issues/8854](https\://github\.com/ansible\-collections/community\.general/issues/8854)\)\.
* omapi\_host \- make return values compatible with ansible\-core 2\.19 and Python 3 \([https\://github\.com/ansible\-collections/community\.general/pull/11001](https\://github\.com/ansible\-collections/community\.general/pull/11001)\)\.
* onepassword\_doc and onepassword\_ssh\_key lookup plugins \- ensure that all connection parameters are passed to CLI class \([https\://github\.com/ansible\-collections/community\.general/pull/10965](https\://github\.com/ansible\-collections/community\.general/pull/10965)\)\.
* pritunl\_user \- improve resilience when comparing user parameters if remote fields are <code>null</code> or missing\. List parameters \(<code>groups</code>\, <code>mac\_addresses</code>\) now safely default to empty lists for comparison and avoids <code>KeyError</code> issues \([https\://github\.com/ansible\-collections/community\.general/issues/10954](https\://github\.com/ansible\-collections/community\.general/issues/10954)\, [https\://github\.com/ansible\-collections/community\.general/pull/10955](https\://github\.com/ansible\-collections/community\.general/pull/10955)\)\.
* random\_string lookup plugin \- replace <code>random\.SystemRandom\(\)</code> with <code>secrets\.SystemRandom\(\)</code> when generating strings\. This has no practical effect\, as both are the same \([https\://github\.com/ansible\-collections/community\.general/pull/10893](https\://github\.com/ansible\-collections/community\.general/pull/10893)\)\.
* terraform \- fix bug when <code>null</code> values inside complex vars are throwing error instead of being passed to terraform\. Now terraform can handle <code>null\`\`s in \`\`complex\_vars</code> itself \([https\://github\.com/ansible\-collections/community\.general/pull/10961](https\://github\.com/ansible\-collections/community\.general/pull/10961)\)\.
<a id="v10-7-5"></a>
## v10\.7\.5
<a id="release-summary-1"></a>
### Release Summary
Regular bugfix release\.
<a id="bugfixes-1"></a>
### Bugfixes
* Avoid usage of deprecated <code>ansible\.module\_utils\.six</code> in all code that does not have to support Python 2 \([https\://github\.com/ansible\-collections/community\.general/pull/10873](https\://github\.com/ansible\-collections/community\.general/pull/10873)\)\.
* github\_deploy\_key \- fix bug during error handling if no body was present in the result \([https\://github\.com/ansible\-collections/community\.general/issues/10853](https\://github\.com/ansible\-collections/community\.general/issues/10853)\, [https\://github\.com/ansible\-collections/community\.general/pull/10857](https\://github\.com/ansible\-collections/community\.general/pull/10857)\)\.
* keycloak\_group \- fixes an issue where module ignores realm when searching subgroups by name \([https\://github\.com/ansible\-collections/community\.general/pull/10840](https\://github\.com/ansible\-collections/community\.general/pull/10840)\)\.
* keycloak\_role \- fixes an issue where the module incorrectly returns <code>changed\=true</code> when using the alias <code>clientId</code> in composite roles \([https\://github\.com/ansible\-collections/community\.general/pull/10829](https\://github\.com/ansible\-collections/community\.general/pull/10829)\)\.
* rocketchat \- fix message delivery in Rocket Chat \>\= 7\.5\.3 by forcing <code>Content\-Type</code> header to <code>application/json</code> instead of the default <code>application/x\-www\-form\-urlencoded</code> \([https\://github\.com/ansible\-collections/community\.general/issues/10796](https\://github\.com/ansible\-collections/community\.general/issues/10796)\, [https\://github\.com/ansible\-collections/community\.general/pull/10796](https\://github\.com/ansible\-collections/community\.general/pull/10796)\)\.
* yaml cache plugin \- make compatible with ansible\-core 2\.19 \([https\://github\.com/ansible\-collections/community\.general/issues/10849](https\://github\.com/ansible\-collections/community\.general/issues/10849)\, [https\://github\.com/ansible\-collections/community\.general/issues/10852](https\://github\.com/ansible\-collections/community\.general/issues/10852)\)\.
<a id="v10-7-4"></a>
## v10\.7\.4
<a id="release-summary-2"></a>
### Release Summary
Regular bugfix release\.
<a id="bugfixes-2"></a>
### Bugfixes
* Avoid deprecated functionality in ansible\-core 2\.20 \([https\://github\.com/ansible\-collections/community\.general/pull/10687](https\://github\.com/ansible\-collections/community\.general/pull/10687)\)\.
* apache2\_module \- check the <code>cgi</code> module restrictions only during activation \([https\://github\.com/ansible\-collections/community\.general/pull/10423](https\://github\.com/ansible\-collections/community\.general/pull/10423)\)\.
* kdeconfig \- <code>kwriteconfig</code> executable could not be discovered automatically on systems with only <code>kwriteconfig6</code> installed\. <code>kwriteconfig6</code> can now be discovered by Ansible \([https\://github\.com/ansible\-collections/community\.general/issues/10746](https\://github\.com/ansible\-collections/community\.general/issues/10746)\, [https\://github\.com/ansible\-collections/community\.general/pull/10751](https\://github\.com/ansible\-collections/community\.general/pull/10751)\)\.
@@ -114,12 +162,12 @@ Regular bugfix release\.
<a id="v10-7-3"></a>
## v10\.7\.3
<a id="release-summary-1"></a>
<a id="release-summary-3"></a>
### Release Summary
Regular bugfix release\.
<a id="bugfixes-1"></a>
<a id="bugfixes-3"></a>
### Bugfixes
* apache2\_module \- avoid ansible\-core 2\.19 deprecation \([https\://github\.com/ansible\-collections/community\.general/pull/10459](https\://github\.com/ansible\-collections/community\.general/pull/10459)\)\.
@@ -146,12 +194,12 @@ Regular bugfix release\.
<a id="v10-7-2"></a>
## v10\.7\.2
<a id="release-summary-2"></a>
<a id="release-summary-4"></a>
### Release Summary
Regular bugfix release\.
<a id="bugfixes-2"></a>
<a id="bugfixes-4"></a>
### Bugfixes
* dependent lookup plugin \- avoid deprecated ansible\-core 2\.19 functionality \([https\://github\.com/ansible\-collections/community\.general/pull/10359](https\://github\.com/ansible\-collections/community\.general/pull/10359)\)\.
@@ -164,7 +212,7 @@ Regular bugfix release\.
<a id="v10-7-1"></a>
## v10\.7\.1
<a id="release-summary-3"></a>
<a id="release-summary-5"></a>
### Release Summary
Regular bugfix release\.
@@ -180,7 +228,7 @@ Regular bugfix release\.
* yaml callback plugin \- the YAML callback plugin was deprecated for removal in community\.general 13\.0\.0\. Since it needs to use ansible\-core internals since ansible\-core 2\.19 that are changing a lot\, we will remove this plugin already from community\.general 12\.0\.0 to ease the maintenance burden \([https\://github\.com/ansible\-collections/community\.general/pull/10213](https\://github\.com/ansible\-collections/community\.general/pull/10213)\)\.
<a id="bugfixes-3"></a>
<a id="bugfixes-5"></a>
### Bugfixes
* cobbler\_system \- update minimum version number to avoid wrong comparisons that happen in some cases using LooseVersion class which results in TypeError \([https\://github\.com/ansible\-collections/community\.general/issues/8506](https\://github\.com/ansible\-collections/community\.general/issues/8506)\, [https\://github\.com/ansible\-collections/community\.general/pull/10145](https\://github\.com/ansible\-collections/community\.general/pull/10145)\, [https\://github\.com/ansible\-collections/community\.general/pull/10178](https\://github\.com/ansible\-collections/community\.general/pull/10178)\)\.
@@ -194,7 +242,7 @@ Regular bugfix release\.
<a id="v10-7-0"></a>
## v10\.7\.0
<a id="release-summary-4"></a>
<a id="release-summary-6"></a>
### Release Summary
Bugfix and feature release\.
@@ -218,7 +266,7 @@ From now on\, there will only be bugfix 10\.7\.x releases for the community\.gen
* The proxmox content \(modules and plugins\) is being moved to the [new collection community\.proxmox](https\://github\.com/ansible\-collections/community\.proxmox)\. In community\.general 11\.0\.0\, these modules and plugins will be replaced by deprecated redirections to community\.proxmox\. You need to explicitly install community\.proxmox\, for example with <code>ansible\-galaxy collection install community\.proxmox</code>\. We suggest to update your roles and playbooks to use the new FQCNs as soon as possible to avoid getting deprecation messages \([https\://github\.com/ansible\-collections/community\.general/pull/10109](https\://github\.com/ansible\-collections/community\.general/pull/10109)\)\.
* pipx module\_utils \- function <code>make\_process\_list\(\)</code> is deprecated and will be removed in community\.general 13\.0\.0 \([https\://github\.com/ansible\-collections/community\.general/pull/10031](https\://github\.com/ansible\-collections/community\.general/pull/10031)\)\.
<a id="bugfixes-4"></a>
<a id="bugfixes-6"></a>
### Bugfixes
* cobbler\_system \- fix bug with Cobbler \>\= 3\.4\.0 caused by giving more than 2 positional arguments to <code>CobblerXMLRPCInterface\.get\_system\_handle\(\)</code> \([https\://github\.com/ansible\-collections/community\.general/issues/8506](https\://github\.com/ansible\-collections/community\.general/issues/8506)\, [https\://github\.com/ansible\-collections/community\.general/pull/10145](https\://github\.com/ansible\-collections/community\.general/pull/10145)\)\.
@@ -250,7 +298,7 @@ From now on\, there will only be bugfix 10\.7\.x releases for the community\.gen
<a id="v10-6-0"></a>
## v10\.6\.0
<a id="release-summary-5"></a>
<a id="release-summary-7"></a>
### Release Summary
Regular bugfix and feature release\.
@@ -294,7 +342,7 @@ Regular bugfix and feature release\.
* manifold lookup plugin \- plugin is deprecated and will be removed in community\.general 11\.0\.0 \([https\://github\.com/ansible\-collections/community\.general/pull/10028](https\://github\.com/ansible\-collections/community\.general/pull/10028)\)\.
* stackpath\_compute inventory plugin \- plugin is deprecated and will be removed in community\.general 11\.0\.0 \([https\://github\.com/ansible\-collections/community\.general/pull/10026](https\://github\.com/ansible\-collections/community\.general/pull/10026)\)\.
<a id="bugfixes-5"></a>
<a id="bugfixes-7"></a>
### Bugfixes
* dependent look plugin \- make compatible with ansible\-core\'s Data Tagging feature \([https\://github\.com/ansible\-collections/community\.general/pull/9833](https\://github\.com/ansible\-collections/community\.general/pull/9833)\)\.
@@ -327,7 +375,7 @@ Regular bugfix and feature release\.
<a id="v10-5-0"></a>
## v10\.5\.0
<a id="release-summary-6"></a>
<a id="release-summary-8"></a>
### Release Summary
Regular bugfix and feature release\.
@@ -349,7 +397,7 @@ Regular bugfix and feature release\.
* systemd\_info \- extend support to timer units \([https\://github\.com/ansible\-collections/community\.general/pull/9891](https\://github\.com/ansible\-collections/community\.general/pull/9891)\)\.
* vmadm \- add new options <code>flexible\_disk\_size</code> and <code>owner\_uuid</code> \([https\://github\.com/ansible\-collections/community\.general/pull/9892](https\://github\.com/ansible\-collections/community\.general/pull/9892)\)\.
<a id="bugfixes-6"></a>
<a id="bugfixes-8"></a>
### Bugfixes
* cloudlare\_dns \- handle exhausted response stream in case of HTTP errors to show nice error message to the user \([https\://github\.com/ansible\-collections/community\.general/issues/9782](https\://github\.com/ansible\-collections/community\.general/issues/9782)\, [https\://github\.com/ansible\-collections/community\.general/pull/9818](https\://github\.com/ansible\-collections/community\.general/pull/9818)\)\.
@@ -369,7 +417,7 @@ Regular bugfix and feature release\.
<a id="v10-4-0"></a>
## v10\.4\.0
<a id="release-summary-7"></a>
<a id="release-summary-9"></a>
### Release Summary
Regular bugfix and feature release\.
@@ -399,7 +447,7 @@ Regular bugfix and feature release\.
* profitbricks\_volume \- module is deprecated and will be removed in community\.general 11\.0\.0 \([https\://github\.com/ansible\-collections/community\.general/pull/9733](https\://github\.com/ansible\-collections/community\.general/pull/9733)\)\.
* profitbricks\_volume\_attachments \- module is deprecated and will be removed in community\.general 11\.0\.0 \([https\://github\.com/ansible\-collections/community\.general/pull/9733](https\://github\.com/ansible\-collections/community\.general/pull/9733)\)\.
<a id="bugfixes-7"></a>
<a id="bugfixes-9"></a>
### Bugfixes
* apache2\_mod\_proxy \- make compatible with Python 3 \([https\://github\.com/ansible\-collections/community\.general/pull/9762](https\://github\.com/ansible\-collections/community\.general/pull/9762)\)\.
@@ -427,7 +475,7 @@ Regular bugfix and feature release\.
<a id="v10-3-1"></a>
## v10\.3\.1
<a id="release-summary-8"></a>
<a id="release-summary-10"></a>
### Release Summary
Bugfix release\.
@@ -437,7 +485,7 @@ Bugfix release\.
* onepassword\_ssh\_key \- refactor to move code to lookup class \([https\://github\.com/ansible\-collections/community\.general/pull/9633](https\://github\.com/ansible\-collections/community\.general/pull/9633)\)\.
<a id="bugfixes-8"></a>
<a id="bugfixes-10"></a>
### Bugfixes
* cloudflare\_dns \- fix crash when deleting a DNS record or when updating a record with <code>solo\=true</code> \([https\://github\.com/ansible\-collections/community\.general/issues/9652](https\://github\.com/ansible\-collections/community\.general/issues/9652)\, [https\://github\.com/ansible\-collections/community\.general/pull/9649](https\://github\.com/ansible\-collections/community\.general/pull/9649)\)\.
@@ -451,7 +499,7 @@ Bugfix release\.
<a id="v10-3-0"></a>
## v10\.3\.0
<a id="release-summary-9"></a>
<a id="release-summary-11"></a>
### Release Summary
Regular bugfix and feature release\.
@@ -585,12 +633,12 @@ Regular bugfix and feature release\.
* MH module utils \- attribute <code>debug</code> definition in subclasses of MH is now deprecated\, as that name will become a delegation to <code>AnsibleModule</code> in community\.general 12\.0\.0\, and any such attribute will be overridden by that delegation in that version \([https\://github\.com/ansible\-collections/community\.general/pull/9577](https\://github\.com/ansible\-collections/community\.general/pull/9577)\)\.
* proxmox \- removes default value <code>false</code> of <code>update</code> parameter\. This will be changed to a default of <code>true</code> in community\.general 11\.0\.0 \([https\://github\.com/ansible\-collections/community\.general/pull/9225](https\://github\.com/ansible\-collections/community\.general/pull/9225)\)\.
<a id="security-fixes"></a>
<a id="security-fixes-1"></a>
### Security Fixes
* keycloak\_client \- Sanitize <code>saml\.encryption\.private\.key</code> so it does not show in the logs \([https\://github\.com/ansible\-collections/community\.general/pull/9621](https\://github\.com/ansible\-collections/community\.general/pull/9621)\)\.
<a id="bugfixes-9"></a>
<a id="bugfixes-11"></a>
### Bugfixes
* homebrew \- fix incorrect handling of homebrew modules when a tap is requested \([https\://github\.com/ansible\-collections/community\.general/pull/9546](https\://github\.com/ansible\-collections/community\.general/pull/9546)\, [https\://github\.com/ansible\-collections/community\.general/issues/9533](https\://github\.com/ansible\-collections/community\.general/issues/9533)\)\.
@@ -634,7 +682,7 @@ Regular bugfix and feature release\.
<a id="v10-2-0"></a>
## v10\.2\.0
<a id="release-summary-10"></a>
<a id="release-summary-12"></a>
### Release Summary
Regular bugfix and feature release\.
@@ -788,12 +836,12 @@ Regular bugfix and feature release\.
* slack \- the default value <code>auto</code> of the <code>prepend\_hash</code> option is deprecated and will change to <code>never</code> in community\.general 12\.0\.0 \([https\://github\.com/ansible\-collections/community\.general/pull/9443](https\://github\.com/ansible\-collections/community\.general/pull/9443)\)\.
* yaml callback plugin \- deprecate plugin in favor of <code>result\_format\=yaml</code> in plugin <code>ansible\.bulitin\.default</code> \([https\://github\.com/ansible\-collections/community\.general/pull/9456](https\://github\.com/ansible\-collections/community\.general/pull/9456)\)\.
<a id="security-fixes-1"></a>
<a id="security-fixes-2"></a>
### Security Fixes
* keycloak\_authentication \- API calls did not properly set the <code>priority</code> during update resulting in incorrectly sorted authentication flows\. This apparently only affects Keycloak 25 or newer \([https\://github\.com/ansible\-collections/community\.general/pull/9263](https\://github\.com/ansible\-collections/community\.general/pull/9263)\)\.
<a id="bugfixes-10"></a>
<a id="bugfixes-12"></a>
### Bugfixes
* dig lookup plugin \- correctly handle <code>NoNameserver</code> exception \([https\://github\.com/ansible\-collections/community\.general/pull/9363](https\://github\.com/ansible\-collections/community\.general/pull/9363)\, [https\://github\.com/ansible\-collections/community\.general/issues/9362](https\://github\.com/ansible\-collections/community\.general/issues/9362)\)\.
@@ -824,7 +872,7 @@ Regular bugfix and feature release\.
<a id="v10-1-0"></a>
## v10\.1\.0
<a id="release-summary-11"></a>
<a id="release-summary-13"></a>
### Release Summary
Regular bugfix and feature release\.
@@ -856,7 +904,7 @@ Regular bugfix and feature release\.
* opkg \- deprecate value <code>\"\"</code> for parameter <code>force</code> \([https\://github\.com/ansible\-collections/community\.general/pull/9172](https\://github\.com/ansible\-collections/community\.general/pull/9172)\)\.
* redfish\_utils module utils \- deprecate method <code>RedfishUtils\.\_init\_session\(\)</code> \([https\://github\.com/ansible\-collections/community\.general/pull/9190](https\://github\.com/ansible\-collections/community\.general/pull/9190)\)\.
<a id="bugfixes-11"></a>
<a id="bugfixes-13"></a>
### Bugfixes
* dnf\_config\_manager \- fix hanging when prompting to import GPG keys \([https\://github\.com/ansible\-collections/community\.general/pull/9124](https\://github\.com/ansible\-collections/community\.general/pull/9124)\, [https\://github\.com/ansible\-collections/community\.general/issues/8830](https\://github\.com/ansible\-collections/community\.general/issues/8830)\)\.
@@ -885,12 +933,12 @@ Regular bugfix and feature release\.
<a id="v10-0-1"></a>
## v10\.0\.1
<a id="release-summary-12"></a>
<a id="release-summary-14"></a>
### Release Summary
Bugfix release for inclusion in Ansible 11\.0\.0rc1\.
<a id="bugfixes-12"></a>
<a id="bugfixes-14"></a>
### Bugfixes
* keycloak\_client \- fix diff by removing code that turns the attributes dict which contains additional settings into a list \([https\://github\.com/ansible\-collections/community\.general/pull/9077](https\://github\.com/ansible\-collections/community\.general/pull/9077)\)\.
@@ -900,7 +948,7 @@ Bugfix release for inclusion in Ansible 11\.0\.0rc1\.
<a id="v10-0-0"></a>
## v10\.0\.0
<a id="release-summary-13"></a>
<a id="release-summary-15"></a>
### Release Summary
This is release 10\.0\.0 of <code>community\.general</code>\, released on 2024\-11\-04\.
@@ -1135,7 +1183,7 @@ This is release 10\.0\.0 of <code>community\.general</code>\, released on 2024\-
* proxmox\_kvm \- removed the <code>proxmox\_default\_behavior</code> option\. Explicitly specify the old default values if you were using <code>proxmox\_default\_behavior\=compatibility</code>\, otherwise simply remove it \([https\://github\.com/ansible\-collections/community\.general/pull/8918](https\://github\.com/ansible\-collections/community\.general/pull/8918)\)\.
* redhat\_subscriptions \- removed the <code>pool</code> option\. Use <code>pool\_ids</code> instead \([https\://github\.com/ansible\-collections/community\.general/pull/8918](https\://github\.com/ansible\-collections/community\.general/pull/8918)\)\.
<a id="bugfixes-13"></a>
<a id="bugfixes-15"></a>
### Bugfixes
* bitwarden lookup plugin \- fix <code>KeyError</code> in <code>search\_field</code> \([https\://github\.com/ansible\-collections/community\.general/issues/8549](https\://github\.com/ansible\-collections/community\.general/issues/8549)\, [https\://github\.com/ansible\-collections/community\.general/pull/8557](https\://github\.com/ansible\-collections/community\.general/pull/8557)\)\.

View File

@@ -6,6 +6,47 @@ Community General Release Notes
This changelog describes changes after version 9.0.0.
v10.7.6
=======
Release Summary
---------------
Regular bugfix release.
Security Fixes
--------------
- keycloak_user - the parameter ``credentials[].value`` is now marked as ``no_log=true``. Before it was logged by Ansible, unless the task was marked as ``no_log: true``. Since this parameter can be used for passwords, this resulted in credential leaking (https://github.com/ansible-collections/community.general/issues/11000, https://github.com/ansible-collections/community.general/pull/11005).
Bugfixes
--------
- gitlab_runner - fix exception in check mode when a new runner is created (https://github.com/ansible-collections/community.general/issues/8854).
- omapi_host - make return values compatible with ansible-core 2.19 and Python 3 (https://github.com/ansible-collections/community.general/pull/11001).
- onepassword_doc and onepassword_ssh_key lookup plugins - ensure that all connection parameters are passed to CLI class (https://github.com/ansible-collections/community.general/pull/10965).
- pritunl_user - improve resilience when comparing user parameters if remote fields are ``null`` or missing. List parameters (``groups``, ``mac_addresses``) now safely default to empty lists for comparison and avoids ``KeyError`` issues (https://github.com/ansible-collections/community.general/issues/10954, https://github.com/ansible-collections/community.general/pull/10955).
- random_string lookup plugin - replace ``random.SystemRandom()`` with ``secrets.SystemRandom()`` when generating strings. This has no practical effect, as both are the same (https://github.com/ansible-collections/community.general/pull/10893).
- terraform - fix bug when ``null`` values inside complex vars are throwing error instead of being passed to terraform. Now terraform can handle ``null``s in ``complex_vars`` itself (https://github.com/ansible-collections/community.general/pull/10961).
v10.7.5
=======
Release Summary
---------------
Regular bugfix release.
Bugfixes
--------
- Avoid usage of deprecated ``ansible.module_utils.six`` in all code that does not have to support Python 2 (https://github.com/ansible-collections/community.general/pull/10873).
- github_deploy_key - fix bug during error handling if no body was present in the result (https://github.com/ansible-collections/community.general/issues/10853, https://github.com/ansible-collections/community.general/pull/10857).
- keycloak_group - fixes an issue where module ignores realm when searching subgroups by name (https://github.com/ansible-collections/community.general/pull/10840).
- keycloak_role - fixes an issue where the module incorrectly returns ``changed=true`` when using the alias ``clientId`` in composite roles (https://github.com/ansible-collections/community.general/pull/10829).
- rocketchat - fix message delivery in Rocket Chat >= 7.5.3 by forcing ``Content-Type`` header to ``application/json`` instead of the default ``application/x-www-form-urlencoded`` (https://github.com/ansible-collections/community.general/issues/10796, https://github.com/ansible-collections/community.general/pull/10796).
- yaml cache plugin - make compatible with ansible-core 2.19 (https://github.com/ansible-collections/community.general/issues/10849, https://github.com/ansible-collections/community.general/issues/10852).
v10.7.4
=======

View File

@@ -39,7 +39,7 @@ For more information about communication, see the [Ansible communication guide](
## Tested with Ansible
Tested with the current ansible-core 2.15, ansible-core 2.16, ansible-core 2.17, ansible-core 2.18, ansible-core 2.19 releases and the current development version of ansible-core. Ansible-core versions before 2.15.0 are not supported. This includes all ansible-base 2.10 and Ansible 2.9 releases.
Tested with the current ansible-core 2.15, ansible-core 2.16, ansible-core 2.17, ansible-core 2.18, ansible-core 2.19, and ansible-core 2.20 releases. Ansible-core versions before 2.15.0 are not supported. This includes all ansible-base 2.10 and Ansible 2.9 releases.
## External requirements

View File

@@ -16,6 +16,11 @@
# community.crypto's main branch needs ansible-core >= 2.17
"community.crypto" = "git+https://github.com/ansible-collections/community.crypto.git,stable-2"
[vcs]
vcs = "git"
development_branch = "main"
stable_branches = [ "stable-*" ]
[sessions]
[sessions.docs_check]

View File

@@ -2047,3 +2047,68 @@ releases:
- 10751-kdeconfig-support-kwriteconfig6.yml
- 10752-selective-hardcoded-loop-var.yml
release_date: '2025-09-08'
10.7.5:
changes:
bugfixes:
- Avoid usage of deprecated ``ansible.module_utils.six`` in all code that
does not have to support Python 2 (https://github.com/ansible-collections/community.general/pull/10873).
- github_deploy_key - fix bug during error handling if no body was present
in the result (https://github.com/ansible-collections/community.general/issues/10853,
https://github.com/ansible-collections/community.general/pull/10857).
- keycloak_group - fixes an issue where module ignores realm when searching
subgroups by name (https://github.com/ansible-collections/community.general/pull/10840).
- keycloak_role - fixes an issue where the module incorrectly returns ``changed=true``
when using the alias ``clientId`` in composite roles (https://github.com/ansible-collections/community.general/pull/10829).
- rocketchat - fix message delivery in Rocket Chat >= 7.5.3 by forcing ``Content-Type``
header to ``application/json`` instead of the default ``application/x-www-form-urlencoded``
(https://github.com/ansible-collections/community.general/issues/10796,
https://github.com/ansible-collections/community.general/pull/10796).
- yaml cache plugin - make compatible with ansible-core 2.19 (https://github.com/ansible-collections/community.general/issues/10849,
https://github.com/ansible-collections/community.general/issues/10852).
release_summary: Regular bugfix release.
fragments:
- 10.7.5.yml
- 10796-rocketchat-force-content-type.yml
- 10829-fix-keycloak-role-changed-status.yml
- 10840-fix-keycloak-subgroup-search-realm.yml
- 10852-yaml.yml
- 10857-github_deploy_key-err.yml
- 10873-six.yml
release_date: '2025-10-06'
10.7.6:
changes:
bugfixes:
- gitlab_runner - fix exception in check mode when a new runner is created
(https://github.com/ansible-collections/community.general/issues/8854).
- omapi_host - make return values compatible with ansible-core 2.19 and Python
3 (https://github.com/ansible-collections/community.general/pull/11001).
- onepassword_doc and onepassword_ssh_key lookup plugins - ensure that all
connection parameters are passed to CLI class (https://github.com/ansible-collections/community.general/pull/10965).
- pritunl_user - improve resilience when comparing user parameters if remote
fields are ``null`` or missing. List parameters (``groups``, ``mac_addresses``)
now safely default to empty lists for comparison and avoids ``KeyError``
issues (https://github.com/ansible-collections/community.general/issues/10954,
https://github.com/ansible-collections/community.general/pull/10955).
- random_string lookup plugin - replace ``random.SystemRandom()`` with ``secrets.SystemRandom()``
when generating strings. This has no practical effect, as both are the same
(https://github.com/ansible-collections/community.general/pull/10893).
- terraform - fix bug when ``null`` values inside complex vars are throwing
error instead of being passed to terraform. Now terraform can handle ``null``s
in ``complex_vars`` itself (https://github.com/ansible-collections/community.general/pull/10961).
release_summary: Regular bugfix release.
security_fixes:
- 'keycloak_user - the parameter ``credentials[].value`` is now marked as
``no_log=true``. Before it was logged by Ansible, unless the task was marked
as ``no_log: true``. Since this parameter can be used for passwords, this
resulted in credential leaking (https://github.com/ansible-collections/community.general/issues/11000,
https://github.com/ansible-collections/community.general/pull/11005).'
fragments:
- 10.7.6.yml
- 10918-gitlab-runner-fix-check-mode.yml
- 10955-pritunl_user-null-missing-params.yaml
- 10961-terraform-complexvars-null-bugfix.yaml
- 10965-onepassword-bugfix.yml
- 11001-omapi.yml
- 11005-keycloak_user.yml
- replace-random-with-secrets.yml
release_date: '2025-11-02'

View File

@@ -5,7 +5,7 @@
namespace: community
name: general
version: 10.7.4
version: 10.7.6
readme: README.md
authors:
- Ansible (https://github.com/ansible)

View File

@@ -88,7 +88,7 @@ plugin_routing:
deprecation:
removal_version: 12.0.0
warning_text: >-
The plugin has been superseded by the the option `result_format=yaml` in callback plugin ansible.builtin.default from ansible-core 2.13 onwards.
The plugin has been superseded by the option `result_format=yaml` in callback plugin ansible.builtin.default from ansible-core 2.13 onwards.
connection:
docker:
redirect: community.docker.docker

View File

@@ -59,8 +59,8 @@ notes:
- This plugin ignores the C(become_user) supplied and uses C(pmrun)'s own configuration to select the user.
"""
from shlex import quote as shlex_quote
from ansible.plugins.become import BecomeBase
from ansible.module_utils.six.moves import shlex_quote
class BecomeModule(BecomeBase):

View File

@@ -48,7 +48,6 @@ try:
except ImportError:
import pickle
from ansible.module_utils.six import PY3
from ansible.plugins.cache import BaseFileCacheModule
@@ -61,10 +60,7 @@ class CacheModule(BaseFileCacheModule):
def _load(self, filepath):
# Pickle is a binary format
with open(filepath, 'rb') as f:
if PY3:
return pickle.load(f, encoding='bytes')
else:
return pickle.load(f)
return pickle.load(f, encoding='bytes')
def _dump(self, value, filepath):
with open(filepath, 'wb') as f:

View File

@@ -44,8 +44,7 @@ options:
# TODO: determine whether it is OK to change to: type: float
"""
import codecs
import os
import yaml
@@ -60,9 +59,9 @@ class CacheModule(BaseFileCacheModule):
"""
def _load(self, filepath):
with codecs.open(filepath, 'r', encoding='utf-8') as f:
with open(os.path.abspath(filepath), 'r', encoding='utf-8') as f:
return AnsibleLoader(f).get_single_data()
def _dump(self, value, filepath):
with codecs.open(filepath, 'w', encoding='utf-8') as f:
with open(os.path.abspath(filepath), 'w', encoding='utf-8') as f:
yaml.dump(value, f, Dumper=AnsibleDumper, default_flow_style=False)

View File

@@ -27,7 +27,6 @@ try:
except ImportError:
pass
from ansible.module_utils.six import binary_type, text_type
from collections.abc import MutableMapping, MutableSequence
from ansible.plugins.callback.default import CallbackModule as CallbackModule_default
from ansible.utils.color import colorize, hostcolor
@@ -236,7 +235,7 @@ class CallbackModule(CallbackModule_default):
# Remove empty attributes (list, dict, str)
for attr in result.copy():
if isinstance(result[attr], (MutableSequence, MutableMapping, binary_type, text_type)):
if isinstance(result[attr], (MutableSequence, MutableMapping, bytes, str)):
if not result[attr]:
del result[attr]

View File

@@ -87,7 +87,6 @@ from contextlib import closing
from os.path import basename
from ansible.errors import AnsibleError, AnsibleRuntimeError
from ansible.module_utils.six import raise_from
from ansible.plugins.callback import CallbackBase
try:
@@ -312,9 +311,7 @@ class CallbackModule(CallbackBase):
self.disabled = False
if ELASTIC_LIBRARY_IMPORT_ERROR:
raise_from(
AnsibleError('The `elastic-apm` must be installed to use this plugin'),
ELASTIC_LIBRARY_IMPORT_ERROR)
raise AnsibleError('The `elastic-apm` must be installed to use this plugin') from ELASTIC_LIBRARY_IMPORT_ERROR
self.tasks_data = OrderedDict()

View File

@@ -66,7 +66,8 @@ options:
type: string
"""
from ansible.module_utils.six.moves.urllib.parse import urlencode
from urllib.parse import urlencode
from ansible.module_utils.common.text.converters import to_bytes
from ansible.module_utils.urls import open_url
from ansible.plugins.callback import CallbackBase

View File

@@ -97,7 +97,7 @@ options:
otel_exporter_otlp_traces_protocol:
type: str
description:
- E(OTEL_EXPORTER_OTLP_TRACES_PROTOCOL) represents the the transport protocol for spans.
- E(OTEL_EXPORTER_OTLP_TRACES_PROTOCOL) represents the transport protocol for spans.
- See
U(https://opentelemetry-python.readthedocs.io/en/latest/sdk/environment_variables.html#envvar-OTEL_EXPORTER_OTLP_TRACES_PROTOCOL).
default: grpc
@@ -137,14 +137,12 @@ import json
import os
import socket
import uuid
from time import time_ns
from collections import OrderedDict
from os.path import basename
from time import time_ns
from urllib.parse import urlparse
from ansible.errors import AnsibleError
from ansible.module_utils.six import raise_from
from ansible.module_utils.six.moves.urllib.parse import urlparse
from ansible.plugins.callback import CallbackBase
try:
@@ -499,9 +497,9 @@ class CallbackModule(CallbackBase):
self.otel_exporter_otlp_traces_protocol = None
if OTEL_LIBRARY_IMPORT_ERROR:
raise_from(
AnsibleError('The `opentelemetry-api`, `opentelemetry-exporter-otlp` or `opentelemetry-sdk` must be installed to use this plugin'),
OTEL_LIBRARY_IMPORT_ERROR)
raise AnsibleError(
'The `opentelemetry-api`, `opentelemetry-exporter-otlp` or `opentelemetry-sdk` must be installed to use this plugin'
) from OTEL_LIBRARY_IMPORT_ERROR
self.tasks_data = OrderedDict()

View File

@@ -75,11 +75,11 @@ import os
import os.path
import subprocess
import traceback
from shlex import quote as shlex_quote
from ansible.errors import AnsibleError
from ansible.module_utils.basic import is_executable
from ansible.module_utils.common.process import get_bin_path
from ansible.module_utils.six.moves import shlex_quote
from ansible.module_utils.common.text.converters import to_bytes
from ansible.plugins.connection import ConnectionBase, BUFSIZE
from ansible.utils.display import Display

View File

@@ -38,9 +38,9 @@ import os
import os.path
import subprocess
import traceback
from shlex import quote as shlex_quote
from ansible.errors import AnsibleError
from ansible.module_utils.six.moves import shlex_quote
from ansible.module_utils.common.process import get_bin_path
from ansible.module_utils.common.text.converters import to_bytes, to_native, to_text
from ansible.plugins.connection import ConnectionBase, BUFSIZE

View File

@@ -31,9 +31,9 @@ import os
import os.path
import subprocess
import traceback
from shlex import quote as shlex_quote
from ansible.errors import AnsibleError
from ansible.module_utils.six.moves import shlex_quote
from ansible.module_utils.common.process import get_bin_path
from ansible.module_utils.common.text.converters import to_bytes
from ansible.plugins.connection import ConnectionBase, BUFSIZE

View File

@@ -12,7 +12,7 @@ class ModuleDocFragment(object):
options:
venv:
description:
- Use the the Python interpreter from this virtual environment.
- Use the Python interpreter from this virtual environment.
- Pass the path to the root of the virtualenv, not the C(bin/) directory nor the C(python) executable.
type: path
settings:

View File

@@ -45,10 +45,10 @@ _value:
"""
from io import StringIO
from configparser import ConfigParser
from ansible.errors import AnsibleFilterError
from ansible.module_utils.six import string_types
from ansible.module_utils.six.moves import StringIO
from ansible.module_utils.six.moves.configparser import ConfigParser
class IniParser(ConfigParser):
@@ -73,7 +73,7 @@ class IniParser(ConfigParser):
def from_ini(obj):
''' Read the given string as INI file and return a dict '''
if not isinstance(obj, string_types):
if not isinstance(obj, str):
raise AnsibleFilterError(f'from_ini requires a str, got {type(obj)}')
parser = IniParser()

View File

@@ -196,7 +196,6 @@ _value:
"""
from ansible.errors import AnsibleFilterError
from ansible.module_utils.six import string_types
from collections.abc import Mapping, Sequence
from ansible.utils.vars import merge_hash
@@ -257,7 +256,7 @@ def lists_mergeby(*terms, **kwargs):
index = terms[-1]
if not isinstance(index, string_types):
if not isinstance(index, str):
msg = ("First argument after the lists for community.general.lists_mergeby must be string. "
"%s is %s")
raise AnsibleFilterError(msg % (index, type(index)))

View File

@@ -45,14 +45,13 @@ import re
from random import Random, SystemRandom
from ansible.errors import AnsibleFilterError
from ansible.module_utils.six import string_types
def random_mac(value, seed=None):
''' takes string prefix, and return it completed with random bytes
to get a complete 6 bytes MAC address '''
if not isinstance(value, string_types):
if not isinstance(value, str):
raise AnsibleFilterError('Invalid value type (%s) for random_mac (%s)' %
(type(value), value))

View File

@@ -49,11 +49,10 @@ _value:
type: string
"""
from ansible.errors import AnsibleFilterError
from collections.abc import Mapping
from ansible.module_utils.six.moves import StringIO
from ansible.module_utils.six.moves.configparser import ConfigParser
from configparser import ConfigParser
from io import StringIO
from ansible.errors import AnsibleFilterError
class IniParser(ConfigParser):

View File

@@ -120,7 +120,6 @@ except ImportError:
from ansible.errors import AnsibleFilterError
from ansible.module_utils.common.text.converters import to_text
from ansible.module_utils.six import string_types
class TypeValidationError(AnsibleFilterError):
@@ -131,7 +130,7 @@ class TypeValidationError(AnsibleFilterError):
expected: Description of expected type
"""
def __init__(self, obj, expected):
type_name = "string" if isinstance(obj, string_types) else type(obj).__name__
type_name = "string" if isinstance(obj, str) else type(obj).__name__
super().__init__(f"Expected {expected}, got a {type_name}")
@@ -160,7 +159,7 @@ def _validate_list_param(param, param_name, ensure_strings=True):
if ensure_strings:
for item in param:
if not isinstance(item, string_types):
if not isinstance(item, str):
# Maintain original error message format
if param_name == "column_order":
error_msg = "a string for column name"
@@ -186,7 +185,7 @@ def _match_key(item_dict, lookup_key):
return lookup_key
# Try boolean conversion for 'true'/'false' strings
if isinstance(lookup_key, string_types):
if isinstance(lookup_key, str):
if lookup_key.lower() == 'true' and True in item_dict:
return True
if lookup_key.lower() == 'false' and False in item_dict:
@@ -338,11 +337,11 @@ def to_prettytable(data, *args, **kwargs):
# Validate column_alignments keys and values
for key, value in column_alignments.items():
# Check that keys are strings
if not isinstance(key, string_types):
if not isinstance(key, str):
raise TypeValidationError(key, "a string for column_alignments key")
# Check that values are strings
if not isinstance(value, string_types):
if not isinstance(value, str):
raise TypeValidationError(value, "a string for column_alignments value")
# Check that values are valid alignments
@@ -394,7 +393,7 @@ def to_prettytable(data, *args, **kwargs):
row.append(item.get(matched_key, ""))
else:
# Try case-insensitive lookup as last resort
lower_col = col.lower() if isinstance(col, string_types) else str(col).lower()
lower_col = col.lower() if isinstance(col, str) else str(col).lower()
if lower_col in reverse_key_map:
row.append(item.get(reverse_key_map[lower_col], ""))
else:

View File

@@ -49,7 +49,6 @@ _value:
from unicodedata import normalize
from ansible.errors import AnsibleFilterError
from ansible.module_utils.six import text_type
try:
from ansible.errors import AnsibleTypeError
@@ -69,7 +68,7 @@ def unicode_normalize(data, form='NFC'):
A normalized unicode string of the specified 'form'.
"""
if not isinstance(data, text_type):
if not isinstance(data, str):
raise AnsibleTypeError("%s is not a valid input type" % type(data))
if form not in ('NFC', 'NFD', 'NFKC', 'NFKD'):

View File

@@ -131,7 +131,6 @@ import socket
from ansible.errors import AnsibleError
from ansible.plugins.inventory import BaseInventoryPlugin, Cacheable, to_safe_group_name
from ansible.module_utils.six import text_type
from ansible_collections.community.general.plugins.plugin_utils.unsafe import make_unsafe
@@ -260,7 +259,7 @@ class InventoryModule(BaseInventoryPlugin, Cacheable):
self.cobbler = xmlrpc_client.Server(self.cobbler_url, allow_none=True)
self.token = None
if self.get_option('user') is not None:
self.token = self.cobbler.login(text_type(self.get_option('user')), text_type(self.get_option('password')))
self.token = self.cobbler.login(str(self.get_option('user')), str(self.get_option('password')))
self.cache_key = self.get_cache_key(path)
self.use_cache = cache and self.get_option('cache')

View File

@@ -96,11 +96,11 @@ compose:
"""
import json
from urllib.error import HTTPError
from ansible.errors import AnsibleParserError
from ansible.plugins.inventory import BaseInventoryPlugin, Constructable
from ansible.module_utils.urls import open_url
from ansible.module_utils.six.moves.urllib.error import HTTPError
from ansible_collections.community.general.plugins.plugin_utils.unsafe import make_unsafe

View File

@@ -171,12 +171,12 @@ import json
import re
import time
import os
from urllib.parse import urlencode
from ansible.plugins.inventory import BaseInventoryPlugin
from ansible.module_utils.common.text.converters import to_native, to_text
from ansible.module_utils.common.dict_transformations import dict_merge
from ansible.module_utils.six import raise_from
from ansible.errors import AnsibleError, AnsibleParserError
from ansible.module_utils.six.moves.urllib.parse import urlencode
from ansible_collections.community.general.plugins.module_utils.lxd import LXDClient, LXDClientException
from ansible_collections.community.general.plugins.plugin_utils.unsafe import make_unsafe
@@ -1094,9 +1094,7 @@ class InventoryModule(BaseInventoryPlugin):
Returns:
None"""
if IPADDRESS_IMPORT_ERROR:
raise_from(
AnsibleError('another_library must be installed to use this plugin'),
IPADDRESS_IMPORT_ERROR)
raise AnsibleError('another_library must be installed to use this plugin') from IPADDRESS_IMPORT_ERROR
super(InventoryModule, self).parse(inventory, loader, path, cache=False)
# Read the inventory YAML file

View File

@@ -62,13 +62,13 @@ groups:
import json
from sys import version as python_version
from urllib.parse import urljoin
from ansible.errors import AnsibleError
from ansible.module_utils.urls import open_url
from ansible.plugins.inventory import BaseInventoryPlugin
from ansible.module_utils.common.text.converters import to_text
from ansible.module_utils.ansible_release import __version__ as ansible_version
from ansible.module_utils.six.moves.urllib.parse import urljoin
from ansible_collections.community.general.plugins.plugin_utils.unsafe import make_unsafe

View File

@@ -224,13 +224,12 @@ want_proxmox_nodes_ansible_host: true
import itertools
import re
from urllib.parse import urlencode
from ansible.module_utils.common._collections_compat import MutableMapping
from ansible.errors import AnsibleError
from ansible.plugins.inventory import BaseInventoryPlugin, Constructable, Cacheable
from ansible.module_utils.six import string_types
from ansible.module_utils.six.moves.urllib.parse import urlencode
from ansible.utils.display import Display
from ansible_collections.community.general.plugins.module_utils.version import LooseVersion
@@ -498,7 +497,7 @@ class InventoryModule(BaseInventoryPlugin, Constructable, Cacheable):
out_val[k] = v
value = out_val
if config not in plaintext_configs and isinstance(value, string_types) \
if config not in plaintext_configs and isinstance(value, str) \
and all("=" in v for v in value.split(",")):
# split off strings with commas to a dict
# skip over any keys that cannot be processed

View File

@@ -128,9 +128,8 @@ from ansible_collections.community.general.plugins.module_utils.scaleway import
from ansible_collections.community.general.plugins.plugin_utils.unsafe import make_unsafe
from ansible.module_utils.urls import open_url
from ansible.module_utils.common.text.converters import to_text
from ansible.module_utils.six import raise_from
import ansible.module_utils.six.moves.urllib.parse as urllib_parse
import urllib.parse as urllib_parse
def _fetch_information(token, url):
@@ -334,7 +333,7 @@ class InventoryModule(BaseInventoryPlugin, Constructable):
def parse(self, inventory, loader, path, cache=True):
if YAML_IMPORT_ERROR:
raise_from(AnsibleError('PyYAML is probably missing'), YAML_IMPORT_ERROR)
raise AnsibleError('PyYAML is probably missing') from YAML_IMPORT_ERROR
super(InventoryModule, self).parse(inventory, loader, path)
self._read_config_data(path=path)

View File

@@ -112,7 +112,8 @@ _raw:
type: dict
"""
from ansible.module_utils.six.moves.urllib.parse import urlparse
from urllib.parse import urlparse
from ansible.errors import AnsibleError, AnsibleAssertionError
from ansible.plugins.lookup import LookupBase
from ansible.module_utils.common.text.converters import to_text

View File

@@ -122,7 +122,6 @@ _list:
from ansible.errors import AnsibleLookupError
from collections.abc import Mapping, Sequence
from ansible.module_utils.six import string_types
from ansible.plugins.lookup import LookupBase
from ansible.release import __version__ as ansible_version
from ansible.template import Templar
@@ -225,7 +224,7 @@ class LookupModule(LookupBase):
raise AnsibleLookupError(
f'The variable {k!r} appears more than once')
vars_so_far.add(k)
if isinstance(v, string_types):
if isinstance(v, str):
data.append((k, v, None))
elif isinstance(v, (Sequence, Mapping)):
data.append((k, None, v))

View File

@@ -37,7 +37,6 @@ _raw:
type: list
"""
from ansible.errors import AnsibleError
from ansible.module_utils.six import string_types
from ansible.plugins.lookup import LookupBase
from ansible.utils.listify import listify_lookup_plugin_terms
@@ -65,7 +64,7 @@ class LookupModule(LookupBase):
# ignore undefined items
break
if isinstance(term, string_types):
if isinstance(term, str):
# convert a variable to a list
try:
term2 = listify_lookup_plugin_terms(term, templar=self._templar)

View File

@@ -75,8 +75,9 @@ except ImportError:
import time
import json
from urllib.error import HTTPError
from ansible.module_utils.urls import open_url
from ansible.module_utils.six.moves.urllib.error import HTTPError
from ansible.errors import AnsibleError, AnsibleOptionsError
from ansible.plugins.lookup import LookupBase
from ansible.utils.display import Display

View File

@@ -63,16 +63,18 @@ RETURN = '''
the same environment variable(s), the last one returned by the Manifold API will take precedence.
type: dict
'''
import json
import sys
from traceback import format_exception
from urllib.error import HTTPError, URLError
from urllib.parse import urlencode
from ansible.errors import AnsibleError
from ansible.plugins.lookup import LookupBase
from ansible.module_utils.urls import open_url, ConnectionError, SSLValidationError
from ansible.module_utils.six.moves.urllib.error import HTTPError, URLError
from ansible.module_utils.six.moves.urllib.parse import urlencode
from ansible.module_utils import six
from ansible.utils.display import Display
from traceback import format_exception
import json
import sys
display = Display()

View File

@@ -86,7 +86,6 @@ from ansible.plugins.lookup import LookupBase
from ansible.errors import AnsibleLookupError, AnsibleOptionsError
from ansible.module_utils.common.process import get_bin_path
from ansible.module_utils.common.text.converters import to_bytes, to_text
from ansible.module_utils.six import with_metaclass
from ansible_collections.community.general.plugins.module_utils.onepassword import OnePasswordConfig
@@ -99,7 +98,7 @@ def _lower_if_possible(value):
return value
class OnePassCLIBase(with_metaclass(abc.ABCMeta, object)):
class OnePassCLIBase(object, metaclass=abc.ABCMeta):
bin = "op"
def __init__(
@@ -611,7 +610,8 @@ class OnePass(object):
def _get_cli_class(self, cli_class=None):
if cli_class is not None:
return cli_class(self.subdomain, self.domain, self.username, self.secret_key, self.master_password, self.service_account_token)
return cli_class(self.subdomain, self.domain, self.username, self.secret_key, self.master_password, self.service_account_token,
self.account_id, self.connect_host, self.connect_token)
version = OnePassCLIBase.get_current_version()
for cls in OnePassCLIBase.__subclasses__():

View File

@@ -16,7 +16,7 @@ short_description: Generates random string
version_added: '3.2.0'
description:
- Generates random string based upon the given constraints.
- Uses L(random.SystemRandom,https://docs.python.org/3/library/random.html#random.SystemRandom), so should be strong enough
- Uses L(secrets.SystemRandom,https://docs.python.org/3/library/secrets.html#secrets.SystemRandom), so should be strong enough
for cryptographic purposes.
options:
length:
@@ -149,6 +149,7 @@ _raw:
import base64
import random
import secrets
import string
from ansible.errors import AnsibleLookupError
@@ -178,7 +179,7 @@ class LookupModule(LookupBase):
lower_chars = string.ascii_lowercase
upper_chars = string.ascii_uppercase
special_chars = string.punctuation
random_generator = random.SystemRandom()
random_generator = secrets.SystemRandom()
self.set_options(var_options=variables, direct=kwargs)

View File

@@ -66,7 +66,6 @@ EXAMPLES = r"""
from ansible.plugins.lookup import LookupBase
from ansible.utils.display import Display
from ansible.errors import AnsibleError
from ansible.module_utils.six import raise_from
try:
from pam.revbits_ansible.server import SecretServer
@@ -87,10 +86,7 @@ class LookupModule(LookupBase):
def run(self, terms, variables, **kwargs):
if ANOTHER_LIBRARY_IMPORT_ERROR:
raise_from(
AnsibleError('revbits_ansible must be installed to use this plugin'),
ANOTHER_LIBRARY_IMPORT_ERROR
)
raise AnsibleError('revbits_ansible must be installed to use this plugin') from ANOTHER_LIBRARY_IMPORT_ERROR
self.set_options(var_options=variables, direct=kwargs)
secret_server = LookupModule.Client(
{

View File

@@ -258,7 +258,6 @@ EXAMPLES = r"""
import abc
import os
from ansible.errors import AnsibleError, AnsibleOptionsError
from ansible.module_utils import six
from ansible.plugins.lookup import LookupBase
from ansible.utils.display import Display
@@ -289,8 +288,7 @@ except ImportError:
display = Display()
@six.add_metaclass(abc.ABCMeta)
class TSSClient(object):
class TSSClient(object, metaclass=abc.ABCMeta):
def __init__(self):
self._client = None

View File

View File

@@ -1626,7 +1626,7 @@ class KeycloakAPI(object):
return None
for p in name_chain[1:]:
for sg in self.get_subgroups(tmp):
for sg in self.get_subgroups(tmp, realm):
pv, is_id = self._get_normed_group_parent(p)
if is_id:

View File

@@ -41,14 +41,14 @@ options:
choices: [bcachefs, btrfs, ext2, ext3, ext4, ext4dev, f2fs, lvm, ocfs2, reiserfs, xfs, vfat, swap, ufs]
description:
- Filesystem type to be created. This option is required with O(state=present) (or if O(state) is omitted).
- Ufs support has been added in community.general 3.4.0.
- Bcachefs support has been added in community.general 8.6.0.
- V(ufs) support has been added in community.general 3.4.0.
- V(bcachefs) support has been added in community.general 8.6.0.
type: str
aliases: [type]
dev:
description:
- Target path to block device (Linux) or character device (FreeBSD) or regular file (both).
- When setting Linux-specific filesystem types on FreeBSD, this module only works when applying to regular files, aka
- When setting Linux-specific filesystem types on FreeBSD, this module only works when applying to regular files, also known as
disk images.
- Currently V(lvm) (Linux-only) and V(ufs) (FreeBSD-only) do not support a regular file as their target O(dev).
- Support for character devices on FreeBSD has been added in community.general 3.4.0.
@@ -63,8 +63,9 @@ options:
resizefs:
description:
- If V(true), if the block device and filesystem size differ, grow the filesystem into the space.
- Supported for C(bcachefs), C(btrfs), C(ext2), C(ext3), C(ext4), C(ext4dev), C(f2fs), C(lvm), C(xfs), C(ufs) and C(vfat)
filesystems. Attempts to resize other filesystem types fail.
- >-
Supported when O(fstype) is one of: V(bcachefs), V(btrfs), V(ext2), V(ext3), V(ext4), V(ext4dev), V(f2fs), V(lvm), V(xfs), V(ufs) and V(vfat).
Attempts to resize other filesystem types fail.
- XFS only grows if mounted. Currently, the module is based on commands from C(util-linux) package to perform operations,
so resizing of XFS is not supported on FreeBSD systems.
- VFAT is likely to fail if C(fatresize < 1.04).
@@ -81,7 +82,7 @@ options:
- The UUID options specified in O(opts) take precedence over this value.
- See xfs_admin(8) (C(xfs)), tune2fs(8) (C(ext2), C(ext3), C(ext4), C(ext4dev)) for possible values.
- For O(fstype=lvm) the value is ignored, it resets the PV UUID if set.
- Supported for O(fstype) being one of C(bcachefs), C(ext2), C(ext3), C(ext4), C(ext4dev), C(lvm), or C(xfs).
- Supported for O(fstype) being one of V(bcachefs), V(ext2), V(ext3), V(ext4), V(ext4dev), V(lvm), or V(xfs).
- This is B(not idempotent). Specifying this option always results in a change.
- Mutually exclusive with O(resizefs).
type: str
@@ -93,7 +94,7 @@ requirements:
- On FreeBSD, either C(util-linux) or C(e2fsprogs) package is required.
notes:
- Potential filesystems on O(dev) are checked using C(blkid). In case C(blkid) is unable to detect a filesystem (and in
case C(fstyp) on FreeBSD is also unable to detect a filesystem), this filesystem is overwritten even if O(force) is V(false).
case C(fstyp) on FreeBSD is also unable to detect a filesystem), this filesystem is overwritten even if O(force=false).
- On FreeBSD systems, both C(e2fsprogs) and C(util-linux) packages provide a C(blkid) command that is compatible with this
module. However, these packages conflict with each other, and only the C(util-linux) package provides the command required
to not fail when O(state=absent).

View File

@@ -284,6 +284,8 @@ class GithubDeployKey(object):
body = info.get('body')
if body:
err = self.module.from_json(body)['message']
else:
err = None
if status_code == 401:
self.module.fail_json(msg="Failed to connect to {0} due to invalid credentials".format(self.github_url), http_status_code=status_code, error=err)

View File

@@ -345,7 +345,10 @@ class GitLabRunner(object):
'''
def create_runner(self, arguments):
if self._module.check_mode:
return True
class MockRunner:
def __init__(self):
self._attrs = {}
return MockRunner()
try:
if arguments.get('token') is not None:

View File

@@ -146,7 +146,7 @@ options:
type: str
required: false
description:
- Sets the the assignee when O(operation) is V(create), V(transition), or V(edit).
- Sets the assignee when O(operation) is V(create), V(transition), or V(edit).
- Recent versions of JIRA no longer accept a user name as a user identifier. In that case, use O(account_id) instead.
- Note that JIRA may not allow changing field values on specific transitions or states.
account_id:

View File

@@ -364,7 +364,7 @@ def main():
else:
if state == 'present':
compare_exclude = []
compare_exclude = ['clientId']
if 'composites' in desired_role and isinstance(desired_role['composites'], list) and len(desired_role['composites']) > 0:
composites = kc.get_role_composites(rolerep=before_role, clientid=clientid, realm=realm)
before_role['composites'] = []

View File

@@ -357,7 +357,7 @@ def main():
argument_spec['auth_username']['aliases'] = []
credential_spec = dict(
type=dict(type='str', required=True),
value=dict(type='str', required=True),
value=dict(type='str', required=True, no_log=True),
temporary=dict(type='bool', default=False)
)
client_consents_spec = dict(

View File

@@ -50,7 +50,7 @@ options:
- Use O(cache_name) as the ticket cache name and location.
- If this option is not used, the default cache name and location are used.
- The default credentials cache may vary between systems.
- If not set the the value of E(KRB5CCNAME) environment variable will be used instead, its value is used to name the
- If not set the value of E(KRB5CCNAME) environment variable will be used instead, its value is used to name the
default ticket cache.
type: str
lifetime:

View File

@@ -146,7 +146,7 @@ except ImportError:
pureomapi_found = False
from ansible.module_utils.basic import AnsibleModule, missing_required_lib
from ansible.module_utils.common.text.converters import to_bytes, to_native
from ansible.module_utils.common.text.converters import to_bytes, to_native, to_text
class OmapiHostManager:
@@ -178,15 +178,18 @@ class OmapiHostManager:
@staticmethod
def unpack_facts(obj):
result = dict(obj)
result = {}
for k, v in dict(obj).items():
result[to_text(k)] = v
if 'hardware-address' in result:
result['hardware-address'] = to_native(unpack_mac(result[to_bytes('hardware-address')]))
result['hardware-address'] = to_native(unpack_mac(result['hardware-address']))
if 'ip-address' in result:
result['ip-address'] = to_native(unpack_ip(result[to_bytes('ip-address')]))
result['ip-address'] = to_native(unpack_ip(result['ip-address']))
if 'hardware-type' in result:
result['hardware-type'] = struct.unpack("!I", result[to_bytes('hardware-type')])
result['hardware-type'] = struct.unpack("!I", result['hardware-type'])
return result
@@ -234,8 +237,8 @@ class OmapiHostManager:
response_obj = self.unpack_facts(host_response.obj)
fields_to_update = {}
if to_bytes('ip-address', errors='surrogate_or_strict') not in response_obj or \
unpack_ip(response_obj[to_bytes('ip-address', errors='surrogate_or_strict')]) != self.module.params['ip']:
if 'ip-address' not in response_obj or \
response_obj['ip-address'] != self.module.params['ip']:
fields_to_update['ip-address'] = pack_ip(self.module.params['ip'])
# Name cannot be changed

View File

@@ -128,7 +128,8 @@ notes:
- To use an AUR helper (O(executable) option), a few extra setup steps might be required beforehand. For example, a dedicated
build user with permissions to install packages could be necessary.
- 'In the tests, while using C(yay) as the O(executable) option, the module failed to install AUR packages with the error:
C(error: target not found: <pkg>).'
C(error: target not found: <pkg>). This is caused by an incompatibility of yay with the arguments passed by this module.
See L(yay bug #1744 report for details, https://github.com/Jguer/yay/issues/1744).'
- The common return values `stdout` and `stderr` are returned upon success, when needed, since community.general 4.1.0.
"""

View File

@@ -210,16 +210,18 @@ def add_or_update_pritunl_user(module):
for key in user_params.keys():
# When a param is not specified grab existing ones to prevent from changing it with the PUT request
if user_params[key] is None:
user_params[key] = users[0][key]
user_params[key] = users[0].get(key)
# 'groups' and 'mac_addresses' are list comparison
if key == "groups" or key == "mac_addresses":
if set(users[0][key]) != set(user_params[key]):
remote_list = users[0].get(key) or []
local_list = user_params[key] or []
if set(remote_list) != set(local_list):
user_params_changed = True
# otherwise it is either a boolean or a string
else:
if users[0][key] != user_params[key]:
if users[0].get(key) != user_params[key]:
user_params_changed = True
# Trigger a PUT on the API to update the current user if settings have changed

View File

@@ -1111,7 +1111,7 @@ def main():
module.fail_json(msg=to_native(result['msg']))
for command in command_list:
# standardize on the Power* commands, but allow the the legacy
# standardize on the Power* commands, but allow the legacy
# GracefulRestart command
if command == 'GracefulRestart':
command = 'PowerGracefulRestart'

View File

@@ -32,7 +32,7 @@ notes:
- It is possible to interact with C(subscription-manager) only as root, so root permissions are required to successfully
run this module.
- Since community.general 6.5.0, credentials (that is, O(username) and O(password), O(activationkey), or O(token)) are needed
only in case the the system is not registered, or O(force_register) is specified; this makes it possible to use the module
only in case the system is not registered, or O(force_register) is specified; this makes it possible to use the module
to tweak an already registered system, for example attaching pools to it (using O(pool_ids)), and modifying the C(syspurpose)
attributes (using O(syspurpose)).
requirements:

View File

@@ -203,14 +203,17 @@ def build_payload_for_rocketchat(module, text, channel, username, icon_url, icon
return payload
def do_notify_rocketchat(module, domain, token, protocol, payload):
def do_notify_rocketchat(module, domain, token, protocol, payload, is_pre740):
if token.count('/') < 1:
module.fail_json(msg="Invalid Token specified, provide a valid token")
rocketchat_incoming_webhook = ROCKETCHAT_INCOMING_WEBHOOK % (protocol, domain, token)
response, info = fetch_url(module, rocketchat_incoming_webhook, data=payload)
headers = None
if not is_pre740:
headers = {'Content-type': 'application/json'}
response, info = fetch_url(module, rocketchat_incoming_webhook, data=payload, headers=headers)
if info['status'] != 200:
module.fail_json(msg="failed to send message, return status=%s" % str(info['status']))
@@ -248,7 +251,7 @@ def main():
is_pre740 = module.params['is_pre740']
payload = build_payload_for_rocketchat(module, text, channel, username, icon_url, icon_emoji, link_names, color, attachments, is_pre740)
do_notify_rocketchat(module, domain, token, protocol, payload)
do_notify_rocketchat(module, domain, token, protocol, payload, is_pre740)
module.exit_json(msg="OK")

View File

@@ -548,7 +548,9 @@ def main():
command.append('-parallelism=%d' % module.params.get('parallelism'))
def format_args(vars):
if isinstance(vars, str):
if vars is None:
return 'null'
elif isinstance(vars, str):
return '"{string}"'.format(string=vars.replace('\\', '\\\\').replace('"', '\\"')).replace('\n', '\\n')
elif isinstance(vars, bool):
if vars:
@@ -565,7 +567,7 @@ def main():
ret_out.append('{0}={{{1}}}'.format(k, process_complex_args(v)))
elif isinstance(v, list):
ret_out.append("{0}={1}".format(k, process_complex_args(v)))
elif isinstance(v, (integer_types, float, str, bool)):
elif isinstance(v, (integer_types, float, str, bool)) or v is None:
ret_out.append('{0}={1}'.format(k, format_args(v)))
else:
# only to handle anything unforeseen
@@ -577,7 +579,7 @@ def main():
l_out.append("{{{0}}}".format(process_complex_args(item)))
elif isinstance(item, list):
l_out.append("{0}".format(process_complex_args(item)))
elif isinstance(item, (str, integer_types, float, bool)):
elif isinstance(item, (str, integer_types, float, bool)) or item is None:
l_out.append(format_args(item))
else:
# only to handle anything unforeseen

View File

@@ -47,7 +47,7 @@ options:
aliases: [rtc]
choices: [local, UTC]
notes:
- On Ubuntu 24.04 the C(util-linux-extra) package is required to provide the C(hwclock) command.
- On Ubuntu 24.04 and Debian 13 (Trixie), the C(util-linux-extra) package is required to provide the C(hwclock) command.
- On SmartOS the C(sm-set-timezone) utility (part of the smtools package) is required to set the zone timezone.
- On AIX only Olson/tz database timezones are usable (POSIX is not supported). An OS reboot is also required on AIX for
the new timezone setting to take effect. Note that AIX 6.1+ is needed (OS level 61 or newer).

View File

@@ -9,7 +9,6 @@ __metaclass__ = type
import re
from ansible.errors import AnsibleFilterError
from ansible.module_utils.six import string_types
from collections.abc import Mapping, Sequence
@@ -32,7 +31,7 @@ def _keys_filter_params(data, matching_parameter):
raise AnsibleFilterError(msg % (elem, type(elem)))
for elem in data:
if not all(isinstance(item, string_types) for item in elem.keys()):
if not all(isinstance(item, str) for item in elem.keys()):
msg = "Top level keys must be strings. keys: %s"
raise AnsibleFilterError(msg % elem.keys())
@@ -65,12 +64,12 @@ def _keys_filter_target_str(target, matching_parameter):
if isinstance(target, list):
for elem in target:
if not isinstance(elem, string_types):
if not isinstance(elem, str):
msg = "The target items must be strings. %s is %s"
raise AnsibleFilterError(msg % (elem, type(elem)))
if matching_parameter == 'regex':
if isinstance(target, string_types):
if isinstance(target, str):
r = target
else:
if len(target) > 1:
@@ -83,7 +82,7 @@ def _keys_filter_target_str(target, matching_parameter):
except re.error:
msg = "The target must be a valid regex if matching_parameter=regex. target is %s"
raise AnsibleFilterError(msg % r)
elif isinstance(target, string_types):
elif isinstance(target, str):
tt = (target, )
else:
tt = tuple(set(target))
@@ -117,10 +116,10 @@ def _keys_filter_target_dict(target, matching_parameter):
if not all(k in elem for k in ('before', 'after')):
msg = "All dictionaries in target must include attributes: after, before."
raise AnsibleFilterError(msg)
if not isinstance(elem['before'], string_types):
if not isinstance(elem['before'], str):
msg = "The attributes before must be strings. %s is %s"
raise AnsibleFilterError(msg % (elem['before'], type(elem['before'])))
if not isinstance(elem['after'], string_types):
if not isinstance(elem['after'], str):
msg = "The attributes after must be strings. %s is %s"
raise AnsibleFilterError(msg % (elem['after'], type(elem['after'])))

View File

@@ -7,7 +7,6 @@ __metaclass__ = type
import re
from ansible.module_utils.six import binary_type, text_type
from collections.abc import Mapping, Set
from ansible.module_utils.common.collections import is_sequence
from ansible.utils.unsafe_proxy import (
@@ -29,11 +28,11 @@ def make_unsafe(value):
return set(make_unsafe(elt) for elt in value)
elif is_sequence(value):
return type(value)(make_unsafe(elt) for elt in value)
elif isinstance(value, binary_type):
elif isinstance(value, bytes):
if _RE_TEMPLATE_CHARS_BYTES.search(value):
value = _make_unsafe(value)
return value
elif isinstance(value, text_type):
elif isinstance(value, str):
if _RE_TEMPLATE_CHARS.search(value):
value = _make_unsafe(value)
return value

View File

@@ -223,8 +223,9 @@ _value:
type: bool
'''
from collections.abc import Sequence
from ansible.errors import AnsibleFilterError
from ansible.module_utils.six.moves.collections_abc import Sequence
from ansible_collections.community.general.plugins.plugin_utils.ansible_type import _ansible_type

View File

@@ -5,16 +5,6 @@
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
from ansible.errors import AnsibleError
from ansible.module_utils.six import raise_from
try:
from fqdn import FQDN
except ImportError as imp_exc:
ANOTHER_LIBRARY_IMPORT_ERROR = imp_exc
else:
ANOTHER_LIBRARY_IMPORT_ERROR = None
DOCUMENTATION = '''
name: fqdn_valid
@@ -74,6 +64,15 @@ _value:
type: bool
'''
from ansible.errors import AnsibleError
try:
from fqdn import FQDN
except ImportError as imp_exc:
ANOTHER_LIBRARY_IMPORT_ERROR = imp_exc
else:
ANOTHER_LIBRARY_IMPORT_ERROR = None
def fqdn_valid(name, min_labels=1, allow_underscores=False):
"""
@@ -83,10 +82,7 @@ def fqdn_valid(name, min_labels=1, allow_underscores=False):
"""
if ANOTHER_LIBRARY_IMPORT_ERROR:
raise_from(
AnsibleError('Python package fqdn must be installed to use this test.'),
ANOTHER_LIBRARY_IMPORT_ERROR
)
raise AnsibleError('Python package fqdn must be installed to use this test.') from ANOTHER_LIBRARY_IMPORT_ERROR
fobj = FQDN(name, min_labels=min_labels, allow_underscores=allow_underscores)
return (fobj.is_valid)

View File

@@ -8,35 +8,35 @@
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
# SPDX-License-Identifier: GPL-3.0-or-later
- name: Install build-tools;34.0.0
- name: Install skiaparser;1
android_sdk:
accept_licenses: true
name: build-tools;34.0.0
name: skiaparser;1
state: present
register: build_tools_installed
register: skiaparser_1_installed
- name: Install build-tools;34.0.0 second time
- name: Install skiaparser;1 second time
android_sdk:
name: build-tools;34.0.0
name: skiaparser;1
state: present
register: build_tools_installed2
register: skiaparser_1_installed_2
- name: Stat build-tools
- name: Stat skiaparser;1
stat:
path: "{{ android_sdk_location }}/build-tools/34.0.0"
register: build_tools_34_0_0
path: "{{ android_sdk_location }}/skiaparser/1"
register: skiaparser_1_stat
- name: Delete build-tools;34.0.0
- name: Delete skiaparser;1
android_sdk:
name: build-tools;34.0.0
name: skiaparser;1
state: absent
register: build_tools_deleted
register: skiaparser_1_deleted
- name: Delete build-tools;34.0.0 second time
- name: Delete skiaparser;1 second time
android_sdk:
name: build-tools;34.0.0
name: skiaparser;1
state: absent
register: build_tools_deleted2
register: skiaparser_1_deleted_2
- name: Download old platform-tools
unarchive:
@@ -59,7 +59,7 @@
- name: Install a package to a new root
android_sdk:
name: build-tools;34.0.0
name: skiaparser;1
accept_licenses: true
state: present
sdk_root: "{{ remote_tmp_dir }}"
@@ -67,12 +67,12 @@
- name: Check package is installed
stat:
path: "{{ remote_tmp_dir }}/build-tools/34.0.0"
path: "{{ remote_tmp_dir }}/skiaparser/1"
register: new_root_package_stat
- name: Install a package from canary channel
android_sdk:
name: build-tools;33.0.0
name: skiaparser;1
state: present
channel: canary
register: package_canary
@@ -80,11 +80,11 @@
- name: Run tests
assert:
that:
- build_tools_34_0_0.stat.exists
- build_tools_installed is changed
- build_tools_installed2 is not changed
- build_tools_deleted is changed
- build_tools_deleted2 is not changed
- skiaparser_1_stat.stat.exists
- skiaparser_1_installed is changed
- skiaparser_1_installed_2 is not changed
- skiaparser_1_deleted is changed
- skiaparser_1_deleted_2 is not changed
- platform_tools_present is not changed
- platform_tools_updated is changed
- new_root_package is changed

View File

@@ -5,8 +5,6 @@
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
from ansible.module_utils.six import string_types
def callback_results_extractor(outputs_results):
results = []
@@ -18,7 +16,7 @@ def callback_results_extractor(outputs_results):
line = "line_%s" % (i + 1)
test_line = stdout_lines[i] if i < len(stdout_lines) else None
expected_lines = expected_output[i] if i < len(expected_output) else None
if not isinstance(expected_lines, string_types) and expected_lines is not None:
if not isinstance(expected_lines, str) and expected_lines is not None:
if test_line not in expected_lines:
differences.append({
'line': {

View File

@@ -8,3 +8,4 @@ skip/macos
skip/osx
skip/freebsd
skip/rhel10.0 # FIXME
disabled # FIXME - https://github.com/ansible-collections/community.general/issues/10987

View File

@@ -13,7 +13,7 @@ Source Ansible env-setup from ansible github repository
Run integration tests:
ansible-test integration keycloak_role --python 3.10 --allow-unsupported
ansible-test integration -v keycloak_role --allow-unsupported --docker fedora35 --docker-network host
Cleanup:

View File

@@ -3,6 +3,15 @@
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
# SPDX-License-Identifier: GPL-3.0-or-later
- name: Delete realm if exists
community.general.keycloak_realm:
auth_keycloak_url: "{{ url }}"
auth_realm: "{{ admin_realm }}"
auth_username: "{{ admin_user }}"
auth_password: "{{ admin_password }}"
realm: "{{ realm }}"
state: absent
- name: Create realm
community.general.keycloak_realm:
auth_keycloak_url: "{{ url }}"
@@ -297,6 +306,29 @@
- result is not changed
- result.end_state.composites | length == 3
- name: Change realm role with composites using aliases no change
community.general.keycloak_role:
auth_keycloak_url: "{{ url }}"
auth_realm: "{{ admin_realm }}"
auth_username: "{{ admin_user }}"
auth_password: "{{ admin_password }}"
name: "{{ keycloak_role_name }}"
realm: "{{ realm }}"
description: "{{ keycloak_role_description }}"
composite: "{{ keycloak_role_composite }}"
composites: "{{ keycloak_role_composites_with_aliases }}"
state: present
register: result
- name: Debug
debug:
var: result
- name: Assert realm role with composites using aliases have not changed
assert:
that:
- result is not changed
- name: Remove composite from realm role with composites
community.general.keycloak_role:
auth_keycloak_url: "{{ url }}"

View File

@@ -25,6 +25,15 @@ keycloak_role_composites:
state: present
- name: offline_access
state: present
keycloak_role_composites_with_aliases:
- name: view-clients
clientId: "realm-management"
state: present
- name: query-clients
clientId: "realm-management"
state: present
- name: offline_access
state: present
keycloak_client_id: test-client
keycloak_client_name: test-client
keycloak_client_description: This is a client for testing purpose

View File

@@ -120,24 +120,12 @@
state: reinstall
register: reinstall_tox_324
- name: reinstall without name
community.general.pipx:
state: reinstall
register: reinstall_noname
ignore_errors: true
- name: upgrade tox from 3.24.0
community.general.pipx:
name: tox
state: upgrade
register: upgrade_tox_324
- name: upgrade without name
community.general.pipx:
state: upgrade
register: upgrade_noname
ignore_errors: true
- name: downgrade tox 3.24.0
community.general.pipx:
name: tox
@@ -165,8 +153,6 @@
- downgrade_tox_324.application.tox.version == '3.24.0'
- uninstall_tox_324 is changed
- "'tox' not in uninstall_tox_324.application"
- upgrade_noname is failed
- reinstall_noname is failed
##############################################################################
- name: install application latest tox

View File

@@ -3,25 +3,25 @@
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
# SPDX-License-Identifier: GPL-3.0-or-later
- name: ensure application pyinstaller is uninstalled
- name: ensure application conan is uninstalled
community.general.pipx:
name: pyinstaller
name: conan
state: absent
- name: Install Python Package pyinstaller
- name: Install conan
community.general.pipx:
name: pyinstaller
name: conan
state: present
system_site_packages: true
pip_args: "--no-cache-dir"
register: install_pyinstaller
register: install_conan
- name: cleanup pyinstaller
- name: cleanup conan
community.general.pipx:
name: pyinstaller
name: conan
state: absent
- name: check assertions
assert:
that:
- install_pyinstaller is changed
- install_conan is changed

View File

@@ -54,11 +54,7 @@
- name: Uninstall pycowsay and black (again)
community.general.pipx:
state: uninstall
name: "{{ item }}"
loop:
- black
- pycowsay
register: uninstall_all_2
name: pycowsay
- name: Assert pin/unpin
ansible.builtin.assert:

View File

@@ -7,7 +7,7 @@
environment:
PATH: /usr/local/bin:{{ ansible_env.PATH }}
block:
- name: Uninstall pycowsay and black
- name: Uninstall pycowsay
community.general.pipx:
state: uninstall
name: pycowsay
@@ -54,11 +54,7 @@
- name: Uninstall pycowsay and black (again)
community.general.pipx:
state: uninstall
name: "{{ item }}"
loop:
- black
- pycowsay
register: uninstall_all_2
name: pycowsay
- name: Assert uninstall-all
ansible.builtin.assert:

View File

@@ -3,28 +3,28 @@
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
# SPDX-License-Identifier: GPL-3.0-or-later
- name: 9009-Ensure application pylint is uninstalled
- name: 9009-Ensure application pycowsay is uninstalled
community.general.pipx:
name: pylint
name: pycowsay
state: absent
global: true
- name: 9009-Install application pylint
- name: 9009-Install application pycowsay
community.general.pipx:
name: pylint
name: pycowsay
global: true
register: install_pylint
register: install_pycowsay
- name: 9009-Inject packages
community.general.pipx:
state: inject
name: pylint
name: pycowsay
global: true
inject_packages:
- licenses
- name: 9009-Ensure application pylint is uninstalled
- name: 9009-Ensure application pycowsay is uninstalled
community.general.pipx:
name: pylint
name: pycowsay
state: absent
global: true

View File

@@ -23,9 +23,9 @@
global: true
register: upgrade_hw
- name: 9103-Ensure application pylint is uninstalled
- name: 9103-Ensure application hello-world is uninstalled
community.general.pipx:
name: pylint
name: hello-world
state: absent
global: true

View File

@@ -23,9 +23,9 @@
global: true
register: latest_hw
- name: 9619-Ensure application pylint is uninstalled
- name: 9619-Ensure application hello-world is uninstalled
community.general.pipx:
name: pylint
name: hello-world
state: absent
global: true

View File

@@ -74,22 +74,9 @@
- ansible_distribution == 'Ubuntu'
- ansible_facts.distribution_major_version is version('24', '>=')
- name: make sure the dbus service is started under systemd
systemd:
name: dbus
state: started
when:
- ansible_service_mgr == 'systemd'
- ansible_distribution == 'Fedora'
- ansible_facts.distribution_major_version is version('31', '<')
- name: Run tests
# Skip tests on Fedora 31 and 32 because dbus fails to start unless the container is run in privileged mode.
# Even then, it starts unreliably. This may be due to the move to cgroup v2 in Fedora 31 and 32.
# https://www.redhat.com/sysadmin/fedora-31-control-group-v2
when:
- ansible_facts.distribution ~ ansible_facts.distribution_major_version not in ['Fedora31', 'Fedora32']
- not (ansible_os_family == 'Alpine') # TODO
- not (ansible_distribution == 'Archlinux') # TODO
block:

View File

@@ -1,85 +1,14 @@
plugins/cache/pickle.py pylint:ansible-bad-import-from
plugins/callback/dense.py pylint:ansible-bad-import-from
plugins/callback/elastic.py pylint:ansible-bad-import-from
plugins/callback/opentelemetry.py pylint:ansible-bad-import-from
plugins/filter/from_ini.py pylint:ansible-bad-import-from
plugins/filter/lists_mergeby.py pylint:ansible-bad-import-from
plugins/filter/random_mac.py pylint:ansible-bad-import-from
plugins/filter/to_prettytable.py pylint:ansible-bad-import-from
plugins/filter/unicode_normalize.py pylint:ansible-bad-import-from
plugins/inventory/cobbler.py pylint:ansible-bad-import-from
plugins/inventory/lxd.py pylint:ansible-bad-import-from
plugins/inventory/proxmox.py pylint:ansible-bad-import-from
plugins/inventory/scaleway.py pylint:ansible-bad-import-from
plugins/lookup/dependent.py pylint:ansible-bad-import-from
plugins/lookup/flattened.py pylint:ansible-bad-import-from
plugins/lookup/onepassword.py pylint:ansible-bad-import-from
plugins/lookup/revbitspss.py pylint:ansible-bad-import-from
plugins/module_utils/csv.py pylint:ansible-bad-import-from
plugins/module_utils/gitlab.py pylint:ansible-bad-import-from
plugins/module_utils/homebrew.py pylint:ansible-bad-import-from
plugins/module_utils/ipa.py pylint:ansible-bad-import-from
plugins/module_utils/net_tools/pritunl/api.py pylint:ansible-bad-import-from
plugins/module_utils/opennebula.py pylint:ansible-bad-import-from
plugins/module_utils/oracle/oci_utils.py pylint:ansible-bad-import-from
plugins/module_utils/pkg_req.py pylint:ansible-bad-import-from
plugins/module_utils/redfish_utils.py pylint:ansible-bad-import-from
plugins/module_utils/saslprep.py pylint:ansible-bad-import-from
plugins/module_utils/univention_umc.py pylint:use-yield-from # suggested construct does not work with Python 2
plugins/modules/apache2_mod_proxy.py pylint:ansible-bad-import-from
plugins/modules/circonus_annotation.py pylint:ansible-bad-import-from
plugins/modules/cobbler_system.py pylint:ansible-bad-import-from
plugins/modules/consul_session.py validate-modules:parameter-state-invalid-choice
plugins/modules/dnsmadeeasy.py pylint:ansible-bad-import-from
plugins/modules/homebrew.py pylint:ansible-bad-import-from
plugins/modules/homebrew_cask.py pylint:ansible-bad-import-from
plugins/modules/homectl.py import-3.11 # Uses deprecated stdlib library 'crypt'
plugins/modules/homectl.py import-3.12 # Uses deprecated stdlib library 'crypt'
plugins/modules/iptables_state.py validate-modules:undocumented-parameter # params _back and _timeout used by action plugin
plugins/modules/java_keystore.py pylint:ansible-bad-import-from
plugins/modules/jenkins_plugin.py pylint:ansible-bad-import-from
plugins/modules/ldap_search.py pylint:ansible-bad-import-from
plugins/modules/lxc_container.py validate-modules:use-run-command-not-popen
plugins/modules/mail.py pylint:ansible-bad-import-from
plugins/modules/make.py pylint:ansible-bad-import-from
plugins/modules/monit.py pylint:ansible-bad-import-from
plugins/modules/osx_defaults.py pylint:ansible-bad-import-from
plugins/modules/osx_defaults.py validate-modules:parameter-state-invalid-choice
plugins/modules/parted.py validate-modules:parameter-state-invalid-choice
plugins/modules/rhevm.py validate-modules:parameter-state-invalid-choice
plugins/modules/sl_vm.py pylint:ansible-bad-import-from
plugins/modules/ssh_config.py pylint:ansible-bad-import-from
plugins/modules/terraform.py pylint:ansible-bad-import-from
plugins/modules/timezone.py pylint:ansible-bad-import-from
plugins/modules/udm_user.py import-3.11 # Uses deprecated stdlib library 'crypt'
plugins/modules/udm_user.py import-3.12 # Uses deprecated stdlib library 'crypt'
plugins/modules/xfconf.py validate-modules:return-syntax-error
plugins/modules/xml.py pylint:ansible-bad-import-from
plugins/modules/zpool_facts.py pylint:ansible-bad-import-from
plugins/modules/zypper_repository.py pylint:ansible-bad-import-from
plugins/plugin_utils/keys_filter.py pylint:ansible-bad-import-from
plugins/plugin_utils/unsafe.py pylint:ansible-bad-import-from
plugins/test/fqdn_valid.py pylint:ansible-bad-import-from
tests/integration/targets/callback/filter_plugins/helper.py pylint:ansible-bad-import-from
tests/unit/plugins/module_utils/identity/keycloak/test_keycloak_connect.py pylint:ansible-bad-import-from
tests/unit/plugins/module_utils/net_tools/pritunl/test_api.py pylint:ansible-bad-import-from
tests/unit/plugins/modules/conftest.py pylint:ansible-bad-import-from
tests/unit/plugins/modules/uthelper.py pylint:use-yield-from # suggested construct does not work with Python 2
tests/unit/plugins/modules/test_gio_mime.yaml no-smart-quotes
tests/unit/plugins/modules/test_keycloak_authentication.py pylint:ansible-bad-import-from
tests/unit/plugins/modules/test_keycloak_authentication_required_actions.py pylint:ansible-bad-import-from
tests/unit/plugins/modules/test_keycloak_client.py pylint:ansible-bad-import-from
tests/unit/plugins/modules/test_keycloak_client_rolemapping.py pylint:ansible-bad-import-from
tests/unit/plugins/modules/test_keycloak_clientscope.py pylint:ansible-bad-import-from
tests/unit/plugins/modules/test_keycloak_component.py pylint:ansible-bad-import-from
tests/unit/plugins/modules/test_keycloak_identity_provider.py pylint:ansible-bad-import-from
tests/unit/plugins/modules/test_keycloak_realm.py pylint:ansible-bad-import-from
tests/unit/plugins/modules/test_keycloak_realm_info.py pylint:ansible-bad-import-from
tests/unit/plugins/modules/test_keycloak_realm_keys.py pylint:ansible-bad-import-from
tests/unit/plugins/modules/test_keycloak_realm_keys_metadata_info.py pylint:ansible-bad-import-from
tests/unit/plugins/modules/test_keycloak_role.py pylint:ansible-bad-import-from
tests/unit/plugins/modules/test_keycloak_user.py pylint:ansible-bad-import-from
tests/unit/plugins/modules/test_keycloak_user_federation.py pylint:ansible-bad-import-from
tests/unit/plugins/modules/test_keycloak_userprofile.py pylint:ansible-bad-import-from
tests/unit/plugins/modules/test_pritunl_org.py pylint:ansible-bad-import-from
tests/unit/plugins/modules/test_pritunl_user.py pylint:ansible-bad-import-from

View File

@@ -9,12 +9,12 @@ from ansible_collections.community.internal_test_tools.tests.unit.compat import
from ansible_collections.community.internal_test_tools.tests.unit.compat.mock import patch, call
from ansible.errors import AnsibleError
from ansible.module_utils.urls import ConnectionError, SSLValidationError
from ansible.module_utils.six.moves.urllib.error import HTTPError, URLError
from ansible.module_utils import six
from ansible.plugins.loader import lookup_loader
from ansible_collections.community.general.plugins.lookup.manifold import ManifoldApiClient, ApiError
import json
import os
from urllib.error import HTTPError, URLError
API_FIXTURES = {