Compare commits

..

225 Commits
9.2.0 ... 8.5.0

Author SHA1 Message Date
Felix Fontein
a179f89686 Release 8.5.0. 2024-03-25 19:01:45 +01:00
patchback[bot]
9e641019be [PR #8116/4f758bfb backport][stable-8] java_cert: owner, group, mode arguments enabled (#8152)
java_cert: owner, group, mode arguments enabled (#8116)

* java_cert: owner, group, mode arguments enabled

* java_cert: sanity fix

* add changelog fragment

* remove duplication in documentation

* refactor change detection

* fix indentation

* Update changelogs/fragments/8116-java_cert-enable-owner-group-mode-args.yml

Co-authored-by: Felix Fontein <felix@fontein.de>

* Update plugins/modules/java_cert.py

Co-authored-by: Felix Fontein <felix@fontein.de>

* Update plugins/modules/java_cert.py

Co-authored-by: Felix Fontein <felix@fontein.de>

* update options

---------

Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit 4f758bfb84)

Co-authored-by: Denis Borisov <dborisov86@gmail.com>
2024-03-25 18:51:00 +01:00
Felix Fontein
029b811c7b Add release summary. 2024-03-25 06:52:38 +01:00
patchback[bot]
df95f02c7b [PR #8098/d62fe154 backport][stable-8] inventory plugins: make data obtained from remote unsafe (#8146)
inventory plugins: make data obtained from remote unsafe (#8098)

Make data obtained from remote unsafe.

(cherry picked from commit d62fe154d2)

Co-authored-by: Felix Fontein <felix@fontein.de>
2024-03-25 06:50:08 +01:00
patchback[bot]
baa45d044c [PR #8148/609f28f7 backport][stable-8] snap: disable some tests that take way too long (#8150)
snap: disable some tests that take way too long (#8148)

* Do not install microk8s in snap tests, as it is too slow.

* Do not install cider in snap tests, as it is slow.

(cherry picked from commit 609f28f791)

Co-authored-by: Felix Fontein <felix@fontein.de>
2024-03-25 06:49:55 +01:00
patchback[bot]
8e9e989f8a [PR #8133/b389f863 backport][stable-8] Add descriptive error message to Linode inventory plugin file checkin… (#8144)
Add descriptive error message to Linode inventory plugin file checkin… (#8133)

* Add descriptive error message to Linode inventory plugin file checking, tests

* add changelog fragment

* Adjust changelog fragment.

---------

Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit b389f8637f)

Co-authored-by: Gideon <soccerman.gid@gmail.com>
2024-03-24 22:51:48 +01:00
patchback[bot]
94890668a2 [PR #8038/795a855d backport][stable-8] Added startup configuration option (#8142)
Added startup configuration option (#8038)

* Added startup configuration option

Added the option to configure startup behavior of lxc containers. Works well in conjunction with onboot and allows to set startup order, startup delay and shutdown delay

* Removed trailing whitespaces in documentation

* added changelog fragment

* Updated Documentation to suggested wording

Co-authored-by: Felix Fontein <felix@fontein.de>

* Improve documentation.

* Fix changelog fragment.

---------

Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit 795a855d0e)

Co-authored-by: Michael Cicogna <44257895+miccico@users.noreply.github.com>
2024-03-24 22:51:37 +01:00
patchback[bot]
d2e0d04336 [PR #7880/9f5193e4 backport][stable-8] ipa_sudorule, ipa_hbacrule: change ipaenabledflag type to bool (#8139)
ipa_sudorule, ipa_hbacrule: change ipaenabledflag type to bool (#7880)

* ipa_sudorule, ipa_hbacrule: change ipaenabledflag type to bool

freeipa changed the type to bool with commit https://pagure.io/freeipa/c/6c5f2bcb301187f9844985ffe309c7d2262e16f3

* add changelog-fragment

* ipa_sudorule, ipa_hbacrule: set ipaenabledflag according to version

* ipa_sudorule, ipa_hbacrule: change version for backport

it also got backported (https://pagure.io/freeipa/c/faeb656c77adf27a49ccaceb57fc1ba44e11cc1d)

* ipa_sudorule, ipa_hbacrule: swap assigned values

* Update changelogs/fragments/7880-ipa-fix-sudo-and-hbcalrule-idempotence.yml

Co-authored-by: Felix Fontein <felix@fontein.de>

---------

Co-authored-by: aBUDmdBQ <>
Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit 9f5193e40b)

Co-authored-by: aBUDmdBQ <135135848+aBUDmdBQ@users.noreply.github.com>
2024-03-24 18:26:40 +01:00
patchback[bot]
6e0fa9042c [PR #8118/a4b32d7b backport][stable-8] Fix bond-slave honoring MTU (#8141)
Fix bond-slave honoring MTU (#8118)

The bond-slave type should honor the request
MTU value.

(cherry picked from commit a4b32d7b9c)

Co-authored-by: Tobias Urdin <tobias.urdin@gmail.com>
2024-03-24 18:26:34 +01:00
patchback[bot]
bbd924d67c [PR #8013/f5fa16c8 backport][stable-8] feat(lookup/bitwarden): add support for fetching all items from a collection (#8140)
feat(lookup/bitwarden): add support for fetching all items from a collection (#8013)

Signed-off-by: Emilien Escalle <emilien.escalle@escemi.com>
(cherry picked from commit f5fa16c881)

Co-authored-by: Emilien Escalle <neilime@users.noreply.github.com>
2024-03-24 18:26:26 +01:00
patchback[bot]
1a77ca9b8c [PR #8029/23396e62 backport][stable-8] Fix check mode in iptables_state for incomplete iptables-save files along with integration tests (#8137)
Fix check mode in iptables_state for incomplete iptables-save files along with integration tests (#8029)

* Implement integration test to reproduce #7463

* Make new iptables_state checks async

* Add missing commit to iptable_state integration test

* Remove async when using checkmode in iptables_state integration tests

* Do per table comparison in check mode for iptables_state

* Calculate changes of iptables state per table based on result

* Output target iptables state in checkmode

* Refactor calculation of invidual table states in iptables_state

* Add missing return for table calculation

* Add missing arg to regex check

* Remove leftover debug output for target iptable state

* Parse per table state from raw state string

* Join restored state for extration of table specific rules

* Switch arguments for joining restored iptable state

* Output final ip table state

* Compare content of tables

* Complete iptables partial tables test cases

* Correct order of test iptables data

* Update docu for iptables tables_after

* Add changelog fragment

* Appease the linting gods for iptables_state

* Adjust spelling and remove tables_after from return values

(cherry picked from commit 23396e62dc)

Co-authored-by: Maxopoly <max@dermax.org>
2024-03-24 18:26:15 +01:00
patchback[bot]
7b66573df0 [PR #8075/4363f876 backport][stable-8] ini_file - support optional spaces around section names (#8135)
ini_file - support optional spaces around section names (#8075)

* ini_file - support optional spaces between section names and their surrounding brackets

Some ini files have spaces between some of their section names and the
brackets that enclose them. This is documented in the 'openssl.cnf(5)' man
page. In order to manage files such as /etc/ssl/openssl.cnf with ini_file
before now, one would have to include spaces in the section name like this:
    section: ' crypto_policy '
    option: Options
    value: UnsafeLegacyRenegotiation

This change implements matching section headers with such optional spaces.
Existing tasks using the workaround above will continue to work, even in
cases where spaces in section headers are subsequently removed.

* readability improvement in the test content expressions

---------

Co-authored-by: Todd Lewis <todd_lewis@unc.edu>
(cherry picked from commit 4363f8764b)

Co-authored-by: Todd Lewis <utoddl@gmail.com>
2024-03-24 18:26:01 +01:00
patchback[bot]
c494fe5824 [PR #7998/4947786d backport][stable-8] Adds group_by_hostgroups parameter to Icinga2 inventory (#8134)
Adds group_by_hostgroups parameter to Icinga2 inventory (#7998)

* (lots of commit messages)

---------

Co-authored-by: Gianluca Salvo <gianluca.salvo@gruppomol.it>
Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit 4947786d36)

Co-authored-by: Gianluca Salvo <Gianlu@users.noreply.github.com>
2024-03-24 18:25:52 +01:00
patchback[bot]
dba4357b65 [PR #8130/fb67df30 backport][stable-8] Ignore pylint warnings for construct that does not work with Python 2 (#8132)
Ignore pylint warnings for construct that does not work with Python 2 (#8130)

* Ignore pylint warnings for construct that does not work with Python 2.

* Revert "Ignore pylint warnings for construct that does not work with Python 2."

This reverts commit 51d559cc94.

* Different approach: use ignore.txt since otherwise ansible-core 2.14 tests fail.

(cherry picked from commit fb67df3051)

Co-authored-by: Felix Fontein <felix@fontein.de>
2024-03-23 18:12:05 +01:00
patchback[bot]
c67f3b1e99 [PR #8127/da048aa1 backport][stable-8] CI: Move Alpine 3.18 docker to stable-2.16, add Alpine 3.19 docker, bump Alpine VM to 3.19 (#8129)
CI: Move Alpine 3.18 docker to stable-2.16, add Alpine 3.19 docker, bump Alpine VM to 3.19 (#8127)

Move Alpine 3.18 docker to stable-2.16, add Alpine 3.19 docker, bump Alpine VM to 3.19.

(cherry picked from commit da048aa12e)

Co-authored-by: Felix Fontein <felix@fontein.de>
2024-03-22 13:40:16 +01:00
patchback[bot]
fd026a195c [PR #8122/47b4cf76 backport][stable-8] CI: Add FreeBSD 13.3 and 14.0 for devel, move FreeBSD 13.2 to stable-2.16 (#8125)
CI: Add FreeBSD 13.3 and 14.0 for devel, move FreeBSD 13.2 to stable-2.16 (#8122)

* Add FreeBSD 13.3 and 14.0 for devel, move FreeBSD 13.2 to stable-2.16.

* Skip some targets.

* Skip pkgng jail tests (again :( ).

(cherry picked from commit 47b4cf766e)

Co-authored-by: Felix Fontein <felix@fontein.de>
2024-03-22 06:25:23 +01:00
patchback[bot]
f751abf81d [PR #8114/69ab5eb1 backport][stable-8] Fix plugin call in example (#8120)
Fix plugin call in example (#8114)

(cherry picked from commit 69ab5eb110)

Co-authored-by: Kristof Wevers <kwevers@users.noreply.github.com>
2024-03-20 08:30:39 +01:00
patchback[bot]
6071bbc200 [PR #8076/6298ad4f backport][stable-8] Implement usb_facts module (#8115)
Implement usb_facts module (#8076)

* First implementation of usb module

* Rename to usb_facts

* Working tests

* Appease linter

* Fix author

* Remove splitlines arg for python 2.7 compat

* indent usb test further

* indent usb test a bit less

* Remove trailing whitespace

* Update plugins/modules/usb_facts.py

Co-authored-by: Felix Fontein <felix@fontein.de>

* Update plugins/modules/usb_facts.py

Co-authored-by: Felix Fontein <felix@fontein.de>

* Apply suggestions from code review

Co-authored-by: Felix Fontein <felix@fontein.de>

* Adjust usb_facts PR based on feedback

* Add usage example and extend correct documentation fragment

* Add myself to BOTMETA.yml

* Apply suggestions from code review

Co-authored-by: Felix Fontein <felix@fontein.de>

---------

Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit 6298ad4faa)

Co-authored-by: Maxopoly <max@dermax.org>
2024-03-19 06:39:46 +01:00
patchback[bot]
a63bb9405a [PR #8052/73b6b98e backport][stable-8] Aix filesystem crfs issue (#8112)
Aix filesystem crfs issue (#8052)

* crfs issue in aix_filesystem.py

Change the crfs logic and fields, since empty options and order seem to be an issue.

this quick fix seems to solve it

* Create aix_filesystem-crfs-issue.yml

changelog fragment

* fix

fix typo

* Update changelogs/fragments/aix_filesystem-crfs-issue.yml

Co-authored-by: Felix Fontein <felix@fontein.de>

* Refactored based on feeback and testing

Refactored the changes i did based on the comments and testing. Also changed the attribute default values because they were causing errors

* blank line whitespaces

* fix default

---------

Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit 73b6b98ed9)

Co-authored-by: Mike <mike@php-webdesign.nl>
2024-03-17 17:40:33 +01:00
patchback[bot]
e762e952d8 [PR #8103/1c4197aa backport][stable-8] Skip cloud_init_data_facts tests on OpenSuSE Leap 15 (#8109)
Skip cloud_init_data_facts tests on OpenSuSE Leap 15 (#8103)

Skip cloud_init_data_facts tests on OpenSuSE Leap 15.5.

(cherry picked from commit 1c4197aa23)

Co-authored-by: Felix Fontein <felix@fontein.de>
2024-03-17 17:17:40 +01:00
patchback[bot]
df9ff544ef [PR #8102/23fbc5e2 backport][stable-8] Fix pacman tests in CI (#8106)
Fix pacman tests in CI (#8102)

Fix pacman tests.

(cherry picked from commit 23fbc5e241)

Co-authored-by: Felix Fontein <felix@fontein.de>
2024-03-17 17:01:07 +01:00
patchback[bot]
aece6ef400 [PR #8073/09cded05 backport][stable-8] Add --diff support for ldap_attrs module (#8099)
Add --diff support for ldap_attrs module (#8073)

* Add --diff support for ldap_attrs module

* Change diff_mode support in docstring to full

* Use _attrs suffix for old and new

* Add version added to ldap_attrs diff mode

* Add fragment for ldap_attrs diff mode

* Update fragment to include link to PR and lowercase start

* Update changelogs/fragments/8073-ldap-attrs-diff.yml

Co-authored-by: Felix Fontein <felix@fontein.de>

---------

Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit 09cded05e7)

Co-authored-by: StopMotionCuber <ruben.simons@web.de>
2024-03-14 23:39:18 +01:00
patchback[bot]
12ab33df84 [PR #8091/67736d79 backport][stable-8] Fix consul_token usage without accessor_id. (#8097)
Fix consul_token usage without accessor_id. (#8091)

* Fix consul_token usage without accessor_id.

* Update changelogs/fragments/8091-consul-token-fixes.yaml

Co-authored-by: Felix Fontein <felix@fontein.de>

* Update plugins/modules/consul_token.py

Co-authored-by: Felix Fontein <felix@fontein.de>

---------

Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit 67736d796a)

Co-authored-by: Florian Apolloner <florian@apolloner.eu>
2024-03-14 23:39:10 +01:00
patchback[bot]
c47081245c [PR #8087/22620752 backport][stable-8] Removed the redundant unicode prefixes (#8096)
Removed the redundant unicode prefixes (#8087)

* removed redundant unicode prefixes

* added changelog fragment

* Update changelogs/fragments/8087-removed-redundant-unicode-prefixes.yml

Co-authored-by: Felix Fontein <felix@fontein.de>

---------

Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit 226207522e)

Co-authored-by: ansible-dev-revbits <91919024+ansible-dev-revbits@users.noreply.github.com>
2024-03-14 22:32:44 +01:00
patchback[bot]
ead23a1f38 [PR #8081/17e275bc backport][stable-8] pacemaker_cluster: implement check mode (#8095)
pacemaker_cluster: implement check mode (#8081)

* Implement check mode for pacemaker_cluster.

* Fix restart code.

Co-authored-by: Mario Lenz <m@riolenz.de>

---------

Co-authored-by: Mario Lenz <m@riolenz.de>
(cherry picked from commit 17e275bc0b)

Co-authored-by: Felix Fontein <felix@fontein.de>
2024-03-14 22:32:35 +01:00
patchback[bot]
149759d0b0 [PR #8084/6fab4671 backport][stable-8] CI: add macOS 14.3 for devel, move 13.2 to stable-2.16 (#8086)
CI: add macOS 14.3 for devel, move 13.2 to stable-2.16 (#8084)

Add macOS 14.3 for devel, move 13.2 to stable-2.16.

(cherry picked from commit 6fab46710a)

Co-authored-by: Felix Fontein <felix@fontein.de>
2024-03-12 13:28:22 +01:00
patchback[bot]
ce4716bb6c [PR #8077/79d87552 backport][stable-8] remove code no longer used (#8079)
remove code no longer used (#8077)

(cherry picked from commit 79d87552ef)

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2024-03-10 12:19:00 +01:00
patchback[bot]
c09971a671 [PR #8048/fa30b022 backport][stable-8] fix(homebrew): give correct error message when become true used (#8068)
fix(homebrew): give correct error message when become true used (#8048)

* fix(homebrew): give correct error message when become true used

This commit fixes #8047 by raising the exception coming from calling
homebrew with the `become: true` parameter set.

* chore(changelog): add changelog fragment

(cherry picked from commit fa30b02294)

Co-authored-by: Michael Wall <thewalla07@gmail.com>
2024-03-09 12:42:34 +00:00
patchback[bot]
3e235f78d1 [PR #7999/0ded1109 backport][stable-8] feat(lookup/merge_variables): Add all hosts mode to collect configuration across multiple hosts (#8069)
feat(lookup/merge_variables): Add all hosts mode to collect configuration across multiple hosts (#7999)

* Add Feature to collect variables accross different hosts

* fix merging lists

* adjust unit tests

* lint fixes

* adjusting integration tests

* remove white spaces

* Update plugins/lookup/merge_variables.py

Co-authored-by: Felix Fontein <felix@fontein.de>

* Update plugins/lookup/merge_variables.py

Co-authored-by: Felix Fontein <felix@fontein.de>

* Update plugins/lookup/merge_variables.py

Co-authored-by: Felix Fontein <felix@fontein.de>

* apply suggested changes to correctly handling the initial_value parameter, incl. additional test

* whitespace

---------

Co-authored-by: Alexander Petrenz <alexander.petrenz@posteo.de>
Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit 0ded1109fe)

Co-authored-by: Alexander Petrenz <petrenz.a@gmail.com>
2024-03-09 12:42:22 +00:00
patchback[bot]
edcb4c67ce [PR #8057/c13bede0 backport][stable-8] pam_limits: do not create file in check mode when it does not exist (#8071)
pam_limits: do not create file in check mode when it does not exist (#8057)

Do not create file in check mode when it does not exist.

(cherry picked from commit c13bede0c5)

Co-authored-by: Felix Fontein <felix@fontein.de>
2024-03-09 12:42:12 +00:00
patchback[bot]
101e2e89ba [PR #8058/98df3440 backport][stable-8] Bump fsfe/reuse-action from 2 to 3 (#8061)
Bump fsfe/reuse-action from 2 to 3 (#8058)

Bumps [fsfe/reuse-action](https://github.com/fsfe/reuse-action) from 2 to 3.
- [Release notes](https://github.com/fsfe/reuse-action/releases)
- [Commits](https://github.com/fsfe/reuse-action/compare/v2...v3)

---
updated-dependencies:
- dependency-name: fsfe/reuse-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
(cherry picked from commit 98df344017)

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-03-04 19:53:42 +01:00
patchback[bot]
434ff651a3 [PR #8054/a50329d0 backport][stable-8] ejabberd_user: Fix class documentation (#8056)
ejabberd_user: Fix class documentation (#8054)

(cherry picked from commit a50329d0d5)

Co-authored-by: Melvin Keskin <melvo@olomono.de>
2024-03-03 09:02:57 +01:00
patchback[bot]
d3ef55ca2c [PR #7980/74c15c12 backport][stable-8] Updates lxd_container to support new LXD API (#8046)
Updates `lxd_container` to support new LXD API (#7980)

* feat:  adds support for /1.0/instances endpoint

* Update changelogs/fragments/lxd-instances-api-endpoint-added.yml

Co-authored-by: Felix Fontein <felix@fontein.de>

---------

Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit 74c15c1241)

Co-authored-by: Anthony Anderson <fnanderson93@gmail.com>
2024-02-28 22:27:21 +01:00
patchback[bot]
76d8e2d577 [PR #7953/248e2ff3 backport][stable-8] [FIX] proxmox_kvm: fetch vm status from node-specific API endpoint to ensure fresh state (#8043)
[FIX] proxmox_kvm: fetch vm status from node-specific API endpoint to ensure fresh state (#7953)

* proxmox_kvm: fetch vm status from node-specific API endpoint to ensure fresh state, fixes #7817

* changelog fragments

* Fix changelog fragment.

---------

Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit 248e2ff321)

Co-authored-by: nxet <nxet821@protonmail.com>
2024-02-28 22:23:32 +01:00
patchback[bot]
f379dac394 [PR #8037/05bf5ee1 backport][stable-8] Fix instruction for distro Ubuntu and Debian for htpasswd depends (#8042)
Fix instruction for distro Ubuntu and Debian for htpasswd depends (#8037)

* Fix instruction fo debian 12 for htpasswd depends

* Add range for python-passlib distro

(cherry picked from commit 05bf5ee1df)

Co-authored-by: Xavier Mitault <xavier.mitault@epitech.eu>
2024-02-28 21:35:54 +01:00
patchback[bot]
39a12074a4 [PR #8035/adb367a6 backport][stable-8] Fix missing apostrophes at proxmox.py examples (#8040)
Fix missing apostrophes at proxmox.py examples (#8035)

(cherry picked from commit adb367a6af)

Co-authored-by: Sebastián Bevacqua <sebabeva@gmail.com>
2024-02-28 12:32:30 +01:00
Felix Fontein
d83fba6b86 Next expected release is 8.5.0. 2024-02-26 20:26:26 +01:00
Felix Fontein
1955fc6a8a Release 8.4.0. 2024-02-26 20:08:30 +01:00
Felix Fontein
1d97cc4b7d Fix filename.
(cherry picked from commit 1b0d55fe31)
2024-02-26 20:07:31 +01:00
patchback[bot]
828968b0dd [PR #7790/787fa462 backport][stable-8] fix(modules/gitlab_runner): Use correct argument to list all runners (#8032)
fix(modules/gitlab_runner): Use correct argument to list all runners (#7790)

* fix(modules/gitlab_runner): Use correct argument to list all runners

python-gitlab 4.0.0 removed support for the `as_list=False` parameter.
This functionality is now available as `iterator=True`.

Without this change, the module actually only retrieves the first
20 results, which can lead to non-idempotent behavior, such as
registering a runner again.

* Add changelog entry (#7790)

* gitlab_runner: Check python-gitlab version when listing runners

* gitlab: Add list_all_kwargs variable to module_utils

* refactor(gitlab modules): use list_all_kwargs where it helps (#7790)

I did not change every instance of all=True or all=False, only those
which could obviously benefit from simplifying:

  * Code using `all=True` but then searching for any items that match a
    condition (no need to collect the full list).
  * Code that basically reimplements `all=True` with manual pagination.
    (These could be changed to `all=True`, but `list_all_kwargs` also
    sets per_page to 100, to gather data faster.)

* gitlab_instance_variable: Use list_all_kwargs

* Add new changelog entry for gitlab module changes (#7790)

(cherry picked from commit 787fa46217)

Co-authored-by: Mike Wadsten <mikewadsten@gmail.com>
2024-02-25 21:26:37 +01:00
patchback[bot]
f8666061bc [PR #7964/f6d0b35b backport][stable-8] GitLab group and project access token modules (#8031)
GitLab group and project access token modules (#7964)

* Adding gitlab group and project acess token modules

* Documentation corrections and recreate option change

* Documentation corrections

* Correcting documentation for return objects

(cherry picked from commit f6d0b35bb7)

Co-authored-by: Zoran Krleza <zoran.krleza@true-north.hr>
2024-02-25 21:26:30 +01:00
patchback[bot]
9a7a0ca526 [PR #7994/6cafd3be backport][stable-8] feat(lookup/bitwarden): add support for "session" arg (#8030)
feat(lookup/bitwarden): add support for "session" arg (#7994)

Allows pass session key instead of reading from env.

Signed-off-by: Emilien Escalle <emilien.escalle@escemi.com>
(cherry picked from commit 6cafd3bed7)

Co-authored-by: Emilien Escalle <neilime@users.noreply.github.com>
2024-02-25 21:26:23 +01:00
patchback[bot]
755ee2b4d0 [PR #7996/638a7fc1 backport][stable-8] Add templating support to Icinga2 Inventory (#8026)
Add templating support to Icinga2 Inventory (#7996)

* Add templating support to Icinga2 Inventory

* Added CHANGELOG fragment

* Linting after CI failure

* Update changelogs/fragments/7996-Add templating support to Icinga2 Inventory.yml

Co-authored-by: Felix Fontein <felix@fontein.de>

* Error in variables'name

---------

Co-authored-by: Gianluca Salvo <gianluca.salvo@gruppomol.it>
Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit 638a7fc199)

Co-authored-by: Gianluca Salvo <Gianlu@users.noreply.github.com>
2024-02-25 07:47:37 +01:00
patchback[bot]
d9e72cf75e [PR #8005/e0dbe9c9 backport][stable-8] modprobe: Avoid FileNotFoundError when directories don't exist. (#8028)
modprobe: Avoid FileNotFoundError when directories don't exist. (#8005)

* Avoid FileNotFoundError when directories don't exist.

* Adds changelog fragment.

* Update changelogs/fragments/7717-prevent-modprobe-error.yml

Co-authored-by: Felix Fontein <felix@fontein.de>

---------

Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit e0dbe9c98d)

Co-authored-by: Nate Douglas <ndouglas@users.noreply.github.com>
2024-02-25 07:47:27 +01:00
patchback[bot]
153456f6aa [PR #8009/b5c3361b backport][stable-8] Correct apk docu to not include spaces in package name (#8024)
Correct apk docu to not include spaces in package name (#8009)

* Correct apk docu to not include spaces in package name

* Update apk name docu as suggested in PR

Co-authored-by: Felix Fontein <felix@fontein.de>

---------

Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit b5c3361be4)

Co-authored-by: Maxopoly <max@dermax.org>
2024-02-24 20:27:08 +00:00
patchback[bot]
432dc1eb0d [PR #7952/dd7c3ad1 backport][stable-8] Fix errors in hpe specific get methods (#8022)
Fix errors in hpe specific get methods (#7952)

* Fix errors in hpe specific get methods

* corrects reference to non existent `self.chassis_uri_list` to
  `self.chassis_uris`
* corrects syntactically incorrect dereferences
* removes an uneccessary variable assignment to `chassis_uri_list`
  in `get_psu_inventory` method
* adds changelog fragment for above indicating fix of issue #7951

* Update changelog.

---------

Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit dd7c3ad10d)

Co-authored-by: Dave Rawks <dave@rawks.io>
2024-02-24 20:26:52 +00:00
Felix Fontein
d74993cacf Prepare 8.4.0 release. 2024-02-23 21:15:42 +01:00
patchback[bot]
b0fe02d4a3 [PR #7970/9510988a backport][stable-8] cargo: use the correct path when checking installation status fixing idempotency issue. (#8019)
cargo: use the correct path when checking installation status fixing idempotency issue. (#7970)

* cargo: use the correct path when checking installation status

* Add changelog fragment

* Update changelogs/fragments/7970-fix-cargo-path-idempotency.yaml

Co-authored-by: Felix Fontein <felix@fontein.de>

---------

Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit 9510988abc)

Co-authored-by: rbomze <14312790+rbomze@users.noreply.github.com>
2024-02-23 20:59:42 +01:00
patchback[bot]
6cd90d30d7 [PR #7976/beacd54b backport][stable-8] Added transactional(rollback/commit) support to mssql_script module (#8017)
Added transactional(rollback/commit) support to mssql_script module (#7976)

* Added transactional(rollback/commit) support to mssql_script module via optional boolean param 'transaction'

* Added changelog fragment

* Implemented PR Review comments by felixfontein

(cherry picked from commit beacd54b7b)

Co-authored-by: Udit Yadav <36297285+BlackHat786000@users.noreply.github.com>
2024-02-23 20:48:59 +01:00
patchback[bot]
437641d95f [PR #7985/102a0857 backport][stable-8] New filters to calculate the union, intersection, difference and symmetric difference of lists by preserving the items order (#8020)
New filters to calculate the union, intersection, difference and symmetric difference of lists by preserving the items order (#7985)

New filters lists_union, lists_intersect, lists_difference and lists_symmetric_difference added.

Signed-off-by: Christoph Fiehe <c.fiehe@eurodata.de>
Co-authored-by: Christoph Fiehe <c.fiehe@eurodata.de>
(cherry picked from commit 102a0857db)

Co-authored-by: cfiehe <cfiehe@users.noreply.github.com>
2024-02-23 20:48:50 +01:00
patchback[bot]
35fb3dd034 [PR #7971/dd25ddfb backport][stable-8] Pkgin fixes (#8016)
Pkgin fixes (#7971)

* Solve exception and spurious "changed" in pkgin

* Create changelog

* PEP 8

* Update changelogs/fragments/pkgin.yml

Co-authored-by: Felix Fontein <felix@fontein.de>

---------

Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit dd25ddfbe8)

Co-authored-by: Jesús Cea <jcea@jcea.es>
2024-02-23 20:48:29 +01:00
patchback[bot]
a7a2631333 [PR #7983/49bd9cbd backport][stable-8] Add noexec support to sudoers (#8012)
Add noexec support to sudoers (#7983)

* Add noexec support to sudoers

* Add changelog fragment #7983

* Fix yml formatting in fragment 7983

* Apply suggestions from code review

Co-authored-by: Felix Fontein <felix@fontein.de>

---------

Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit 49bd9cbd3c)

Co-authored-by: adaniaud <adaniaud@users.noreply.github.com>
2024-02-23 07:08:04 +00:00
patchback[bot]
c089260c88 [PR #8004/2a8da769 backport][stable-8] Redfish: Enhanced GetUpdateStatus to allow for empty responses to accomodate possible usage of 204 No Content (#8011)
Redfish: Enhanced GetUpdateStatus to allow for empty responses to accomodate possible usage of 204 No Content (#8004)

* Added handling for 204 No Content in some circumstances

Signed-off-by: Mike Raineri <michael.raineri@dell.com>

* Correcting gzip usage; open_url does the decompression automatically

Signed-off-by: Mike Raineri <michael.raineri@dell.com>

* Changelog fragment

Signed-off-by: Mike Raineri <michael.raineri@dell.com>

* Removed imports no longer used

Signed-off-by: Mike Raineri <michael.raineri@dell.com>

* Updated data unpacking to dynamically check ansible-core version and response headers to see if gzip decompression is needed

Signed-off-by: Mike Raineri <michael.raineri@dell.com>

---------

Signed-off-by: Mike Raineri <michael.raineri@dell.com>
(cherry picked from commit 2a8da76907)

Co-authored-by: Mike Raineri <michael.raineri@dell.com>
2024-02-23 07:07:57 +00:00
patchback[bot]
bc7f952a29 [PR #7992/ffa3d158 backport][stable-8] Implement integration tests for apk (#8008)
Implement integration tests for apk (#7992)

* Implement integration tests for apk

* Add group for apk integration test

* Adjust integration tests of apk as suggested in PR

(cherry picked from commit ffa3d15881)

Co-authored-by: Maxopoly <max@dermax.org>
2024-02-22 21:03:56 +01:00
patchback[bot]
874e0bdf9e [PR #7991/551b0b9e backport][stable-8] ipa_user: add how to remove userauthtype from an user (#7995)
ipa_user: add how to remove userauthtype from an user (#7991)

(cherry picked from commit 551b0b9eea)

Co-authored-by: Parsa Yousefi <p.yousefi97@gmail.com>
2024-02-20 21:37:19 +01:00
patchback[bot]
6987a07887 [PR #7956/1dd697bd backport][stable-8] Adding releases events option to gitlab_hook module (#7982)
Adding releases events option to gitlab_hook module (#7956)

* Adding releases events option to gitlab_hook module

* Fixing typo in documentation for gitlab_hook module

* No default value for releases_events

* Adding changelog fragment

(cherry picked from commit 1dd697bdc2)

Co-authored-by: Zoran Krleza <zoran.krleza@true-north.hr>
2024-02-19 20:08:57 +01:00
patchback[bot]
359788e0cd [PR #7847/8ea58618 backport][stable-8] gitlab_issue: use search instead of title (#7977)
gitlab_issue: use search instead of title (#7847)

* gitlab_issue: use search instead of title

* Create changelog file

* Update changelogs/fragments/7847-gitlab-issue-title.yml

Co-authored-by: Felix Fontein <felix@fontein.de>

* using query_parameters

Co-authored-by: Nejc Habjan <hab.nejc@gmail.com>

* sanity checks

---------

Co-authored-by: Felix Fontein <felix@fontein.de>
Co-authored-by: Nejc Habjan <hab.nejc@gmail.com>
(cherry picked from commit 8ea58618db)

Co-authored-by: Gabriele Pongelli <gpongelli@users.noreply.github.com>
2024-02-17 22:48:48 +01:00
patchback[bot]
8eec4767bd [PR #7881/001292c7 backport][stable-8] Fixes #1226 - keycloak_client detects changes on check_mode but not in run mode (#7979)
Fixes #1226 - keycloak_client detects changes on check_mode but not in run mode (#7881)

* Fix warning integrated

* Update Keycloak version intergrated test

* Exclude metadata from diff test

* Sanity

* Add fragments

* typo

* Add test

* Update changelogs/fragments/7881-fix-keycloak-client-ckeckmode.yml

Co-authored-by: Felix Fontein <felix@fontein.de>

* Remove docker compose

* Update changelogs/fragments/7881-fix-keycloak-client-ckeckmode.yml

Co-authored-by: Felix Fontein <felix@fontein.de>

---------

Co-authored-by: Andre Desrosiers <andre.desrosiers@ssss.gouv.qc.ca>
Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit 001292c780)

Co-authored-by: desand01 <desrosiers.a@hotmail.com>
2024-02-17 22:48:40 +01:00
patchback[bot]
01d3a106ac [PR #7919/6088e2dc backport][stable-8] fixes #7918 - onepassword lookup fails if field name contains uppercase letters and section is specified (#7975)
fixes #7918 - onepassword lookup fails if field name contains uppercase letters and section is specified (#7919)

* fix #7918

* Update plugins/lookup/onepassword.py

Co-authored-by: Sam Doran <github@samdoran.com>

* onepassword lookup: transform field ids to lowercase

* #7918: added unit tests

* #7919: add changelog fragment

* Update changelogs/fragments/7919-onepassword-fieldname-casing.yaml

Co-authored-by: Felix Fontein <felix@fontein.de>

---------

Co-authored-by: Sam Doran <github@samdoran.com>
Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit 6088e2dc0f)

Co-authored-by: Benjamin Mitzkus <b.mitzkus@gmx.de>
2024-02-17 12:29:48 +01:00
patchback[bot]
820c69ba54 [PR #7963/0a35eb2d backport][stable-8] terraform: fix diff when state is absent (#7973)
terraform: fix diff when state is absent (#7963)

(cherry picked from commit 0a35eb2dda)

Co-authored-by: Parsa Yousefi <p.yousefi97@gmail.com>
2024-02-17 12:29:37 +01:00
Felix Fontein
15a46508b4 [stable-8] Add default_without_diff callback (#7949) (#7968)
Add default_without_diff callback (#7949)

* Add default_without_diff callback.

* Add examples and BOTMETA entry.

(cherry picked from commit 980fa36fac)
2024-02-15 07:16:58 +01:00
patchback[bot]
0bf514c955 [PR #7965/bc383b8f backport][stable-8] Add krauthosting as proxmox maintainer (#7966)
Add krauthosting as proxmox maintainer (#7965)

Add krauthosting as proxmox maintainer.

(cherry picked from commit bc383b8f7b)

Co-authored-by: Felix Fontein <felix@fontein.de>
2024-02-13 21:46:47 +01:00
Felix Fontein
426f9d8734 [stable-8] Add redfish_config command to set service identification (#7917) (#7957)
Add redfish_config command to set service identification (#7917)

* Update redfish_utils.py

* Update redfish_utils.py

* Update redfish_config.py

* Update redfish_config.py

* Update redfish_config.py

* Update redfish_utils.py

* Create 7916-add-redfish-set-service-identification.yml

* fix lint

* Update redfish_utils.py

* add service_id docs

* Update redfish_info.py

* Update plugins/modules/redfish_info.py

Co-authored-by: Felix Fontein <felix@fontein.de>

* fix conflict

* fix conflict

* fix conflict

* fix conflict

* Update redfish_utils.py

* Update redfish_info.py

* Update redfish_info.py

* Update plugins/modules/redfish_config.py

Co-authored-by: Felix Fontein <felix@fontein.de>

---------

Co-authored-by: dh <dh@alpha.stegosaur.org>
Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit eded6ebf64)

Co-authored-by: D Honig <namssa@gmail.com>
2024-02-11 13:35:33 +01:00
Felix Fontein
80f4dcb09d [stable-8] Add MarkDown changelog and use it by default (#7940)
Add MarkDown changelog and use it by default.
2024-02-09 13:08:35 +01:00
Felix Fontein
877d6d76f5 [stable-8] proxmox_kvm - new param to support unsafe updates (#7843) (#7954)
proxmox_kvm - new param to support unsafe updates (#7843)

* proxmox_kvm - new param to support unsafe updates

* changelog fragments

* Apply suggestions from code review

Co-authored-by: Felix Fontein <felix@fontein.de>

* improved docs

* updated `version_added`

---------

Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit c7a2e28daa)

Co-authored-by: nxet <nxet821@protonmail.com>
2024-02-07 14:50:18 +01:00
Felix Fontein
f4d52cf235 [stable-8] filesize: use 2 TB instead of 4 TB in sparse file tests (#7935) (#7938)
filesize: use 2 TB instead of 4 TB in sparse file tests (#7935)

Use 2 TB instead of 4 TB.

4 TB does not work on the Alpine VMs for some reason
(File too large / cannot seek: Invalid argument).

(cherry picked from commit 549a73bd78)
2024-02-03 15:22:17 +01:00
patchback[bot]
3f66db14a3 [PR #7927/fa1f2af4 backport][stable-8] Update iso_customize.py notes section (#7930)
Update iso_customize.py notes section (#7927)

Documentation now shows support for python 3.4+

(cherry picked from commit fa1f2af460)

Co-authored-by: Chuck Milam <chuck@milams.net>
2024-02-01 17:51:55 +00:00
Felix Fontein
17abb550c3 [stable-8] fix typo: it's own -> its own (#7923) (#7928)
fix typo: it's own -> its own (#7923)

(cherry picked from commit ab6a61237a)

Co-authored-by: Thiago Perrotta <tbperrotta@gmail.com>
2024-02-01 18:33:24 +01:00
Felix Fontein
bfb18b3704 Next expected release is 8.4.0. 2024-01-29 20:49:37 +01:00
Felix Fontein
983b4d70e0 Release 8.3.0. 2024-01-29 20:16:51 +01:00
Felix Fontein
821ae9bc41 Prepare 8.3.0 release. 2024-01-29 20:16:02 +01:00
Felix Fontein
d5efd56dae [stable-8] terraform: support diff for resource_changes (#7896) (#7914)
terraform: support diff for resource_changes (#7896)

(cherry picked from commit 0dc891bf37)

Co-authored-by: Parsa Yousefi <p.yousefi97@gmail.com>
2024-01-29 19:30:16 +01:00
patchback[bot]
88ef840750 [PR #7697/a5cd4ebe backport][stable-8] Simplify regex for identifying order number in DN (#7646) (#7915)
Simplify regex for identifying order number in DN (#7646) (#7697)

Assume that if a string of digits occurs between curly braces anywhere
in the first component of the DN, that this is an order number. The
sequence does not necessarily have to occur after an equals sign.

(cherry picked from commit a5cd4ebea2)

Co-authored-by: Aaron Sowry <aeneby@users.noreply.github.com>
2024-01-29 19:30:08 +01:00
patchback[bot]
08d04a7923 [PR #7695/997e6345 backport][stable-8] Fixes #7389 - NMCLI issue with creating a wifi bridge-slave (#7912)
Fixes #7389 - NMCLI issue with creating a wifi bridge-slave (#7695)

* working mod

* added changelog fragment

* added link on fragment

* Update changelogs/fragments/7389-nmcli-issue-with-creating-a-wifi-bridge-slave.yml

Co-authored-by: Felix Fontein <felix@fontein.de>

* last fix

---------

Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit 997e6345b5)

Co-authored-by: Gianmarco Mameli <57061995+gianmarco-mameli@users.noreply.github.com>
2024-01-28 13:39:43 +01:00
patchback[bot]
9d0b14b239 [PR #7907/2580da97 backport][stable-8] Zuul third-party-check: disable ansible-doc part of galaxy-importer (#7910)
Zuul third-party-check: disable ansible-doc part of galaxy-importer (#7907)

Zuul third-party-check: disable ansible-doc part of galaxy-importer.

(cherry picked from commit 2580da9796)

Co-authored-by: Felix Fontein <felix@fontein.de>
2024-01-27 16:05:38 +01:00
patchback[bot]
9e83a4cb34 [PR #7901/84147081 backport][stable-8] Consul acl deprecation (#7906)
Consul acl deprecation (#7901)

Start deprecation of consul_acl.

(cherry picked from commit 84147081d4)

Co-authored-by: Florian Apolloner <florian@apolloner.eu>
2024-01-27 13:54:05 +01:00
patchback[bot]
dc5f012e52 [PR #7897/afd19888 backport][stable-8] Consul action group (#7905)
Consul action group (#7897)

Added action group for new style consul modules.

(cherry picked from commit afd1988810)

Co-authored-by: Florian Apolloner <florian@apolloner.eu>
2024-01-27 12:21:34 +01:00
Felix Fontein
210adc196e Fix changelog fragment filenames.
(cherry picked from commit f8465c692b)
2024-01-27 11:07:35 +01:00
patchback[bot]
f30fcec398 [PR #7870/be3bfd6f backport][stable-8] Detection of already installed homebrew cask (#7904)
Detection of already installed homebrew cask (#7870)

* fix: detect already installed cask

Use json output v2 to check if formulae and casks are installed

chore: add changelog fragment

* test: add homebrew cask specific tests

* refactor: change cask used in tests

* chore: apply suggestions to changelog fragment

(cherry picked from commit be3bfd6fa5)

Co-authored-by: João Victor Silva <160127815@aluno.unb.br>
2024-01-27 10:37:13 +01:00
patchback[bot]
0a904d60cd [PR #7878/29f98654 backport][stable-8] Add new consul modules and reuse code between them. (#7902)
Add new consul modules and reuse code between them. (#7878)

Refactored consul modules and added new roles.

(cherry picked from commit 29f9865497)

Co-authored-by: Florian Apolloner <florian@apolloner.eu>
2024-01-27 10:33:33 +01:00
patchback[bot]
1ee2bba140 [PR #7824/4298f2dd backport][stable-8] New module: gitlab_milestone (#7899)
New module: gitlab_milestone (#7824)

* new module gitlab_milestone

* change BOTMETA

* remove blank line

* version_added field

Co-authored-by: Felix Fontein <felix@fontein.de>

* Update plugins/modules/gitlab_milestone.py

Co-authored-by: Felix Fontein <felix@fontein.de>

* Update description with reference

Co-authored-by: Felix Fontein <felix@fontein.de>

* Dates as string type

* Removed python 2.7 requirement

* Fixes from recent PR comments.

* milestones_obj returned on success

---------

Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit 4298f2dd92)

Co-authored-by: Gabriele Pongelli <gpongelli@users.noreply.github.com>
2024-01-27 10:23:38 +01:00
patchback[bot]
0aa9cd0e30 [PR #7872/2d3f99ec backport][stable-8] fix proxmox update when setting does not already exist (#7898)
fix proxmox update when setting does not already exist (#7872)

* fix proxmox update when setting does not already exist

* add changelog fragment

---------

Co-authored-by: Eric Trombly <etrombly@iomaxis.com>
(cherry picked from commit 2d3f99ec3a)

Co-authored-by: Eric Trombly <etrombly@yahoo.com>
2024-01-27 10:23:30 +01:00
Felix Fontein
7009a768a4 [stable-8] New module: gitlab_label (#7657) (#7900)
New module: gitlab_label (#7657)

* gitlab project label first commit

* fixes from CI run

* fixing some sanity test

* sanity checks, removing typing

* remove default for required field

* fix indentation

* improving test set

* fixes to pass test set

* reuse compliancy

* fix sanity checks

* fix: method returns group, not project

* refactor: start adding group, test still pass

* updated module and tests to handle group labels

* update name to remove 'project'

* removing default

* typo

* generic name for returned dict

* returns also label object from library invocation

* remove unused var, updated doc

* fix output object name

* version_added

Co-authored-by: Felix Fontein <felix@fontein.de>

* Remove python 2.7

Co-authored-by: Felix Fontein <felix@fontein.de>

* Missing dot

Co-authored-by: Felix Fontein <felix@fontein.de>

* Remove version_added

Co-authored-by: Felix Fontein <felix@fontein.de>

* Remove useless doc

Co-authored-by: Felix Fontein <felix@fontein.de>

* Color is a string

* Fixes from recent PR comments.

---------

Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit 5c72ab34bf)

Co-authored-by: Gabriele Pongelli <gpongelli@users.noreply.github.com>
2024-01-27 10:23:19 +01:00
patchback[bot]
2f5552da04 [PR #7873/13e3161f backport][stable-8] Refer to LXD containers/VMs as instances (#7891)
Refer to LXD containers/VMs as instances (#7873)

* plugins/connection/lxd: rename container to instance

Signed-off-by: Simon Deziel <simon.deziel@canonical.com>

* plugins/inventory/lxd: rename container to instance

It seems that a previous search and replace was done but it
missed those `containe_name` due to missing `r` in `container`.

Signed-off-by: Simon Deziel <simon.deziel@canonical.com>

---------

Signed-off-by: Simon Deziel <simon.deziel@canonical.com>
(cherry picked from commit 13e3161f2a)

Co-authored-by: Simon Deziel <simon.deziel@canonical.com>
2024-01-24 19:49:01 +01:00
Felix Fontein
145686cfe0 [stable-8] Add redfish_info command to get service identification (#7883) (#7887)
Add redfish_info command to get service identification (#7883)

* Update redfish_info.py

* Create 7882-add-redfish-get-service-identification.yml

* add get_service_identification

* Update changelogs/fragments/7882-add-redfish-get-service-identification.yml

Co-authored-by: Felix Fontein <felix@fontein.de>

* Update plugins/modules/redfish_info.py

Co-authored-by: Felix Fontein <felix@fontein.de>

---------

Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit 5a51929aa3)

Co-authored-by: D Honig <namssa@gmail.com>
2024-01-23 07:59:06 +01:00
patchback[bot]
08239919de [PR #7875/44028060 backport][stable-8] Fix: incus connection plugin treats inventory_hostname incorrectly in remote config (#7886)
Fix: incus connection plugin treats inventory_hostname incorrectly in remote config (#7875)

* Fixes inventory_hostname treatment as a litteral instead of inventory_hostname variable. Similar problem fixed in LXD: https://github.com/ansible-collections/community.general/pull/4912

* changelog for upsream

* Update changelogs/fragments/7874-incus_connection_treats_inventory_hostname_as_literal_in_remotes.yml

Co-authored-by: Felix Fontein <felix@fontein.de>

---------

Co-authored-by: travis <travis@cypressMini.local>
Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit 44028060c3)

Co-authored-by: Travis McCollum <travis.mccollum+github@gmail.com>
2024-01-23 07:29:23 +01:00
patchback[bot]
1ab1f8f62b [PR #7826/44679e71 backport][stable-8] Refactor of consul modules (#7877)
Refactor of consul modules (#7826)

* Extract common functionality.

* Refactor duplicated code into module_utils.

* Fixed ansible-test issues.

* Address review comments.

* Revert changes to consul_acl.

It uses deprecated APIs disabled since Consul 1.11 (which is EOL), don't
bother updating the module anymore.

* Remove unused code.

* Merge token into default doc fragment.

* JSON all the way down.

* extract validation tests into custom file and prep for requests removal.

* Removed dependency on requests.

* Initial test for consul_kv.

* fixup license headers.

* Revert changes to consul.py since it utilizes python-consul.

* Disable the lookup test for now.

* Fix python 2.7 support.

* Address review comments.

* Address review comments.

* Addec changelog fragment.

* Mark ConsulModule as private.

(cherry picked from commit 44679e71a2)

Co-authored-by: Florian Apolloner <florian@apolloner.eu>
2024-01-21 17:51:45 +00:00
patchback[bot]
13c25154b5 [PR #7855/cd77d67e backport][stable-8] Add missing id parameter into pacman_key documentation examples. (#7868)
Add missing `id` parameter into pacman_key documentation examples. (#7855)

Key ID is a mandatory parameter, and the examples which miss it are
incorrect.

(cherry picked from commit cd77d67efb)

Co-authored-by: Danila Kiver <forumdan@mail.ru>
2024-01-18 08:12:58 +01:00
patchback[bot]
d22199f82e [PR #7821/92f8bf7b backport][stable-8] mssql_script: make module Python 2 compatible (#7866)
mssql_script: make module Python 2 compatible (#7821)

Make module Python 2 compatible.

(cherry picked from commit 92f8bf7b6f)

Co-authored-by: Felix Fontein <felix@fontein.de>
2024-01-18 07:33:49 +01:00
patchback[bot]
82a07de870 [PR #7857/069b485b backport][stable-8] Use shared workflow for Galaxy import test (#7864)
Use shared workflow for Galaxy import test (#7857)

Simplifiy workflows.

(cherry picked from commit 069b485b7e)

Co-authored-by: Felix Fontein <felix@fontein.de>
2024-01-18 07:33:35 +01:00
patchback[bot]
895c1fe2a0 [PR #7858/002208f4 backport][stable-8] Make compatible with newer reuse versions (#7860)
Make compatible with newer reuse versions (#7858)

Make compatible with newer reuse versions.

(cherry picked from commit 002208f425)

Co-authored-by: Felix Fontein <felix@fontein.de>
2024-01-18 07:10:56 +01:00
patchback[bot]
3e972990cb [PR #7795/31de16ce backport][stable-8] ipa_otptoken: fix wrong return value string to bool (#7852)
ipa_otptoken: fix wrong return value string to bool (#7795)

ipa_data is return ipatokendisable in boolean format and the module expects it as a string
this behavior causes a lack of idempotency and the get_diff module will fail in the second run.

(cherry picked from commit 31de16cee3)

Co-authored-by: Parsa Yousefi <p.yousefi97@gmail.com>
2024-01-16 22:31:47 +01:00
Felix Fontein
0ac6e44566 [stable-8] Use import galaxy workflow from ansible-collections/community.docker#754 (#7842)
Use import galaxy workflow from ansible-collections/community.docker#754 (#7839)

Use import galaxy workflow from https://github.com/ansible-collections/community.docker/pull/754.

(cherry picked from commit 32ec751996)
2024-01-13 19:25:40 +01:00
Felix Fontein
1308198eae [stable-8] CI: remove ignore files for ansible-core 2.11 and 2.12 (#7838)
CI: remove ignore files for ansible-core 2.11 and 2.12 (#7837)

Remove ignore files for ansible-core 2.11 and 2.12.

(cherry picked from commit 76fde43fca)
2024-01-13 16:26:24 +01:00
Felix Fontein
d887985b46 Rewrite with PyYAML (except comments). 2024-01-13 11:20:17 +01:00
patchback[bot]
7d6e7fa5fa [PR #7831/8891f559 backport][stable-8] Disable timezone tests on Arch Linux (#7835)
Disable timezone tests on Arch Linux (#7831)

Disable timezone tests on Arch Linux.

(cherry picked from commit 8891f559ef)

Co-authored-by: Felix Fontein <felix@fontein.de>
2024-01-13 11:00:23 +01:00
patchback[bot]
b61b988b2e [PR #7827/87866477 backport][stable-8] CI: fix xml tests on RHEL 8 (#7830)
CI: fix xml tests on RHEL 8 (#7827)

* Try to fix xml installation on RHEL.

* Install python-lxml on RHEL 8. Should speed up tests considerably.

(cherry picked from commit 878664778e)

Co-authored-by: Felix Fontein <felix@fontein.de>
2024-01-13 10:11:39 +01:00
Felix Fontein
549c9e69ae [stable-8] CI: for some reason async-timeout doesn't seem to get installed on Python 3.11 (#7812)
CI: for some reason async-timeout doesn't seem to get installed on Python 3.11 (#7811)

For some reason async-timeout doesn't seem to get installed on Python 3.11.

(cherry picked from commit 9946f758af)
2024-01-05 08:53:06 +01:00
patchback[bot]
fe35cff7a4 [PR #7807/ee8b1570 backport][stable-8] Fix failing sanity and integration tests (#7809)
Fix failing sanity and integration tests (#7807)

* Remove some Shippable specific code that trips latest shellcheck.

* Rename templated shell script to .sh.j2 to avoid shellcheck disliking the templating.

* Copy on the remote, not from controller to remote.

(cherry picked from commit ee8b15708f)

Co-authored-by: Felix Fontein <felix@fontein.de>
2024-01-04 23:24:38 +01:00
Felix Fontein
cef57b044b Next expected release will be 8.3.0 2024-01-01 18:22:57 +01:00
Felix Fontein
980a9817f3 Release 8.2.0. 2024-01-01 17:52:46 +01:00
Felix Fontein
778662921f Prepare 8.2.0 release. 2024-01-01 14:38:22 +01:00
patchback[bot]
a045d088d5 [PR #7792/0bfebde5 backport][stable-8] proxmox_kvm - state:template will check if template exists first (#7791) (#7806)
proxmox_kvm - state:template will check if template exists first (#7791) (#7792)

* proxmox_kvm - state:template will check if template exists first (#7791)

* added changelog entry

* Update changelog fragment.

---------

Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit 0bfebde5c9)

Co-authored-by: aaronjohnleonard <aaronjohnleonard@gmail.com>
2024-01-01 14:36:47 +01:00
patchback[bot]
395fc1e77a [PR #7765/acddb190 backport][stable-8] mail module/callback: allow to configure the Message-ID header's domain name (#7805)
mail module/callback: allow to configure the Message-ID header's domain name (#7765)

Allow to configure the Message-ID header's domain name.

(cherry picked from commit acddb190ba)

Co-authored-by: Felix Fontein <felix@fontein.de>
2024-01-01 14:30:35 +01:00
patchback[bot]
42c65f32eb [PR #7761/33180344 backport][stable-8] Add github_app_access_token lookup plugin (#7802)
Add github_app_access_token lookup plugin (#7761)

* Add github_app_access_token lookup plugin

* Fix a typo in short_description

* Remove unused MockOpenUrl

* Fix MockJWT to be used on jwt_instance instead

* Fix a bunch of pep8 and pylint issue

* Remove JWT from requirements, also default jwt_instance and jwk_from_pem so they can be mocked

* Update version added

Co-authored-by: Felix Fontein <felix@fontein.de>

* Update git reference in doc

Co-authored-by: Felix Fontein <felix@fontein.de>

* Update plugins/lookup/github_app_access_token.py

Co-authored-by: Felix Fontein <felix@fontein.de>

* Expose token expiry as a configurable option

* Update BOTMETA.yml

* Update documentation

* Update example with var, so it is more readable

Co-authored-by: Felix Fontein <felix@fontein.de>

* Apply suggestions from code review

Co-authored-by: Felix Fontein <felix@fontein.de>

---------

Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit 3318034403)

Co-authored-by: weisheng-p <weisheng-p@users.noreply.github.com>
2023-12-31 15:44:00 +01:00
patchback[bot]
4776e7bed3 [PR #7723/6afe35d2 backport][stable-8] ipa: ipa_pwpolicy update pwpolicy module (#7801)
ipa: ipa_pwpolicy update pwpolicy module (#7723)

* ipa: ipa_pwpolicy support maxrepeat, maxsequence, dictcheck, usercheck, gracelimit

* ipa: ipa_pwdpolicy replace if statements with for loop

* ipa: ipa_pwdpolicy add changelog

(cherry picked from commit 6afe35d263)

Co-authored-by: Parsa Yousefi <p.yousefi97@gmail.com>
2023-12-31 15:43:52 +01:00
Felix Fontein
d423b27288 [stable-8] Proxmox add storage content listing (#7725) (#7803)
Proxmox add storage content listing (#7725)

Add module to list content on proxmox storage

We first add a method to list storage content for proxmox, then use that
new methode to add an Ansible module to list content on storage attached
to a proxmox node. User can also use content filtering to define what
they want to list (backup, iso, images,...).

This commit also include the integration and unit test for that new
module.

Co-authored-by: Julian Vanden Broeck <julian.vandenbroeck@dalibo.com>
(cherry picked from commit 4f92f39720)

Co-authored-by: Julian <374571+l00ptr@users.noreply.github.com>
2023-12-31 15:43:43 +01:00
patchback[bot]
89c56631c8 [PR #7789/08ece2e0 backport][stable-8] Allow custom providerId in keycloak_user_federation (#7804)
Allow custom providerId in keycloak_user_federation (#7789)

* Update keycloak_user_federation.py

* stub out changelog

* update PR reference

* remove 'choices' from documentation

* Apply suggestions from code review

Co-authored-by: Felix Fontein <felix@fontein.de>

---------

Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit 08ece2e0fa)

Co-authored-by: Clif Reeder <clifreeder@gmail.com>
2023-12-31 15:43:29 +01:00
patchback[bot]
2e34cba62c [PR #7797/8d307cb1 backport][stable-8] Remove FreeBSD 12.4 from CI (#7800)
Remove FreeBSD 12.4 from CI (#7797)

Remove FreeBSD 12.4 from CI.

(cherry picked from commit 8d307cb190)

Co-authored-by: Felix Fontein <felix@fontein.de>
2023-12-31 15:19:30 +01:00
patchback[bot]
ce5417bb73 [PR #7745/acc31730 backport][stable-8] Add dnf_config_manager module (#7794)
Add dnf_config_manager module (#7745)

* Add dnf_config_manager module

* add BOTMETA

* document return values

* improve error messages

* fix doc indent

* make regexes raw strings

* formatting improve

* fix indent

* update version_added

* Tweaks from feedback and unit testing

* fix copyright and python2.7

* remove shebang

* documentation updates

* Change return values to not have varying keys

* sort returned lists

(cherry picked from commit acc3173030)

Co-authored-by: Andrew Hyatt <4400272+ahyattdev@users.noreply.github.com>
2023-12-29 09:57:26 +01:00
patchback[bot]
bf089294b4 [PR #7689/1a3c93f8 backport][stable-8] Add proxmox_node_info module (#7793)
Add proxmox_node_info module (#7689)

* Add proxmox_node_info module - restarted PR due to erroneous update/push of my local fork.

* Used wrong user ID.

* Changes requested by felixfontein:
- Capitalization and punctuation in documentation section
- trailing comma on line 125
- Re-order BOTMETA so it is alphabetical

* Mis-copied older version of code, correcting actual call

* Add tests for proxmox_node_info module

(cherry picked from commit 1a3c93f80c)

Co-authored-by: John Berninger <john.berninger@gmail.com>
2023-12-29 09:55:53 +01:00
patchback[bot]
87a079e93c [PR #7663/f7bc6964 backport][stable-8] Add keycloak_realm_rolemapping module to map realm roles to groups (#7785)
Add keycloak_realm_rolemapping module to map realm roles to groups (#7663)

* Add keycloak_realm_rolemapping module to map realm roles to groups

* Whitespace

* Description in plain English

* Casing

* Update error reporting as per #7645

* Add agross as maintainer of keycloak_realm_rolemapping module

* cid and client_id are not used here

* Credit other authors

* mhuysamen submitted #7645
* Gaetan2907 authored keycloak_client_rolemapping.py which I took as a
  basis

* Add integration tests

* With Keycloak 23 realmRoles are only returned if assigned

* Remove debug statement

* Add test verifying that unmap works when no realm roles are assigned

* Add license to readme

* Change version number this module was added

* Document which versions of the docker images have been tested

* Downgrade version_added

Co-authored-by: Felix Fontein <felix@fontein.de>

---------

Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit f7bc6964be)

Co-authored-by: Alexander Groß <agross@therightstuff.de>
2023-12-28 17:28:03 +00:00
patchback[bot]
2de375eaf8 [PR #7746/98181fb8 backport][stable-8] Implemented raw_post without actions (#7786)
Implemented raw_post without actions (#7746)

* implemented raw_post without actions

* fixed identation

* added changelog fragment

* Update changelogs/fragments/7746-raw_post-without-actions.yml

Co-authored-by: Felix Fontein <felix@fontein.de>

---------

Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit 98181fb8cb)

Co-authored-by: Andrei Sucu <70206949+AndreiSucu@users.noreply.github.com>
2023-12-28 17:27:55 +00:00
patchback[bot]
3a946bf115 [PR #7694/e99b5086 backport][stable-8] Keycloak components info (#7787)
Keycloak components info (#7694)

* Before test

* first test

* test

* Sanity ok

* Fixe readme

* Refactor

* Sanity

* Fixe doc

* version added

* refactor

* Copyright

* Sanity

* Sanity

* Fixe text

* Encode providerType

* Test for failed ic

* Update plugins/modules/keycloak_component_info.py

Co-authored-by: Felix Fontein <felix@fontein.de>

* Update plugins/modules/keycloak_component_info.py

Co-authored-by: Felix Fontein <felix@fontein.de>

* Update plugins/modules/keycloak_component_info.py

Co-authored-by: Felix Fontein <felix@fontein.de>

* Update plugins/modules/keycloak_component_info.py

Co-authored-by: Felix Fontein <felix@fontein.de>

* Update plugins/modules/keycloak_component_info.py

Co-authored-by: Felix Fontein <felix@fontein.de>

* Update plugins/modules/keycloak_component_info.py

Co-authored-by: Felix Fontein <felix@fontein.de>

* Update plugins/modules/keycloak_component_info.py

Co-authored-by: Felix Fontein <felix@fontein.de>

* Delete changelogs/fragments/7694-Keycloak-components-info.yml

---------

Co-authored-by: Andre Desrosiers <andre.desrosiers@ssss.gouv.qc.ca>
Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit e99b5086a8)

Co-authored-by: desand01 <desrosiers.a@hotmail.com>
2023-12-28 17:27:48 +00:00
patchback[bot]
1e3ad7f189 [PR #7767/dfb9b1b9 backport][stable-8] Update BOTMETA.yml - Remove fxfitz as maintainer of IPA (#7784)
Update BOTMETA.yml - Remove fxfitz as maintainer of IPA (#7767)

* Update BOTMETA.yml

Remove fxfitz

* Add ignore fxfitz

---------

Co-authored-by: Fran Fitzpatrick <fran.fitzpatrick@tanium.com>
(cherry picked from commit dfb9b1b9fb)

Co-authored-by: Fran Fitzpatrick <francis.x.fitzpatrick@gmail.com>
2023-12-28 17:27:39 +00:00
patchback[bot]
8c386516eb [PR #7773/56a18a02 backport][stable-8] cloudflare_dns: announce removal of SPF support (#7781)
cloudflare_dns: announce removal of SPF support (#7773)

Announce removal of SPF support.

(cherry picked from commit 56a18a029a)

Co-authored-by: Felix Fontein <felix@fontein.de>
2023-12-28 17:48:17 +01:00
patchback[bot]
058c918cad [PR #7776/e9f7f7e2 backport][stable-8] CI: python-memcached 1.60 needs Python 3.6+ (#7779)
CI: python-memcached 1.60 needs Python 3.6+ (#7776)

python-memcached 1.60 needs Python 3.6+.

(cherry picked from commit e9f7f7e2de)

Co-authored-by: Felix Fontein <felix@fontein.de>
2023-12-28 13:53:27 +01:00
patchback[bot]
a7dac117e5 [PR #7418/fd0d05d6 backport][stable-8] Bugfix: keycloak_identity_provider does not handle mapper changes properly (#7775)
Bugfix: keycloak_identity_provider does not handle mapper changes properly (#7418)

* fix keycloak_identity_provider ITs to actually pass

- wrong identityProviderAlias in mapper configuration

* kc_identity_provider: add mapper reconfiguration regression tests

* test for removing an existing mapper
* test for adding a new mapper when others already exist
* test for module idempotency when mappers not ordered by name in ascending order

* kc_identity_provider: add bugfixes for mapper reconfigurations

* removing an existing mapper
* adding a new mapper when others already exist
* module idempotency when mappers not ordered by name in ascending order

* add changelog fragment

* prevent unnecessary update_mapper calls when there is no change

* Update changelogs/fragments/7418-kc_identity_provider-mapper-reconfiguration-fixes.yml

Co-authored-by: Felix Fontein <felix@fontein.de>

* Update changelogs/fragments/7418-kc_identity_provider-mapper-reconfiguration-fixes.yml

Co-authored-by: Felix Fontein <felix@fontein.de>

* Update changelogs/fragments/7418-kc_identity_provider-mapper-reconfiguration-fixes.yml

Co-authored-by: Felix Fontein <felix@fontein.de>

* Update plugins/modules/keycloak_identity_provider.py

Co-authored-by: Felix Fontein <felix@fontein.de>

* kc_identity_provider: sort changeset mappers via name OR id to prevent potential failures in case name was not specified in playbook

Co-authored-by: Felix Fontein <felix@fontein.de>

---------

Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit fd0d05d6f2)

Co-authored-by: Jakub Danek <danekja@users.noreply.github.com>
2023-12-28 09:59:46 +01:00
patchback[bot]
9fc447dedb [PR #7744/ec12422f backport][stable-8] Adding a new filter: to_ini, which allows conversion of a dictionary to an INI formatted string (#7772)
Adding a new filter: to_ini, which allows conversion of a dictionary to an INI formatted string (#7744)

* Adding a new filter: to_ini, which allows conversion of a dictionary to an INI formatted string

* Adding to_ini maintainers into BOTMETA

* Correcting filter suffix

* Moving filter to correct path

* Adding error handling; Removing quotes from examples; Fixing RETURN documentation

* Removing the last newline char; Adding error handling for an empty dict

* Adding integration tests for to_ini

* Fixing F-String usage

* Fixing formatting

* Fixing whitespace

* Moving import statements below documentation; Adding a more generic Exception handling; Removing unused imports

* Removing not needed set_fact and replacing it with using vars:

* Replacing MutableMapping with Mapping

(cherry picked from commit ec12422fae)

Co-authored-by: Steffen Scheib <37306894+sscheib@users.noreply.github.com>
2023-12-28 09:34:13 +01:00
patchback[bot]
fc70818ee3 [PR #7737/f79940c4 backport][stable-8] ipa_dnsmodule: Add support for ns record management (#7771)
ipa_dnsmodule: Add support for ns record management (#7737)

* Add NS record type management to ipa_dnsrecord

* Add jwbernin to BOTMETA for ipa_ modules

* Add changelog fragment

* Rename changelog fragment with pull request number

* Commit changes suggested by felixfontein

(cherry picked from commit f79940c415)

Co-authored-by: John Berninger <john.berninger@gmail.com>
2023-12-28 09:33:44 +01:00
patchback[bot]
a7bbf99448 [PR #7726/6d74e0c6 backport][stable-8] Introduce an Incus connection plugin (#7770)
Introduce an Incus connection plugin (#7726)

* plugins/connection/incus: Introduce new plugin

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>

* BOTMETA: Add incus connection plugin

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>

* tests/integration: Add connection_incus test

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>

---------

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
(cherry picked from commit 6d74e0c640)

Co-authored-by: Stéphane Graber <stgraber@stgraber.org>
2023-12-28 09:33:30 +01:00
patchback[bot]
718f88d2c7 [PR #7743/ec6dfe2f backport][stable-8] Adding a new filter: from_ini, which allows conversion of INI content to a dictionary (#7769)
Adding a new filter: from_ini, which allows conversion of INI content to a dictionary (#7743)

* Adding a new filter: from_ini, which allows conversion of INI content to a dictionary

* Adding from_ini maintainers into BOTMETA

* Adding error handling; Removing quotes from examples; Fixing RETURN documentation

* Adding integration tests

* Moving imports below documentation; Adding a more general exception handling

(cherry picked from commit ec6dfe2fcd)

Co-authored-by: Steffen Scheib <37306894+sscheib@users.noreply.github.com>
2023-12-28 09:33:18 +01:00
patchback[bot]
c596558846 [PR #7698/702dd9bb backport][stable-8] improvements to the keycloak_realm_key module (#7768)
improvements to the keycloak_realm_key module (#7698)

* add support for rsa enc key usage, more algorithms, and make certficate optional

* fix formatting

* adding changelog fragment

* made suggested code changes based on review

* fix typo and be more clear

* revert certificate to previous defined settings

(cherry picked from commit 702dd9bbda)

Co-authored-by: George Bolo <george.bolo@gmail.com>
2023-12-28 09:33:08 +01:00
patchback[bot]
21a7159472 [PR #7740/671b7ab1 backport][stable-8] mail module: add Message-ID header (#7764)
mail module: add Message-ID header (#7740)

* mail module: add Message-ID header

* Update plugins/modules/mail.py

Co-authored-by: Felix Fontein <felix@fontein.de>

---------

Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit 671b7ab149)

Co-authored-by: Sébastien Bocahu <sebastien+github@bocahu.name>
2023-12-27 16:00:13 +01:00
patchback[bot]
5dc20d9028 [PR #7754/4a1006ac backport][stable-8] Fixed payload format (#7763)
Fixed payload format (#7754)

* Fixed payload format

* added changelog fragment

* Update changelogs/fragments/7754-fixed-payload-format.yml

Co-authored-by: Felix Fontein <felix@fontein.de>

---------

Co-authored-by: Ed Ferguson <eferguson@nrtc.coop>
Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit 4a1006ac34)

Co-authored-by: Ed Ferguson <5855090+eeferg@users.noreply.github.com>
2023-12-26 22:24:54 +01:00
patchback[bot]
2f47748154 [PR #7727/825bec70 backport][stable-8] Improve docs of bitwarden lookup (#7760)
Improve docs of bitwarden lookup (#7727)

* Improve docs of bitwarden lookup.

* Improve formulations.

Co-authored-by: Don Naro <dnaro@redhat.com>

* Improve formulation.

---------

Co-authored-by: Don Naro <dnaro@redhat.com>
(cherry picked from commit 825bec7053)

Co-authored-by: Felix Fontein <felix@fontein.de>
2023-12-22 21:24:06 +01:00
patchback[bot]
ddf6b13f18 [PR #7721/1fdbb50a backport][stable-8] 🔐 Load OP_SERVICE_ACCOUNT_TOKEN from ENVs (#7757)
🔐 Load `OP_SERVICE_ACCOUNT_TOKEN` from ENVs (#7721)

* 🔐 Load `OP_SERVICE_ACCOUNT_TOKEN` from ENVs

* 🚚 Move configuration to `doc_fragments`

* 📝 Add `env` to documentation

* Revert change

Co-authored-by: Felix Fontein <felix@fontein.de>

---------

Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit 1fdbb50abb)

Co-authored-by: Dov Benyomin Sohacheski <b@kloud.email>
2023-12-21 23:11:46 +01:00
patchback[bot]
293aee5648 [PR #7696/1389bba4 backport][stable-8] keycloak_user: avoid error when trying to delete a non-existing user (#7756)
keycloak_user: avoid error when trying to delete a non-existing user (#7696)

* avoid error when trying to delete a non-existing user

when force is set, but the user doesn't exist yet, this fails.

* 7696-avoid-attempt-to-delete-non-existing-user

add changelog entry

* rename changelog file

* Update changelogs/fragments/7696-avoid-attempt-to-delete-non-existing-user.yml

Co-authored-by: Felix Fontein <felix@fontein.de>

---------

Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit 1389bba459)

Co-authored-by: Michiel Dethmers <michiel@phplist.com>
2023-12-21 13:20:32 +01:00
Felix Fontein
f6603d552e [stable-8] using timeout parameter within community.general.mail module (#7731) (#7752)
using timeout parameter within community.general.mail module (#7731)

* using timeout parameter within community.general.mail module

* consolidated time-out example within an existing playbook

* consolidated time-out example within an existing playbook

* Update plugins/modules/mail.py

Co-authored-by: Felix Fontein <felix@fontein.de>

---------

Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit 916f6f7c87)

Co-authored-by: Aditya Putta <puttaa@skiff.com>
2023-12-20 08:19:43 +01:00
patchback[bot]
26dfe96ad6 [PR #7738/0b0a3028 backport][stable-8] Add documentation stubs for undocumented module options (#7750)
Add documentation stubs for undocumented module options (#7738)

Add documentation stubs for undocumented module options.

(cherry picked from commit 0b0a302855)

Co-authored-by: Felix Fontein <felix@fontein.de>
2023-12-20 07:43:34 +01:00
patchback[bot]
d7b89cde46 [PR #7685/98b2d043 backport][stable-8] Updated documentation to reflect new behaviour (#7749)
Updated documentation to reflect new behaviour (#7685)

* Updated documentation to reflect new behaviour

Per issue [6027](https://github.com/ansible-collections/community.general/issues/6027), disk and storage should not be used together, and changes to the API make it so "disk" should be formatted like "<storage>:<size in gb>".

Documentation edited to reflect this new behavior.

* Apply suggestions from code review

Change format due to referencing options.

Co-authored-by: Felix Fontein <felix@fontein.de>

---------

Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit 98b2d04348)

Co-authored-by: Wesley P <68830971+xhk416x@users.noreply.github.com>
2023-12-20 07:35:11 +01:00
patchback[bot]
6808f77f1a [PR #7739/097f0860 backport][stable-8] Bump github/codeql-action from 2 to 3 (#7742)
Bump github/codeql-action from 2 to 3 (#7739)

Bumps [github/codeql-action](https://github.com/github/codeql-action) from 2 to 3.
- [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/v2...v3)

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
(cherry picked from commit 097f08608f)

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-12-18 19:30:12 +01:00
patchback[bot]
ec9fd625fc [PR #7703/5e5e1963 backport][stable-8] ssh_config: Add add_keys_to_agent option (#7735)
ssh_config: Add add_keys_to_agent option (#7703)

* Add ssh_config module option for add_keys_to_agent

* Add changelog fragment for 7703

---------

Co-authored-by: Michael Finney <michael.finney@tpwd.texas.gov>
(cherry picked from commit 5e5e1963c3)

Co-authored-by: mjfinney <mjfinney@gmail.com>
2023-12-17 15:43:36 +01:00
patchback[bot]
b80d408a25 [PR #7704/6c1eb77f backport][stable-8] Add ssh_config module option for identities_only (#7736)
Add ssh_config module option for identities_only (#7704)

* Add ssh_config module option for identities_only

* Add changelog fragment for 7704

* remove trailing whitespace

* Apply suggestions from code review

Documentation change suggestions from felixfontein

Co-authored-by: Felix Fontein <felix@fontein.de>

---------

Co-authored-by: Michael Finney <michael.finney@tpwd.texas.gov>
Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit 6c1eb77f18)

Co-authored-by: mjfinney <mjfinney@gmail.com>
2023-12-17 15:43:28 +01:00
patchback[bot]
7db93a7dd3 [PR #7714/838e4e3f backport][stable-8] Add Alicloud, Online, Packet, and Scaleway scenario guides (#7719)
Add Alicloud, Online, Packet, and Scaleway scenario guides (#7714)

* Add Alicloud, Packet, and Scaleway scenario guides.

These were taken from
3f12228c79/docs/docsite/rst/scenario_guides
and adjusted to reality.

* Fix references.

* Add Online guide.

* Add BOTMETA entries.

* Use FQCN.

* Improve code formatting and indentation.

* Update BOTMETA.

(cherry picked from commit 838e4e3f02)

Co-authored-by: Felix Fontein <felix@fontein.de>
2023-12-11 19:55:05 +01:00
patchback[bot]
c79073c687 [PR #7709/0c7b9e50 backport][stable-8] Fix keytool setup on Debian Bookworm (#7712)
Fix keytool setup on Debian Bookworm (#7709)

Fix keytool setup on Debian Bookworm.

(cherry picked from commit 0c7b9e50b5)

Co-authored-by: Felix Fontein <felix@fontein.de>
2023-12-10 09:14:47 +01:00
patchback[bot]
09047058ce [PR #7705/aea238e5 backport][stable-8] Fix integration tests on Arch (#7708)
Fix integration tests on Arch (#7705)

* Fix ejabberd_user integration tests on Arch Linux.

* Fix odbc integration tests on Arch Linux.

* The old name of systemd_service is systemd.

(cherry picked from commit aea238e5d1)

Co-authored-by: Felix Fontein <felix@fontein.de>
2023-12-09 17:30:33 +01:00
patchback[bot]
7de503a2a3 [PR #7699/2b64ef2a backport][stable-8] Deactivate FreeBSD 13.1 in CI (#7702)
Deactivate FreeBSD 13.1 in CI (#7699)

Deactivate FreeBSD 13.1 in CI.

(cherry picked from commit 2b64ef2a62)

Co-authored-by: Felix Fontein <felix@fontein.de>
2023-12-08 07:10:33 +01:00
Felix Fontein
b746024c96 The next expected release is 8.2.0. 2023-12-04 21:28:06 +01:00
Felix Fontein
908a9836c0 Release 8.1.0. 2023-12-04 18:12:34 +01:00
Felix Fontein
adea41d773 [stable-8] Change tab to space in SSHFP requests (#7653) (#7682)
Change tab to space in SSHFP requests (#7653)

* Change tab to space in SSHFP requests

Cloudflare uses space and not tab when you search for SSHFP records

Cloudflare changes fingerprint to uppercase

Create 7653-fix-cloudflare-lookup.yml

* Update changelog fragment.

---------

Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit 3d0da92784)

Co-authored-by: Kalle Møller <git@k-moeller.dk>
2023-12-04 06:29:14 +01:00
patchback[bot]
2dd964cab3 [PR #7485/68051774 backport][stable-8] [proxmox_vm_info] Add ability to retrieve config (#7680)
[proxmox_vm_info] Add ability to retrieve config (#7485)

* feat: add ability to retrieve config

Light refactor of get_vms_from_nodes function.
Added ability to retrieve configuration for existing machines (current or pending).

* Add changelog fragment

* Add changelog fragment (newline missed)

* Update changelogs/fragments/7485-proxmox_vm_info-config.yml

Co-authored-by: Felix Fontein <felix@fontein.de>

* Apply suggestions from code review

Co-authored-by: Felix Fontein <felix@fontein.de>

* Replaced two bool options with one three-state option

* Module args for the three-state option

* Remove trailing newline

* Make use of dict instead of list. Fix uncalled 'get config for lxc'.

* Sanity tests

* A couple of unit tests fixed

* Unit tests fixed

* Unit tests for p2.7 fixed. Test for config parameter added.

---------

Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit 68051774d8)

Co-authored-by: castorsky <csky57@gmail.com>
2023-12-04 06:29:02 +01:00
patchback[bot]
410101a116 [PR #7676/a599afa3 backport][stable-8] lvol: Change `pvs` argument type to list (of str) (#7681)
lvol: Change ``pvs`` argument type to list (of str) (#7676)

* lvol: Change ``pvs`` argument type to list (of str)

* Add changelog fragment

* Apply review suggestions

(cherry picked from commit a599afa384)

Co-authored-by: Laszlo Szomor <laszomor@gmail.com>
2023-12-04 06:26:57 +01:00
patchback[bot]
ec5dd70f8b [PR #7523/88d2a3a1 backport][stable-8] Feat nomad token module (#7677)
Feat nomad token module (#7523)

* Add nomad_token module

* Updatate nomad maintainers list

* Fix Example docstring

* Fix identations and Flake8 rules

* Fix  trailing whitespace

* Fix SyntaxError error

* change stringh format

* Fix Return doc string

* Fix Examples

* Fix flake8  rule W293

* Fix Doc schema

* Fix argument_spec

* Add maintainer

* Fix Example doc

* Remove token_info

* Change Doc

* Change nomad api acl token link

* Remove return whitespace

* Update plugins/modules/nomad_token.py

Co-authored-by: Felix Fontein <felix@fontein.de>

* Update plugins/modules/nomad_token.py

Co-authored-by: Felix Fontein <felix@fontein.de>

* Update plugins/modules/nomad_token.py

Co-authored-by: Felix Fontein <felix@fontein.de>

* Update plugins/modules/nomad_token.py

Co-authored-by: Felix Fontein <felix@fontein.de>

* Update plugins/modules/nomad_token.py

Co-authored-by: Felix Fontein <felix@fontein.de>

* Update plugins/modules/nomad_token.py

Co-authored-by: Felix Fontein <felix@fontein.de>

* Update plugins/modules/nomad_token.py

Co-authored-by: Felix Fontein <felix@fontein.de>

* Fix add changed state to True

* Update plugins/modules/nomad_token.py

Co-authored-by: Felix Fontein <felix@fontein.de>

* Change suport check mode

* Add unity tests

* Remove unused import

* Remove tests unused import

* Change python-nomad versions

Co-authored-by: Felix Fontein <felix@fontein.de>

* Change acl for ACL

Co-authored-by: Felix Fontein <felix@fontein.de>

* Add ACL to all docs

* Change msg to ansible common return value

* Fix flake8 W291

* Update description.

---------

Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit 88d2a3a1fb)

Co-authored-by: apecnascimento <37672469+apecnascimento@users.noreply.github.com>
2023-12-03 14:12:03 +01:00
Felix Fontein
3473cb504e [stable-8] Keycloak print error msg from server (#7645) (#7675)
Keycloak print error msg from server (#7645)

* Retrive error msg

* changelog

* Update changelogs/fragments/7645-Keycloak-print-error-msg-from-server.yml

Co-authored-by: Felix Fontein <felix@fontein.de>

* test sanity

* Fixe var name

* Update plugins/module_utils/identity/keycloak/keycloak.py

Co-authored-by: Felix Fontein <felix@fontein.de>

* Update plugins/module_utils/identity/keycloak/keycloak.py

Co-authored-by: Felix Fontein <felix@fontein.de>

* Msg formating

---------

Co-authored-by: Andre Desrosiers <andre.desrosiers@ssss.gouv.qc.ca>
Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit e724bc5f51)

Co-authored-by: desand01 <desrosiers.a@hotmail.com>
2023-12-03 10:07:08 +01:00
patchback[bot]
c329192e82 [PR #7601/32558558 backport][stable-8] lvol: check return message in both stderr and stdout (#7674)
lvol: check return message in both stderr and stdout (#7601)

* lvol: check return message in both stderr and stdout

* add changelog frag

(cherry picked from commit 32558558c0)

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2023-12-03 09:49:29 +01:00
patchback[bot]
7fe5e5f02c [PR #7260/07bac177 backport][stable-8] git_config: support multiple values for same name (#7672)
git_config: support multiple values for same name (#7260)

* Refactor the existing git_config.py

* Support multiple values for same name

(cherry picked from commit 07bac1777f)

Co-authored-by: Günther Grill <guenhter@users.noreply.github.com>
2023-12-03 09:49:20 +01:00
patchback[bot]
4482b04463 [PR #7521/b4a2e9da backport][stable-8] Lxd instance not found fix false positives (#7671)
Lxd instance not found fix false positives (#7521)

* lxd: Add lxc command execution debug statement.

* lxd: avoid false positives in "instance not found" detection

Due to changes over time in the error message which lxd printed when an
instance wasn't found, the detection logic in the lxd connection plugin
matched any "not found" string.  Unfortunately this also false triggered
on other errors e.g. "/usr/bin/python3: not found" from the payload,
giving a confusing error message "UNREACHABLE! ... instance not found"
to the ansible user.

* Update changelog fragment.

---------

Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit b4a2e9da50)

Co-authored-by: Tim Small <tim@seoss.co.uk>
2023-12-03 09:49:10 +01:00
Felix Fontein
05608ea658 [stable-8] apt_rpm: add check if package version is upgradable (ansible-collections#7414) (#7669)
apt_rpm: add check if package version is upgradable (ansible-collections#7414) (#7577)

* apt_rpm: add check if package version is upgradable (ansible-collections#7414)

* add changelog fragment

* apt_rpm: apply the recommended changes and fix the sanity checks

---------

Co-authored-by: Nikolay Burykin <bne@altlinux.org>
(cherry picked from commit ecea4a2f38)

Co-authored-by: burykinne <67783534+burykinne@users.noreply.github.com>
2023-12-02 22:03:32 +01:00
patchback[bot]
a43132ba93 [PR #7626/30edafab backport][stable-8] add BootProgress property to redfish_info (#7668)
add BootProgress property to redfish_info (#7626)

* add BootProgress property to redfish_info

changelog

update changelog wording for end users

* Update changelog fragment.

---------

Co-authored-by: dgeorge <dgeorge@digitalocean.com>
Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit 30edafabe7)

Co-authored-by: danxg87 <danxg87@gmail.com>
2023-12-02 21:26:24 +01:00
patchback[bot]
33c5e17762 [PR #7539/f4a87fdb backport][stable-8] New module: gitlab_issue.py (#7667)
New module: gitlab_issue.py (#7539)

* feat(gitlab_issue): adds module for gitlab issues management

* Apply suggestions from code review

Co-authored-by: Felix Fontein <felix@fontein.de>

* Apply suggestions from code review

Co-authored-by: Felix Fontein <felix@fontein.de>

* fix(gitlab_issue): assignee_ids and labels as lists

* docs(gitlab_issue): fix missing element types

* Apply suggestions from code review

Co-authored-by: Léo GATELLIER <26511053+lgatellier@users.noreply.github.com>

* chore(gitlab_issue): remove unnecessary parameter checks

* chore(gitlab_issue): renaming milestone_id parameter to milestone_search

---------

Co-authored-by: Felix Fontein <felix@fontein.de>
Co-authored-by: Léo GATELLIER <26511053+lgatellier@users.noreply.github.com>
(cherry picked from commit f4a87fdbcb)

Co-authored-by: Ondrej Zvara <zvara.ondrej@gmail.com>
2023-12-02 21:26:10 +01:00
patchback[bot]
42efe21600 [PR #7641/58cce27d backport][stable-8] Fix Keycloak API client to quote '/' properly (#7665)
Fix Keycloak API client to quote '/' properly (#7641)

* fix Keycloak API client to quote '/' properly

* add changelog

* Update changelogs/fragments/7641-fix-keycloak-api-client-to-quote-properly.yml

Co-authored-by: Felix Fontein <felix@fontein.de>

---------

Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit 58cce27d45)

Co-authored-by: Tomohiko Ozawa <kota65535@gmail.com>
2023-12-02 09:40:04 +01:00
patchback[bot]
fc02a7c74e [PR #7564/241cc02f backport][stable-8] onepassword lookup - Make section and field case insensitive (#7662)
onepassword lookup - Make section and field case insensitive (#7564)

* onepassword lookup: Make section and field case insensitive

This was a regression in behavior when adding support for op v2.

* Return a string by default to avoid an exception if a field is missing

* Use a helper function to lower a value if possible

* Update changelog

(cherry picked from commit 241cc02fa8)

Co-authored-by: Sam Doran <sdoran@redhat.com>
2023-12-01 18:17:48 +01:00
patchback[bot]
ef16e7ea4e [PR #7656/096d36ad backport][stable-8] passwordstore tests: re-enable gopass on Debian-like systems (#7658)
passwordstore tests: re-enable gopass on Debian-like systems (#7656)

Re-enable gopass on Debian-like systems.

(cherry picked from commit 096d36adc5)

Co-authored-by: Felix Fontein <felix@fontein.de>
2023-12-01 18:03:28 +01:00
patchback[bot]
dce0a65ffe [PR #7630/0589c841 backport][stable-8] Fix and re-enable cmd_runner tests (#7655)
Fix and re-enable cmd_runner tests (#7630)

Fix cmd_runner tests.

(cherry picked from commit 0589c84176)

Co-authored-by: Felix Fontein <felix@fontein.de>
2023-12-01 17:48:29 +01:00
patchback[bot]
ab2c0992e4 [PR #7540/cf7a58f6 backport][stable-8] Allow update of proxmox container configuration (#7648)
Allow update of proxmox container configuration (#7540)

* add update paramater to proxmox module

* add changelog fragment

* revert formatting changes

* make update idempotent

* fix lints

---------

Co-authored-by: Eric Trombly <etrombly@iomaxis.com>
(cherry picked from commit cf7a58f627)

Co-authored-by: Eric Trombly <etrombly@yahoo.com>
2023-12-01 07:55:15 +01:00
patchback[bot]
2c6b2e344b [PR #7602/e3a3950e backport][stable-8] fix #7600 add hookscript parameter to proxmox_kvm (#7649)
fix #7600 add hookscript parameter to proxmox_kvm (#7602)

* fix #7600 add hookscript parameter to proxmox_kvm

* add issue url to changelog

* fix changelog missing quote

* add missing version_added

Co-authored-by: Felix Fontein <felix@fontein.de>

* changelog: add missing dot

Co-authored-by: Felix Fontein <felix@fontein.de>

---------

Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit e3a3950e3d)

Co-authored-by: Eric Le Lay <222469+elelay@users.noreply.github.com>
2023-12-01 07:54:54 +01:00
patchback[bot]
d87b91e279 [PR #7624/af01b462 backport][stable-8] redhat_subscription: use D-Bus registration on RHEL 7 only on 7.4+ (#7643)
redhat_subscription: use D-Bus registration on RHEL 7 only on 7.4+ (#7624)

subscription-manager does not provide a D-Bus interface in versions of
RHEL 7 older than 7.4.

(cherry picked from commit af01b462d5)

Co-authored-by: Pino Toscano <ptoscano@redhat.com>
2023-11-30 05:13:51 +00:00
patchback[bot]
505cde7e6b [PR #7569/42e55e4f backport][stable-8] infiniband can be a slave too (#7635)
infiniband can be a slave too (#7569)

* infiniband can be a slave too

* adding changelog fragment

(cherry picked from commit 42e55e4f86)

Co-authored-by: mark-tomich <tomichms@nih.gov>
2023-11-29 13:27:18 +01:00
patchback[bot]
0fcf81dd18 [PR #7588/d716bd46 backport][stable-8] ipa_config: add passkey choice to ipauserauthtype (#7636)
ipa_config: add passkey choice to ipauserauthtype (#7588)

* ipa_config: add passkey choice to ipauserauthtype

* Changelog Fragment - 7588

* ipa_config: edit ipauserauthtype description

Co-authored-by: Felix Fontein <felix@fontein.de>

---------

Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit d716bd4648)

Co-authored-by: Christer Warén <cwchristerw@gmail.com>
2023-11-29 13:26:59 +01:00
patchback[bot]
e62a256724 [PR #7589/512b2c73 backport][stable-8] ipa_user: add idp and passkey choices to ipauserauthtype (#7637)
ipa_user: add idp and passkey choices to ipauserauthtype (#7589)

* ipa_user: add idp and passkey to ipauserauthtype

* Changelog Fragment - 7589

* ipa_user: edit ipauserauthtype description

Co-authored-by: Felix Fontein <felix@fontein.de>

---------

Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit 512b2c7389)

Co-authored-by: Christer Warén <cwchristerw@gmail.com>
2023-11-29 13:26:50 +01:00
patchback[bot]
ee7ba1a691 [PR #7587/1b9d437b backport][stable-8] New module git config info (#7638)
New module git config info (#7587)

Add new module git_config_info

(cherry picked from commit 1b9d437be8)

Co-authored-by: Günther Grill <guenhter@users.noreply.github.com>
2023-11-29 13:26:41 +01:00
patchback[bot]
ee428ccd64 [PR #7631/dbba0d19 backport][stable-8] Fix osx_defaults tests (#7633)
Fix osx_defaults tests (#7631)

Fix osx_defaults tests.

(cherry picked from commit dbba0d1956)

Co-authored-by: Felix Fontein <felix@fontein.de>
2023-11-29 07:47:19 +01:00
patchback[bot]
580f8b30a8 [PR #7625/3b779eca backport][stable-8] Fix bad expressions in tests (#7629)
Fix bad expressions in tests (#7625)

* Fix bad expressions in tests.

ci_complete

* Disable cmd_runner integration tests.

ci_complete

* Another bad expression.

ci_complete

(cherry picked from commit 3b779ecade)

Co-authored-by: Felix Fontein <felix@fontein.de>
2023-11-29 07:30:10 +01:00
patchback[bot]
7204798479 [PR #7576/d9f3e7a2 backport][stable-8] Only disable cert validation in examples for local network access (#7618)
Only disable cert validation in examples for local network access (#7576)

Only disable cert validation in examples for local network access!

(cherry picked from commit d9f3e7a2ec)

Co-authored-by: Felix Fontein <felix@fontein.de>
2023-11-26 22:13:50 +01:00
patchback[bot]
59b1329337 [PR #7490/e0346d40 backport][stable-8] Add onepassword_doc lookup plugin (#7617)
Add onepassword_doc lookup plugin (#7490)

* Add onepassword_doc lookup plugin

* Switch to a doc fragment

* Add unit test

* Update docs

* Move parameter validation to the OnePass object

This makes it built in for other lookup plugins using this class.

* Use kwargs for OnePass instantiation

There are enough parameters now that using them positionally can result in
odd behavior.

* Update tests

Correct conftest file name so fixtures are discovered and loaded correctly
Move constant so it doesn’t need to be imported
Add a patch since the parameter validation moved to part of the class init

* Use a lookup docs fragment

* Correct plugin description

(cherry picked from commit e0346d400f)

Co-authored-by: Sam Doran <sdoran@redhat.com>
2023-11-26 21:45:42 +01:00
patchback[bot]
e3eaeda81a [PR #7612/5adb7ab9 backport][stable-8] interfaces_file: filter by address_familiy when updating method (#7616)
interfaces_file: filter by address_familiy when updating method (#7612)

* When updating method, check address_family if provided.

* Also test modifying 'method' without address_family filter.

(cherry picked from commit 5adb7ab948)

Co-authored-by: Felix Fontein <felix@fontein.de>
2023-11-26 20:30:55 +01:00
patchback[bot]
b7e68f5b2d [PR #7611/f496256d backport][stable-8] Improve interfaces_file documentation (#7614)
Improve interfaces_file documentation (#7611)

Improve interfaces_file documentation.

(cherry picked from commit f496256d18)

Co-authored-by: Felix Fontein <felix@fontein.de>
2023-11-26 20:30:42 +01:00
patchback[bot]
dcb38bece0 [PR #7461/d05932fb backport][stable-8] Add option to proxmox dynamic inventory to exclude nodes (#7606)
Add option to proxmox dynamic inventory to exclude nodes (#7461)

* Create option to exclude proxmox nodes

* improve node exclusion by only remove the top level group

* add fragment

* Update changelogs/fragments/7437-proxmox-inventory-add-exclude-nodes.yaml

Co-authored-by: Felix Fontein <felix@fontein.de>

* Update plugins/inventory/proxmox.py

Co-authored-by: Felix Fontein <felix@fontein.de>

* Rework node exclusion

* Update fragement PR number

* include release version in option

Co-authored-by: Felix Fontein <felix@fontein.de>

* Clarify description

* Update unit test

* Fix typos in unit test

* Fix additonal typos in test

* Fix CI

* Fixing yet another whitespace pep error

---------

Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit d05932fb2c)

Co-authored-by: IamLunchbox <56757745+IamLunchbox@users.noreply.github.com>
2023-11-26 17:35:57 +01:00
patchback[bot]
c82c375aef [PR #7538/938aec49 backport][stable-8] [keycloak_user_federation]: Adding option krbPrincipalAttribute (#7605)
[keycloak_user_federation]: Adding option krbPrincipalAttribute (#7538)

* keycloak_user_federation: Adding support for krbPrincipalAttribute

Signed-off-by: boolman <boolman@gmail.com>

* pr/7538 adding changelogs/fragment file

Signed-off-by: boolman <boolman@gmail.com>

* Update changelogs/fragments/7538-add-krbprincipalattribute-option.yml

Co-authored-by: Felix Fontein <felix@fontein.de>

* Update plugins/modules/keycloak_user_federation.py

Co-authored-by: Felix Fontein <felix@fontein.de>

* Update plugins/modules/keycloak_user_federation.py

Co-authored-by: Felix Fontein <felix@fontein.de>

---------

Signed-off-by: boolman <boolman@gmail.com>
Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit 938aec492e)

Co-authored-by: Boolman <boolman@gmail.com>
2023-11-26 17:35:45 +01:00
patchback[bot]
d5f6889f51 [PR #7603/12395732 backport][stable-8] CI: temporarily skip passwordstore tests on Debian/Ubuntu (#7608)
CI: temporarily skip passwordstore tests on Debian/Ubuntu (#7603)

Skip passwordstore tests on Debian/Ubuntu.

(cherry picked from commit 12395732e8)

Co-authored-by: Felix Fontein <felix@fontein.de>
2023-11-26 17:35:25 +01:00
patchback[bot]
ff8e67840f [PR #7535/af5da7d4 backport][stable-8] fix(modules/terraform): handle multiline strings correctly in complex variables (#7599)
fix(modules/terraform): handle multiline strings correctly in complex variables (#7535)

(cherry picked from commit af5da7d412)

Co-authored-by: Yann Soubeyrand <github@yann.soubeyrand.eu>
2023-11-24 21:47:55 +01:00
patchback[bot]
c1d142f543 [PR #7591/19984ce4 backport][stable-8] Update proxmox_tasks_info.py (#7595)
Update proxmox_tasks_info.py (#7591)

fix typo
I spend 3 hours because of this mistake

(cherry picked from commit 19984ce4df)

Co-authored-by: Андрей Неустроев <99169437+aneustroev@users.noreply.github.com>
2023-11-24 21:29:32 +01:00
patchback[bot]
cb9be1349a [PR #7592/b2dea631 backport][stable-8] Remove Fedora 36 from CI (#7597)
Remove Fedora 36 from CI (#7592)

Remove Fedora 36 from CI.

(cherry picked from commit b2dea631d1)

Co-authored-by: Felix Fontein <felix@fontein.de>
2023-11-24 21:29:23 +01:00
patchback[bot]
59086813c1 [PR #7558/fce91ebb backport][stable-8] ini_file: documentation for 'section' to stop mentioning that null can be passed (#7584)
ini_file: documentation for 'section' to stop mentioning that null can be passed (#7558)

Update ini_file's documentation for 'section' to stop mentioning that null can be passed.

(cherry picked from commit fce91ebbd4)

Co-authored-by: Felix Fontein <felix@fontein.de>
2023-11-23 06:53:37 +01:00
patchback[bot]
12319f4a82 [PR #7552/58705d5a backport][stable-8] More docs cleanup (#7579)
More docs cleanup (#7552)

* More docs improvements.

* timezone: mention which versions of AIX are supported.

(cherry picked from commit 58705d5ac3)

Co-authored-by: Felix Fontein <felix@fontein.de>
2023-11-23 06:18:57 +01:00
patchback[bot]
04b29342d2 [PR #7550/f87777b9 backport][stable-8] irc module: add validate_certs, rename use_ssl to use_tls (keeping use_ssl as an alias) (#7575)
irc module: add validate_certs, rename use_ssl to use_tls (keeping use_ssl as an alias) (#7550)

* Rename use_ssl to use_tls, keep use_ssl as an alias.

* Add validate_certs option.

* Add changelog fragment and recommend setting TLS related settings to true.

* Fix formatting.

* Update documentation to use use_tls=true and validate_certs=true.

(cherry picked from commit f87777b9f5)

Co-authored-by: Felix Fontein <felix@fontein.de>
2023-11-22 19:27:57 +01:00
patchback[bot]
0d23fa7a49 [PR #7549/d530470d backport][stable-8] logentries: docs improvements (#7572)
logentries: docs improvements (#7549)

Docs improvements.

(cherry picked from commit d530470d30)

Co-authored-by: Felix Fontein <felix@fontein.de>
2023-11-22 19:27:44 +01:00
patchback[bot]
dbec1ebf7a [PR #7554/0c4d2a6e backport][stable-8] galaxy.yml: improve description, improve YAML, remove not really relevant comments (#7570)
galaxy.yml: improve description, improve YAML, remove not really relevant comments (#7554)

Improve description, improve YAML, remove not really relevant comments.

(cherry picked from commit 0c4d2a6e5e)

Co-authored-by: Felix Fontein <felix@fontein.de>
2023-11-22 19:27:23 +01:00
patchback[bot]
feefec42df [PR #7563/09b9ea46 backport][stable-8] Set resources payload as a list (#7574)
Set resources payload as a list (#7563)

* Set resources payload as a list

* Update changelogs/fragments/7151-fix-keycloak_authz_permission-incorrect-resource-payload.yml

Co-authored-by: Felix Fontein <felix@fontein.de>

---------

Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit 09b9ea466f)

Co-authored-by: fostermi <mfosterm@gmail.com>
2023-11-22 19:20:50 +01:00
patchback[bot]
a60cba237f [PR #7533/2a5e7c33 backport][stable-8] Add test fqdn_valid (#7567)
Add test fqdn_valid (#7533)

* Add test fqdn_valid

* Add integration test fqdn_valid

* Add changelogs 7533-add-test-fqdn_valid

* Fix changelogs filename 7533-add-test-fqdn_valid.yml

* Add runme.* to install PyPI package fqdn and run the test.

* Remove changelog. New tests are documented by their version_added + short_description.

* Guarded import fqdn.

* Update plugins/test/fqdn_valid.py

Co-authored-by: Felix Fontein <felix@fontein.de>

* Update plugins/test/fqdn_valid.py

Co-authored-by: Felix Fontein <felix@fontein.de>

* Update plugins/test/fqdn_valid.py

Co-authored-by: Felix Fontein <felix@fontein.de>

* Update plugins/test/fqdn_valid.py

Co-authored-by: Felix Fontein <felix@fontein.de>

* Update tests/integration/targets/test_fqdn_valid/aliases

Co-authored-by: Felix Fontein <felix@fontein.de>

* Add tests/fqdn_valid.py maintained by vbotka.

* Fix integration. Add explicit collections to test_fqdn_valid

* Fix integration. Remove unused import ansible.errors

* Fix PEP8 E275

* Fix E402 module level import not at top of file.

* Fix E275 missing whitespace after keyword

* Update plugins/test/fqdn_valid.py

Co-authored-by: Felix Fontein <felix@fontein.de>

* Update plugins/test/fqdn_valid.py

Co-authored-by: Felix Fontein <felix@fontein.de>

* Update plugins/test/fqdn_valid.py

Co-authored-by: Felix Fontein <felix@fontein.de>

* Update plugins/test/fqdn_valid.py

Co-authored-by: Felix Fontein <felix@fontein.de>

---------

Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit 2a5e7c33df)

Co-authored-by: Vladimir Botka <vbotka@gmail.com>
2023-11-22 09:26:17 +01:00
patchback[bot]
76d011ed4b [PR #7515/5147c494 backport][stable-8] Add support for loopback type in nmcli module (#7566)
Add support for loopback type in nmcli module (#7515)

* add support for loopback devices

* add support for loopback devices

* fix yamllint issue in changelog fragment

* Fix yamlint warning and add note about new connectin type in docs

* change order of lines in documentation so they are sorted

(cherry picked from commit 5147c49498)

Co-authored-by: Alex Groshev <38885591+haddystuff@users.noreply.github.com>
2023-11-22 09:26:04 +01:00
patchback[bot]
3ba00d5a07 [PR #7551/a88f6f56 backport][stable-8] Clean up doc fragments a bit (#7568)
Clean up doc fragments a bit (#7551)

Clean up doc fragments a bit.

(cherry picked from commit a88f6f56c7)

Co-authored-by: Felix Fontein <felix@fontein.de>
2023-11-22 09:25:54 +01:00
patchback[bot]
8eb3003894 [PR #7560/9b163926 backport][stable-8] test helper: Helper.from_module() injects test function into test module (#7562)
test helper: Helper.from_module() injects test function into test module (#7560)

(cherry picked from commit 9b16392648)

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2023-11-22 09:11:12 +01:00
patchback[bot]
89158ce325 [PR #7555/404782c9 backport][stable-8] ansible_galaxy_install: forgot to remove mentions of the no longer supported Ansible 2.9 in the docs (#7561)
ansible_galaxy_install: forgot to remove mentions of the no longer supported Ansible 2.9 in the docs (#7555)

Forgot to remove mentions of the no longer supported Ansible 2.9 in the docs.

(cherry picked from commit 404782c9d7)

Co-authored-by: Felix Fontein <felix@fontein.de>
2023-11-20 22:18:05 +01:00
patchback[bot]
7f8d77b9f3 [PR #7542/21cd65fc backport][stable-8] ssl.wrap_socket() was removed in Python 3.12 (#7557)
ssl.wrap_socket() was removed in Python 3.12 (#7542)

* ssl.wrap_socket() was removed in Python 3.12.

* Make code for irc module backwards-compatible.

(cherry picked from commit 21cd65fccf)

Co-authored-by: Felix Fontein <felix@fontein.de>
2023-11-19 14:46:21 +01:00
Felix Fontein
3cf90b3e36 Prepare 8.1.0 release. 2023-11-19 10:50:13 +01:00
patchback[bot]
189b737c50 [PR #7495/3c12c6f4 backport][stable-8] [proxmox_disk]: Add ability to manipulate CD-ROM drive (#7553)
[proxmox_disk]: Add ability to manipulate CD-ROM drive (#7495)

* add: ability to manipulate CD-ROM drive

Added ability to manipulate CD-ROM drive:
create, mount, umount, use physical drive.

* Add changelog fragment

* Relax cdrom option requirement

* Formatting values

Co-authored-by: Felix Fontein <felix@fontein.de>

* YAML fix

Co-authored-by: Felix Fontein <felix@fontein.de>

---------

Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit 3c12c6f482)

Co-authored-by: castorsky <csky57@gmail.com>
2023-11-19 10:40:06 +01:00
patchback[bot]
c4bd7c2b7b [PR #7541/b8ecb167 backport][stable-8] CI: devel supports Fedora 39, and no longer Fedora 38 (#7548)
CI: devel supports Fedora 39, and no longer Fedora 38 (#7541)

* devel supports Fedora 39, and no longer Fedora 38.

* Disable 'mail' tests for Python 3.12+.

Ref: https://github.com/ansible-collections/community.general/issues/4656

* Fix setupSSLServer to work with Python 3.12.

(cherry picked from commit b8ecb1671b)

Co-authored-by: Felix Fontein <felix@fontein.de>
2023-11-18 14:34:13 +01:00
patchback[bot]
ea427d3c82 [PR #7543/b3c661a9 backport][stable-8] sysrc: FreeBSD jail test no longer works with FreeBSD 13.1 (#7546)
sysrc: FreeBSD jail test no longer works with FreeBSD 13.1 (#7543)

Jail test no longer works with FreeBSD 13.1.

(cherry picked from commit b3c661a9f6)

Co-authored-by: Felix Fontein <felix@fontein.de>
2023-11-18 14:01:43 +01:00
patchback[bot]
bc011c60e6 [PR #7534/89f12c87 backport][stable-8] CI: remove skip/python2.6 from aliases (#7537)
CI: remove skip/python2.6 from aliases (#7534)

Remove skip/python2.6 from aliases.

Since 8.0.0 we no longer support any ansible-core version that supports Python 2.6.

(cherry picked from commit 89f12c87eb)

Co-authored-by: Felix Fontein <felix@fontein.de>
2023-11-16 21:22:07 +01:00
patchback[bot]
a76537b24f [PR #7116/f8652571 backport][stable-8] Support 1Password Connect (#5588) (#7536)
Support 1Password Connect (#5588) (#7116)

* Support 1Password Connect (#5588)

- Support 1Password Connect with the opv2 client

* Follow pep8, be less explicit

* Update changelog to include PR

* 1Password Connect host and token are now also parameters

* Get argument values from the environment or lookup arguments

* Move imports

* Force using Connect token and host at the same time

* Update unit tests

* Update documentation

* Additional tests

(cherry picked from commit f8652571f7)

Co-authored-by: Xeryus Stokkel <XeryusTC@users.noreply.github.com>
2023-11-16 21:02:54 +01:00
patchback[bot]
327777a1da [PR #7524/32fa588f backport][stable-8] CI: Add rhel/9.3 for devel, remove rhel/9.2 (#7531)
CI: Add rhel/9.3 for devel, remove rhel/9.2 (#7524)

* Add rhel/9.3 for devel, remove rhel/9.2.

* Also skip rhel/9.3 when skipping rhel/9.2.

* snapd is also on available on RHEL 9.3.

(cherry picked from commit 32fa588f47)

Co-authored-by: Felix Fontein <felix@fontein.de>
2023-11-16 07:55:14 +01:00
patchback[bot]
d8ee97c7e9 [PR #7517/8d886b42 backport][stable-8] Close elastic APM client to release connections (#7529)
Close elastic APM client to release connections (#7517)

* Close elastic APM client to release connections

* Changelog fragment

(cherry picked from commit 8d886b42ec)

Co-authored-by: Iuri de Silvio <iurisilvio@gmail.com>
2023-11-15 22:34:45 +01:00
patchback[bot]
52ffc4eb7c [PR #7415/df66885f backport][stable-8] Ipa sudorule/add deny options (#7526)
Ipa sudorule/add deny options (#7415)

* Introduce options to include 'deny' commands and command groups

* Adding Changelog fragment

* Apply suggestions from code review

Co-authored-by: Felix Fontein <felix@fontein.de>

* Update changelogs/fragments/add-ipa-sudorule-deny-cmd.yml

Co-authored-by: Felix Fontein <felix@fontein.de>

* Update plugins/modules/ipa_sudorule.py

Co-authored-by: Felix Fontein <felix@fontein.de>

* Update plugins/modules/ipa_sudorule.py

Co-authored-by: Felix Fontein <felix@fontein.de>

---------

Co-authored-by: Ris Adams <ris@risadams.com>
Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit df66885fa4)

Co-authored-by: Ris Adams <5329119+risadams@users.noreply.github.com>
2023-11-15 22:13:57 +01:00
patchback[bot]
be8c05bf65 [PR #7489/f8d8f691 backport][stable-8] Netcup DNS: Add support for additional record types (#7525)
Netcup DNS: Add support for additional record types (#7489)

* Netcup DNS: Add support for additional record types

* Netcup DNS: Add changelog fragment

* Netcup DNS: Include information on minimum required versions in module documentation

* Apply suggestions from code review

Co-authored-by: Felix Fontein <felix@fontein.de>

---------

Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit f8d8f691bc)

Co-authored-by: buzz-tee <11776936+buzz-tee@users.noreply.github.com>
2023-11-15 22:13:41 +01:00
patchback[bot]
bf284a01cb [PR #7499/d0870a02 backport][stable-8] infiniband and bond interfaces can receive MTU settings too (#7527)
infiniband and bond interfaces can receive MTU settings too (#7499)

* infiniband and bond interfaces can receive MTU settings too

* adding test for default mtu setting

* the mtu parameter for infiniband is different than for ethernet

* adding changelog fragment

* Update changelogs/fragments/7499-allow-mtu-setting-on-bond-and-infiniband-interfaces.yml

Co-authored-by: Felix Fontein <felix@fontein.de>

---------

Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit d0870a022e)

Co-authored-by: mark-tomich <tomichms@nih.gov>
2023-11-15 22:13:22 +01:00
patchback[bot]
c1f9aeaac8 [PR #7486/4a74f46e backport][stable-8] refactor(gitlab modules): remove duplicate gitlab package check (#7516)
refactor(gitlab modules): remove duplicate gitlab package check (#7486)

(cherry picked from commit 4a74f46e56)

Co-authored-by: Léo GATELLIER <26511053+lgatellier@users.noreply.github.com>
2023-11-13 20:42:35 +01:00
patchback[bot]
1a5ad80589 [PR #7199/6b00b76f backport][stable-8] feat(gitlab_runner module): Add support for the new runner creation workflow (#7511)
feat(gitlab_runner module): Add support for the new runner creation workflow (#7199)

feat(gitlab_runner module): Handle new runner creation workflow

(cherry picked from commit 6b00b76f32)

Co-authored-by: Léo GATELLIER <26511053+lgatellier@users.noreply.github.com>
2023-11-13 20:22:33 +01:00
patchback[bot]
f2e2157bcc [PR #7468/65f58afb backport][stable-8] Improve performance of the bitwarden lookup plugin (#7512)
Improve performance of the bitwarden lookup plugin (#7468)

* Improve performance of the bitwarden lookup plugin

When looking for items using an item id, we can access the item directly with
bw get item instead of searching through all items. This doubles the lookup
speed.

* Update changelogs/fragments/bitwarden-lookup-performance.yaml

Co-authored-by: Felix Fontein <felix@fontein.de>

* fix indentation

* Ensure backwards compatible behavior in case of errors when doing bitwarden lookup by id

* chore: Link to correct PR in changelog fragment

* Use identity check when comparing with None

---------

Co-authored-by: Richard Klose <richard.klose@gec.io>
Co-authored-by: Richard Klose <richard@klose.dev>
Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit 65f58afbd9)

Co-authored-by: Pascal Hofmann <mail@pascalhofmann.de>
2023-11-13 20:22:25 +01:00
patchback[bot]
20d2488f0f [PR #7456/c2f08c57 backport][stable-8] [ssh_config] Add support for ControlMaster (#7510)
[ssh_config] Add support for ControlMaster (#7456)

* [ssh_config] Add support for ControlMaster

* Create separate function to convert bool

* Allow str values with yes/no options to also use bool

(cherry picked from commit c2f08c57e0)

Co-authored-by: Marcel <maleo@google.com>
2023-11-13 20:22:17 +01:00
patchback[bot]
7d75bb3d7e [PR #7462/2583c604 backport][stable-8] Add ostype parameter in LXC container clone of Proxmox VE (#7513)
Add ostype parameter in LXC container clone of Proxmox VE (#7462)

* update. proxmox lxc add ostype param

* update.

* update. E501

* update. E123

* update. pullrequestreview-1711205075

* update. commit undo formatted by editor auto-update

* update. add change fragment (pullrequestreview-1711205075)

* update. pullrequestreview-1711911827

(cherry picked from commit 2583c60487)

Co-authored-by: blacknon <blacknon@orebibou.com>
2023-11-13 20:22:09 +01:00
patchback[bot]
c5f8719fe9 [PR #7426/6a514b68 backport][stable-8] Add options for password generation in the passwordstore module (#7507)
Add options for password generation in the passwordstore module (#7426)

* feat: Add options for password generation.

* feat: Add documentations for options for password generation.

* fix: Remove newline from the end of the stored raw password

* fix: Define 'msg' variable before the reference inside the condition block

* feat: Add information when the 'timestamp' parameter was added

Co-authored-by: Felix Fontein <felix@fontein.de>

* feat: Add information when the 'preserve' parameter was added

Co-authored-by: Felix Fontein <felix@fontein.de>

* feat: Add changelog fragment for adding new parameters to the 'passwordstore' module

* feat: Change the evaluation of password modification conditions.

* feat: Change version of parameter 'timestamp' from 8.0.0 to 8.0.1

Co-authored-by: Felix Fontein <felix@fontein.de>

* feat: Change version of parameter 'preserve' from 8.0.0 to 8.0.1

Co-authored-by: Felix Fontein <felix@fontein.de>

* fix: Remove newline character from the timestamp message

Co-authored-by: Felix Fontein <felix@fontein.de>

* fix: Add newline character to the end of 'preserve' message.

Co-authored-by: Felix Fontein <felix@fontein.de>

---------

Co-authored-by: Michal Drobny <494056@muni.cz>
Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit 6a514b6843)

Co-authored-by: Michal Drobny <70282353+drobnymichal@users.noreply.github.com>
2023-11-13 20:22:00 +01:00
patchback[bot]
79cfc48dd5 [PR #7143/07a47c04 backport][stable-8] add template option to proxmox and proxmox_kvm (#7488)
add template option to proxmox and proxmox_kvm (#7143)

* add template option to proxmox and proxmox_kvm

* make recommended updates

* fix tests

* resolve comments on PR

* save changes to changelog fragment

* Update changelogs/fragments/7143-proxmox-template.yml

Co-authored-by: Felix Fontein <felix@fontein.de>

---------

Co-authored-by: Eric Trombly <etrombly@iomaxis.com>
Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit 07a47c047b)

Co-authored-by: Eric Trombly <etrombly@yahoo.com>
2023-11-13 20:21:53 +01:00
patchback[bot]
e0489d738a [PR #7472/567c7d18 backport][stable-8] feature(gitlab): add 'ca_path' option (#7487)
feature(gitlab): add 'ca_path' option (#7472)

(cherry picked from commit 567c7d1839)

Co-authored-by: Léo GATELLIER <26511053+lgatellier@users.noreply.github.com>
2023-11-13 20:21:43 +01:00
Felix Fontein
3e1cbbb617 Next expected release will be 8.1.0. 2023-11-13 20:20:57 +01:00
Felix Fontein
28d7c499b5 Release 8.0.2. 2023-11-13 19:58:06 +01:00
Felix Fontein
9f218be912 Prepare 8.0.2 release. 2023-11-11 12:39:26 +01:00
Felix Fontein
363936a544 Fix RST code formatting.
(cherry picked from commit e1503fc306)
2023-11-11 12:38:33 +01:00
patchback[bot]
a8351fa9df [PR #7506/c2e578cb backport][stable-8] pipx: change parameter formatter for pip_args (#7514)
pipx: change parameter formatter for pip_args (#7506)

* change parameter formatter for pip_args

* add changelog frag

(cherry picked from commit c2e578cb14)

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2023-11-11 12:36:48 +01:00
patchback[bot]
4b84127ef3 [PR #7501/48e860be backport][stable-8] Use isinstance() instead of type() (#7503)
Use isinstance() instead of type() (#7501)

* Replace type comparisons with isinstance() checks.

* Add changelog.

(cherry picked from commit 48e860be20)

Co-authored-by: Felix Fontein <felix@fontein.de>
2023-11-08 13:27:04 +01:00
Felix Fontein
82e1f24d2e The next expected release is 8.0.2. 2023-11-06 21:43:17 +01:00
Felix Fontein
9e8b6ea803 Release 8.0.1. 2023-11-06 21:05:10 +01:00
Felix Fontein
db8a6609de Fix release summary. 2023-11-06 21:04:45 +01:00
patchback[bot]
5be75b8e43 [PR #7464/03049893 backport][stable-8] fix vm removal in proxmox_pool_member.py (#7494)
fix vm removal in proxmox_pool_member.py (#7464)

* fix vm removal in proxmox_pool_member.py

in the original the vm doesn't get removed, always errors with "'Failed to delete a member (12345) from the pool TestPool: list.remove(x): x not in list'

* add changelog fragment

* fix linting errors in changelog

(cherry picked from commit 0304989392)

Co-authored-by: aungvari <12872375+aungvari@users.noreply.github.com>
2023-11-06 20:45:46 +01:00
patchback[bot]
71b1ae0aff [PR #7471/ab0b85d7 backport][stable-8] Redfish: Updated message handling for update operations to skip message objects with missing MessageId properties (#7492)
Redfish: Updated message handling for update operations to skip message objects with missing MessageId properties (#7471)

* Redfish: Updated message handling for update operations to skip message objects with missing MessageId properties

Signed-off-by: Mike Raineri <michael.raineri@dell.com>

* Update 7465-redfish-firmware-update-message-id-hardening.yml

---------

Signed-off-by: Mike Raineri <michael.raineri@dell.com>
(cherry picked from commit ab0b85d7d2)

Co-authored-by: Mike Raineri <mraineri@gmail.com>
2023-11-06 06:25:16 +01:00
patchback[bot]
9b2fa2cfd7 [PR #7480/74e941e4 backport][stable-8] Disable nomad tests (#7484)
Disable nomad tests (#7480)

Disable nomad tests.

(cherry picked from commit 74e941e432)

Co-authored-by: Felix Fontein <felix@fontein.de>
2023-11-04 14:01:15 +01:00
patchback[bot]
83193ffc1f [PR #7476/57e36d7d backport][stable-8] timezone tests: do not restore original timezone if it wasn't known (value 'n/a') (#7479)
timezone tests: do not restore original timezone if it wasn't known (value 'n/a') (#7476)

Do not restore original timezone if it wasn't known (value 'n/a').

(cherry picked from commit 57e36d7dc2)

Co-authored-by: Felix Fontein <felix@fontein.de>
2023-11-04 13:23:02 +01:00
Felix Fontein
4b955a3548 Prepare 8.0.1 release. 2023-11-04 12:18:42 +01:00
patchback[bot]
c7dbda3656 [PR #7467/a366318a backport][stable-8] [gitlab] Fix gitlab constants calls (#7474)
[gitlab] Fix gitlab constants calls (#7467)

fix: Fix gitlab constants calls

Co-authored-by: Arnaud Hatzenbuhler <arnaud.hatzenbuhler@conserto.pro>
(cherry picked from commit a366318ac6)

Co-authored-by: Arnaud Hatzenbuhler <arnaud.hatzenbuhler@gmail.com>
2023-11-04 09:31:49 +01:00
Felix Fontein
e98cf96499 Fix version number. 2023-11-02 13:13:50 +01:00
Felix Fontein
8d52dc3f1d Next expected release will be 8.0.1. 2023-11-01 09:19:18 +01:00
Felix Fontein
5f9ea0b7ac Release 8.0.0. 2023-11-01 08:34:14 +01:00
Felix Fontein
d125f5bee6 Main branches are stable-8 and stable-7; stable-6 runs more seldomly in CI.
(cherry picked from commit 6d0bcec1cb)
2023-11-01 08:10:31 +01:00
Felix Fontein
82c5970811 Prepare 8.0.0 release. 2023-11-01 08:09:07 +01:00
397 changed files with 17505 additions and 13262 deletions

View File

@@ -29,14 +29,14 @@ schedules:
always: true
branches:
include:
- stable-9
- stable-8
- stable-7
- cron: 0 11 * * 0
displayName: Weekly (old stable branches)
always: true
branches:
include:
- stable-7
- stable-6
variables:
- name: checkoutPath
@@ -53,7 +53,7 @@ variables:
resources:
containers:
- container: default
image: quay.io/ansible/azure-pipelines-test-container:6.0.0
image: quay.io/ansible/azure-pipelines-test-container:4.0.1
pool: Standard
@@ -73,19 +73,6 @@ stages:
- test: 3
- test: 4
- test: extra
- stage: Sanity_2_17
displayName: Sanity 2.17
dependsOn: []
jobs:
- template: templates/matrix.yml
parameters:
nameFormat: Test {0}
testFormat: 2.17/sanity/{0}
targets:
- test: 1
- test: 2
- test: 3
- test: 4
- stage: Sanity_2_16
displayName: Sanity 2.16
dependsOn: []
@@ -112,6 +99,19 @@ stages:
- test: 2
- test: 3
- test: 4
- stage: Sanity_2_14
displayName: Sanity 2.14
dependsOn: []
jobs:
- template: templates/matrix.yml
parameters:
nameFormat: Test {0}
testFormat: 2.14/sanity/{0}
targets:
- test: 1
- test: 2
- test: 3
- test: 4
### Units
- stage: Units_devel
displayName: Units devel
@@ -122,23 +122,12 @@ stages:
nameFormat: Python {0}
testFormat: devel/units/{0}/1
targets:
- test: 3.7
- test: 3.8
- test: 3.9
- test: '3.10'
- test: '3.11'
- test: '3.12'
- test: '3.13'
- stage: Units_2_17
displayName: Units 2.17
dependsOn: []
jobs:
- template: templates/matrix.yml
parameters:
nameFormat: Python {0}
testFormat: 2.17/units/{0}/1
targets:
- test: 3.7
- test: "3.12"
- stage: Units_2_16
displayName: Units 2.16
dependsOn: []
@@ -162,6 +151,16 @@ stages:
targets:
- test: 3.5
- test: "3.10"
- stage: Units_2_14
displayName: Units 2.14
dependsOn: []
jobs:
- template: templates/matrix.yml
parameters:
nameFormat: Python {0}
testFormat: 2.14/units/{0}/1
targets:
- test: 3.9
## Remote
- stage: Remote_devel_extra_vms
@@ -172,14 +171,12 @@ stages:
parameters:
testFormat: devel/{0}
targets:
- name: Alpine 3.20
test: alpine/3.20
# - name: Fedora 40
# test: fedora/40
- name: Alpine 3.19
test: alpine/3.19
# - name: Fedora 39
# test: fedora/39
- name: Ubuntu 22.04
test: ubuntu/22.04
- name: Ubuntu 24.04
test: ubuntu/24.04
groups:
- vm
- stage: Remote_devel
@@ -192,26 +189,10 @@ stages:
targets:
- name: macOS 14.3
test: macos/14.3
- name: RHEL 9.4
test: rhel/9.4
- name: FreeBSD 14.1
test: freebsd/14.1
groups:
- 1
- 2
- 3
- stage: Remote_2_17
displayName: Remote 2.17
dependsOn: []
jobs:
- template: templates/matrix.yml
parameters:
testFormat: 2.17/{0}
targets:
- name: FreeBSD 13.3
test: freebsd/13.3
- name: RHEL 9.3
test: rhel/9.3
- name: FreeBSD 13.3
test: freebsd/13.3
- name: FreeBSD 14.0
test: freebsd/14.0
groups:
@@ -232,8 +213,8 @@ stages:
test: rhel/9.2
- name: RHEL 8.8
test: rhel/8.8
# - name: FreeBSD 13.2
# test: freebsd/13.2
- name: FreeBSD 13.2
test: freebsd/13.2
groups:
- 1
- 2
@@ -260,6 +241,24 @@ stages:
- 1
- 2
- 3
- stage: Remote_2_14
displayName: Remote 2.14
dependsOn: []
jobs:
- template: templates/matrix.yml
parameters:
testFormat: 2.14/{0}
targets:
#- name: macOS 12.0
# test: macos/12.0
- name: RHEL 9.0
test: rhel/9.0
#- name: FreeBSD 12.4
# test: freebsd/12.4
groups:
- 1
- 2
- 3
### Docker
- stage: Docker_devel
@@ -269,33 +268,15 @@ stages:
- template: templates/matrix.yml
parameters:
testFormat: devel/linux/{0}
targets:
- name: Fedora 40
test: fedora40
- name: Alpine 3.20
test: alpine320
- name: Ubuntu 22.04
test: ubuntu2204
- name: Ubuntu 24.04
test: ubuntu2404
groups:
- 1
- 2
- 3
- stage: Docker_2_17
displayName: Docker 2.17
dependsOn: []
jobs:
- template: templates/matrix.yml
parameters:
testFormat: 2.17/linux/{0}
targets:
- name: Fedora 39
test: fedora39
- name: Alpine 3.19
test: alpine319
- name: Ubuntu 20.04
test: ubuntu2004
- name: Ubuntu 22.04
test: ubuntu2204
- name: Alpine 3.19
test: alpine319
groups:
- 1
- 2
@@ -334,6 +315,20 @@ stages:
- 1
- 2
- 3
- stage: Docker_2_14
displayName: Docker 2.14
dependsOn: []
jobs:
- template: templates/matrix.yml
parameters:
testFormat: 2.14/linux/{0}
targets:
- name: Alpine 3
test: alpine3
groups:
- 1
- 2
- 3
### Community Docker
- stage: Docker_community_devel
@@ -349,7 +344,7 @@ stages:
- name: Debian Bookworm
test: debian-bookworm/3.11
- name: ArchLinux
test: archlinux/3.12
test: archlinux/3.11
groups:
- 1
- 2
@@ -364,18 +359,6 @@ stages:
parameters:
nameFormat: Python {0}
testFormat: devel/generic/{0}/1
targets:
- test: '3.8'
- test: '3.11'
- test: '3.13'
- stage: Generic_2_17
displayName: Generic 2.17
dependsOn: []
jobs:
- template: templates/matrix.yml
parameters:
nameFormat: Python {0}
testFormat: 2.17/generic/{0}/1
targets:
- test: '3.7'
- test: '3.12'
@@ -401,32 +384,42 @@ stages:
testFormat: 2.15/generic/{0}/1
targets:
- test: '3.9'
- stage: Generic_2_14
displayName: Generic 2.14
dependsOn: []
jobs:
- template: templates/matrix.yml
parameters:
nameFormat: Python {0}
testFormat: 2.14/generic/{0}/1
targets:
- test: '3.10'
- stage: Summary
condition: succeededOrFailed()
dependsOn:
- Sanity_devel
- Sanity_2_17
- Sanity_2_16
- Sanity_2_15
- Sanity_2_14
- Units_devel
- Units_2_17
- Units_2_16
- Units_2_15
- Units_2_14
- Remote_devel_extra_vms
- Remote_devel
- Remote_2_17
- Remote_2_16
- Remote_2_15
- Remote_2_14
- Docker_devel
- Docker_2_17
- Docker_2_16
- Docker_2_15
- Docker_2_14
- Docker_community_devel
# Right now all generic tests are disabled. Uncomment when at least one of them is re-enabled.
# - Generic_devel
# - Generic_2_17
# - Generic_2_16
# - Generic_2_15
# - Generic_2_14
jobs:
- template: templates/coverage.yml

101
.github/BOTMETA.yml vendored
View File

@@ -33,8 +33,6 @@ files:
maintainers: $team_ansible_core
$becomes/pmrun.py:
maintainers: $team_ansible_core
$becomes/run0.py:
maintainers: konstruktoid
$becomes/sesu.py:
maintainers: nekonyuu
$becomes/sudosu.py:
@@ -91,8 +89,6 @@ files:
maintainers: ryancurrah
$callbacks/syslog_json.py:
maintainers: imjoseangel
$callbacks/timestamp.py:
maintainers: kurokobo
$callbacks/unixy.py:
labels: unixy
maintainers: akatch
@@ -121,8 +117,6 @@ files:
maintainers: $team_ansible_core
$doc_fragments/:
labels: docs_fragments
$doc_fragments/django.py:
maintainers: russoz
$doc_fragments/hpe3par.py:
labels: hpe3par
maintainers: farhan7500 gautamphegde
@@ -157,8 +151,6 @@ files:
$filters/jc.py:
maintainers: kellyjonbrazil
$filters/json_query.py: {}
$filters/keep_keys.py:
maintainers: vbotka
$filters/lists.py:
maintainers: cfiehe
$filters/lists_difference.yml:
@@ -172,12 +164,6 @@ files:
$filters/lists_union.yml:
maintainers: cfiehe
$filters/random_mac.py: {}
$filters/remove_keys.py:
maintainers: vbotka
$filters/replace_keys.py:
maintainers: vbotka
$filters/reveal_ansible_type.py:
maintainers: vbotka
$filters/time.py:
maintainers: resmo
$filters/to_days.yml:
@@ -308,12 +294,8 @@ files:
labels: module_utils
$module_utils/btrfs.py:
maintainers: gnfzdz
$module_utils/cmd_runner.py:
maintainers: russoz
$module_utils/deps.py:
maintainers: russoz
$module_utils/django.py:
maintainers: russoz
$module_utils/gconftool2.py:
labels: gconftool2
maintainers: russoz
@@ -357,8 +339,6 @@ files:
$module_utils/pipx.py:
labels: pipx
maintainers: russoz
$module_utils/python_runner.py:
maintainers: russoz
$module_utils/puppet.py:
labels: puppet
maintainers: russoz
@@ -510,12 +490,6 @@ files:
maintainers: tintoy
$modules/discord.py:
maintainers: cwollinger
$modules/django_check.py:
maintainers: russoz
$modules/django_command.py:
maintainers: russoz
$modules/django_createcachetable.py:
maintainers: russoz
$modules/django_manage.py:
ignore: scottanderson42 tastychutney
labels: django_manage
@@ -558,6 +532,8 @@ files:
maintainers: $team_flatpak
$modules/flatpak_remote.py:
maintainers: $team_flatpak
$modules/flowdock.py:
ignore: mcodd
$modules/gandi_livedns.py:
maintainers: gthiemonge
$modules/gconftool2.py:
@@ -804,8 +780,6 @@ files:
maintainers: laurpaum
$modules/keycloak_component_info.py:
maintainers: desand01
$modules/keycloak_client_rolescope.py:
maintainers: desand01
$modules/keycloak_user_rolemapping.py:
maintainers: bratwurzt
$modules/keycloak_realm_rolemapping.py:
@@ -1120,6 +1094,46 @@ files:
$modules/python_requirements_info.py:
ignore: ryansb
maintainers: willthames
$modules/rax:
ignore: ryansb sivel
$modules/rax.py:
maintainers: omgjlk sivel
$modules/rax_cbs.py:
maintainers: claco
$modules/rax_cbs_attachments.py:
maintainers: claco
$modules/rax_cdb.py:
maintainers: jails
$modules/rax_cdb_database.py:
maintainers: jails
$modules/rax_cdb_user.py:
maintainers: jails
$modules/rax_clb.py:
maintainers: claco
$modules/rax_clb_nodes.py:
maintainers: neuroid
$modules/rax_clb_ssl.py:
maintainers: smashwilson
$modules/rax_files.py:
maintainers: angstwad
$modules/rax_files_objects.py:
maintainers: angstwad
$modules/rax_identity.py:
maintainers: claco
$modules/rax_mon_alarm.py:
maintainers: smashwilson
$modules/rax_mon_check.py:
maintainers: smashwilson
$modules/rax_mon_entity.py:
maintainers: smashwilson
$modules/rax_mon_notification.py:
maintainers: smashwilson
$modules/rax_mon_notification_plan.py:
maintainers: smashwilson
$modules/rax_network.py:
maintainers: claco omgjlk
$modules/rax_queue.py:
maintainers: claco
$modules/read_csv.py:
maintainers: dagwieers
$modules/redfish_:
@@ -1284,6 +1298,8 @@ files:
maintainers: farhan7500 gautamphegde
$modules/ssh_config.py:
maintainers: gaqzi Akasurde
$modules/stackdriver.py:
maintainers: bwhaley
$modules/stacki_host.py:
labels: stacki_host
maintainers: bsanders bbyhuy
@@ -1376,6 +1392,8 @@ files:
maintainers: $team_wdc
$modules/wdc_redfish_info.py:
maintainers: $team_wdc
$modules/webfaction_:
maintainers: quentinsf
$modules/xattr.py:
labels: xattr
maintainers: bcoca
@@ -1427,16 +1445,8 @@ files:
ignore: matze
labels: zypper
maintainers: $team_suse
$plugin_utils/ansible_type.py:
maintainers: vbotka
$plugin_utils/keys_filter.py:
maintainers: vbotka
$plugin_utils/unsafe.py:
maintainers: felixfontein
$tests/a_module.py:
maintainers: felixfontein
$tests/ansible_type.py:
maintainers: vbotka
$tests/fqdn_valid.py:
maintainers: vbotka
#########################
@@ -1450,14 +1460,6 @@ files:
maintainers: felixfontein
docs/docsite/rst/filter_guide_abstract_informations_lists_helper.rst:
maintainers: cfiehe
docs/docsite/rst/filter_guide-abstract_informations-lists_of_dictionaries-keep_keys.rst:
maintainers: vbotka
docs/docsite/rst/filter_guide-abstract_informations-lists_of_dictionaries-remove_keys.rst:
maintainers: vbotka
docs/docsite/rst/filter_guide-abstract_informations-lists_of_dictionaries-replace_keys.rst:
maintainers: vbotka
docs/docsite/rst/filter_guide-abstract_informations-lists_of_dictionaries.rst:
maintainers: vbotka
docs/docsite/rst/filter_guide_abstract_informations_merging_lists_of_dictionaries.rst:
maintainers: vbotka
docs/docsite/rst/filter_guide_conversions.rst:
@@ -1474,18 +1476,12 @@ files:
maintainers: ericzolf
docs/docsite/rst/guide_alicloud.rst:
maintainers: xiaozhu36
docs/docsite/rst/guide_cmdrunner.rst:
maintainers: russoz
docs/docsite/rst/guide_deps.rst:
maintainers: russoz
docs/docsite/rst/guide_online.rst:
maintainers: remyleone
docs/docsite/rst/guide_packet.rst:
maintainers: baldwinSPC nurfet-becirevic t0mk teebes
docs/docsite/rst/guide_scaleway.rst:
maintainers: $team_scaleway
docs/docsite/rst/guide_vardict.rst:
maintainers: russoz
docs/docsite/rst/test_guide.rst:
maintainers: felixfontein
#########################
@@ -1505,6 +1501,7 @@ macros:
becomes: plugins/become
caches: plugins/cache
callbacks: plugins/callback
cliconfs: plugins/cliconf
connections: plugins/connection
doc_fragments: plugins/doc_fragments
filters: plugins/filter
@@ -1512,12 +1509,12 @@ macros:
lookups: plugins/lookup
module_utils: plugins/module_utils
modules: plugins/modules
plugin_utils: plugins/plugin_utils
terminals: plugins/terminal
tests: plugins/test
team_ansible_core:
team_aix: MorrisA bcoca d-little flynn1973 gforster kairoaraujo marvin-sinister mator molekuul ramooncamacho wtcross
team_bsd: JoergFiedler MacLemon bcoca dch jasperla mekanix opoplawski overhacked tuxillo
team_consul: sgargan apollo13 Ilgmi
team_consul: sgargan apollo13
team_cyberark_conjur: jvanderhoof ryanprior
team_e_spirit: MatrixCrawler getjack
team_flatpak: JayKayy oolongbrothers

View File

@@ -30,7 +30,6 @@ jobs:
matrix:
ansible:
- '2.13'
- '2.14'
# 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
@@ -42,7 +41,6 @@ jobs:
uses: felixfontein/ansible-test-gh-action@main
with:
ansible-core-version: stable-${{ matrix.ansible }}
codecov-token: ${{ secrets.CODECOV_TOKEN }}
coverage: ${{ github.event_name == 'schedule' && 'always' || 'never' }}
pull-request-change-detection: 'true'
testing-type: sanity
@@ -74,8 +72,6 @@ jobs:
python: '2.7'
- ansible: '2.13'
python: '3.8'
- ansible: '2.14'
python: '3.9'
steps:
- name: >-
@@ -84,7 +80,6 @@ jobs:
uses: felixfontein/ansible-test-gh-action@main
with:
ansible-core-version: stable-${{ matrix.ansible }}
codecov-token: ${{ secrets.CODECOV_TOKEN }}
coverage: ${{ github.event_name == 'schedule' && 'always' || 'never' }}
pre-test-cmd: >-
mkdir -p ../../ansible
@@ -153,29 +148,11 @@ jobs:
docker: alpine3
python: ''
target: azp/posix/3/
# 2.14
- ansible: '2.14'
docker: alpine3
python: ''
target: azp/posix/1/
- ansible: '2.14'
docker: alpine3
python: ''
target: azp/posix/2/
- ansible: '2.14'
docker: alpine3
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/
# Right now all generic tests are disabled. Uncomment when at least one of them is re-enabled.
# - ansible: '2.14'
# docker: default
# python: '3.10'
# target: azp/generic/1/
steps:
- name: >-
@@ -185,7 +162,6 @@ jobs:
uses: felixfontein/ansible-test-gh-action@main
with:
ansible-core-version: stable-${{ matrix.ansible }}
codecov-token: ${{ secrets.CODECOV_TOKEN }}
coverage: ${{ github.event_name == 'schedule' && 'always' || 'never' }}
docker-image: ${{ matrix.docker }}
integration-continue-on-error: 'false'

View File

@@ -27,4 +27,4 @@ jobs:
ref: ${{ github.event.pull_request.head.sha || '' }}
- name: REUSE Compliance Check
uses: fsfe/reuse-action@v4
uses: fsfe/reuse-action@v3

4
.gitignore vendored
View File

@@ -512,7 +512,3 @@ $RECYCLE.BIN/
# Integration tests cloud configs
tests/integration/cloud-config-*.ini
# VSCode specific extensions
.vscode/settings.json

File diff suppressed because it is too large Load Diff

View File

@@ -4,9 +4,54 @@ Community General Release Notes
.. contents:: Topics
This changelog describes changes after version 8.0.0.
This changelog describes changes after version 7.0.0.
v9.2.0
v8.5.0
======
Release Summary
---------------
Regular feature and bugfix release with security fixes.
Minor Changes
-------------
- bitwarden lookup plugin - allows to fetch all records of a given collection ID, by allowing to pass an empty value for ``search_value`` when ``collection_id`` is provided (https://github.com/ansible-collections/community.general/pull/8013).
- icinga2 inventory plugin - adds new parameter ``group_by_hostgroups`` in order to make grouping by Icinga2 hostgroups optional (https://github.com/ansible-collections/community.general/pull/7998).
- ini_file - support optional spaces between section names and their surrounding brackets (https://github.com/ansible-collections/community.general/pull/8075).
- java_cert - enable ``owner``, ``group``, ``mode``, and other generic file arguments (https://github.com/ansible-collections/community.general/pull/8116).
- ldap_attrs - module now supports diff mode, showing which attributes are changed within an operation (https://github.com/ansible-collections/community.general/pull/8073).
- lxd_container - uses ``/1.0/instances`` API endpoint, if available. Falls back to ``/1.0/containers`` or ``/1.0/virtual-machines``. Fixes issue when using Incus or LXD 5.19 due to migrating to ``/1.0/instances`` endpoint (https://github.com/ansible-collections/community.general/pull/7980).
- nmcli - allow setting ``MTU`` for ``bond-slave`` interface types (https://github.com/ansible-collections/community.general/pull/8118).
- proxmox - adds ``startup`` parameters to configure startup order, startup delay and shutdown delay (https://github.com/ansible-collections/community.general/pull/8038).
- revbitspss lookup plugin - removed a redundant unicode prefix. The prefix was not necessary for Python 3 and has been cleaned up to streamline the code (https://github.com/ansible-collections/community.general/pull/8087).
Security Fixes
--------------
- cobbler, gitlab_runners, icinga2, linode, lxd, nmap, online, opennebula, proxmox, scaleway, stackpath_compute, virtualbox, and xen_orchestra inventory plugin - make sure all data received from the remote servers is marked as unsafe, so remote code execution by obtaining texts that can be evaluated as templates is not possible (https://www.die-welt.net/2024/03/remote-code-execution-in-ansible-dynamic-inventory-plugins/, https://github.com/ansible-collections/community.general/pull/8098).
Bugfixes
--------
- aix_filesystem - fix issue with empty list items in crfs logic and option order (https://github.com/ansible-collections/community.general/pull/8052).
- consul_token - fix token creation without ``accessor_id`` (https://github.com/ansible-collections/community.general/pull/8091).
- homebrew - error returned from brew command was ignored and tried to parse empty JSON. Fix now checks for an error and raises it to give accurate error message to users (https://github.com/ansible-collections/community.general/issues/8047).
- ipa_hbacrule - the module uses a string for ``ipaenabledflag`` for new FreeIPA versions while the returned value is a boolean (https://github.com/ansible-collections/community.general/pull/7880).
- ipa_sudorule - the module uses a string for ``ipaenabledflag`` for new FreeIPA versions while the returned value is a boolean (https://github.com/ansible-collections/community.general/pull/7880).
- iptables_state - fix idempotency issues when restoring incomplete iptables dumps (https://github.com/ansible-collections/community.general/issues/8029).
- linode inventory plugin - add descriptive error message for linode inventory plugin (https://github.com/ansible-collections/community.general/pull/8133).
- pacemaker_cluster - actually implement check mode, which the module claims to support. This means that until now the module also did changes in check mode (https://github.com/ansible-collections/community.general/pull/8081).
- pam_limits - when the file does not exist, do not create it in check mode (https://github.com/ansible-collections/community.general/issues/8050, https://github.com/ansible-collections/community.general/pull/8057).
- proxmox_kvm - fixed status check getting from node-specific API endpoint (https://github.com/ansible-collections/community.general/issues/7817).
New Modules
-----------
- usb_facts - Allows listing information about USB devices
v8.4.0
======
Release Summary
@@ -17,155 +62,62 @@ Regular bugfix and feature release.
Minor Changes
-------------
- CmdRunner module utils - the parameter ``force_lang`` now supports the special value ``auto`` which will automatically try and determine the best parsable locale in the system (https://github.com/ansible-collections/community.general/pull/8517).
- proxmox - add ``disk_volume`` and ``mount_volumes`` keys for better readability (https://github.com/ansible-collections/community.general/pull/8542).
- proxmox - translate the old ``disk`` and ``mounts`` keys to the new handling internally (https://github.com/ansible-collections/community.general/pull/8542).
- proxmox_template - small refactor in logic for determining whether a template exists or not (https://github.com/ansible-collections/community.general/pull/8516).
- redfish_* modules - adds ``ciphers`` option for custom cipher selection (https://github.com/ansible-collections/community.general/pull/8533).
- sudosu become plugin - added an option (``alt_method``) to enhance compatibility with more versions of ``su`` (https://github.com/ansible-collections/community.general/pull/8214).
- virtualbox inventory plugin - expose a new parameter ``enable_advanced_group_parsing`` to change how the VirtualBox dynamic inventory parses VM groups (https://github.com/ansible-collections/community.general/issues/8508, https://github.com/ansible-collections/community.general/pull/8510).
- wdc_redfish_command - minor change to handle upgrade file for Redfish WD platforms (https://github.com/ansible-collections/community.general/pull/8444).
- bitwarden lookup plugin - add ``bw_session`` option, to pass session key instead of reading from env (https://github.com/ansible-collections/community.general/pull/7994).
- gitlab_deploy_key, gitlab_group_members, gitlab_group_variable, gitlab_hook, gitlab_instance_variable, gitlab_project_badge, gitlab_project_variable, gitlab_user - improve API pagination and compatibility with different versions of ``python-gitlab`` (https://github.com/ansible-collections/community.general/pull/7790).
- gitlab_hook - adds ``releases_events`` parameter for supporting Releases events triggers on GitLab hooks (https://github.com/ansible-collections/community.general/pull/7956).
- icinga2 inventory plugin - add Jinja2 templating support to ``url``, ``user``, and ``password`` paramenters (https://github.com/ansible-collections/community.general/issues/7074, https://github.com/ansible-collections/community.general/pull/7996).
- mssql_script - adds transactional (rollback/commit) support via optional boolean param ``transaction`` (https://github.com/ansible-collections/community.general/pull/7976).
- proxmox_kvm - add parameter ``update_unsafe`` to avoid limitations when updating dangerous values (https://github.com/ansible-collections/community.general/pull/7843).
- redfish_config - add command ``SetServiceIdentification`` to set service identification (https://github.com/ansible-collections/community.general/issues/7916).
- sudoers - add support for the ``NOEXEC`` tag in sudoers rules (https://github.com/ansible-collections/community.general/pull/7983).
- terraform - fix ``diff_mode`` in state ``absent`` and when terraform ``resource_changes`` does not exist (https://github.com/ansible-collections/community.general/pull/7963).
Bugfixes
--------
- bitwarden lookup plugin - fix ``KeyError`` in ``search_field`` (https://github.com/ansible-collections/community.general/issues/8549, https://github.com/ansible-collections/community.general/pull/8557).
- keycloak_clientscope - remove IDs from clientscope and its protocol mappers on comparison for changed check (https://github.com/ansible-collections/community.general/pull/8545).
- nsupdate - fix 'index out of range' error when changing NS records by falling back to authority section of the response (https://github.com/ansible-collections/community.general/issues/8612, https://github.com/ansible-collections/community.general/pull/8614).
- proxmox - fix idempotency on creation of mount volumes using Proxmox' special ``<storage>:<size>`` syntax (https://github.com/ansible-collections/community.general/issues/8407, https://github.com/ansible-collections/community.general/pull/8542).
- redfish_utils module utils - do not fail when language is not exactly "en" (https://github.com/ansible-collections/community.general/pull/8613).
- cargo - fix idempotency issues when using a custom installation path for packages (using the ``--path`` parameter). The initial installation runs fine, but subsequent runs use the ``get_installed()`` function which did not check the given installation location, before running ``cargo install``. This resulted in a false ``changed`` state. Also the removal of packeges using ``state: absent`` failed, as the installation check did not use the given parameter (https://github.com/ansible-collections/community.general/pull/7970).
- gitlab_issue - fix behavior to search GitLab issue, using ``search`` keyword instead of ``title`` (https://github.com/ansible-collections/community.general/issues/7846).
- gitlab_runner - fix pagination when checking for existing runners (https://github.com/ansible-collections/community.general/pull/7790).
- keycloak_client - fixes issue when metadata is provided in desired state when task is in check mode (https://github.com/ansible-collections/community.general/issues/1226, https://github.com/ansible-collections/community.general/pull/7881).
- modprobe - listing modules files or modprobe files could trigger a FileNotFoundError if ``/etc/modprobe.d`` or ``/etc/modules-load.d`` did not exist. Relevant functions now return empty lists if the directories do not exist to avoid crashing the module (https://github.com/ansible-collections/community.general/issues/7717).
- onepassword lookup plugin - failed for fields that were in sections and had uppercase letters in the label/ID. Field lookups are now case insensitive in all cases (https://github.com/ansible-collections/community.general/pull/7919).
- pkgin - pkgin (pkgsrc package manager used by SmartOS) raises erratic exceptions and spurious ``changed=true`` (https://github.com/ansible-collections/community.general/pull/7971).
- redfish_info - allow for a GET operation invoked by ``GetUpdateStatus`` to allow for an empty response body for cases where a service returns 204 No Content (https://github.com/ansible-collections/community.general/issues/8003).
- redfish_info - correct uncaught exception when attempting to retrieve ``Chassis`` information (https://github.com/ansible-collections/community.general/pull/7952).
New Plugins
-----------
Filter
~~~~~~
Callback
~~~~~~~~
- community.general.reveal_ansible_type - Return input type.
Test
~~~~
- community.general.ansible_type - Validate input type.
v9.1.0
======
Release Summary
---------------
Regular feature and bugfix release.
Minor Changes
-------------
- CmdRunner module util - argument formats can be specified as plain functions without calling ``cmd_runner_fmt.as_func()`` (https://github.com/ansible-collections/community.general/pull/8479).
- ansible_galaxy_install - add upgrade feature (https://github.com/ansible-collections/community.general/pull/8431, https://github.com/ansible-collections/community.general/issues/8351).
- cargo - add option ``directory``, which allows source directory to be specified (https://github.com/ansible-collections/community.general/pull/8480).
- cmd_runner module utils - add decorator ``cmd_runner_fmt.stack`` (https://github.com/ansible-collections/community.general/pull/8415).
- cmd_runner_fmt module utils - simplify implementation of ``cmd_runner_fmt.as_bool_not()`` (https://github.com/ansible-collections/community.general/pull/8512).
- ipa_dnsrecord - adds ``SSHFP`` record type for managing SSH fingerprints in FreeIPA DNS (https://github.com/ansible-collections/community.general/pull/8404).
- keycloak_client - assign auth flow by name (https://github.com/ansible-collections/community.general/pull/8428).
- openbsd_pkg - adds diff support to show changes in installed package list. This does not yet work for check mode (https://github.com/ansible-collections/community.general/pull/8402).
- proxmox - allow specification of the API port when using proxmox_* (https://github.com/ansible-collections/community.general/issues/8440, https://github.com/ansible-collections/community.general/pull/8441).
- proxmox_vm_info - add ``network`` option to retrieve current network information (https://github.com/ansible-collections/community.general/pull/8471).
- redfish_command - add ``wait`` and ``wait_timeout`` options to allow a user to block a command until a service is accessible after performing the requested command (https://github.com/ansible-collections/community.general/issues/8051, https://github.com/ansible-collections/community.general/pull/8434).
- redfish_info - add command ``CheckAvailability`` to check if a service is accessible (https://github.com/ansible-collections/community.general/issues/8051, https://github.com/ansible-collections/community.general/pull/8434).
- redis_info - adds support for getting cluster info (https://github.com/ansible-collections/community.general/pull/8464).
Deprecated Features
-------------------
- CmdRunner module util - setting the value of the ``ignore_none`` parameter within a ``CmdRunner`` context is deprecated and that feature should be removed in community.general 12.0.0 (https://github.com/ansible-collections/community.general/pull/8479).
- git_config - the ``list_all`` option has been deprecated and will be removed in community.general 11.0.0. Use the ``community.general.git_config_info`` module instead (https://github.com/ansible-collections/community.general/pull/8453).
- git_config - using ``state=present`` without providing ``value`` is deprecated and will be disallowed in community.general 11.0.0. Use the ``community.general.git_config_info`` module instead to read a value (https://github.com/ansible-collections/community.general/pull/8453).
Bugfixes
--------
- git_config - fix behavior of ``state=absent`` if ``value`` is present (https://github.com/ansible-collections/community.general/issues/8436, https://github.com/ansible-collections/community.general/pull/8452).
- keycloak_realm - add normalizations for ``attributes`` and ``protocol_mappers`` (https://github.com/ansible-collections/community.general/pull/8496).
- launched - correctly report changed status in check mode (https://github.com/ansible-collections/community.general/pull/8406).
- opennebula inventory plugin - fix invalid reference to IP when inventory runs against NICs with no IPv4 address (https://github.com/ansible-collections/community.general/pull/8489).
- opentelemetry callback - do not save the JSON response when using the ``ansible.builtin.uri`` module (https://github.com/ansible-collections/community.general/pull/8430).
- opentelemetry callback - do not save the content response when using the ``ansible.builtin.slurp`` module (https://github.com/ansible-collections/community.general/pull/8430).
- paman - do not fail if an empty list of packages has been provided and there is nothing to do (https://github.com/ansible-collections/community.general/pull/8514).
Known Issues
------------
- homectl - the module does not work under Python 3.13 or newer, since it relies on the removed ``crypt`` standard library module (https://github.com/ansible-collections/community.general/issues/4691, https://github.com/ansible-collections/community.general/pull/8497).
- udm_user - the module does not work under Python 3.13 or newer, since it relies on the removed ``crypt`` standard library module (https://github.com/ansible-collections/community.general/issues/4690, https://github.com/ansible-collections/community.general/pull/8497).
New Plugins
-----------
- default_without_diff - The default ansible callback without diff output
Filter
~~~~~~
- community.general.keep_keys - Keep specific keys from dictionaries in a list.
- community.general.remove_keys - Remove specific keys from dictionaries in a list.
- community.general.replace_keys - Replace specific keys in a list of dictionaries.
- lists_difference - Difference of lists with a predictive order
- lists_intersect - Intersection of lists with a predictive order
- lists_symmetric_difference - Symmetric Difference of lists with a predictive order
- lists_union - Union of lists with a predictive order
New Modules
-----------
- community.general.consul_agent_check - Add, modify, and delete checks within a consul cluster.
- community.general.consul_agent_service - Add, modify and delete services within a consul cluster.
- community.general.django_check - Wrapper for C(django-admin check).
- community.general.django_createcachetable - Wrapper for C(django-admin createcachetable).
- gitlab_group_access_token - Manages GitLab group access tokens
- gitlab_project_access_token - Manages GitLab project access tokens
v9.0.1
v8.3.0
======
Release Summary
---------------
Bugfix release for inclusion in Ansible 10.0.0rc1.
Regular bugfix and feature release.
Minor Changes
-------------
- ansible_galaxy_install - minor refactor in the module (https://github.com/ansible-collections/community.general/pull/8413).
Bugfixes
--------
- cpanm - use new ``VarDict`` to prevent deprecation warning (https://github.com/ansible-collections/community.general/issues/8410, https://github.com/ansible-collections/community.general/pull/8411).
- django module utils - use new ``VarDict`` to prevent deprecation warning (https://github.com/ansible-collections/community.general/issues/8410, https://github.com/ansible-collections/community.general/pull/8411).
- gconftool2_info - use new ``VarDict`` to prevent deprecation warning (https://github.com/ansible-collections/community.general/issues/8410, https://github.com/ansible-collections/community.general/pull/8411).
- homebrew - do not fail when brew prints warnings (https://github.com/ansible-collections/community.general/pull/8406, https://github.com/ansible-collections/community.general/issues/7044).
- hponcfg - use new ``VarDict`` to prevent deprecation warning (https://github.com/ansible-collections/community.general/issues/8410, https://github.com/ansible-collections/community.general/pull/8411).
- kernel_blacklist - use new ``VarDict`` to prevent deprecation warning (https://github.com/ansible-collections/community.general/issues/8410, https://github.com/ansible-collections/community.general/pull/8411).
- keycloak_client - fix TypeError when sanitizing the ``saml.signing.private.key`` attribute in the module's diff or state output. The ``sanitize_cr`` function expected a dict where in some cases a list might occur (https://github.com/ansible-collections/community.general/pull/8403).
- locale_gen - use new ``VarDict`` to prevent deprecation warning (https://github.com/ansible-collections/community.general/issues/8410, https://github.com/ansible-collections/community.general/pull/8411).
- mksysb - use new ``VarDict`` to prevent deprecation warning (https://github.com/ansible-collections/community.general/issues/8410, https://github.com/ansible-collections/community.general/pull/8411).
- pipx_info - use new ``VarDict`` to prevent deprecation warning (https://github.com/ansible-collections/community.general/issues/8410, https://github.com/ansible-collections/community.general/pull/8411).
- snap - use new ``VarDict`` to prevent deprecation warning (https://github.com/ansible-collections/community.general/issues/8410, https://github.com/ansible-collections/community.general/pull/8411).
- snap_alias - use new ``VarDict`` to prevent deprecation warning (https://github.com/ansible-collections/community.general/issues/8410, https://github.com/ansible-collections/community.general/pull/8411).
v9.0.0
======
Release Summary
---------------
This is release 9.0.0 of ``community.general``, released on 2024-05-20.
Minor Changes
-------------
- PythonRunner module utils - specialisation of ``CmdRunner`` to execute Python scripts (https://github.com/ansible-collections/community.general/pull/8289).
- Use offset-aware ``datetime.datetime`` objects (with timezone UTC) instead of offset-naive UTC timestamps, which are deprecated in Python 3.12 (https://github.com/ansible-collections/community.general/pull/8222).
- aix_lvol - refactor module to pass list of arguments to ``module.run_command()`` instead of relying on interpretation by a shell (https://github.com/ansible-collections/community.general/pull/8264).
- apt_rpm - add new states ``latest`` and ``present_not_latest``. The value ``latest`` is equivalent to the current behavior of ``present``, which will upgrade a package if a newer version exists. ``present_not_latest`` does what most users would expect ``present`` to do: it does not upgrade if the package is already installed. The current behavior of ``present`` will be deprecated in a later version, and eventually changed to that of ``present_not_latest`` (https://github.com/ansible-collections/community.general/issues/8217, https://github.com/ansible-collections/community.general/pull/8247).
- apt_rpm - refactor module to pass list of arguments to ``module.run_command()`` instead of relying on interpretation by a shell (https://github.com/ansible-collections/community.general/pull/8264).
- bitwarden lookup plugin - add ``bw_session`` option, to pass session key instead of reading from env (https://github.com/ansible-collections/community.general/pull/7994).
- bitwarden lookup plugin - add support to filter by organization ID (https://github.com/ansible-collections/community.general/pull/8188).
- bitwarden lookup plugin - allows to fetch all records of a given collection ID, by allowing to pass an empty value for ``search_value`` when ``collection_id`` is provided (https://github.com/ansible-collections/community.general/pull/8013).
- bitwarden lookup plugin - when looking for items using an item ID, the item is now accessed directly with ``bw get item`` instead of searching through all items. This doubles the lookup speed (https://github.com/ansible-collections/community.general/pull/7468).
- btrfs_subvolume - refactor module to pass list of arguments to ``module.run_command()`` instead of relying on interpretation by a shell (https://github.com/ansible-collections/community.general/pull/8264).
- cmd_runner module_utils - add validation for minimum and maximum length in the value passed to ``cmd_runner_fmt.as_list()`` (https://github.com/ansible-collections/community.general/pull/8288).
- consul_auth_method, consul_binding_rule, consul_policy, consul_role, consul_session, consul_token - added action group ``community.general.consul`` (https://github.com/ansible-collections/community.general/pull/7897).
- consul_policy - added support for diff and check mode (https://github.com/ansible-collections/community.general/pull/7878).
- consul_policy, consul_role, consul_session - removed dependency on ``requests`` and factored out common parts (https://github.com/ansible-collections/community.general/pull/7826, https://github.com/ansible-collections/community.general/pull/7878).
@@ -173,289 +125,532 @@ Minor Changes
- consul_role - ``service_identities`` now expects a ``service_name`` option to match the Consul API, the old ``name`` is still supported as alias (https://github.com/ansible-collections/community.general/pull/7878).
- consul_role - added support for diff mode (https://github.com/ansible-collections/community.general/pull/7878).
- consul_role - added support for templated policies (https://github.com/ansible-collections/community.general/pull/7878).
- redfish_info - add command ``GetServiceIdentification`` to get service identification (https://github.com/ansible-collections/community.general/issues/7882).
- terraform - add support for ``diff_mode`` for terraform resource_changes (https://github.com/ansible-collections/community.general/pull/7896).
Deprecated Features
-------------------
- consul_acl - the module has been deprecated and will be removed in community.general 10.0.0. ``consul_token`` and ``consul_policy`` can be used instead (https://github.com/ansible-collections/community.general/pull/7901).
Bugfixes
--------
- homebrew - detect already installed formulae and casks using JSON output from ``brew info`` (https://github.com/ansible-collections/community.general/issues/864).
- incus connection plugin - treats ``inventory_hostname`` as a variable instead of a literal in remote connections (https://github.com/ansible-collections/community.general/issues/7874).
- ipa_otptoken - the module expect ``ipatokendisabled`` as string but the ``ipatokendisabled`` value is returned as a boolean (https://github.com/ansible-collections/community.general/pull/7795).
- ldap - previously the order number (if present) was expected to follow an equals sign in the DN. This makes it so the order number string is identified correctly anywhere within the DN (https://github.com/ansible-collections/community.general/issues/7646).
- mssql_script - make the module work with Python 2 (https://github.com/ansible-collections/community.general/issues/7818, https://github.com/ansible-collections/community.general/pull/7821).
- nmcli - fix ``connection.slave-type`` wired to ``bond`` and not with parameter ``slave_type`` in case of connection type ``wifi`` (https://github.com/ansible-collections/community.general/issues/7389).
- proxmox - fix updating a container config if the setting does not already exist (https://github.com/ansible-collections/community.general/pull/7872).
New Modules
-----------
- consul_acl_bootstrap - Bootstrap ACLs in Consul
- consul_auth_method - Manipulate Consul auth methods
- consul_binding_rule - Manipulate Consul binding rules
- consul_token - Manipulate Consul tokens
- gitlab_label - Creates/updates/deletes GitLab Labels belonging to project or group.
- gitlab_milestone - Creates/updates/deletes GitLab Milestones belonging to project or group
v8.2.0
======
Release Summary
---------------
Regular bugfix and feature release.
Minor Changes
-------------
- ipa_dnsrecord - adds ability to manage NS record types (https://github.com/ansible-collections/community.general/pull/7737).
- ipa_pwpolicy - refactor module and exchange a sequence ``if`` statements with a ``for`` loop (https://github.com/ansible-collections/community.general/pull/7723).
- ipa_pwpolicy - update module to support ``maxrepeat``, ``maxsequence``, ``dictcheck``, ``usercheck``, ``gracelimit`` parameters in FreeIPA password policies (https://github.com/ansible-collections/community.general/pull/7723).
- keycloak_realm_key - the ``config.algorithm`` option now supports 8 additional key algorithms (https://github.com/ansible-collections/community.general/pull/7698).
- keycloak_realm_key - the ``config.certificate`` option value is no longer defined with ``no_log=True`` (https://github.com/ansible-collections/community.general/pull/7698).
- keycloak_realm_key - the ``provider_id`` option now supports RSA encryption key usage (value ``rsa-enc``) (https://github.com/ansible-collections/community.general/pull/7698).
- keycloak_user_federation - allow custom user storage providers to be set through ``provider_id`` (https://github.com/ansible-collections/community.general/pull/7789).
- mail - add ``Message-ID`` header; which is required by some mail servers (https://github.com/ansible-collections/community.general/pull/7740).
- mail module, mail callback plugin - allow to configure the domain name of the Message-ID header with a new ``message_id_domain`` option (https://github.com/ansible-collections/community.general/pull/7765).
- ssh_config - new feature to set ``AddKeysToAgent`` option to ``yes`` or ``no`` (https://github.com/ansible-collections/community.general/pull/7703).
- ssh_config - new feature to set ``IdentitiesOnly`` option to ``yes`` or ``no`` (https://github.com/ansible-collections/community.general/pull/7704).
- xcc_redfish_command - added support for raw POSTs (``command=PostResource`` in ``category=Raw``) without a specific action info (https://github.com/ansible-collections/community.general/pull/7746).
Bugfixes
--------
- keycloak_identity_provider - ``mappers`` processing was not idempotent if the mappers configuration list had not been sorted by name (in ascending order). Fix resolves the issue by sorting mappers in the desired state using the same key which is used for obtaining existing state (https://github.com/ansible-collections/community.general/pull/7418).
- keycloak_identity_provider - it was not possible to reconfigure (add, remove) ``mappers`` once they were created initially. Removal was ignored, adding new ones resulted in dropping the pre-existing unmodified mappers. Fix resolves the issue by supplying correct input to the internal update call (https://github.com/ansible-collections/community.general/pull/7418).
- keycloak_user - when ``force`` is set, but user does not exist, do not try to delete it (https://github.com/ansible-collections/community.general/pull/7696).
- proxmox_kvm - running ``state=template`` will first check whether VM is already a template (https://github.com/ansible-collections/community.general/pull/7792).
- statusio_maintenance - fix error caused by incorrectly formed API data payload. Was raising "Failed to create maintenance HTTP Error 400 Bad Request" caused by bad data type for date/time and deprecated dict keys (https://github.com/ansible-collections/community.general/pull/7754).
New Plugins
-----------
Connection
~~~~~~~~~~
- incus - Run tasks in Incus instances via the Incus CLI.
Filter
~~~~~~
- from_ini - Converts INI text input into a dictionary
- to_ini - Converts a dictionary to the INI file format
Lookup
~~~~~~
- github_app_access_token - Obtain short-lived Github App Access tokens
New Modules
-----------
- dnf_config_manager - Enable or disable dnf repositories using config-manager
- keycloak_component_info - Retrive component info in Keycloak
- keycloak_realm_rolemapping - Allows administration of Keycloak realm role mappings into groups with the Keycloak API
- proxmox_node_info - Retrieve information about one or more Proxmox VE nodes
- proxmox_storage_contents_info - List content from a Proxmox VE storage
v8.1.0
======
Release Summary
---------------
Regular bugfix and feature release.
Minor Changes
-------------
- bitwarden lookup plugin - when looking for items using an item ID, the item is now accessed directly with ``bw get item`` instead of searching through all items. This doubles the lookup speed (https://github.com/ansible-collections/community.general/pull/7468).
- elastic callback plugin - close elastic client to not leak resources (https://github.com/ansible-collections/community.general/pull/7517).
- filesystem - add bcachefs support (https://github.com/ansible-collections/community.general/pull/8126).
- gandi_livedns - adds support for personal access tokens (https://github.com/ansible-collections/community.general/issues/7639, https://github.com/ansible-collections/community.general/pull/8337).
- gconftool2 - use ``ModuleHelper`` with ``VarDict`` (https://github.com/ansible-collections/community.general/pull/8226).
- git_config - allow multiple git configs for the same name with the new ``add_mode`` option (https://github.com/ansible-collections/community.general/pull/7260).
- git_config - the ``after`` and ``before`` fields in the ``diff`` of the return value can be a list instead of a string in case more configs with the same key are affected (https://github.com/ansible-collections/community.general/pull/7260).
- git_config - when a value is unset, all configs with the same key are unset (https://github.com/ansible-collections/community.general/pull/7260).
- gitlab modules - add ``ca_path`` option (https://github.com/ansible-collections/community.general/pull/7472).
- gitlab modules - remove duplicate ``gitlab`` package check (https://github.com/ansible-collections/community.general/pull/7486).
- gitlab_deploy_key, gitlab_group_members, gitlab_group_variable, gitlab_hook, gitlab_instance_variable, gitlab_project_badge, gitlab_project_variable, gitlab_user - improve API pagination and compatibility with different versions of ``python-gitlab`` (https://github.com/ansible-collections/community.general/pull/7790).
- gitlab_hook - adds ``releases_events`` parameter for supporting Releases events triggers on GitLab hooks (https://github.com/ansible-collections/community.general/pull/7956).
- gitlab_runner - add support for new runner creation workflow (https://github.com/ansible-collections/community.general/pull/7199).
- homebrew - adds ``force_formula`` parameter to disambiguate a formula from a cask of the same name (https://github.com/ansible-collections/community.general/issues/8274).
- homebrew, homebrew_cask - refactor common argument validation logic into a dedicated ``homebrew`` module utils (https://github.com/ansible-collections/community.general/issues/8323, https://github.com/ansible-collections/community.general/pull/8324).
- icinga2 inventory plugin - add Jinja2 templating support to ``url``, ``user``, and ``password`` paramenters (https://github.com/ansible-collections/community.general/issues/7074, https://github.com/ansible-collections/community.general/pull/7996).
- icinga2 inventory plugin - adds new parameter ``group_by_hostgroups`` in order to make grouping by Icinga2 hostgroups optional (https://github.com/ansible-collections/community.general/pull/7998).
- ini_file - add an optional parameter ``section_has_values``. If the target ini file contains more than one ``section``, use ``section_has_values`` to specify which one should be updated (https://github.com/ansible-collections/community.general/pull/7505).
- ini_file - support optional spaces between section names and their surrounding brackets (https://github.com/ansible-collections/community.general/pull/8075).
- installp - refactor module to pass list of arguments to ``module.run_command()`` instead of relying on interpretation by a shell (https://github.com/ansible-collections/community.general/pull/8264).
- ipa_config - adds ``passkey`` choice to ``ipauserauthtype`` parameter's choices (https://github.com/ansible-collections/community.general/pull/7588).
- ipa_dnsrecord - adds ability to manage NS record types (https://github.com/ansible-collections/community.general/pull/7737).
- ipa_pwpolicy - refactor module and exchange a sequence ``if`` statements with a ``for`` loop (https://github.com/ansible-collections/community.general/pull/7723).
- ipa_pwpolicy - update module to support ``maxrepeat``, ``maxsequence``, ``dictcheck``, ``usercheck``, ``gracelimit`` parameters in FreeIPA password policies (https://github.com/ansible-collections/community.general/pull/7723).
- ipa_sudorule - adds options to include denied commands or command groups (https://github.com/ansible-collections/community.general/pull/7415).
- ipa_user - adds ``idp`` and ``passkey`` choice to ``ipauserauthtype`` parameter's choices (https://github.com/ansible-collections/community.general/pull/7589).
- irc - add ``validate_certs`` option, and rename ``use_ssl`` to ``use_tls``, while keeping ``use_ssl`` as an alias. The default value for ``validate_certs`` is ``false`` for backwards compatibility. We recommend to every user of this module to explicitly set ``use_tls=true`` and `validate_certs=true`` whenever possible, especially when communicating to IRC servers over the internet (https://github.com/ansible-collections/community.general/pull/7550).
- java_cert - add ``cert_content`` argument (https://github.com/ansible-collections/community.general/pull/8153).
- java_cert - enable ``owner``, ``group``, ``mode``, and other generic file arguments (https://github.com/ansible-collections/community.general/pull/8116).
- kernel_blacklist - use ``ModuleHelper`` with ``VarDict`` (https://github.com/ansible-collections/community.general/pull/8226).
- keycloak module utils - expose error message from Keycloak server for HTTP errors in some specific situations (https://github.com/ansible-collections/community.general/pull/7645).
- keycloak_client, keycloak_clientscope, keycloak_clienttemplate - added ``docker-v2`` protocol support, enhancing alignment with Keycloak's protocol options (https://github.com/ansible-collections/community.general/issues/8215, https://github.com/ansible-collections/community.general/pull/8216).
- keycloak_realm_key - the ``config.algorithm`` option now supports 8 additional key algorithms (https://github.com/ansible-collections/community.general/pull/7698).
- keycloak_realm_key - the ``config.certificate`` option value is no longer defined with ``no_log=True`` (https://github.com/ansible-collections/community.general/pull/7698).
- keycloak_realm_key - the ``provider_id`` option now supports RSA encryption key usage (value ``rsa-enc``) (https://github.com/ansible-collections/community.general/pull/7698).
- keycloak_user_federation - add option for ``krbPrincipalAttribute`` (https://github.com/ansible-collections/community.general/pull/7538).
- keycloak_user_federation - allow custom user storage providers to be set through ``provider_id`` (https://github.com/ansible-collections/community.general/pull/7789).
- ldap_attrs - module now supports diff mode, showing which attributes are changed within an operation (https://github.com/ansible-collections/community.general/pull/8073).
- lvg - refactor module to pass list of arguments to ``module.run_command()`` instead of relying on interpretation by a shell (https://github.com/ansible-collections/community.general/pull/8264).
- lvol - change ``pvs`` argument type to list of strings (https://github.com/ansible-collections/community.general/pull/7676, https://github.com/ansible-collections/community.general/issues/7504).
- lvol - refactor module to pass list of arguments to ``module.run_command()`` instead of relying on interpretation by a shell (https://github.com/ansible-collections/community.general/pull/8264).
- lxd connection plugin - tighten the detection logic for lxd ``Instance not found`` errors, to avoid false detection on unrelated errors such as ``/usr/bin/python3: not found`` (https://github.com/ansible-collections/community.general/pull/7521).
- lxd_container - uses ``/1.0/instances`` API endpoint, if available. Falls back to ``/1.0/containers`` or ``/1.0/virtual-machines``. Fixes issue when using Incus or LXD 5.19 due to migrating to ``/1.0/instances`` endpoint (https://github.com/ansible-collections/community.general/pull/7980).
- macports - refactor module to pass list of arguments to ``module.run_command()`` instead of relying on interpretation by a shell (https://github.com/ansible-collections/community.general/pull/8264).
- mail - add ``Message-ID`` header; which is required by some mail servers (https://github.com/ansible-collections/community.general/pull/7740).
- mail module, mail callback plugin - allow to configure the domain name of the Message-ID header with a new ``message_id_domain`` option (https://github.com/ansible-collections/community.general/pull/7765).
- mssql_script - adds transactional (rollback/commit) support via optional boolean param ``transaction`` (https://github.com/ansible-collections/community.general/pull/7976).
- netcup_dns - adds support for record types ``OPENPGPKEY``, ``SMIMEA``, and ``SSHFP`` (https://github.com/ansible-collections/community.general/pull/7489).
- nmcli - add support for new connection type ``loopback`` (https://github.com/ansible-collections/community.general/issues/6572).
- nmcli - adds OpenvSwitch support with new ``type`` values ``ovs-port``, ``ovs-interface``, and ``ovs-bridge``, and new ``slave_type`` value ``ovs-port`` (https://github.com/ansible-collections/community.general/pull/8154).
- nmcli - allow for ``infiniband`` slaves of ``bond`` interface types (https://github.com/ansible-collections/community.general/pull/7569).
- nmcli - allow for the setting of ``MTU`` for ``infiniband`` and ``bond`` interface types (https://github.com/ansible-collections/community.general/pull/7499).
- nmcli - allow setting ``MTU`` for ``bond-slave`` interface types (https://github.com/ansible-collections/community.general/pull/8118).
- onepassword lookup plugin - support 1Password Connect with the opv2 client by setting the connect_host and connect_token parameters (https://github.com/ansible-collections/community.general/pull/7116).
- onepassword_raw lookup plugin - support 1Password Connect with the opv2 client by setting the connect_host and connect_token parameters (https://github.com/ansible-collections/community.general/pull/7116)
- opentelemetry - add support for HTTP trace_exporter and configures the behavior via ``OTEL_EXPORTER_OTLP_TRACES_PROTOCOL`` (https://github.com/ansible-collections/community.general/issues/7888, https://github.com/ansible-collections/community.general/pull/8321).
- opentelemetry - add support for exporting spans in a file via ``ANSIBLE_OPENTELEMETRY_STORE_SPANS_IN_FILE`` (https://github.com/ansible-collections/community.general/issues/7888, https://github.com/ansible-collections/community.general/pull/8363).
- opkg - use ``ModuleHelper`` with ``VarDict`` (https://github.com/ansible-collections/community.general/pull/8226).
- osx_defaults - add option ``check_types`` to enable changing the type of existing defaults on the fly (https://github.com/ansible-collections/community.general/pull/8173).
- parted - refactor module to pass list of arguments to ``module.run_command()`` instead of relying on interpretation by a shell (https://github.com/ansible-collections/community.general/pull/8264).
- passwordstore - adds ``timestamp`` and ``preserve`` parameters to modify the stored password format (https://github.com/ansible-collections/community.general/pull/7426).
- passwordstore lookup - add ``missing_subkey`` parameter defining the behavior of the lookup when a passwordstore subkey is missing (https://github.com/ansible-collections/community.general/pull/8166).
- pipx - use ``ModuleHelper`` with ``VarDict`` (https://github.com/ansible-collections/community.general/pull/8226).
- pkg5 - add support for non-silent execution (https://github.com/ansible-collections/community.general/issues/8379, https://github.com/ansible-collections/community.general/pull/8382).
- pkgin - refactor module to pass list of arguments to ``module.run_command()`` instead of relying on interpretation by a shell (https://github.com/ansible-collections/community.general/pull/8264).
- portage - adds the possibility to explicitely tell portage to write packages to world file (https://github.com/ansible-collections/community.general/issues/6226, https://github.com/ansible-collections/community.general/pull/8236).
- portinstall - refactor module to pass list of arguments to ``module.run_command()`` instead of relying on interpretation by a shell (https://github.com/ansible-collections/community.general/pull/8264).
- proxmox - adds ``startup`` parameters to configure startup order, startup delay and shutdown delay (https://github.com/ansible-collections/community.general/pull/8038).
- proxmox - adds ``template`` value to the ``state`` parameter, allowing conversion of container to a template (https://github.com/ansible-collections/community.general/pull/7143).
- proxmox - adds ``update`` parameter, allowing update of an already existing containers configuration (https://github.com/ansible-collections/community.general/pull/7540).
- proxmox inventory plugin - adds an option to exclude nodes from the dynamic inventory generation. The new setting is optional, not using this option will behave as usual (https://github.com/ansible-collections/community.general/issues/6714, https://github.com/ansible-collections/community.general/pull/7461).
- proxmox* modules - there is now a ``community.general.proxmox`` module defaults group that can be used to set default options for all Proxmox modules (https://github.com/ansible-collections/community.general/pull/8334).
- proxmox_disk - add ability to manipulate CD-ROM drive (https://github.com/ansible-collections/community.general/pull/7495).
- proxmox_kvm - add parameter ``update_unsafe`` to avoid limitations when updating dangerous values (https://github.com/ansible-collections/community.general/pull/7843).
- proxmox_kvm - adds ``template`` value to the ``state`` parameter, allowing conversion of a VM to a template (https://github.com/ansible-collections/community.general/pull/7143).
- proxmox_kvm - adds``usb`` parameter for setting USB devices on proxmox KVM VMs (https://github.com/ansible-collections/community.general/pull/8199).
- proxmox_kvm - support the ``hookscript`` parameter (https://github.com/ansible-collections/community.general/issues/7600).
- proxmox_ostype - it is now possible to specify the ``ostype`` when creating an LXC container (https://github.com/ansible-collections/community.general/pull/7462).
- proxmox_vm_info - add ability to retrieve configuration info (https://github.com/ansible-collections/community.general/pull/7485).
- puppet - new feature to set ``--waitforlock`` option (https://github.com/ansible-collections/community.general/pull/8282).
- redfish_command - add command ``ResetToDefaults`` to reset manager to default state (https://github.com/ansible-collections/community.general/issues/8163).
- redfish_config - add command ``SetServiceIdentification`` to set service identification (https://github.com/ansible-collections/community.general/issues/7916).
- redfish_info - add boolean return value ``MultipartHttpPush`` to ``GetFirmwareUpdateCapabilities`` (https://github.com/ansible-collections/community.general/issues/8194, https://github.com/ansible-collections/community.general/pull/8195).
- redfish_info - add command ``GetServiceIdentification`` to get service identification (https://github.com/ansible-collections/community.general/issues/7882).
- redfish_info - adding the ``BootProgress`` property when getting ``Systems`` info (https://github.com/ansible-collections/community.general/pull/7626).
- revbitspss lookup plugin - removed a redundant unicode prefix. The prefix was not necessary for Python 3 and has been cleaned up to streamline the code (https://github.com/ansible-collections/community.general/pull/8087).
- rundeck module utils - allow to pass ``Content-Type`` to API requests (https://github.com/ansible-collections/community.general/pull/7684).
- slackpkg - refactor module to pass list of arguments to ``module.run_command()`` instead of relying on interpretation by a shell (https://github.com/ansible-collections/community.general/pull/8264).
- ssh_config - adds ``controlmaster``, ``controlpath`` and ``controlpersist`` parameters (https://github.com/ansible-collections/community.general/pull/7456).
- ssh_config - allow ``accept-new`` as valid value for ``strict_host_key_checking`` (https://github.com/ansible-collections/community.general/pull/8257).
- ssh_config - new feature to set ``AddKeysToAgent`` option to ``yes`` or ``no`` (https://github.com/ansible-collections/community.general/pull/7703).
- ssh_config - new feature to set ``IdentitiesOnly`` option to ``yes`` or ``no`` (https://github.com/ansible-collections/community.general/pull/7704).
- sudoers - add support for the ``NOEXEC`` tag in sudoers rules (https://github.com/ansible-collections/community.general/pull/7983).
- svr4pkg - refactor module to pass list of arguments to ``module.run_command()`` instead of relying on interpretation by a shell (https://github.com/ansible-collections/community.general/pull/8264).
- swdepot - refactor module to pass list of arguments to ``module.run_command()`` instead of relying on interpretation by a shell (https://github.com/ansible-collections/community.general/pull/8264).
- terraform - add support for ``diff_mode`` for terraform resource_changes (https://github.com/ansible-collections/community.general/pull/7896).
- terraform - fix ``diff_mode`` in state ``absent`` and when terraform ``resource_changes`` does not exist (https://github.com/ansible-collections/community.general/pull/7963).
- xcc_redfish_command - added support for raw POSTs (``command=PostResource`` in ``category=Raw``) without a specific action info (https://github.com/ansible-collections/community.general/pull/7746).
- xfconf - use ``ModuleHelper`` with ``VarDict`` (https://github.com/ansible-collections/community.general/pull/8226).
- xfconf_info - use ``ModuleHelper`` with ``VarDict`` (https://github.com/ansible-collections/community.general/pull/8226).
Breaking Changes / Porting Guide
--------------------------------
- cpanm - the default of the ``mode`` option changed from ``compatibility`` to ``new`` (https://github.com/ansible-collections/community.general/pull/8198).
- django_manage - the module now requires Django >= 4.1 (https://github.com/ansible-collections/community.general/pull/8198).
- django_manage - the module will now fail if ``virtualenv`` is specified but no virtual environment exists at that location (https://github.com/ansible-collections/community.general/pull/8198).
- redfish_command, redfish_config, redfish_info - change the default for ``timeout`` from 10 to 60 (https://github.com/ansible-collections/community.general/pull/8198).
Deprecated Features
-------------------
- MH DependencyCtxMgr module_utils - deprecate ``module_utils.mh.mixin.deps.DependencyCtxMgr`` in favour of ``module_utils.deps`` (https://github.com/ansible-collections/community.general/pull/8280).
- ModuleHelper module_utils - deprecate ``plugins.module_utils.module_helper.AnsibleModule`` (https://github.com/ansible-collections/community.general/pull/8280).
- ModuleHelper module_utils - deprecate ``plugins.module_utils.module_helper.DependencyCtxMgr`` (https://github.com/ansible-collections/community.general/pull/8280).
- ModuleHelper module_utils - deprecate ``plugins.module_utils.module_helper.StateMixin`` (https://github.com/ansible-collections/community.general/pull/8280).
- ModuleHelper module_utils - deprecate ``plugins.module_utils.module_helper.VarDict,`` (https://github.com/ansible-collections/community.general/pull/8280).
- ModuleHelper module_utils - deprecate ``plugins.module_utils.module_helper.VarMeta`` (https://github.com/ansible-collections/community.general/pull/8280).
- ModuleHelper module_utils - deprecate ``plugins.module_utils.module_helper.VarsMixin`` (https://github.com/ansible-collections/community.general/pull/8280).
- ModuleHelper module_utils - deprecate use of ``VarsMixin`` in favor of using the ``VardDict`` module_utils (https://github.com/ansible-collections/community.general/pull/8226).
- ModuleHelper vars module_utils - bump deprecation of ``VarMeta``, ``VarDict`` and ``VarsMixin`` to version 11.0.0 (https://github.com/ansible-collections/community.general/pull/8226).
- apt_rpm - the behavior of ``state=present`` and ``state=installed`` is deprecated and will change in community.general 11.0.0. Right now the module will upgrade a package to the latest version if one of these two states is used. You should explicitly use ``state=latest`` if you want this behavior, and switch to ``state=present_not_latest`` if you do not want to upgrade the package if it is already installed. In community.general 11.0.0 the behavior of ``state=present`` and ``state=installed`` will change to that of ``state=present_not_latest`` (https://github.com/ansible-collections/community.general/issues/8217, https://github.com/ansible-collections/community.general/pull/8285).
- consul_acl - the module has been deprecated and will be removed in community.general 10.0.0. ``consul_token`` and ``consul_policy`` can be used instead (https://github.com/ansible-collections/community.general/pull/7901).
- django_manage - the ``ack_venv_creation_deprecation`` option has no more effect and will be removed from community.general 11.0.0 (https://github.com/ansible-collections/community.general/pull/8198).
- gitlab modules - the basic auth method on GitLab API have been deprecated and will be removed in community.general 10.0.0 (https://github.com/ansible-collections/community.general/pull/8383).
- hipchat callback plugin - the hipchat service has been discontinued and the self-hosted variant has been End of Life since 2020. The callback plugin is therefore deprecated and will be removed from community.general 10.0.0 if nobody provides compelling reasons to still keep it (https://github.com/ansible-collections/community.general/issues/8184, https://github.com/ansible-collections/community.general/pull/8189).
- irc - the defaults ``false`` for ``use_tls`` and ``validate_certs`` have been deprecated and will change to ``true`` in community.general 10.0.0 to improve security. You can already improve security now by explicitly setting them to ``true``. Specifying values now disables the deprecation warning (https://github.com/ansible-collections/community.general/pull/7578).
Removed Features (previously deprecated)
----------------------------------------
- The deprecated redirects for internal module names have been removed. These internal redirects were extra-long FQCNs like ``community.general.packaging.os.apt_rpm`` that redirect to the short FQCN ``community.general.apt_rpm``. They were originally needed to implement flatmapping; as various tooling started to recommend users to use the long names flatmapping was removed from the collection and redirects were added for users who already followed these incorrect recommendations (https://github.com/ansible-collections/community.general/pull/7835).
- ansible_galaxy_install - the ``ack_ansible29`` and ``ack_min_ansiblecore211`` options have been removed. They no longer had any effect (https://github.com/ansible-collections/community.general/pull/8198).
- cloudflare_dns - remove support for SPF records. These are no longer supported by CloudFlare (https://github.com/ansible-collections/community.general/pull/7782).
- django_manage - support for the ``command`` values ``cleanup``, ``syncdb``, and ``validate`` were removed. Use ``clearsessions``, ``migrate``, and ``check`` instead, respectively (https://github.com/ansible-collections/community.general/pull/8198).
- flowdock - this module relied on HTTPS APIs that do not exist anymore and was thus removed (https://github.com/ansible-collections/community.general/pull/8198).
- mh.mixins.deps module utils - the ``DependencyMixin`` has been removed. Use the ``deps`` module utils instead (https://github.com/ansible-collections/community.general/pull/8198).
- proxmox - the ``proxmox_default_behavior`` option has been removed (https://github.com/ansible-collections/community.general/pull/8198).
- rax* modules, rax module utils, rax docs fragment - the Rackspace modules relied on the deprecated package ``pyrax`` and were thus removed (https://github.com/ansible-collections/community.general/pull/8198).
- redhat module utils - the classes ``Rhsm``, ``RhsmPool``, and ``RhsmPools`` have been removed (https://github.com/ansible-collections/community.general/pull/8198).
- redhat_subscription - the alias ``autosubscribe`` of the ``auto_attach`` option was removed (https://github.com/ansible-collections/community.general/pull/8198).
- stackdriver - this module relied on HTTPS APIs that do not exist anymore and was thus removed (https://github.com/ansible-collections/community.general/pull/8198).
- webfaction_* modules - these modules relied on HTTPS APIs that do not exist anymore and were thus removed (https://github.com/ansible-collections/community.general/pull/8198).
Security Fixes
--------------
- cobbler, gitlab_runners, icinga2, linode, lxd, nmap, online, opennebula, proxmox, scaleway, stackpath_compute, virtualbox, and xen_orchestra inventory plugin - make sure all data received from the remote servers is marked as unsafe, so remote code execution by obtaining texts that can be evaluated as templates is not possible (https://www.die-welt.net/2024/03/remote-code-execution-in-ansible-dynamic-inventory-plugins/, https://github.com/ansible-collections/community.general/pull/8098).
- keycloak_identity_provider - the client secret was not correctly sanitized by the module. The return values ``proposed``, ``existing``, and ``end_state``, as well as the diff, did contain the client secret unmasked (https://github.com/ansible-collections/community.general/pull/8355).
Bugfixes
--------
- aix_filesystem - fix ``_validate_vg`` not passing VG name to ``lsvg_cmd`` (https://github.com/ansible-collections/community.general/issues/8151).
- aix_filesystem - fix issue with empty list items in crfs logic and option order (https://github.com/ansible-collections/community.general/pull/8052).
- apt-rpm - the module did not upgrade packages if a newer version exists. Now the package will be reinstalled if the candidate is newer than the installed version (https://github.com/ansible-collections/community.general/issues/7414).
- apt_rpm - when checking whether packages were installed after running ``apt-get -y install <packages>``, only the last package name was checked (https://github.com/ansible-collections/community.general/pull/8263).
- bitwarden_secrets_manager lookup plugin - implements retry with exponential backoff to avoid lookup errors when Bitwardn's API rate limiting is encountered (https://github.com/ansible-collections/community.general/issues/8230, https://github.com/ansible-collections/community.general/pull/8238).
- cargo - fix idempotency issues when using a custom installation path for packages (using the ``--path`` parameter). The initial installation runs fine, but subsequent runs use the ``get_installed()`` function which did not check the given installation location, before running ``cargo install``. This resulted in a false ``changed`` state. Also the removal of packeges using ``state: absent`` failed, as the installation check did not use the given parameter (https://github.com/ansible-collections/community.general/pull/7970).
- cloudflare_dns - fix Cloudflare lookup of SHFP records (https://github.com/ansible-collections/community.general/issues/7652).
- consul_token - fix token creation without ``accessor_id`` (https://github.com/ansible-collections/community.general/pull/8091).
- from_ini filter plugin - disabling interpolation of ``ConfigParser`` to allow converting values with a ``%`` sign (https://github.com/ansible-collections/community.general/issues/8183, https://github.com/ansible-collections/community.general/pull/8185).
- gitlab_group_members - fix gitlab constants call in ``gitlab_group_members`` module (https://github.com/ansible-collections/community.general/issues/7467).
- gitlab_issue - fix behavior to search GitLab issue, using ``search`` keyword instead of ``title`` (https://github.com/ansible-collections/community.general/issues/7846).
- gitlab_issue, gitlab_label, gitlab_milestone - avoid crash during version comparison when the python-gitlab Python module is not installed (https://github.com/ansible-collections/community.general/pull/8158).
- gitlab_project_members - fix gitlab constants call in ``gitlab_project_members`` module (https://github.com/ansible-collections/community.general/issues/7467).
- gitlab_protected_branches - fix gitlab constants call in ``gitlab_protected_branches`` module (https://github.com/ansible-collections/community.general/issues/7467).
- gitlab_runner - fix pagination when checking for existing runners (https://github.com/ansible-collections/community.general/pull/7790).
- gitlab_user - fix gitlab constants call in ``gitlab_user`` module (https://github.com/ansible-collections/community.general/issues/7467).
- haproxy - fix an issue where HAProxy could get stuck in DRAIN mode when the backend was unreachable (https://github.com/ansible-collections/community.general/issues/8092).
- homebrew - detect already installed formulae and casks using JSON output from ``brew info`` (https://github.com/ansible-collections/community.general/issues/864).
- homebrew - error returned from brew command was ignored and tried to parse empty JSON. Fix now checks for an error and raises it to give accurate error message to users (https://github.com/ansible-collections/community.general/issues/8047).
- incus connection plugin - treats ``inventory_hostname`` as a variable instead of a literal in remote connections (https://github.com/ansible-collections/community.general/issues/7874).
- interface_files - also consider ``address_family`` when changing ``option=method`` (https://github.com/ansible-collections/community.general/issues/7610, https://github.com/ansible-collections/community.general/pull/7612).
- inventory plugins - add unsafe wrapper to avoid marking strings that do not contain ``{`` or ``}`` as unsafe, to work around a bug in AWX ((https://github.com/ansible-collections/community.general/issues/8212, https://github.com/ansible-collections/community.general/pull/8225).
- ipa - fix get version regex in IPA module_utils (https://github.com/ansible-collections/community.general/pull/8175).
- ipa_hbacrule - the module uses a string for ``ipaenabledflag`` for new FreeIPA versions while the returned value is a boolean (https://github.com/ansible-collections/community.general/pull/7880).
- ipa_otptoken - the module expect ``ipatokendisabled`` as string but the ``ipatokendisabled`` value is returned as a boolean (https://github.com/ansible-collections/community.general/pull/7795).
- ipa_sudorule - the module uses a string for ``ipaenabledflag`` for new FreeIPA versions while the returned value is a boolean (https://github.com/ansible-collections/community.general/pull/7880).
- iptables_state - fix idempotency issues when restoring incomplete iptables dumps (https://github.com/ansible-collections/community.general/issues/8029).
- irc - replace ``ssl.wrap_socket`` that was removed from Python 3.12 with code for creating a proper SSL context (https://github.com/ansible-collections/community.general/pull/7542).
- keycloak_* - fix Keycloak API client to quote ``/`` properly (https://github.com/ansible-collections/community.general/pull/7641).
- keycloak_authz_permission - resource payload variable for scope-based permission was constructed as a string, when it needs to be a list, even for a single item (https://github.com/ansible-collections/community.general/issues/7151).
- keycloak_client - add sorted ``defaultClientScopes`` and ``optionalClientScopes`` to normalizations (https://github.com/ansible-collections/community.general/pull/8223).
- keycloak_client - fixes issue when metadata is provided in desired state when task is in check mode (https://github.com/ansible-collections/community.general/issues/1226, https://github.com/ansible-collections/community.general/pull/7881).
- keycloak_identity_provider - ``mappers`` processing was not idempotent if the mappers configuration list had not been sorted by name (in ascending order). Fix resolves the issue by sorting mappers in the desired state using the same key which is used for obtaining existing state (https://github.com/ansible-collections/community.general/pull/7418).
- keycloak_identity_provider - it was not possible to reconfigure (add, remove) ``mappers`` once they were created initially. Removal was ignored, adding new ones resulted in dropping the pre-existing unmodified mappers. Fix resolves the issue by supplying correct input to the internal update call (https://github.com/ansible-collections/community.general/pull/7418).
- keycloak_realm - add normalizations for ``enabledEventTypes`` and ``supportedLocales`` (https://github.com/ansible-collections/community.general/pull/8224).
- keycloak_user - when ``force`` is set, but user does not exist, do not try to delete it (https://github.com/ansible-collections/community.general/pull/7696).
- keycloak_user_federation - fix diff of empty ``krbPrincipalAttribute`` (https://github.com/ansible-collections/community.general/pull/8320).
- ldap - previously the order number (if present) was expected to follow an equals sign in the DN. This makes it so the order number string is identified correctly anywhere within the DN (https://github.com/ansible-collections/community.general/issues/7646).
- linode inventory plugin - add descriptive error message for linode inventory plugin (https://github.com/ansible-collections/community.general/pull/8133).
- log_entries callback plugin - replace ``ssl.wrap_socket`` that was removed from Python 3.12 with code for creating a proper SSL context (https://github.com/ansible-collections/community.general/pull/7542).
- lvol - test for output messages in both ``stdout`` and ``stderr`` (https://github.com/ansible-collections/community.general/pull/7601, https://github.com/ansible-collections/community.general/issues/7182).
- merge_variables lookup plugin - fixing cross host merge: providing access to foreign hosts variables to the perspective of the host that is performing the merge (https://github.com/ansible-collections/community.general/pull/8303).
- modprobe - listing modules files or modprobe files could trigger a FileNotFoundError if ``/etc/modprobe.d`` or ``/etc/modules-load.d`` did not exist. Relevant functions now return empty lists if the directories do not exist to avoid crashing the module (https://github.com/ansible-collections/community.general/issues/7717).
- mssql_script - make the module work with Python 2 (https://github.com/ansible-collections/community.general/issues/7818, https://github.com/ansible-collections/community.general/pull/7821).
- nmcli - fix ``connection.slave-type`` wired to ``bond`` and not with parameter ``slave_type`` in case of connection type ``wifi`` (https://github.com/ansible-collections/community.general/issues/7389).
- ocapi_utils, oci_utils, redfish_utils module utils - replace ``type()`` calls with ``isinstance()`` calls (https://github.com/ansible-collections/community.general/pull/7501).
- onepassword lookup plugin - failed for fields that were in sections and had uppercase letters in the label/ID. Field lookups are now case insensitive in all cases (https://github.com/ansible-collections/community.general/pull/7919).
- onepassword lookup plugin - field and section titles are now case insensitive when using op CLI version two or later. This matches the behavior of version one (https://github.com/ansible-collections/community.general/pull/7564).
- opentelemetry callback plugin - close spans always (https://github.com/ansible-collections/community.general/pull/8367).
- opentelemetry callback plugin - honour the ``disable_logs`` option to avoid storing task results since they are not used regardless (https://github.com/ansible-collections/community.general/pull/8373).
- pacemaker_cluster - actually implement check mode, which the module claims to support. This means that until now the module also did changes in check mode (https://github.com/ansible-collections/community.general/pull/8081).
- pam_limits - when the file does not exist, do not create it in check mode (https://github.com/ansible-collections/community.general/issues/8050, https://github.com/ansible-collections/community.general/pull/8057).
- pipx module utils - change the CLI argument formatter for the ``pip_args`` parameter (https://github.com/ansible-collections/community.general/issues/7497, https://github.com/ansible-collections/community.general/pull/7506).
- pkgin - pkgin (pkgsrc package manager used by SmartOS) raises erratic exceptions and spurious ``changed=true`` (https://github.com/ansible-collections/community.general/pull/7971).
- proxmox - fix updating a container config if the setting does not already exist (https://github.com/ansible-collections/community.general/pull/7872).
- proxmox_kvm - fixed status check getting from node-specific API endpoint (https://github.com/ansible-collections/community.general/issues/7817).
- proxmox_kvm - running ``state=template`` will first check whether VM is already a template (https://github.com/ansible-collections/community.general/pull/7792).
- proxmox_pool_member - absent state for type VM did not delete VMs from the pools (https://github.com/ansible-collections/community.general/pull/7464).
- puppet - add option ``environment_lang`` to set the environment language encoding. Defaults to lang ``C``. It is recommended to set it to ``C.UTF-8`` or ``en_US.UTF-8`` depending on what is available on your system. (https://github.com/ansible-collections/community.general/issues/8000)
- redfish_command - fix usage of message parsing in ``SimpleUpdate`` and ``MultipartHTTPPushUpdate`` commands to treat the lack of a ``MessageId`` as no message (https://github.com/ansible-collections/community.general/issues/7465, https://github.com/ansible-collections/community.general/pull/7471).
- redfish_info - allow for a GET operation invoked by ``GetUpdateStatus`` to allow for an empty response body for cases where a service returns 204 No Content (https://github.com/ansible-collections/community.general/issues/8003).
- redfish_info - correct uncaught exception when attempting to retrieve ``Chassis`` information (https://github.com/ansible-collections/community.general/pull/7952).
- redhat_subscription - use the D-Bus registration on RHEL 7 only on 7.4 and
greater; older versions of RHEL 7 do not have it
(https://github.com/ansible-collections/community.general/issues/7622,
https://github.com/ansible-collections/community.general/pull/7624).
- riak - support ``riak admin`` sub-command in newer Riak KV versions beside the legacy ``riak-admin`` main command (https://github.com/ansible-collections/community.general/pull/8211).
- statusio_maintenance - fix error caused by incorrectly formed API data payload. Was raising "Failed to create maintenance HTTP Error 400 Bad Request" caused by bad data type for date/time and deprecated dict keys (https://github.com/ansible-collections/community.general/pull/7754).
- terraform - fix multiline string handling in complex variables (https://github.com/ansible-collections/community.general/pull/7535).
- to_ini filter plugin - disabling interpolation of ``ConfigParser`` to allow converting values with a ``%`` sign (https://github.com/ansible-collections/community.general/issues/8183, https://github.com/ansible-collections/community.general/pull/8185).
- xml - make module work with lxml 5.1.1, which removed some internals that the module was relying on (https://github.com/ansible-collections/community.general/pull/8169).
New Plugins
-----------
Become
~~~~~~
- community.general.run0 - Systemd's run0.
Callback
~~~~~~~~
- community.general.default_without_diff - The default ansible callback without diff output.
- community.general.timestamp - Adds simple timestamp for each header.
Connection
~~~~~~~~~~
- community.general.incus - Run tasks in Incus instances via the Incus CLI.
Filter
~~~~~~
- community.general.from_ini - Converts INI text input into a dictionary.
- community.general.lists_difference - Difference of lists with a predictive order.
- community.general.lists_intersect - Intersection of lists with a predictive order.
- community.general.lists_symmetric_difference - Symmetric Difference of lists with a predictive order.
- community.general.lists_union - Union of lists with a predictive order.
- community.general.to_ini - Converts a dictionary to the INI file format.
Lookup
~~~~~~
- community.general.github_app_access_token - Obtain short-lived Github App Access tokens.
- community.general.onepassword_doc - Fetch documents stored in 1Password.
- onepassword_doc - Fetch documents stored in 1Password
Test
~~~~
- community.general.fqdn_valid - Validates fully-qualified domain names against RFC 1123.
- fqdn_valid - Validates fully-qualified domain names against RFC 1123
New Modules
-----------
- community.general.consul_acl_bootstrap - Bootstrap ACLs in Consul.
- community.general.consul_auth_method - Manipulate Consul auth methods.
- community.general.consul_binding_rule - Manipulate Consul binding rules.
- community.general.consul_token - Manipulate Consul tokens.
- community.general.django_command - Run Django admin commands.
- community.general.dnf_config_manager - Enable or disable dnf repositories using config-manager.
- community.general.git_config_info - Read git configuration.
- community.general.gitlab_group_access_token - Manages GitLab group access tokens.
- community.general.gitlab_issue - Create, update, or delete GitLab issues.
- community.general.gitlab_label - Creates/updates/deletes GitLab Labels belonging to project or group.
- community.general.gitlab_milestone - Creates/updates/deletes GitLab Milestones belonging to project or group.
- community.general.gitlab_project_access_token - Manages GitLab project access tokens.
- community.general.keycloak_client_rolescope - Allows administration of Keycloak client roles scope to restrict the usage of certain roles to a other specific client applications.
- community.general.keycloak_component_info - Retrive component info in Keycloak.
- community.general.keycloak_realm_rolemapping - Allows administration of Keycloak realm role mappings into groups with the Keycloak API.
- community.general.nomad_token - Manage Nomad ACL tokens.
- community.general.proxmox_node_info - Retrieve information about one or more Proxmox VE nodes.
- community.general.proxmox_storage_contents_info - List content from a Proxmox VE storage.
- community.general.usb_facts - Allows listing information about USB devices.
- git_config_info - Read git configuration
- gitlab_issue - Create, update, or delete GitLab issues
- nomad_token - Manage Nomad ACL tokens
v8.0.2
======
Release Summary
---------------
Bugfix release for inclusion in Ansible 9.0.0rc1.
Bugfixes
--------
- ocapi_utils, oci_utils, redfish_utils module utils - replace ``type()`` calls with ``isinstance()`` calls (https://github.com/ansible-collections/community.general/pull/7501).
- pipx module utils - change the CLI argument formatter for the ``pip_args`` parameter (https://github.com/ansible-collections/community.general/issues/7497, https://github.com/ansible-collections/community.general/pull/7506).
v8.0.1
======
Release Summary
---------------
Bugfix release for inclusion in Ansible 9.0.0b1.
Bugfixes
--------
- gitlab_group_members - fix gitlab constants call in ``gitlab_group_members`` module (https://github.com/ansible-collections/community.general/issues/7467).
- gitlab_project_members - fix gitlab constants call in ``gitlab_project_members`` module (https://github.com/ansible-collections/community.general/issues/7467).
- gitlab_protected_branches - fix gitlab constants call in ``gitlab_protected_branches`` module (https://github.com/ansible-collections/community.general/issues/7467).
- gitlab_user - fix gitlab constants call in ``gitlab_user`` module (https://github.com/ansible-collections/community.general/issues/7467).
- proxmox_pool_member - absent state for type VM did not delete VMs from the pools (https://github.com/ansible-collections/community.general/pull/7464).
- redfish_command - fix usage of message parsing in ``SimpleUpdate`` and ``MultipartHTTPPushUpdate`` commands to treat the lack of a ``MessageId`` as no message (https://github.com/ansible-collections/community.general/issues/7465, https://github.com/ansible-collections/community.general/pull/7471).
v8.0.0
======
Release Summary
---------------
This is release 8.0.0 of ``community.general``, released on 2023-11-01.
Minor Changes
-------------
- The collection will start using semantic markup (https://github.com/ansible-collections/community.general/pull/6539).
- VarDict module utils - add method ``VarDict.as_dict()`` to convert to a plain ``dict`` object (https://github.com/ansible-collections/community.general/pull/6602).
- apt_rpm - extract package name from local ``.rpm`` path when verifying
installation success. Allows installing packages from local ``.rpm`` files
(https://github.com/ansible-collections/community.general/pull/7396).
- cargo - add option ``executable``, which allows user to specify path to the cargo binary (https://github.com/ansible-collections/community.general/pull/7352).
- cargo - add option ``locked`` which allows user to specify install the locked version of dependency instead of latest compatible version (https://github.com/ansible-collections/community.general/pull/6134).
- chroot connection plugin - add ``disable_root_check`` option (https://github.com/ansible-collections/community.general/pull/7099).
- cloudflare_dns - add CAA record support (https://github.com/ansible-collections/community.general/pull/7399).
- cobbler inventory plugin - add ``exclude_mgmt_classes`` and ``include_mgmt_classes`` options to exclude or include hosts based on management classes (https://github.com/ansible-collections/community.general/pull/7184).
- cobbler inventory plugin - add ``inventory_hostname`` option to allow using the system name for the inventory hostname (https://github.com/ansible-collections/community.general/pull/6502).
- cobbler inventory plugin - add ``want_ip_addresses`` option to collect all interface DNS name to IP address mapping (https://github.com/ansible-collections/community.general/pull/6711).
- cobbler inventory plugin - add primary IP addess to ``cobbler_ipv4_address`` and IPv6 address to ``cobbler_ipv6_address`` host variable (https://github.com/ansible-collections/community.general/pull/6711).
- cobbler inventory plugin - add warning for systems with empty profiles (https://github.com/ansible-collections/community.general/pull/6502).
- cobbler inventory plugin - convert Ansible unicode strings to native Python unicode strings before passing user/password to XMLRPC client (https://github.com/ansible-collections/community.general/pull/6923).
- consul_session - drops requirement for the ``python-consul`` library to communicate with the Consul API, instead relying on the existing ``requests`` library requirement (https://github.com/ansible-collections/community.general/pull/6755).
- copr - respawn module to use the system python interpreter when the ``dnf`` python module is not available in ``ansible_python_interpreter`` (https://github.com/ansible-collections/community.general/pull/6522).
- cpanm - minor refactor when creating the ``CmdRunner`` object (https://github.com/ansible-collections/community.general/pull/7231).
- datadog_monitor - adds ``notification_preset_name``, ``renotify_occurrences`` and ``renotify_statuses`` parameters (https://github.com/ansible-collections/community.general/issues/6521,https://github.com/ansible-collections/community.general/issues/5823).
- dig lookup plugin - add TCP option to enable the use of TCP connection during DNS lookup (https://github.com/ansible-collections/community.general/pull/7343).
- ejabberd_user - module now using ``CmdRunner`` to execute external command (https://github.com/ansible-collections/community.general/pull/7075).
- filesystem - add ``uuid`` parameter for UUID change feature (https://github.com/ansible-collections/community.general/pull/6680).
- gitlab_group - add option ``force_delete`` (default: false) which allows delete group even if projects exists in it (https://github.com/ansible-collections/community.general/pull/7364).
- gitlab_group_variable - add support for ``raw`` variables suboption (https://github.com/ansible-collections/community.general/pull/7132).
- gitlab_project_variable - add support for ``raw`` variables suboption (https://github.com/ansible-collections/community.general/pull/7132).
- gitlab_project_variable - minor refactor removing unnecessary code statements (https://github.com/ansible-collections/community.general/pull/6928).
- gitlab_runner - minor refactor removing unnecessary code statements (https://github.com/ansible-collections/community.general/pull/6927).
- htpasswd - minor code improvements in the module (https://github.com/ansible-collections/community.general/pull/6901).
- htpasswd - the parameter ``crypt_scheme`` is being renamed as ``hash_scheme`` and added as an alias to it (https://github.com/ansible-collections/community.general/pull/6841).
- icinga2_host - the ``ip`` option is no longer required, since Icinga 2 allows for an empty address attribute (https://github.com/ansible-collections/community.general/pull/7452).
- ini_file - add ``ignore_spaces`` option (https://github.com/ansible-collections/community.general/pull/7273).
- ini_file - add ``modify_inactive_option`` option (https://github.com/ansible-collections/community.general/pull/7401).
- ipa_config - add module parameters to manage FreeIPA user and group objectclasses (https://github.com/ansible-collections/community.general/pull/7019).
- ipa_config - adds ``idp`` choice to ``ipauserauthtype`` parameter's choices (https://github.com/ansible-collections/community.general/pull/7051).
- jenkins_build - add new ``detach`` option, which allows the module to exit successfully as long as the build is created (default functionality is still waiting for the build to end before exiting) (https://github.com/ansible-collections/community.general/pull/7204).
- jenkins_build - add new ``time_between_checks`` option, which allows to configure the wait time between requests to the Jenkins server (https://github.com/ansible-collections/community.general/pull/7204).
- keycloak_authentication - added provider ID choices, since Keycloak supports only those two specific ones (https://github.com/ansible-collections/community.general/pull/6763).
- keycloak_client_rolemapping - adds support for subgroups with additional parameter ``parents`` (https://github.com/ansible-collections/community.general/pull/6687).
- keycloak_role - add composite roles support for realm and client roles (https://github.com/ansible-collections/community.general/pull/6469).
- keyring - minor refactor removing unnecessary code statements (https://github.com/ansible-collections/community.general/pull/6927).
- ldap_* - add new arguments ``client_cert`` and ``client_key`` to the LDAP modules in order to allow certificate authentication (https://github.com/ansible-collections/community.general/pull/6668).
- ldap_search - add a new ``page_size`` option to enable paged searches (https://github.com/ansible-collections/community.general/pull/6648).
- locale_gen - module has been refactored to use ``ModuleHelper`` and ``CmdRunner`` (https://github.com/ansible-collections/community.general/pull/6903).
- locale_gen - module now using ``CmdRunner`` to execute external commands (https://github.com/ansible-collections/community.general/pull/6820).
- lvg - add ``active`` and ``inactive`` values to the ``state`` option for active state management feature (https://github.com/ansible-collections/community.general/pull/6682).
- lvg - add ``reset_vg_uuid``, ``reset_pv_uuid`` options for UUID reset feature (https://github.com/ansible-collections/community.general/pull/6682).
- lxc connection plugin - properly handle a change of the ``remote_addr`` option (https://github.com/ansible-collections/community.general/pull/7373).
- lxd connection plugin - automatically translate ``remote_addr`` from FQDN to (short) hostname (https://github.com/ansible-collections/community.general/pull/7360).
- lxd connection plugin - update error parsing to work with newer messages mentioning instances (https://github.com/ansible-collections/community.general/pull/7360).
- lxd inventory plugin - add ``server_cert`` option for trust anchor to use for TLS verification of server certificates (https://github.com/ansible-collections/community.general/pull/7392).
- lxd inventory plugin - add ``server_check_hostname`` option to disable hostname verification of server certificates (https://github.com/ansible-collections/community.general/pull/7392).
- make - add new ``targets`` parameter allowing multiple targets to be used with ``make`` (https://github.com/ansible-collections/community.general/pull/6882, https://github.com/ansible-collections/community.general/issues/4919).
- make - allows ``params`` to be used without value (https://github.com/ansible-collections/community.general/pull/7180).
- mas - disable sign-in check for macOS 12+ as ``mas account`` is non-functional (https://github.com/ansible-collections/community.general/pull/6520).
- newrelic_deployment - add option ``app_name_exact_match``, which filters results for the exact app_name provided (https://github.com/ansible-collections/community.general/pull/7355).
- nmap inventory plugin - now has a ``use_arp_ping`` option to allow the user to disable the default ARP ping query for a more reliable form (https://github.com/ansible-collections/community.general/pull/7119).
- nmcli - add support for ``ipv4.dns-options`` and ``ipv6.dns-options`` (https://github.com/ansible-collections/community.general/pull/6902).
- nomad_job, nomad_job_info - add ``port`` parameter (https://github.com/ansible-collections/community.general/pull/7412).
- npm - minor improvement on parameter validation (https://github.com/ansible-collections/community.general/pull/6848).
- npm - module now using ``CmdRunner`` to execute external commands (https://github.com/ansible-collections/community.general/pull/6989).
- onepassword lookup plugin - add service account support (https://github.com/ansible-collections/community.general/issues/6635, https://github.com/ansible-collections/community.general/pull/6660).
- onepassword lookup plugin - introduce ``account_id`` option which allows specifying which account to use (https://github.com/ansible-collections/community.general/pull/7308).
- onepassword_raw lookup plugin - add service account support (https://github.com/ansible-collections/community.general/issues/6635, https://github.com/ansible-collections/community.general/pull/6660).
- onepassword_raw lookup plugin - introduce ``account_id`` option which allows specifying which account to use (https://github.com/ansible-collections/community.general/pull/7308).
- opentelemetry callback plugin - add span attributes in the span event (https://github.com/ansible-collections/community.general/pull/6531).
- opkg - add ``executable`` parameter allowing to specify the path of the ``opkg`` command (https://github.com/ansible-collections/community.general/pull/6862).
- opkg - remove default value ``""`` for parameter ``force`` as it causes the same behaviour of not having that parameter (https://github.com/ansible-collections/community.general/pull/6513).
- pagerduty - adds in option to use v2 API for creating pagerduty incidents (https://github.com/ansible-collections/community.general/issues/6151)
- parted - on resize, use ``--fix`` option if available (https://github.com/ansible-collections/community.general/pull/7304).
- pnpm - set correct version when state is latest or version is not mentioned. Resolves previous idempotency problem (https://github.com/ansible-collections/community.general/pull/7339).
- pritunl module utils - ensure ``validate_certs`` parameter is honoured in all methods (https://github.com/ansible-collections/community.general/pull/7156).
- proxmox - add ``vmid`` (and ``taskid`` when possible) to return values (https://github.com/ansible-collections/community.general/pull/7263).
- proxmox - support ``timezone`` parameter at container creation (https://github.com/ansible-collections/community.general/pull/6510).
- proxmox inventory plugin - add composite variables support for Proxmox nodes (https://github.com/ansible-collections/community.general/issues/6640).
- proxmox_kvm - added support for ``tpmstate0`` parameter to configure TPM (Trusted Platform Module) disk. TPM is required for Windows 11 installations (https://github.com/ansible-collections/community.general/pull/6533).
- proxmox_kvm - enabled force restart of VM, bringing the ``force`` parameter functionality in line with what is described in the docs (https://github.com/ansible-collections/community.general/pull/6914).
- proxmox_kvm - re-use ``timeout`` module param to forcefully shutdown a virtual machine when ``state`` is ``stopped`` (https://github.com/ansible-collections/community.general/issues/6257).
- proxmox_snap - add ``retention`` parameter to delete old snapshots (https://github.com/ansible-collections/community.general/pull/6576).
- proxmox_vm_info - ``node`` parameter is no longer required. Information can be obtained for the whole cluster (https://github.com/ansible-collections/community.general/pull/6976).
- proxmox_vm_info - non-existing provided by name/vmid VM would return empty results instead of failing (https://github.com/ansible-collections/community.general/pull/7049).
- pubnub_blocks - minor refactor removing unnecessary code statements (https://github.com/ansible-collections/community.general/pull/6928).
- random_string - added new ``ignore_similar_chars`` and ``similar_chars`` option to ignore certain chars (https://github.com/ansible-collections/community.general/pull/7242).
- redfish_command - add ``MultipartHTTPPushUpdate`` command (https://github.com/ansible-collections/community.general/issues/6471, https://github.com/ansible-collections/community.general/pull/6612).
- redfish_command - add ``account_types`` and ``oem_account_types`` as optional inputs to ``AddUser`` (https://github.com/ansible-collections/community.general/issues/6823, https://github.com/ansible-collections/community.general/pull/6871).
- redfish_command - add new option ``update_oem_params`` for the ``MultipartHTTPPushUpdate`` command (https://github.com/ansible-collections/community.general/issues/7331).
- redfish_config - add ``CreateVolume`` command to allow creation of volumes on servers (https://github.com/ansible-collections/community.general/pull/6813).
- redfish_config - add ``DeleteAllVolumes`` command to allow deletion of all volumes on servers (https://github.com/ansible-collections/community.general/pull/6814).
- redfish_config - adding ``SetSecureBoot`` command (https://github.com/ansible-collections/community.general/pull/7129).
- redfish_info - add ``AccountTypes`` and ``OEMAccountTypes`` to the output of ``ListUsers`` (https://github.com/ansible-collections/community.general/issues/6823, https://github.com/ansible-collections/community.general/pull/6871).
- redfish_info - add support for ``GetBiosRegistries`` command (https://github.com/ansible-collections/community.general/pull/7144).
- redfish_info - adds ``LinkStatus`` to NIC inventory (https://github.com/ansible-collections/community.general/pull/7318).
- redfish_info - adds ``ProcessorArchitecture`` to CPU inventory (https://github.com/ansible-collections/community.general/pull/6864).
- redfish_info - fix for ``GetVolumeInventory``, Controller name was getting populated incorrectly and duplicates were seen in the volumes retrieved (https://github.com/ansible-collections/community.general/pull/6719).
- redfish_info - report ``Id`` in the output of ``GetManagerInventory`` (https://github.com/ansible-collections/community.general/pull/7140).
- redfish_utils - use ``Controllers`` key in redfish data to obtain Storage controllers properties (https://github.com/ansible-collections/community.general/pull/7081).
- redfish_utils module utils - add support for ``PowerCycle`` reset type for ``redfish_command`` responses feature (https://github.com/ansible-collections/community.general/issues/7083).
- redfish_utils module utils - add support for following ``@odata.nextLink`` pagination in ``software_inventory`` responses feature (https://github.com/ansible-collections/community.general/pull/7020).
- redfish_utils module utils - support ``Volumes`` in response for ``GetDiskInventory`` (https://github.com/ansible-collections/community.general/pull/6819).
- redhat_subscription - the internal ``RegistrationBase`` class was folded
into the other internal ``Rhsm`` class, as the separation had no purpose
anymore
(https://github.com/ansible-collections/community.general/pull/6658).
- redis_info - refactor the redis_info module to use the redis module_utils enabling to pass TLS parameters to the Redis client (https://github.com/ansible-collections/community.general/pull/7267).
- rhsm_release - improve/harden the way ``subscription-manager`` is run;
no behaviour change is expected
(https://github.com/ansible-collections/community.general/pull/6669).
- rhsm_repository - the interaction with ``subscription-manager`` was
refactored by grouping things together, removing unused bits, and hardening
the way it is run; also, the parsing of ``subscription-manager repos --list``
was improved and made slightly faster; no behaviour change is expected
(https://github.com/ansible-collections/community.general/pull/6783,
https://github.com/ansible-collections/community.general/pull/6837).
- scaleway_security_group_rule - minor refactor removing unnecessary code statements (https://github.com/ansible-collections/community.general/pull/6928).
- shutdown - use ``shutdown -p ...`` with FreeBSD to halt and power off machine (https://github.com/ansible-collections/community.general/pull/7102).
- snap - add option ``dangerous`` to the module, that will map into the command line argument ``--dangerous``, allowing unsigned snap files to be installed (https://github.com/ansible-collections/community.general/pull/6908, https://github.com/ansible-collections/community.general/issues/5715).
- snap - module is now aware of channel when deciding whether to install or refresh the snap (https://github.com/ansible-collections/community.general/pull/6435, https://github.com/ansible-collections/community.general/issues/1606).
- sorcery - add grimoire (repository) management support (https://github.com/ansible-collections/community.general/pull/7012).
- sorcery - minor refactor (https://github.com/ansible-collections/community.general/pull/6525).
- supervisorctl - allow to stop matching running processes before removing them with ``stop_before_removing=true`` (https://github.com/ansible-collections/community.general/pull/7284).
- tss lookup plugin - allow to fetch secret IDs which are in a folder based on folder ID. Previously, we could not fetch secrets based on folder ID but now use ``fetch_secret_ids_from_folder`` option to indicate to fetch secret IDs based on folder ID (https://github.com/ansible-collections/community.general/issues/6223).
- tss lookup plugin - allow to fetch secret by path. Previously, we could not fetch secret by path but now use ``secret_path`` option to indicate to fetch secret by secret path (https://github.com/ansible-collections/community.general/pull/6881).
- unixy callback plugin - add support for ``check_mode_markers`` option (https://github.com/ansible-collections/community.general/pull/7179).
- vardict module utils - added convenience methods to ``VarDict`` (https://github.com/ansible-collections/community.general/pull/6647).
- xenserver_guest_info - minor refactor removing unnecessary code statements (https://github.com/ansible-collections/community.general/pull/6928).
- xenserver_guest_powerstate - minor refactor removing unnecessary code statements (https://github.com/ansible-collections/community.general/pull/6928).
- yum_versionlock - add support to pin specific package versions instead of only the package itself (https://github.com/ansible-collections/community.general/pull/6861, https://github.com/ansible-collections/community.general/issues/4470).
Breaking Changes / Porting Guide
--------------------------------
- collection_version lookup plugin - remove compatibility code for ansible-base 2.10 and ansible-core 2.11 (https://github.com/ansible-collections/community.general/pull/7269).
- gitlab_project - add ``default_branch`` support for project update. If you used the module so far with ``default_branch`` to update a project, the value of ``default_branch`` was ignored. Make sure that you either do not pass a value if you are not sure whether it is the one you want to have to avoid unexpected breaking changes (https://github.com/ansible-collections/community.general/pull/7158).
- selective callback plugin - remove compatibility code for Ansible 2.9 and ansible-core 2.10 (https://github.com/ansible-collections/community.general/pull/7269).
- vardict module utils - ``VarDict`` will no longer accept variables named ``_var``, ``get_meta``, and ``as_dict`` (https://github.com/ansible-collections/community.general/pull/6647).
- version module util - remove fallback for ansible-core 2.11. All modules and plugins that do version collections no longer work with ansible-core 2.11 (https://github.com/ansible-collections/community.general/pull/7269).
Deprecated Features
-------------------
- CmdRunner module utils - deprecate ``cmd_runner_fmt.as_default_type()`` formatter (https://github.com/ansible-collections/community.general/pull/6601).
- MH VarsMixin module utils - deprecates ``VarsMixin`` and supporting classes in favor of plain ``vardict`` module util (https://github.com/ansible-collections/community.general/pull/6649).
- ansible_galaxy_install - the ``ack_ansible29`` and ``ack_min_ansiblecore211`` options have been deprecated and will be removed in community.general 9.0.0 (https://github.com/ansible-collections/community.general/pull/7358).
- consul - the ``ack_params_state_absent`` option has been deprecated and will be removed in community.general 10.0.0 (https://github.com/ansible-collections/community.general/pull/7358).
- cpanm - value ``compatibility`` is deprecated as default for parameter ``mode`` (https://github.com/ansible-collections/community.general/pull/6512).
- ejabberd_user - deprecate the parameter ``logging`` in favour of producing more detailed information in the module output (https://github.com/ansible-collections/community.general/pull/7043).
- flowdock - module relies entirely on no longer responsive API endpoints, and it will be removed in community.general 9.0.0 (https://github.com/ansible-collections/community.general/pull/6930).
- proxmox - old feature flag ``proxmox_default_behavior`` will be removed in community.general 10.0.0 (https://github.com/ansible-collections/community.general/pull/6836).
- proxmox_kvm - deprecate the option ``proxmox_default_behavior`` (https://github.com/ansible-collections/community.general/pull/7377).
- redfish_info, redfish_config, redfish_command - the default value ``10`` for the ``timeout`` option is deprecated and will change to ``60`` in community.general 9.0.0 (https://github.com/ansible-collections/community.general/pull/7295).
- redhat module utils - the ``module_utils.redhat`` module is deprecated, as
effectively unused: the ``Rhsm``, ``RhsmPool``, and ``RhsmPools`` classes
will be removed in community.general 9.0.0; the ``RegistrationBase`` class
will be removed in community.general 10.0.0 together with the
``rhn_register`` module, as it is the only user of this class; this means
that the whole ``module_utils.redhat`` module will be dropped in
community.general 10.0.0, so importing it without even using anything of it
will fail
(https://github.com/ansible-collections/community.general/pull/6663).
- redhat_subscription - the ``autosubscribe`` alias for the ``auto_attach`` option has been
deprecated for many years, although only in the documentation. Officially mark this alias
as deprecated, and it will be removed in community.general 9.0.0
(https://github.com/ansible-collections/community.general/pull/6646).
- redhat_subscription - the ``pool`` option is deprecated in favour of the
more precise and flexible ``pool_ids`` option
(https://github.com/ansible-collections/community.general/pull/6650).
- rhsm_repository - ``state=present`` has not been working as expected for many years,
and it seems it was not noticed so far; also, "presence" is not really a valid concept
for subscription repositories, which can only be enabled or disabled. Hence, mark the
``present`` and ``absent`` values of the ``state`` option as deprecated, slating them
for removal in community.general 10.0.0
(https://github.com/ansible-collections/community.general/pull/6673).
- stackdriver - module relies entirely on no longer existent API endpoints, and it will be removed in community.general 9.0.0 (https://github.com/ansible-collections/community.general/pull/6887).
- webfaction_app - module relies entirely on no longer existent API endpoints, and it will be removed in community.general 9.0.0 (https://github.com/ansible-collections/community.general/pull/6909).
- webfaction_db - module relies entirely on no longer existent API endpoints, and it will be removed in community.general 9.0.0 (https://github.com/ansible-collections/community.general/pull/6909).
- webfaction_domain - module relies entirely on no longer existent API endpoints, and it will be removed in community.general 9.0.0 (https://github.com/ansible-collections/community.general/pull/6909).
- webfaction_mailbox - module relies entirely on no longer existent API endpoints, and it will be removed in community.general 9.0.0 (https://github.com/ansible-collections/community.general/pull/6909).
- webfaction_site - module relies entirely on no longer existent API endpoints, and it will be removed in community.general 9.0.0 (https://github.com/ansible-collections/community.general/pull/6909).
Removed Features (previously deprecated)
----------------------------------------
- The collection no longer supports ansible-core 2.11 and ansible-core 2.12. Parts of the collection might still work on these ansible-core versions, but others might not (https://github.com/ansible-collections/community.general/pull/7269).
- ansible_galaxy_install - support for Ansible 2.9 and ansible-base 2.10 has been removed (https://github.com/ansible-collections/community.general/pull/7358).
- consul - when ``state=absent``, the options ``script``, ``ttl``, ``tcp``, ``http``, and ``interval`` can no longer be specified (https://github.com/ansible-collections/community.general/pull/7358).
- gconftool2 - ``state=get`` has been removed. Use the module ``community.general.gconftool2_info`` instead (https://github.com/ansible-collections/community.general/pull/7358).
- gitlab_runner - remove the default value for the ``access_level`` option. To restore the previous behavior, explicitly set it to ``ref_protected`` (https://github.com/ansible-collections/community.general/pull/7358).
- htpasswd - removed code for passlib <1.6 (https://github.com/ansible-collections/community.general/pull/6901).
- manageiq_polices - ``state=list`` has been removed. Use the module ``community.general.manageiq_policies_info`` instead (https://github.com/ansible-collections/community.general/pull/7358).
- manageiq_tags - ``state=list`` has been removed. Use the module ``community.general.manageiq_tags_info`` instead (https://github.com/ansible-collections/community.general/pull/7358).
- mh.mixins.cmd module utils - the ``ArgFormat`` class has been removed (https://github.com/ansible-collections/community.general/pull/7358).
- mh.mixins.cmd module utils - the ``CmdMixin`` mixin has been removed. Use ``community.general.plugins.module_utils.cmd_runner.CmdRunner`` instead (https://github.com/ansible-collections/community.general/pull/7358).
- mh.mixins.cmd module utils - the mh.mixins.cmd module utils has been removed after all its contents were removed (https://github.com/ansible-collections/community.general/pull/7358).
- mh.module_helper module utils - the ``CmdModuleHelper`` and ``CmdStateModuleHelper`` classes have been removed. Use ``community.general.plugins.module_utils.cmd_runner.CmdRunner`` instead (https://github.com/ansible-collections/community.general/pull/7358).
- proxmox module utils - removed unused imports (https://github.com/ansible-collections/community.general/pull/6873).
- xfconf - the deprecated ``disable_facts`` option was removed (https://github.com/ansible-collections/community.general/pull/7358).
Bugfixes
--------
- CmdRunner module utils - does not attempt to resolve path if executable is a relative or absolute path (https://github.com/ansible-collections/community.general/pull/7200).
- MH DependencyMixin module utils - deprecation notice was popping up for modules not using dependencies (https://github.com/ansible-collections/community.general/pull/6644, https://github.com/ansible-collections/community.general/issues/6639).
- bitwarden lookup plugin - the plugin made assumptions about the structure of a Bitwarden JSON object which may have been broken by an update in the Bitwarden API. Remove assumptions, and allow queries for general fields such as ``notes`` (https://github.com/ansible-collections/community.general/pull/7061).
- cmd_runner module utils - when a parameter in ``argument_spec`` has no type, meaning it is implicitly a ``str``, ``CmdRunner`` would fail trying to find the ``type`` key in that dictionary (https://github.com/ansible-collections/community.general/pull/6968).
- cobbler inventory plugin - fix calculation of cobbler_ipv4/6_address (https://github.com/ansible-collections/community.general/pull/6925).
- composer - fix impossible to run ``working_dir`` dependent commands. The module was throwing an error when trying to run a ``working_dir`` dependent command, because it tried to get the command help without passing the ``working_dir`` (https://github.com/ansible-collections/community.general/issues/3787).
- csv module utils - detects and remove unicode BOM markers from incoming CSV content (https://github.com/ansible-collections/community.general/pull/6662).
- datadog_downtime - presence of ``rrule`` param lead to the Datadog API returning Bad Request due to a missing recurrence type (https://github.com/ansible-collections/community.general/pull/6811).
- ejabberd_user - module was failing to detect whether user was already created and/or password was changed (https://github.com/ansible-collections/community.general/pull/7033).
- ejabberd_user - provide meaningful error message when the ``ejabberdctl`` command is not found (https://github.com/ansible-collections/community.general/pull/7028, https://github.com/ansible-collections/community.general/issues/6949).
- github_deploy_key - fix pagination behaviour causing a crash when only a single page of deploy keys exist (https://github.com/ansible-collections/community.general/pull/7375).
- gitlab_group - the module passed parameters to the API call even when not set. The module is now filtering out ``None`` values to remediate this (https://github.com/ansible-collections/community.general/pull/6712).
- gitlab_group_variable - deleted all variables when used with ``purge=true`` due to missing ``raw`` property in KNOWN attributes (https://github.com/ansible-collections/community.general/issues/7250).
- gitlab_project_variable - deleted all variables when used with ``purge=true`` due to missing ``raw`` property in KNOWN attributes (https://github.com/ansible-collections/community.general/issues/7250).
- icinga2_host - fix a key error when updating an existing host (https://github.com/ansible-collections/community.general/pull/6748).
- ini_file - add the ``follow`` paramter to follow the symlinks instead of replacing them (https://github.com/ansible-collections/community.general/pull/6546).
- ini_file - fix a bug where the inactive options were not used when possible (https://github.com/ansible-collections/community.general/pull/6575).
- ipa_dnszone - fix 'idnsallowsyncptr' key error for reverse zone (https://github.com/ansible-collections/community.general/pull/6906, https://github.com/ansible-collections/community.general/issues/6905).
- kernel_blacklist - simplified the mechanism to update the file, fixing the error (https://github.com/ansible-collections/community.general/pull/7382, https://github.com/ansible-collections/community.general/issues/7362).
- keycloak module util - fix missing ``http_agent``, ``timeout``, and ``validate_certs`` ``open_url()`` parameters (https://github.com/ansible-collections/community.general/pull/7067).
- keycloak module utils - fix ``is_struct_included`` handling of lists of lists/dictionaries (https://github.com/ansible-collections/community.general/pull/6688).
- keycloak module utils - the function ``get_user_by_username`` now return the user representation or ``None`` as stated in the documentation (https://github.com/ansible-collections/community.general/pull/6758).
- keycloak_authentication - fix Keycloak authentication flow (step or sub-flow) indexing during update, if not specified by the user (https://github.com/ansible-collections/community.general/pull/6734).
- keycloak_client inventory plugin - fix missing client secret (https://github.com/ansible-collections/community.general/pull/6931).
- ldap_search - fix string normalization and the ``base64_attributes`` option on Python 3 (https://github.com/ansible-collections/community.general/issues/5704, https://github.com/ansible-collections/community.general/pull/7264).
- locale_gen - now works for locales without the underscore character such as ``C.UTF-8`` (https://github.com/ansible-collections/community.general/pull/6774, https://github.com/ansible-collections/community.general/issues/5142, https://github.com/ansible-collections/community.general/issues/4305).
- lvol - add support for percentage of origin size specification when creating snapshot volumes (https://github.com/ansible-collections/community.general/issues/1630, https://github.com/ansible-collections/community.general/pull/7053).
- lxc connection plugin - now handles ``remote_addr`` defaulting to ``inventory_hostname`` correctly (https://github.com/ansible-collections/community.general/pull/7104).
- lxc connection plugin - properly evaluate options (https://github.com/ansible-collections/community.general/pull/7369).
- machinectl become plugin - mark plugin as ``require_tty`` to automatically disable pipelining, with which this plugin is not compatible (https://github.com/ansible-collections/community.general/issues/6932, https://github.com/ansible-collections/community.general/pull/6935).
- mail - skip headers containing equals characters due to missing ``maxsplit`` on header key/value parsing (https://github.com/ansible-collections/community.general/pull/7303).
- memset module utils - make compatible with ansible-core 2.17 (https://github.com/ansible-collections/community.general/pull/7379).
- nmap inventory plugin - fix ``get_option`` calls (https://github.com/ansible-collections/community.general/pull/7323).
- nmap inventory plugin - now uses ``get_option`` in all cases to get its configuration information (https://github.com/ansible-collections/community.general/pull/7119).
- nmcli - fix bond option ``xmit_hash_policy`` (https://github.com/ansible-collections/community.general/pull/6527).
- nmcli - fix support for empty list (in compare and scrape) (https://github.com/ansible-collections/community.general/pull/6769).
- nsupdate - fix a possible ``list index out of range`` exception (https://github.com/ansible-collections/community.general/issues/836).
- oci_utils module util - fix inappropriate logical comparison expressions and makes them simpler. The previous checks had logical short circuits (https://github.com/ansible-collections/community.general/pull/7125).
- oci_utils module utils - avoid direct type comparisons (https://github.com/ansible-collections/community.general/pull/7085).
- onepassword - fix KeyError exception when trying to access value of a field that is not filled out in OnePassword item (https://github.com/ansible-collections/community.general/pull/7241).
- openbsd_pkg - the pkg_info(1) behavior has changed in OpenBSD >7.3. The error message ``Can't find`` should not lead to an error case (https://github.com/ansible-collections/community.general/pull/6785).
- pacman - module recognizes the output of ``yay`` running as ``root`` (https://github.com/ansible-collections/community.general/pull/6713).
- portage - fix ``changed_use`` and ``newuse`` not triggering rebuilds (https://github.com/ansible-collections/community.general/issues/6008, https://github.com/ansible-collections/community.general/pull/6548).
- pritunl module utils - fix incorrect URL parameter for orgnization add method (https://github.com/ansible-collections/community.general/pull/7161).
- proxmox - fix error when a configuration had no ``template`` field (https://github.com/ansible-collections/community.general/pull/6838, https://github.com/ansible-collections/community.general/issues/5372).
- proxmox module utils - add logic to detect whether an old Promoxer complains about the ``token_name`` and ``token_value`` parameters and provide a better error message when that happens (https://github.com/ansible-collections/community.general/pull/6839, https://github.com/ansible-collections/community.general/issues/5371).
- proxmox module utils - fix proxmoxer library version check (https://github.com/ansible-collections/community.general/issues/6974, https://github.com/ansible-collections/community.general/issues/6975, https://github.com/ansible-collections/community.general/pull/6980).
- proxmox_disk - fix unable to create ``cdrom`` media due to ``size`` always being appended (https://github.com/ansible-collections/community.general/pull/6770).
- proxmox_kvm - ``absent`` state with ``force`` specified failed to stop the VM due to the ``timeout`` value not being passed to ``stop_vm`` (https://github.com/ansible-collections/community.general/pull/6827).
- proxmox_kvm - ``restarted`` state did not actually restart a VM in some VM configurations. The state now uses the Proxmox reboot endpoint instead of calling the ``stop_vm`` and ``start_vm`` functions (https://github.com/ansible-collections/community.general/pull/6773).
- proxmox_kvm - allow creation of VM with existing name but new vmid (https://github.com/ansible-collections/community.general/issues/6155, https://github.com/ansible-collections/community.general/pull/6709).
- proxmox_kvm - when ``name`` option is provided without ``vmid`` and VM with that name already exists then no new VM will be created (https://github.com/ansible-collections/community.general/issues/6911, https://github.com/ansible-collections/community.general/pull/6981).
- proxmox_tasks_info - remove ``api_user`` + ``api_password`` constraint from ``required_together`` as it causes to require ``api_password`` even when API token param is used (https://github.com/ansible-collections/community.general/issues/6201).
- proxmox_template - require ``requests_toolbelt`` module to fix issue with uploading large templates (https://github.com/ansible-collections/community.general/issues/5579, https://github.com/ansible-collections/community.general/pull/6757).
- proxmox_user_info - avoid direct type comparisons (https://github.com/ansible-collections/community.general/pull/7085).
- redfish_info - fix ``ListUsers`` to not show empty account slots (https://github.com/ansible-collections/community.general/issues/6771, https://github.com/ansible-collections/community.general/pull/6772).
- redhat_subscription - use the right D-Bus options for the consumer type when
registering a RHEL system older than 9 or a RHEL 9 system older than 9.2
and using ``consumer_type``
(https://github.com/ansible-collections/community.general/pull/7378).
- refish_utils module utils - changing variable names to avoid issues occuring when fetching Volumes data (https://github.com/ansible-collections/community.general/pull/6883).
- rhsm_repository - when using the ``purge`` option, the ``repositories``
dictionary element in the returned JSON is now properly updated according
to the pruning operation
(https://github.com/ansible-collections/community.general/pull/6676).
- rundeck - fix ``TypeError`` on 404 API response (https://github.com/ansible-collections/community.general/pull/6983).
- selective callback plugin - fix length of task name lines in output always being 3 characters longer than desired (https://github.com/ansible-collections/community.general/pull/7374).
- snap - an exception was being raised when snap list was empty (https://github.com/ansible-collections/community.general/pull/7124, https://github.com/ansible-collections/community.general/issues/7120).
- snap - assume default track ``latest`` in parameter ``channel`` when not specified (https://github.com/ansible-collections/community.general/pull/6835, https://github.com/ansible-collections/community.general/issues/6821).
- snap - change the change detection mechanism from "parsing installation" to "comparing end state with initial state" (https://github.com/ansible-collections/community.general/pull/7340, https://github.com/ansible-collections/community.general/issues/7265).
- snap - fix crash when multiple snaps are specified and one has ``---`` in its description (https://github.com/ansible-collections/community.general/pull/7046).
- snap - fix the processing of the commands' output, stripping spaces and newlines from it (https://github.com/ansible-collections/community.general/pull/6826, https://github.com/ansible-collections/community.general/issues/6803).
- sorcery - fix interruption of the multi-stage process (https://github.com/ansible-collections/community.general/pull/7012).
- sorcery - fix queue generation before the whole system rebuild (https://github.com/ansible-collections/community.general/pull/7012).
- sorcery - latest state no longer triggers update_cache (https://github.com/ansible-collections/community.general/pull/7012).
- terraform - prevents ``-backend-config`` option double encapsulating with ``shlex_quote`` function. (https://github.com/ansible-collections/community.general/pull/7301).
- tss lookup plugin - fix multiple issues when using ``fetch_attachments=true`` (https://github.com/ansible-collections/community.general/pull/6720).
- zypper - added handling of zypper exitcode 102. Changed state is set correctly now and rc 102 is still preserved to be evaluated by the playbook (https://github.com/ansible-collections/community.general/pull/6534).
Known Issues
------------
- Ansible markup will show up in raw form on ansible-doc text output for ansible-core before 2.15. If you have trouble deciphering the documentation markup, please upgrade to ansible-core 2.15 (or newer), or read the HTML documentation on https://docs.ansible.com/ansible/devel/collections/community/general/ (https://github.com/ansible-collections/community.general/pull/6539).
New Plugins
-----------
Lookup
~~~~~~
- bitwarden_secrets_manager - Retrieve secrets from Bitwarden Secrets Manager
New Modules
-----------
- consul_policy - Manipulate Consul policies
- consul_role - Manipulate Consul roles
- facter_facts - Runs the discovery program C(facter) on the remote system and return Ansible facts
- gio_mime - Set default handler for MIME type, for applications using Gnome GIO
- gitlab_instance_variable - Creates, updates, or deletes GitLab instance variables
- gitlab_merge_request - Create, update, or delete GitLab merge requests
- jenkins_build_info - Get information about Jenkins builds
- keycloak_authentication_required_actions - Allows administration of Keycloak authentication required actions
- keycloak_authz_custom_policy - Allows administration of Keycloak client custom Javascript policies via Keycloak API
- keycloak_authz_permission - Allows administration of Keycloak client authorization permissions via Keycloak API
- keycloak_authz_permission_info - Query Keycloak client authorization permissions information
- keycloak_realm_key - Allows administration of Keycloak realm keys via Keycloak API
- keycloak_user - Create and configure a user in Keycloak
- lvg_rename - Renames LVM volume groups
- pnpm - Manage node.js packages with pnpm
- proxmox_pool - Pool management for Proxmox VE cluster
- proxmox_pool_member - Add or delete members from Proxmox VE cluster pools
- proxmox_vm_info - Retrieve information about one or more Proxmox VE virtual machines
- simpleinit_msb - Manage services on Source Mage GNU/Linux

View File

@@ -31,9 +31,7 @@ Also, consider taking up a valuable, reviewed, but abandoned pull request which
* Try committing your changes with an informative but short commit message.
* Do not squash your commits and force-push to your branch if not needed. Reviews of your pull request are much easier with individual commits to comprehend the pull request history. All commits of your pull request branch will be squashed into one commit by GitHub upon merge.
* Do not add merge commits to your PR. The bot will complain and you will have to rebase ([instructions for rebasing](https://docs.ansible.com/ansible/latest/dev_guide/developing_rebasing.html)) to remove them before your PR can be merged. To avoid that git automatically does merges during pulls, you can configure it to do rebases instead by running `git config pull.rebase true` inside the repository checkout.
* Make sure your PR includes a [changelog fragment](https://docs.ansible.com/ansible/devel/community/collection_development_process.html#creating-a-changelog-fragment).
* You must not include a fragment for new modules or new plugins. Also you shouldn't include one for docs-only changes. (If you're not sure, simply don't include one, we'll tell you whether one is needed or not :) )
* Please always include a link to the pull request itself, and if the PR is about an issue, also a link to the issue. Also make sure the fragment ends with a period, and begins with a lower-case letter after `-`. (Again, if you don't do this, we'll add suggestions to fix it, so don't worry too much :) )
* Make sure your PR includes a [changelog fragment](https://docs.ansible.com/ansible/devel/community/development_process.html#creating-changelog-fragments). (You must not include a fragment for new modules or new plugins. Also you shouldn't include one for docs-only changes. If you're not sure, simply don't include one, we'll tell you whether one is needed or not :) )
* Avoid reformatting unrelated parts of the codebase in your PR. These types of changes will likely be requested for reversion, create additional work for reviewers, and may cause approval to be delayed.
You can also read [our Quick-start development guide](https://github.com/ansible/community-docs/blob/main/create_pr_quick_start_guide.rst).

View File

@@ -6,10 +6,9 @@ SPDX-License-Identifier: GPL-3.0-or-later
# Community General Collection
[![Build Status](https://dev.azure.com/ansible/community.general/_apis/build/status/CI?branchName=stable-9)](https://dev.azure.com/ansible/community.general/_build?definitionId=31)
[![Build Status](https://dev.azure.com/ansible/community.general/_apis/build/status/CI?branchName=stable-8)](https://dev.azure.com/ansible/community.general/_build?definitionId=31)
[![EOL CI](https://github.com/ansible-collections/community.general/workflows/EOL%20CI/badge.svg?event=push)](https://github.com/ansible-collections/community.general/actions)
[![Codecov](https://img.shields.io/codecov/c/github/ansible-collections/community.general)](https://codecov.io/gh/ansible-collections/community.general)
[![REUSE status](https://api.reuse.software/badge/github.com/ansible-collections/community.general)](https://api.reuse.software/info/github.com/ansible-collections/community.general)
This repository contains the `community.general` Ansible Collection. The collection is a part of the Ansible package and includes many modules and plugins supported by Ansible community which are not part of more specialized community collections.
@@ -25,7 +24,7 @@ If you encounter abusive behavior violating the [Ansible Code of Conduct](https:
## Tested with Ansible
Tested with the current ansible-core 2.13, ansible-core 2.14, ansible-core 2.15, ansible-core 2.16, ansible-core 2.17 releases and the current development version of ansible-core. Ansible-core versions before 2.13.0 are not supported. This includes all ansible-base 2.10 and Ansible 2.9 releases.
Tested with the current ansible-core 2.13, ansible-core 2.14, ansible-core 2.15, ansible-core 2.16 releases and the current development version of ansible-core. Ansible-core versions before 2.13.0 are not supported. This includes all ansible-base 2.10 and Ansible 2.9 releases.
## External requirements
@@ -116,7 +115,7 @@ See the [Releasing guidelines](https://github.com/ansible/community-docs/blob/ma
## Release notes
See the [changelog](https://github.com/ansible-collections/community.general/blob/stable-9/CHANGELOG.md).
See the [changelog](https://github.com/ansible-collections/community.general/blob/stable-8/CHANGELOG.md).
## Roadmap
@@ -135,8 +134,8 @@ See [this issue](https://github.com/ansible-collections/community.general/issues
This collection is primarily licensed and distributed as a whole under the GNU General Public License v3.0 or later.
See [LICENSES/GPL-3.0-or-later.txt](https://github.com/ansible-collections/community.general/blob/stable-9/COPYING) for the full text.
See [LICENSES/GPL-3.0-or-later.txt](https://github.com/ansible-collections/community.general/blob/main/COPYING) for the full text.
Parts of the collection are licensed under the [BSD 2-Clause license](https://github.com/ansible-collections/community.general/blob/stable-9/LICENSES/BSD-2-Clause.txt), the [MIT license](https://github.com/ansible-collections/community.general/blob/stable-9/LICENSES/MIT.txt), and the [PSF 2.0 license](https://github.com/ansible-collections/community.general/blob/stable-9/LICENSES/PSF-2.0.txt).
Parts of the collection are licensed under the [BSD 2-Clause license](https://github.com/ansible-collections/community.general/blob/main/LICENSES/BSD-2-Clause.txt), the [MIT license](https://github.com/ansible-collections/community.general/blob/main/LICENSES/MIT.txt), and the [PSF 2.0 license](https://github.com/ansible-collections/community.general/blob/main/LICENSES/PSF-2.0.txt).
All files have a machine readable `SDPX-License-Identifier:` comment denoting its respective license(s) or an equivalent entry in an accompanying `.license` file. Only changelog fragments (which will not be part of a release) are covered by a blanket statement in `.reuse/dep5`. This conforms to the [REUSE specification](https://reuse.software/spec/).

File diff suppressed because it is too large Load Diff

View File

@@ -18,25 +18,20 @@ output_formats:
prelude_section_name: release_summary
prelude_section_title: Release Summary
sections:
- - major_changes
- Major Changes
- - minor_changes
- Minor Changes
- - breaking_changes
- Breaking Changes / Porting Guide
- - deprecated_features
- Deprecated Features
- - removed_features
- Removed Features (previously deprecated)
- - security_fixes
- Security Fixes
- - bugfixes
- Bugfixes
- - known_issues
- Known Issues
- - major_changes
- Major Changes
- - minor_changes
- Minor Changes
- - breaking_changes
- Breaking Changes / Porting Guide
- - deprecated_features
- Deprecated Features
- - removed_features
- Removed Features (previously deprecated)
- - security_fixes
- Security Fixes
- - bugfixes
- Bugfixes
- - known_issues
- Known Issues
title: Community General
trivial_section_name: trivial
use_fqcn: true
add_plugin_period: true
changelog_nice_yaml: true
changelog_sort: version

View File

@@ -1,7 +0,0 @@
---
# Copyright (c) Ansible Project
# 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
changelog:
write_changelog: true

View File

@@ -14,8 +14,3 @@ sections:
- guide_online
- guide_packet
- guide_scaleway
- title: Developer Guides
toctree:
- guide_deps
- guide_vardict
- guide_cmdrunner

View File

@@ -1,61 +0,0 @@
<!--
Copyright (c) Ansible Project
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
-->
# Docs helper. Create RST file.
The playbook `playbook.yml` writes a RST file that can be used in
docs/docsite/rst. The usage of this helper is recommended but not
mandatory. You can stop reading here and update the RST file manually
if you don't want to use this helper.
## Run the playbook
If you want to generate the RST file by this helper fit the variables
in the playbook and the template to your needs. Then, run the play
```sh
shell> ansible-playbook playbook.yml
```
## Copy RST to docs/docsite/rst
Copy the RST file to `docs/docsite/rst` and remove it from this
directory.
## Update the checksums
Substitute the variables and run the below commands
```sh
shell> sha1sum {{ target_vars }} > {{ target_sha1 }}
shell> sha1sum {{ file_rst }} > {{ file_sha1 }}
```
## Playbook explained
The playbook includes the variable *tests* from the integration tests
and creates the RST file from the template. The playbook will
terminate if:
* The file with the variable *tests* was changed
* The RST file was changed
This means that this helper is probably not up to date.
### The file with the variable *tests* was changed
This means that somebody updated the integration tests. Review the
changes and update the template if needed. Update the checksum to pass
the integrity test. The playbook message provides you with the
command.
### The RST file was changed
This means that somebody updated the RST file manually. Review the
changes and update the template. Update the checksum to pass the
integrity test. The playbook message provides you with the
command. Make sure that the updated template will create identical RST
file. Only then apply your changes.

View File

@@ -1,80 +0,0 @@
..
Copyright (c) Ansible Project
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
keep_keys
"""""""""
Use the filter :ansplugin:`community.general.keep_keys#filter` if you have a list of dictionaries and want to keep certain keys only.
.. note:: The output of the examples in this section use the YAML callback plugin. Quoting: "Ansible output that can be quite a bit easier to read than the default JSON formatting." See :ansplugin:`the documentation for the community.general.yaml callback plugin <community.general.yaml#callback>`.
Let us use the below list in the following examples:
.. code-block:: yaml
input:
{{ tests.0.input | to_yaml(indent=2) | indent(5) }}
{% for i in tests[0:1]|subelements('group') %}
* {{ i.1.d }}
.. code-block:: yaml+jinja
:emphasize-lines: 1
target: {{ i.1.tt }}
result: "{{ lookup('file', target ~ '/templates/' ~ i.0.template) }}"
{% endfor %}
gives
.. code-block:: yaml
:emphasize-lines: 1-
result:
{{ tests.0.result | to_yaml(indent=2) | indent(5) }}
.. versionadded:: 9.1.0
* The results of the below examples 1-5 are all the same:
.. code-block:: yaml
:emphasize-lines: 1-
result:
{{ tests.1.result | to_yaml(indent=2) | indent(5) }}
{% for i in tests[1:2]|subelements('group') %}
{{ loop.index }}. {{ i.1.d }}
.. code-block:: yaml+jinja
:emphasize-lines: 1,2
mp: {{ i.1.mp }}
target: {{ i.1.tt }}
result: "{{ lookup('file', target ~ '/templates/' ~ i.0.template) }}"
{% endfor %}
* The results of the below examples 6-9 are all the same:
.. code-block:: yaml
:emphasize-lines: 1-
result:
{{ tests.2.result | to_yaml(indent=2) | indent(5) }}
{% for i in tests[2:3]|subelements('group') %}
{{ loop.index + 5 }}. {{ i.1.d }}
.. code-block:: yaml+jinja
:emphasize-lines: 1,2
mp: {{ i.1.mp }}
target: {{ i.1.tt }}
result: "{{ lookup('file', target ~ '/templates/' ~ i.0.template) }}"
{% endfor %}

View File

@@ -1 +0,0 @@
8690afce792abc95693c2f61f743ee27388b1592 ../../rst/filter_guide-abstract_informations-lists_of_dictionaries-keep_keys.rst

View File

@@ -1,3 +0,0 @@
Copyright (c) Ansible Project
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

View File

@@ -1,79 +0,0 @@
---
# Copyright (c) Ansible Project
# 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
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# Create docs REST files
# shell> ansible-playbook playbook.yml
#
# Proofread and copy created *.rst file into the directory
# docs/docsite/rst. Do not add *.rst in this directory to the version
# control.
#
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# community.general/docs/docsite/helper/keep_keys/playbook.yml
- name: Create RST file for docs/docsite/rst
hosts: localhost
gather_facts: false
vars:
plugin: keep_keys
plugin_type: filter
docs_path:
- filter_guide
- abstract_informations
- lists_of_dictionaries
file_base: "{{ (docs_path + [plugin]) | join('-') }}"
file_rst: ../../rst/{{ file_base }}.rst
file_sha1: "{{ plugin }}.rst.sha1"
target: "../../../../tests/integration/targets/{{ plugin_type }}_{{ plugin }}"
target_vars: "{{ target }}/vars/main/tests.yml"
target_sha1: tests.yml.sha1
tasks:
- name: Test integrity tests.yml
when:
- integrity | d(true) | bool
- lookup('file', target_sha1) != lookup('pipe', 'sha1sum ' ~ target_vars)
block:
- name: Changed tests.yml
ansible.builtin.debug:
msg: |
Changed {{ target_vars }}
Review the changes and update {{ target_sha1 }}
shell> sha1sum {{ target_vars }} > {{ target_sha1 }}
- name: Changed tests.yml end host
ansible.builtin.meta: end_play
- name: Test integrity RST file
when:
- integrity | d(true) | bool
- lookup('file', file_sha1) != lookup('pipe', 'sha1sum ' ~ file_rst)
block:
- name: Changed RST file
ansible.builtin.debug:
msg: |
Changed {{ file_rst }}
Review the changes and update {{ file_sha1 }}
shell> sha1sum {{ file_rst }} > {{ file_sha1 }}
- name: Changed RST file end host
ansible.builtin.meta: end_play
- name: Include target vars
include_vars:
file: "{{ target_vars }}"
- name: Create RST file
ansible.builtin.template:
src: "{{ file_base }}.rst.j2"
dest: "{{ file_base }}.rst"

View File

@@ -1 +0,0 @@
c6fc4ee2017d9222675bcd13cc4f88ba8d14f38d ../../../../tests/integration/targets/filter_keep_keys/vars/main/tests.yml

View File

@@ -1,3 +0,0 @@
Copyright (c) Ansible Project
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

View File

@@ -2,11 +2,17 @@
# Copyright (c) Ansible Project
# 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
list1:
- {name: foo, extra: true}
- {name: bar, extra: false}
- {name: meh, extra: true}
- name: foo
extra: true
- name: bar
extra: false
- name: meh
extra: true
list2:
- {name: foo, path: /foo}
- {name: baz, path: /baz}
- name: foo
path: /foo
- name: baz
path: /baz

View File

@@ -2,12 +2,14 @@
# Copyright (c) Ansible Project
# 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
list1:
- name: myname01
param01:
x: default_value
y: default_value
list: [default_value]
list:
- default_value
- name: myname02
param01: [1, 1, 2, 3]
@@ -16,6 +18,7 @@ list2:
param01:
y: patch_value
z: patch_value
list: [patch_value]
list:
- patch_value
- name: myname02
param01: [3, 4, 4]
param01: [3, 4, 4, {key: value}]

View File

@@ -8,7 +8,7 @@
dir: example-001_vars
- debug:
var: list3
when: debug | d(false) | bool
when: debug|d(false)|bool
- template:
src: list3.out.j2
dest: example-001.out

View File

@@ -2,5 +2,6 @@
# Copyright (c) Ansible Project
# 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
list3: "{{ list1 |
list3: "{{ list1|
community.general.lists_mergeby(list2, 'name') }}"

View File

@@ -8,7 +8,7 @@
dir: example-002_vars
- debug:
var: list3
when: debug | d(false) | bool
when: debug|d(false)|bool
- template:
src: list3.out.j2
dest: example-002.out

View File

@@ -2,5 +2,6 @@
# Copyright (c) Ansible Project
# 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
list3: "{{ [list1, list2] |
list3: "{{ [list1, list2]|
community.general.lists_mergeby('name') }}"

View File

@@ -8,7 +8,7 @@
dir: example-003_vars
- debug:
var: list3
when: debug | d(false) | bool
when: debug|d(false)|bool
- template:
src: list3.out.j2
dest: example-003.out

View File

@@ -2,6 +2,7 @@
# Copyright (c) Ansible Project
# 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
list3: "{{ [list1, list2] |
list3: "{{ [list1, list2]|
community.general.lists_mergeby('name',
recursive=true) }}"

View File

@@ -8,7 +8,7 @@
dir: example-004_vars
- debug:
var: list3
when: debug | d(false) | bool
when: debug|d(false)|bool
- template:
src: list3.out.j2
dest: example-004.out

View File

@@ -2,7 +2,8 @@
# Copyright (c) Ansible Project
# 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
list3: "{{ [list1, list2] |
list3: "{{ [list1, list2]|
community.general.lists_mergeby('name',
recursive=true,
list_merge='keep') }}"

View File

@@ -8,7 +8,7 @@
dir: example-005_vars
- debug:
var: list3
when: debug | d(false) | bool
when: debug|d(false)|bool
- template:
src: list3.out.j2
dest: example-005.out

View File

@@ -2,7 +2,8 @@
# Copyright (c) Ansible Project
# 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
list3: "{{ [list1, list2] |
list3: "{{ [list1, list2]|
community.general.lists_mergeby('name',
recursive=true,
list_merge='append') }}"

View File

@@ -8,7 +8,7 @@
dir: example-006_vars
- debug:
var: list3
when: debug | d(false) | bool
when: debug|d(false)|bool
- template:
src: list3.out.j2
dest: example-006.out

View File

@@ -2,7 +2,8 @@
# Copyright (c) Ansible Project
# 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
list3: "{{ [list1, list2] |
list3: "{{ [list1, list2]|
community.general.lists_mergeby('name',
recursive=true,
list_merge='prepend') }}"

View File

@@ -8,7 +8,7 @@
dir: example-007_vars
- debug:
var: list3
when: debug|d(false) | bool
when: debug|d(false)|bool
- template:
src: list3.out.j2
dest: example-007.out

View File

@@ -2,7 +2,8 @@
# Copyright (c) Ansible Project
# 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
list3: "{{ [list1, list2] |
list3: "{{ [list1, list2]|
community.general.lists_mergeby('name',
recursive=true,
list_merge='append_rp') }}"

View File

@@ -8,7 +8,7 @@
dir: example-008_vars
- debug:
var: list3
when: debug | d(false) | bool
when: debug|d(false)|bool
- template:
src: list3.out.j2
dest: example-008.out

View File

@@ -2,7 +2,8 @@
# Copyright (c) Ansible Project
# 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
list3: "{{ [list1, list2] |
list3: "{{ [list1, list2]|
community.general.lists_mergeby('name',
recursive=true,
list_merge='prepend_rp') }}"

View File

@@ -1,14 +0,0 @@
---
# Copyright (c) Ansible Project
# 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: 9. Merge single list by common attribute 'name'
include_vars:
dir: example-009_vars
- debug:
var: list3
when: debug | d(false) | bool
- template:
src: list3.out.j2
dest: example-009.out

View File

@@ -1 +0,0 @@
../default-common.yml

View File

@@ -1,6 +0,0 @@
---
# Copyright (c) Ansible Project
# 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
list3: "{{ [list1 + list2, []] |
community.general.lists_mergeby('name') }}"

View File

@@ -4,75 +4,51 @@
# SPDX-License-Identifier: GPL-3.0-or-later
examples:
- title: Two lists
description: 'In the example below the lists are merged by the attribute ``name``:'
- label: 'In the example below the lists are merged by the attribute ``name``:'
file: example-001_vars/list3.yml
lang: 'yaml+jinja'
- title:
description: 'This produces:'
- label: 'This produces:'
file: example-001.out
lang: 'yaml'
- title: List of two lists
description: 'It is possible to use a list of lists as an input of the filter:'
- label: 'It is possible to use a list of lists as an input of the filter:'
file: example-002_vars/list3.yml
lang: 'yaml+jinja'
- title:
description: 'This produces the same result as in the previous example:'
- label: 'This produces the same result as in the previous example:'
file: example-002.out
lang: 'yaml'
- title: Single list
description: 'It is possible to merge single list:'
file: example-009_vars/list3.yml
lang: 'yaml+jinja'
- title:
description: 'This produces the same result as in the previous example:'
file: example-009.out
lang: 'yaml'
- title: list_merge=replace (default)
description: 'Example :ansopt:`community.general.lists_mergeby#filter:list_merge=replace` (default):'
- label: 'Example ``list_merge=replace`` (default):'
file: example-003_vars/list3.yml
lang: 'yaml+jinja'
- title:
description: 'This produces:'
- label: 'This produces:'
file: example-003.out
lang: 'yaml'
- title: list_merge=keep
description: 'Example :ansopt:`community.general.lists_mergeby#filter:list_merge=keep`:'
- label: 'Example ``list_merge=keep``:'
file: example-004_vars/list3.yml
lang: 'yaml+jinja'
- title:
description: 'This produces:'
- label: 'This produces:'
file: example-004.out
lang: 'yaml'
- title: list_merge=append
description: 'Example :ansopt:`community.general.lists_mergeby#filter:list_merge=append`:'
- label: 'Example ``list_merge=append``:'
file: example-005_vars/list3.yml
lang: 'yaml+jinja'
- title:
description: 'This produces:'
- label: 'This produces:'
file: example-005.out
lang: 'yaml'
- title: list_merge=prepend
description: 'Example :ansopt:`community.general.lists_mergeby#filter:list_merge=prepend`:'
- label: 'Example ``list_merge=prepend``:'
file: example-006_vars/list3.yml
lang: 'yaml+jinja'
- title:
description: 'This produces:'
- label: 'This produces:'
file: example-006.out
lang: 'yaml'
- title: list_merge=append_rp
description: 'Example :ansopt:`community.general.lists_mergeby#filter:list_merge=append_rp`:'
- label: 'Example ``list_merge=append_rp``:'
file: example-007_vars/list3.yml
lang: 'yaml+jinja'
- title:
description: 'This produces:'
- label: 'This produces:'
file: example-007.out
lang: 'yaml'
- title: list_merge=prepend_rp
description: 'Example :ansopt:`community.general.lists_mergeby#filter:list_merge=prepend_rp`:'
- label: 'Example ``list_merge=prepend_rp``:'
file: example-008_vars/list3.yml
lang: 'yaml+jinja'
- title:
description: 'This produces:'
- label: 'This produces:'
file: example-008.out
lang: 'yaml'

View File

@@ -4,10 +4,10 @@
SPDX-License-Identifier: GPL-3.0-or-later
{% for i in examples %}
{{ i.description }}
{{ i.label }}
.. code-block:: {{ i.lang }}
{{ lookup('file', i.file) | split('\n') | reject('match', '^(#|---)') | join ('\n') | indent(2) }}
{{ lookup('file', i.file)|indent(2) }}
{% endfor %}

View File

@@ -1,7 +0,0 @@
---
# Copyright (c) Ansible Project
# 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
examples_one: true
examples_all: true
merging_lists_of_dictionaries: true

View File

@@ -6,69 +6,57 @@
Merging lists of dictionaries
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
If you have two or more lists of dictionaries and want to combine them into a list of merged dictionaries, where the dictionaries are merged by an attribute, you can use the :ansplugin:`community.general.lists_mergeby <community.general.lists_mergeby#filter>` filter.
If you have two or more lists of dictionaries and want to combine them into a list of merged dictionaries, where the dictionaries are merged by an attribute, you can use the ``lists_mergeby`` filter.
.. note:: The output of the examples in this section use the YAML callback plugin. Quoting: "Ansible output that can be quite a bit easier to read than the default JSON formatting." See the documentation for the :ansplugin:`community.general.yaml callback plugin <community.general.yaml#callback>`.
.. note:: The output of the examples in this section use the YAML callback plugin. Quoting: "Ansible output that can be quite a bit easier to read than the default JSON formatting." See :ref:`the documentation for the community.general.yaml callback plugin <ansible_collections.community.general.yaml_callback>`.
Let us use the lists below in the following examples:
.. code-block:: yaml
{{ lookup('file', 'default-common.yml') | split('\n') | reject('match', '^(#|---)') | join ('\n') | indent(2) }}
{{ lookup('file', 'default-common.yml')|indent(2) }}
{% for i in examples[0:2] %}
{% if i.title | d('', true) | length > 0 %}
{{ i.title }}
{{ "%s" % ('"' * i.title|length) }}
{% endif %}
{{ i.description }}
{{ i.label }}
.. code-block:: {{ i.lang }}
{{ lookup('file', i.file) | split('\n') | reject('match', '^(#|---)') | join ('\n') | indent(2) }}
{{ lookup('file', i.file)|indent(2) }}
{% endfor %}
.. versionadded:: 2.0.0
{% for i in examples[2:6] %}
{% if i.title | d('', true) | length > 0 %}
{{ i.title }}
{{ "%s" % ('"' * i.title|length) }}
{% endif %}
{{ i.description }}
{% for i in examples[2:4] %}
{{ i.label }}
.. code-block:: {{ i.lang }}
{{ lookup('file', i.file) | split('\n') | reject('match', '^(#|---)') | join ('\n') | indent(2) }}
{{ lookup('file', i.file)|indent(2) }}
{% endfor %}
The filter also accepts two optional parameters: :ansopt:`community.general.lists_mergeby#filter:recursive` and :ansopt:`community.general.lists_mergeby#filter:list_merge`. This is available since community.general 4.4.0.
The filter also accepts two optional parameters: ``recursive`` and ``list_merge``. These parameters are only supported when used with ansible-base 2.10 or ansible-core, but not with Ansible 2.9. This is available since community.general 4.4.0.
**recursive**
Is a boolean, default to ``false``. Should the :ansplugin:`community.general.lists_mergeby#filter` filter recursively merge nested hashes. Note: It does not depend on the value of the ``hash_behaviour`` setting in ``ansible.cfg``.
Is a boolean, default to ``False``. Should the ``community.general.lists_mergeby`` recursively merge nested hashes. Note: It does not depend on the value of the ``hash_behaviour`` setting in ``ansible.cfg``.
**list_merge**
Is a string, its possible values are :ansval:`replace` (default), :ansval:`keep`, :ansval:`append`, :ansval:`prepend`, :ansval:`append_rp` or :ansval:`prepend_rp`. It modifies the behaviour of :ansplugin:`community.general.lists_mergeby#filter` when the hashes to merge contain arrays/lists.
Is a string, its possible values are ``replace`` (default), ``keep``, ``append``, ``prepend``, ``append_rp`` or ``prepend_rp``. It modifies the behaviour of ``community.general.lists_mergeby`` when the hashes to merge contain arrays/lists.
The examples below set :ansopt:`community.general.lists_mergeby#filter:recursive=true` and display the differences among all six options of :ansopt:`community.general.lists_mergeby#filter:list_merge`. Functionality of the parameters is exactly the same as in the filter :ansplugin:`ansible.builtin.combine#filter`. See :ref:`Combining hashes/dictionaries <combine_filter>` to learn details about these options.
The examples below set ``recursive=true`` and display the differences among all six options of ``list_merge``. Functionality of the parameters is exactly the same as in the filter ``combine``. See :ref:`Combining hashes/dictionaries <combine_filter>` to learn details about these options.
Let us use the lists below in the following examples
.. code-block:: yaml
{{ lookup('file', 'default-recursive-true.yml') | split('\n') | reject('match', '^(#|---)') | join ('\n') |indent(2) }}
{{ lookup('file', 'default-recursive-true.yml')|indent(2) }}
{% for i in examples[6:] %}
{% if i.title | d('', true) | length > 0 %}
{{ i.title }}
{{ "%s" % ('"' * i.title|length) }}
{% endif %}
{{ i.description }}
{% for i in examples[4:16] %}
{{ i.label }}
.. code-block:: {{ i.lang }}
{{ lookup('file', i.file) | split('\n') | reject('match', '^(#|---)') | join ('\n') |indent(2) }}
{{ lookup('file', i.file)|indent(2) }}
{% endfor %}

View File

@@ -4,4 +4,4 @@ GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://w
SPDX-License-Identifier: GPL-3.0-or-later
#}
list3:
{{ list3 | to_yaml(indent=2, sort_keys=false) | indent(2) }}
{{ list3|to_nice_yaml(indent=0) }}

View File

@@ -5,7 +5,7 @@
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# 1) Run all examples and create example-XXX.out
# shell> ansible-playbook playbook.yml -e examples_one=true
# shell> ansible-playbook playbook.yml -e examples=true
#
# 2) Optionally, for testing, create examples_all.rst
# shell> ansible-playbook playbook.yml -e examples_all=true
@@ -45,20 +45,18 @@
tags: t007
- import_tasks: example-008.yml
tags: t008
- import_tasks: example-009.yml
tags: t009
when: examples_one | d(false) | bool
when: examples|d(false)|bool
- block:
- include_vars: examples.yml
- template:
src: examples_all.rst.j2
dest: examples_all.rst
when: examples_all | d(false) | bool
when: examples_all|d(false)|bool
- block:
- include_vars: examples.yml
- template:
src: filter_guide_abstract_informations_merging_lists_of_dictionaries.rst.j2
dest: filter_guide_abstract_informations_merging_lists_of_dictionaries.rst
when: merging_lists_of_dictionaries | d(false) | bool
when: merging_lists_of_dictionaries|d(false)|bool

View File

@@ -1,61 +0,0 @@
<!--
Copyright (c) Ansible Project
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
-->
# Docs helper. Create RST file.
The playbook `playbook.yml` writes a RST file that can be used in
docs/docsite/rst. The usage of this helper is recommended but not
mandatory. You can stop reading here and update the RST file manually
if you don't want to use this helper.
## Run the playbook
If you want to generate the RST file by this helper fit the variables
in the playbook and the template to your needs. Then, run the play
```sh
shell> ansible-playbook playbook.yml
```
## Copy RST to docs/docsite/rst
Copy the RST file to `docs/docsite/rst` and remove it from this
directory.
## Update the checksums
Substitute the variables and run the below commands
```sh
shell> sha1sum {{ target_vars }} > {{ target_sha1 }}
shell> sha1sum {{ file_rst }} > {{ file_sha1 }}
```
## Playbook explained
The playbook includes the variable *tests* from the integration tests
and creates the RST file from the template. The playbook will
terminate if:
* The file with the variable *tests* was changed
* The RST file was changed
This means that this helper is probably not up to date.
### The file with the variable *tests* was changed
This means that somebody updated the integration tests. Review the
changes and update the template if needed. Update the checksum to pass
the integrity test. The playbook message provides you with the
command.
### The RST file was changed
This means that somebody updated the RST file manually. Review the
changes and update the template. Update the checksum to pass the
integrity test. The playbook message provides you with the
command. Make sure that the updated template will create identical RST
file. Only then apply your changes.

View File

@@ -1,80 +0,0 @@
..
Copyright (c) Ansible Project
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
remove_keys
"""""""""""
Use the filter :ansplugin:`community.general.remove_keys#filter` if you have a list of dictionaries and want to remove certain keys.
.. note:: The output of the examples in this section use the YAML callback plugin. Quoting: "Ansible output that can be quite a bit easier to read than the default JSON formatting." See See :ansplugin:`the documentation for the community.general.yaml callback plugin <community.general.yaml#callback>`.
Let us use the below list in the following examples:
.. code-block:: yaml
input:
{{ tests.0.input | to_yaml(indent=2) | indent(5) }}
{% for i in tests[0:1]|subelements('group') %}
* {{ i.1.d }}
.. code-block:: yaml+jinja
:emphasize-lines: 1
target: {{ i.1.tt }}
result: "{{ lookup('file', target ~ '/templates/' ~ i.0.template) }}"
{% endfor %}
gives
.. code-block:: yaml
:emphasize-lines: 1-
result:
{{ tests.0.result | to_yaml(indent=2) | indent(5) }}
.. versionadded:: 9.1.0
* The results of the below examples 1-5 are all the same:
.. code-block:: yaml
:emphasize-lines: 1-
result:
{{ tests.1.result | to_yaml(indent=2) | indent(5) }}
{% for i in tests[1:2]|subelements('group') %}
{{ loop.index }}. {{ i.1.d }}
.. code-block:: yaml+jinja
:emphasize-lines: 1,2
mp: {{ i.1.mp }}
target: {{ i.1.tt }}
result: "{{ lookup('file', target ~ '/templates/' ~ i.0.template) }}"
{% endfor %}
* The results of the below examples 6-9 are all the same:
.. code-block:: yaml
:emphasize-lines: 1-
result:
{{ tests.2.result | to_yaml(indent=2) | indent(5) }}
{% for i in tests[2:3]|subelements('group') %}
{{ loop.index + 5 }}. {{ i.1.d }}
.. code-block:: yaml+jinja
:emphasize-lines: 1,2
mp: {{ i.1.mp }}
target: {{ i.1.tt }}
result: "{{ lookup('file', target ~ '/templates/' ~ i.0.template) }}"
{% endfor %}

View File

@@ -1,79 +0,0 @@
---
# Copyright (c) Ansible Project
# 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
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# Create docs REST files
# shell> ansible-playbook playbook.yml
#
# Proofread and copy created *.rst file into the directory
# docs/docsite/rst. Do not add *.rst in this directory to the version
# control.
#
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# community.general/docs/docsite/helper/remove_keys/playbook.yml
- name: Create RST file for docs/docsite/rst
hosts: localhost
gather_facts: false
vars:
plugin: remove_keys
plugin_type: filter
docs_path:
- filter_guide
- abstract_informations
- lists_of_dictionaries
file_base: "{{ (docs_path + [plugin]) | join('-') }}"
file_rst: ../../rst/{{ file_base }}.rst
file_sha1: "{{ plugin }}.rst.sha1"
target: "../../../../tests/integration/targets/{{ plugin_type }}_{{ plugin }}"
target_vars: "{{ target }}/vars/main/tests.yml"
target_sha1: tests.yml.sha1
tasks:
- name: Test integrity tests.yml
when:
- integrity | d(true) | bool
- lookup('file', target_sha1) != lookup('pipe', 'sha1sum ' ~ target_vars)
block:
- name: Changed tests.yml
ansible.builtin.debug:
msg: |
Changed {{ target_vars }}
Review the changes and update {{ target_sha1 }}
shell> sha1sum {{ target_vars }} > {{ target_sha1 }}
- name: Changed tests.yml end host
ansible.builtin.meta: end_play
- name: Test integrity RST file
when:
- integrity | d(true) | bool
- lookup('file', file_sha1) != lookup('pipe', 'sha1sum ' ~ file_rst)
block:
- name: Changed RST file
ansible.builtin.debug:
msg: |
Changed {{ file_rst }}
Review the changes and update {{ file_sha1 }}
shell> sha1sum {{ file_rst }} > {{ file_sha1 }}
- name: Changed RST file end host
ansible.builtin.meta: end_play
- name: Include target vars
include_vars:
file: "{{ target_vars }}"
- name: Create RST file
ansible.builtin.template:
src: "{{ file_base }}.rst.j2"
dest: "{{ file_base }}.rst"

View File

@@ -1 +0,0 @@
3cc606b42e3d450cf6323f25930f7c5a591fa086 ../../rst/filter_guide-abstract_informations-lists_of_dictionaries-remove_keys.rst

View File

@@ -1,3 +0,0 @@
Copyright (c) Ansible Project
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

View File

@@ -1 +0,0 @@
0554335045f02d8c37b824355b0cf86864cee9a5 ../../../../tests/integration/targets/filter_remove_keys/vars/main/tests.yml

View File

@@ -1,3 +0,0 @@
Copyright (c) Ansible Project
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

View File

@@ -1,61 +0,0 @@
<!--
Copyright (c) Ansible Project
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
-->
# Docs helper. Create RST file.
The playbook `playbook.yml` writes a RST file that can be used in
docs/docsite/rst. The usage of this helper is recommended but not
mandatory. You can stop reading here and update the RST file manually
if you don't want to use this helper.
## Run the playbook
If you want to generate the RST file by this helper fit the variables
in the playbook and the template to your needs. Then, run the play
```sh
shell> ansible-playbook playbook.yml
```
## Copy RST to docs/docsite/rst
Copy the RST file to `docs/docsite/rst` and remove it from this
directory.
## Update the checksums
Substitute the variables and run the below commands
```sh
shell> sha1sum {{ target_vars }} > {{ target_sha1 }}
shell> sha1sum {{ file_rst }} > {{ file_sha1 }}
```
## Playbook explained
The playbook includes the variable *tests* from the integration tests
and creates the RST file from the template. The playbook will
terminate if:
* The file with the variable *tests* was changed
* The RST file was changed
This means that this helper is probably not up to date.
### The file with the variable *tests* was changed
This means that somebody updated the integration tests. Review the
changes and update the template if needed. Update the checksum to pass
the integrity test. The playbook message provides you with the
command.
### The RST file was changed
This means that somebody updated the RST file manually. Review the
changes and update the template. Update the checksum to pass the
integrity test. The playbook message provides you with the
command. Make sure that the updated template will create identical RST
file. Only then apply your changes.

View File

@@ -1,110 +0,0 @@
..
Copyright (c) Ansible Project
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
replace_keys
""""""""""""
Use the filter :ansplugin:`community.general.replace_keys#filter` if you have a list of dictionaries and want to replace certain keys.
.. note:: The output of the examples in this section use the YAML callback plugin. Quoting: "Ansible output that can be quite a bit easier to read than the default JSON formatting." See :ansplugin:`the documentation for the community.general.yaml callback plugin <community.general.yaml#callback>`.
Let us use the below list in the following examples:
.. code-block:: yaml
input:
{{ tests.0.input | to_yaml(indent=2) | indent(5) }}
{% for i in tests[0:1]|subelements('group') %}
* {{ i.1.d }}
.. code-block:: yaml+jinja
:emphasize-lines: 1-3
target:
{{ i.1.tt | to_yaml(indent=2) | indent(5) }}
result: "{{ lookup('file', target ~ '/templates/' ~ i.0.template) }}"
{% endfor %}
gives
.. code-block:: yaml
:emphasize-lines: 1-
result:
{{ tests.0.result | to_yaml(indent=2) | indent(5) }}
.. versionadded:: 9.1.0
* The results of the below examples 1-3 are all the same:
.. code-block:: yaml
:emphasize-lines: 1-
result:
{{ tests.1.result | to_yaml(indent=2) | indent(5) }}
{% for i in tests[1:2]|subelements('group') %}
{{ loop.index }}. {{ i.1.d }}
.. code-block:: yaml+jinja
:emphasize-lines: 1-4
mp: {{ i.1.mp }}
target:
{{ i.1.tt | to_yaml(indent=2) | indent(5) }}
result: "{{ lookup('file', target ~ '/templates/' ~ i.0.template) }}"
{% endfor %}
* The results of the below examples 4-5 are the same:
.. code-block:: yaml
:emphasize-lines: 1-
result:
{{ tests.2.result | to_yaml(indent=2) | indent(5) }}
{% for i in tests[2:3]|subelements('group') %}
{{ loop.index + 3 }}. {{ i.1.d }}
.. code-block:: yaml+jinja
:emphasize-lines: 1-3
mp: {{ i.1.mp }}
target:
{{ i.1.tt | to_yaml(indent=2) | indent(5) }}
result: "{{ lookup('file', target ~ '/templates/' ~ i.0.template) }}"
{% endfor %}
{% for i in tests[3:4]|subelements('group') %}
{{ loop.index + 5 }}. {{ i.1.d }}
.. code-block:: yaml
:emphasize-lines: 1-
input:
{{ i.0.input | to_yaml(indent=2) | indent(5) }}
.. code-block:: yaml+jinja
:emphasize-lines: 1-4
mp: {{ i.1.mp }}
target:
{{ i.1.tt | to_yaml(indent=2) | indent(5) }}
result: "{{ lookup('file', target ~ '/templates/' ~ i.0.template) }}"
gives
.. code-block:: yaml
:emphasize-lines: 1-
result:
{{ i.0.result | to_yaml(indent=2) | indent(5) }}
{% endfor %}

View File

@@ -1,79 +0,0 @@
---
# Copyright (c) Ansible Project
# 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
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# Create docs REST files
# shell> ansible-playbook playbook.yml
#
# Proofread and copy created *.rst file into the directory
# docs/docsite/rst. Do not add *.rst in this directory to the version
# control.
#
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# community.general/docs/docsite/helper/replace_keys/playbook.yml
- name: Create RST file for docs/docsite/rst
hosts: localhost
gather_facts: false
vars:
plugin: replace_keys
plugin_type: filter
docs_path:
- filter_guide
- abstract_informations
- lists_of_dictionaries
file_base: "{{ (docs_path + [plugin]) | join('-') }}"
file_rst: ../../rst/{{ file_base }}.rst
file_sha1: "{{ plugin }}.rst.sha1"
target: "../../../../tests/integration/targets/{{ plugin_type }}_{{ plugin }}"
target_vars: "{{ target }}/vars/main/tests.yml"
target_sha1: tests.yml.sha1
tasks:
- name: Test integrity tests.yml
when:
- integrity | d(true) | bool
- lookup('file', target_sha1) != lookup('pipe', 'sha1sum ' ~ target_vars)
block:
- name: Changed tests.yml
ansible.builtin.debug:
msg: |
Changed {{ target_vars }}
Review the changes and update {{ target_sha1 }}
shell> sha1sum {{ target_vars }} > {{ target_sha1 }}
- name: Changed tests.yml end host
ansible.builtin.meta: end_play
- name: Test integrity RST file
when:
- integrity | d(true) | bool
- lookup('file', file_sha1) != lookup('pipe', 'sha1sum ' ~ file_rst)
block:
- name: Changed RST file
ansible.builtin.debug:
msg: |
Changed {{ file_rst }}
Review the changes and update {{ file_sha1 }}
shell> sha1sum {{ file_rst }} > {{ file_sha1 }}
- name: Changed RST file end host
ansible.builtin.meta: end_play
- name: Include target vars
include_vars:
file: "{{ target_vars }}"
- name: Create RST file
ansible.builtin.template:
src: "{{ file_base }}.rst.j2"
dest: "{{ file_base }}.rst"

View File

@@ -1 +0,0 @@
403f23c02ac02b1c3b611cb14f9b3ba59dc3f587 ../../rst/filter_guide-abstract_informations-lists_of_dictionaries-replace_keys.rst

View File

@@ -1,3 +0,0 @@
Copyright (c) Ansible Project
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

View File

@@ -1 +0,0 @@
2e54f3528c95cca746d5748f1ed7ada56ad0890e ../../../../tests/integration/targets/filter_replace_keys/vars/main/tests.yml

View File

@@ -1,3 +0,0 @@
Copyright (c) Ansible Project
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

View File

@@ -25,7 +25,3 @@ communication:
mailing_lists:
- topic: Ansible Project List
url: https://groups.google.com/g/ansible-project
forums:
- topic: Ansible Forum
# The following URL directly points to the "Get Help" section
url: https://forum.ansible.com/c/help/6/none

View File

@@ -1,151 +0,0 @@
..
Copyright (c) Ansible Project
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
keep_keys
"""""""""
Use the filter :ansplugin:`community.general.keep_keys#filter` if you have a list of dictionaries and want to keep certain keys only.
.. note:: The output of the examples in this section use the YAML callback plugin. Quoting: "Ansible output that can be quite a bit easier to read than the default JSON formatting." See :ansplugin:`the documentation for the community.general.yaml callback plugin <community.general.yaml#callback>`.
Let us use the below list in the following examples:
.. code-block:: yaml
input:
- k0_x0: A0
k1_x1: B0
k2_x2: [C0]
k3_x3: foo
- k0_x0: A1
k1_x1: B1
k2_x2: [C1]
k3_x3: bar
* By default, match keys that equal any of the items in the target.
.. code-block:: yaml+jinja
:emphasize-lines: 1
target: ['k0_x0', 'k1_x1']
result: "{{ input | community.general.keep_keys(target=target) }}"
gives
.. code-block:: yaml
:emphasize-lines: 1-
result:
- {k0_x0: A0, k1_x1: B0}
- {k0_x0: A1, k1_x1: B1}
.. versionadded:: 9.1.0
* The results of the below examples 1-5 are all the same:
.. code-block:: yaml
:emphasize-lines: 1-
result:
- {k0_x0: A0, k1_x1: B0}
- {k0_x0: A1, k1_x1: B1}
1. Match keys that equal any of the items in the target.
.. code-block:: yaml+jinja
:emphasize-lines: 1,2
mp: equal
target: ['k0_x0', 'k1_x1']
result: "{{ input | community.general.keep_keys(target=target, matching_parameter=mp) }}"
2. Match keys that start with any of the items in the target.
.. code-block:: yaml+jinja
:emphasize-lines: 1,2
mp: starts_with
target: ['k0', 'k1']
result: "{{ input | community.general.keep_keys(target=target, matching_parameter=mp) }}"
3. Match keys that end with any of the items in target.
.. code-block:: yaml+jinja
:emphasize-lines: 1,2
mp: ends_with
target: ['x0', 'x1']
result: "{{ input | community.general.keep_keys(target=target, matching_parameter=mp) }}"
4. Match keys by the regex.
.. code-block:: yaml+jinja
:emphasize-lines: 1,2
mp: regex
target: ['^.*[01]_x.*$']
result: "{{ input | community.general.keep_keys(target=target, matching_parameter=mp) }}"
5. Match keys by the regex.
.. code-block:: yaml+jinja
:emphasize-lines: 1,2
mp: regex
target: ^.*[01]_x.*$
result: "{{ input | community.general.keep_keys(target=target, matching_parameter=mp) }}"
* The results of the below examples 6-9 are all the same:
.. code-block:: yaml
:emphasize-lines: 1-
result:
- {k0_x0: A0}
- {k0_x0: A1}
6. Match keys that equal the target.
.. code-block:: yaml+jinja
:emphasize-lines: 1,2
mp: equal
target: k0_x0
result: "{{ input | community.general.keep_keys(target=target, matching_parameter=mp) }}"
7. Match keys that start with the target.
.. code-block:: yaml+jinja
:emphasize-lines: 1,2
mp: starts_with
target: k0
result: "{{ input | community.general.keep_keys(target=target, matching_parameter=mp) }}"
8. Match keys that end with the target.
.. code-block:: yaml+jinja
:emphasize-lines: 1,2
mp: ends_with
target: x0
result: "{{ input | community.general.keep_keys(target=target, matching_parameter=mp) }}"
9. Match keys by the regex.
.. code-block:: yaml+jinja
:emphasize-lines: 1,2
mp: regex
target: ^.*0_x.*$
result: "{{ input | community.general.keep_keys(target=target, matching_parameter=mp) }}"

View File

@@ -1,159 +0,0 @@
..
Copyright (c) Ansible Project
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
remove_keys
"""""""""""
Use the filter :ansplugin:`community.general.remove_keys#filter` if you have a list of dictionaries and want to remove certain keys.
.. note:: The output of the examples in this section use the YAML callback plugin. Quoting: "Ansible output that can be quite a bit easier to read than the default JSON formatting." See See :ansplugin:`the documentation for the community.general.yaml callback plugin <community.general.yaml#callback>`.
Let us use the below list in the following examples:
.. code-block:: yaml
input:
- k0_x0: A0
k1_x1: B0
k2_x2: [C0]
k3_x3: foo
- k0_x0: A1
k1_x1: B1
k2_x2: [C1]
k3_x3: bar
* By default, match keys that equal any of the items in the target.
.. code-block:: yaml+jinja
:emphasize-lines: 1
target: ['k0_x0', 'k1_x1']
result: "{{ input | community.general.remove_keys(target=target) }}"
gives
.. code-block:: yaml
:emphasize-lines: 1-
result:
- k2_x2: [C0]
k3_x3: foo
- k2_x2: [C1]
k3_x3: bar
.. versionadded:: 9.1.0
* The results of the below examples 1-5 are all the same:
.. code-block:: yaml
:emphasize-lines: 1-
result:
- k2_x2: [C0]
k3_x3: foo
- k2_x2: [C1]
k3_x3: bar
1. Match keys that equal any of the items in the target.
.. code-block:: yaml+jinja
:emphasize-lines: 1,2
mp: equal
target: ['k0_x0', 'k1_x1']
result: "{{ input | community.general.remove_keys(target=target, matching_parameter=mp) }}"
2. Match keys that start with any of the items in the target.
.. code-block:: yaml+jinja
:emphasize-lines: 1,2
mp: starts_with
target: ['k0', 'k1']
result: "{{ input | community.general.remove_keys(target=target, matching_parameter=mp) }}"
3. Match keys that end with any of the items in target.
.. code-block:: yaml+jinja
:emphasize-lines: 1,2
mp: ends_with
target: ['x0', 'x1']
result: "{{ input | community.general.remove_keys(target=target, matching_parameter=mp) }}"
4. Match keys by the regex.
.. code-block:: yaml+jinja
:emphasize-lines: 1,2
mp: regex
target: ['^.*[01]_x.*$']
result: "{{ input | community.general.remove_keys(target=target, matching_parameter=mp) }}"
5. Match keys by the regex.
.. code-block:: yaml+jinja
:emphasize-lines: 1,2
mp: regex
target: ^.*[01]_x.*$
result: "{{ input | community.general.remove_keys(target=target, matching_parameter=mp) }}"
* The results of the below examples 6-9 are all the same:
.. code-block:: yaml
:emphasize-lines: 1-
result:
- k1_x1: B0
k2_x2: [C0]
k3_x3: foo
- k1_x1: B1
k2_x2: [C1]
k3_x3: bar
6. Match keys that equal the target.
.. code-block:: yaml+jinja
:emphasize-lines: 1,2
mp: equal
target: k0_x0
result: "{{ input | community.general.remove_keys(target=target, matching_parameter=mp) }}"
7. Match keys that start with the target.
.. code-block:: yaml+jinja
:emphasize-lines: 1,2
mp: starts_with
target: k0
result: "{{ input | community.general.remove_keys(target=target, matching_parameter=mp) }}"
8. Match keys that end with the target.
.. code-block:: yaml+jinja
:emphasize-lines: 1,2
mp: ends_with
target: x0
result: "{{ input | community.general.remove_keys(target=target, matching_parameter=mp) }}"
9. Match keys by the regex.
.. code-block:: yaml+jinja
:emphasize-lines: 1,2
mp: regex
target: ^.*0_x.*$
result: "{{ input | community.general.remove_keys(target=target, matching_parameter=mp) }}"

View File

@@ -1,175 +0,0 @@
..
Copyright (c) Ansible Project
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
replace_keys
""""""""""""
Use the filter :ansplugin:`community.general.replace_keys#filter` if you have a list of dictionaries and want to replace certain keys.
.. note:: The output of the examples in this section use the YAML callback plugin. Quoting: "Ansible output that can be quite a bit easier to read than the default JSON formatting." See :ansplugin:`the documentation for the community.general.yaml callback plugin <community.general.yaml#callback>`.
Let us use the below list in the following examples:
.. code-block:: yaml
input:
- k0_x0: A0
k1_x1: B0
k2_x2: [C0]
k3_x3: foo
- k0_x0: A1
k1_x1: B1
k2_x2: [C1]
k3_x3: bar
* By default, match keys that equal any of the attributes before.
.. code-block:: yaml+jinja
:emphasize-lines: 1-3
target:
- {after: a0, before: k0_x0}
- {after: a1, before: k1_x1}
result: "{{ input | community.general.replace_keys(target=target) }}"
gives
.. code-block:: yaml
:emphasize-lines: 1-
result:
- a0: A0
a1: B0
k2_x2: [C0]
k3_x3: foo
- a0: A1
a1: B1
k2_x2: [C1]
k3_x3: bar
.. versionadded:: 9.1.0
* The results of the below examples 1-3 are all the same:
.. code-block:: yaml
:emphasize-lines: 1-
result:
- a0: A0
a1: B0
k2_x2: [C0]
k3_x3: foo
- a0: A1
a1: B1
k2_x2: [C1]
k3_x3: bar
1. Replace keys that starts with any of the attributes before.
.. code-block:: yaml+jinja
:emphasize-lines: 1-4
mp: starts_with
target:
- {after: a0, before: k0}
- {after: a1, before: k1}
result: "{{ input | community.general.replace_keys(target=target, matching_parameter=mp) }}"
2. Replace keys that ends with any of the attributes before.
.. code-block:: yaml+jinja
:emphasize-lines: 1-4
mp: ends_with
target:
- {after: a0, before: x0}
- {after: a1, before: x1}
result: "{{ input | community.general.replace_keys(target=target, matching_parameter=mp) }}"
3. Replace keys that match any regex of the attributes before.
.. code-block:: yaml+jinja
:emphasize-lines: 1-4
mp: regex
target:
- {after: a0, before: ^.*0_x.*$}
- {after: a1, before: ^.*1_x.*$}
result: "{{ input | community.general.replace_keys(target=target, matching_parameter=mp) }}"
* The results of the below examples 4-5 are the same:
.. code-block:: yaml
:emphasize-lines: 1-
result:
- {X: foo}
- {X: bar}
4. If more keys match the same attribute before the last one will be used.
.. code-block:: yaml+jinja
:emphasize-lines: 1-3
mp: regex
target:
- {after: X, before: ^.*_x.*$}
result: "{{ input | community.general.replace_keys(target=target, matching_parameter=mp) }}"
5. If there are items with equal attribute before the first one will be used.
.. code-block:: yaml+jinja
:emphasize-lines: 1-3
mp: regex
target:
- {after: X, before: ^.*_x.*$}
- {after: Y, before: ^.*_x.*$}
result: "{{ input | community.general.replace_keys(target=target, matching_parameter=mp) }}"
6. If there are more matches for a key the first one will be used.
.. code-block:: yaml
:emphasize-lines: 1-
input:
- {aaa1: A, bbb1: B, ccc1: C}
- {aaa2: D, bbb2: E, ccc2: F}
.. code-block:: yaml+jinja
:emphasize-lines: 1-4
mp: starts_with
target:
- {after: X, before: a}
- {after: Y, before: aa}
result: "{{ input | community.general.replace_keys(target=target, matching_parameter=mp) }}"
gives
.. code-block:: yaml
:emphasize-lines: 1-
result:
- {X: A, bbb1: B, ccc1: C}
- {X: D, bbb2: E, ccc2: F}

View File

@@ -1,18 +0,0 @@
..
Copyright (c) Ansible Project
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
.. _ansible_collections.community.general.docsite.filter_guide.filter_guide_abstract_informations.lists_of_dicts:
Lists of dictionaries
^^^^^^^^^^^^^^^^^^^^^
Filters to manage keys in a list of dictionaries:
.. toctree::
:maxdepth: 1
filter_guide-abstract_informations-lists_of_dictionaries-keep_keys
filter_guide-abstract_informations-lists_of_dictionaries-remove_keys
filter_guide-abstract_informations-lists_of_dictionaries-replace_keys

View File

@@ -11,7 +11,6 @@ Abstract transformations
filter_guide_abstract_informations_dictionaries
filter_guide_abstract_informations_grouping
filter_guide-abstract_informations-lists_of_dictionaries
filter_guide_abstract_informations_merging_lists_of_dictionaries
filter_guide_abstract_informations_lists_helper
filter_guide_abstract_informations_counting_elements_in_sequence

View File

@@ -6,30 +6,33 @@
Merging lists of dictionaries
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
If you have two or more lists of dictionaries and want to combine them into a list of merged dictionaries, where the dictionaries are merged by an attribute, you can use the :ansplugin:`community.general.lists_mergeby <community.general.lists_mergeby#filter>` filter.
If you have two or more lists of dictionaries and want to combine them into a list of merged dictionaries, where the dictionaries are merged by an attribute, you can use the :ansplugin:`community.general.lists_mergeby filter <community.general.lists_mergeby#filter>`.
.. note:: The output of the examples in this section use the YAML callback plugin. Quoting: "Ansible output that can be quite a bit easier to read than the default JSON formatting." See the documentation for the :ansplugin:`community.general.yaml callback plugin <community.general.yaml#callback>`.
.. note:: The output of the examples in this section use the YAML callback plugin. Quoting: "Ansible output that can be quite a bit easier to read than the default JSON formatting." See :ref:`the documentation for the community.general.yaml callback plugin <ansible_collections.community.general.yaml_callback>`.
Let us use the lists below in the following examples:
.. code-block:: yaml
list1:
- {name: foo, extra: true}
- {name: bar, extra: false}
- {name: meh, extra: true}
- name: foo
extra: true
- name: bar
extra: false
- name: meh
extra: true
list2:
- {name: foo, path: /foo}
- {name: baz, path: /baz}
- name: foo
path: /foo
- name: baz
path: /baz
Two lists
"""""""""
In the example below the lists are merged by the attribute ``name``:
.. code-block:: yaml+jinja
list3: "{{ list1 |
list3: "{{ list1|
community.general.lists_mergeby(list2, 'name') }}"
This produces:
@@ -37,21 +40,24 @@ This produces:
.. code-block:: yaml
list3:
- {name: bar, extra: false}
- {name: baz, path: /baz}
- {name: foo, extra: true, path: /foo}
- {name: meh, extra: true}
- extra: false
name: bar
- name: baz
path: /baz
- extra: true
name: foo
path: /foo
- extra: true
name: meh
.. versionadded:: 2.0.0
List of two lists
"""""""""""""""""
It is possible to use a list of lists as an input of the filter:
.. code-block:: yaml+jinja
list3: "{{ [list1, list2] |
list3: "{{ [list1, list2]|
community.general.lists_mergeby('name') }}"
This produces the same result as in the previous example:
@@ -59,29 +65,15 @@ This produces the same result as in the previous example:
.. code-block:: yaml
list3:
- {name: bar, extra: false}
- {name: baz, path: /baz}
- {name: foo, extra: true, path: /foo}
- {name: meh, extra: true}
Single list
"""""""""""
It is possible to merge single list:
.. code-block:: yaml+jinja
list3: "{{ [list1 + list2, []] |
community.general.lists_mergeby('name') }}"
This produces the same result as in the previous example:
.. code-block:: yaml
list3:
- {name: bar, extra: false}
- {name: baz, path: /baz}
- {name: foo, extra: true, path: /foo}
- {name: meh, extra: true}
- extra: false
name: bar
- name: baz
path: /baz
- extra: true
name: foo
path: /foo
- extra: true
name: meh
The filter also accepts two optional parameters: :ansopt:`community.general.lists_mergeby#filter:recursive` and :ansopt:`community.general.lists_mergeby#filter:list_merge`. This is available since community.general 4.4.0.
@@ -103,7 +95,8 @@ Let us use the lists below in the following examples
param01:
x: default_value
y: default_value
list: [default_value]
list:
- default_value
- name: myname02
param01: [1, 1, 2, 3]
@@ -112,17 +105,16 @@ Let us use the lists below in the following examples
param01:
y: patch_value
z: patch_value
list: [patch_value]
list:
- patch_value
- name: myname02
param01: [3, 4, 4]
param01: [3, 4, 4, {key: value}]
list_merge=replace (default)
""""""""""""""""""""""""""""
Example :ansopt:`community.general.lists_mergeby#filter:list_merge=replace` (default):
.. code-block:: yaml+jinja
list3: "{{ [list1, list2] |
list3: "{{ [list1, list2]|
community.general.lists_mergeby('name',
recursive=true) }}"
@@ -131,22 +123,25 @@ This produces:
.. code-block:: yaml
list3:
- name: myname01
param01:
x: default_value
y: patch_value
list: [patch_value]
z: patch_value
- name: myname02
param01: [3, 4, 4]
- name: myname01
param01:
list:
- patch_value
x: default_value
y: patch_value
z: patch_value
- name: myname02
param01:
- 3
- 4
- 4
- key: value
list_merge=keep
"""""""""""""""
Example :ansopt:`community.general.lists_mergeby#filter:list_merge=keep`:
.. code-block:: yaml+jinja
list3: "{{ [list1, list2] |
list3: "{{ [list1, list2]|
community.general.lists_mergeby('name',
recursive=true,
list_merge='keep') }}"
@@ -156,22 +151,25 @@ This produces:
.. code-block:: yaml
list3:
- name: myname01
param01:
x: default_value
y: patch_value
list: [default_value]
z: patch_value
- name: myname02
param01: [1, 1, 2, 3]
- name: myname01
param01:
list:
- default_value
x: default_value
y: patch_value
z: patch_value
- name: myname02
param01:
- 1
- 1
- 2
- 3
list_merge=append
"""""""""""""""""
Example :ansopt:`community.general.lists_mergeby#filter:list_merge=append`:
.. code-block:: yaml+jinja
list3: "{{ [list1, list2] |
list3: "{{ [list1, list2]|
community.general.lists_mergeby('name',
recursive=true,
list_merge='append') }}"
@@ -181,22 +179,30 @@ This produces:
.. code-block:: yaml
list3:
- name: myname01
param01:
x: default_value
y: patch_value
list: [default_value, patch_value]
z: patch_value
- name: myname02
param01: [1, 1, 2, 3, 3, 4, 4]
- name: myname01
param01:
list:
- default_value
- patch_value
x: default_value
y: patch_value
z: patch_value
- name: myname02
param01:
- 1
- 1
- 2
- 3
- 3
- 4
- 4
- key: value
list_merge=prepend
""""""""""""""""""
Example :ansopt:`community.general.lists_mergeby#filter:list_merge=prepend`:
.. code-block:: yaml+jinja
list3: "{{ [list1, list2] |
list3: "{{ [list1, list2]|
community.general.lists_mergeby('name',
recursive=true,
list_merge='prepend') }}"
@@ -206,22 +212,30 @@ This produces:
.. code-block:: yaml
list3:
- name: myname01
param01:
x: default_value
y: patch_value
list: [patch_value, default_value]
z: patch_value
- name: myname02
param01: [3, 4, 4, 1, 1, 2, 3]
- name: myname01
param01:
list:
- patch_value
- default_value
x: default_value
y: patch_value
z: patch_value
- name: myname02
param01:
- 3
- 4
- 4
- key: value
- 1
- 1
- 2
- 3
list_merge=append_rp
""""""""""""""""""""
Example :ansopt:`community.general.lists_mergeby#filter:list_merge=append_rp`:
.. code-block:: yaml+jinja
list3: "{{ [list1, list2] |
list3: "{{ [list1, list2]|
community.general.lists_mergeby('name',
recursive=true,
list_merge='append_rp') }}"
@@ -231,22 +245,29 @@ This produces:
.. code-block:: yaml
list3:
- name: myname01
param01:
x: default_value
y: patch_value
list: [default_value, patch_value]
z: patch_value
- name: myname02
param01: [1, 1, 2, 3, 4, 4]
- name: myname01
param01:
list:
- default_value
- patch_value
x: default_value
y: patch_value
z: patch_value
- name: myname02
param01:
- 1
- 1
- 2
- 3
- 4
- 4
- key: value
list_merge=prepend_rp
"""""""""""""""""""""
Example :ansopt:`community.general.lists_mergeby#filter:list_merge=prepend_rp`:
.. code-block:: yaml+jinja
list3: "{{ [list1, list2] |
list3: "{{ [list1, list2]|
community.general.lists_mergeby('name',
recursive=true,
list_merge='prepend_rp') }}"
@@ -256,12 +277,21 @@ This produces:
.. code-block:: yaml
list3:
- name: myname01
param01:
x: default_value
y: patch_value
list: [patch_value, default_value]
z: patch_value
- name: myname02
param01: [3, 4, 4, 1, 1, 2]
- name: myname01
param01:
list:
- patch_value
- default_value
x: default_value
y: patch_value
z: patch_value
- name: myname02
param01:
- 3
- 4
- 4
- key: value
- 1
- 1
- 2

View File

@@ -1,463 +0,0 @@
..
Copyright (c) Ansible Project
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
.. _ansible_collections.community.general.docsite.guide_cmdrunner:
Command Runner guide
====================
Introduction
^^^^^^^^^^^^
The ``ansible_collections.community.general.plugins.module_utils.cmd_runner`` module util provides the
``CmdRunner`` class to help execute external commands. The class is a wrapper around
the standard ``AnsibleModule.run_command()`` method, handling command arguments, localization setting,
output processing output, check mode, and other features.
It is even more useful when one command is used in multiple modules, so that you can define all options
in a module util file, and each module uses the same runner with different arguments.
For the sake of clarity, throughout this guide, unless otherwise specified, we use the term *option* when referring to
Ansible module options, and the term *argument* when referring to the command line arguments for the external command.
Quickstart
""""""""""
``CmdRunner`` defines a command and a set of coded instructions on how to format
the command-line arguments, in which specific order, for a particular execution.
It relies on ``ansible.module_utils.basic.AnsibleModule.run_command()`` to actually execute the command.
There are other features, see more details throughout this document.
To use ``CmdRunner`` you must start by creating an object. The example below is a simplified
version of the actual code in :ansplugin:`community.general.ansible_galaxy_install#module`:
.. code-block:: python
from ansible_collections.community.general.plugins.module_utils.cmd_runner import CmdRunner, cmd_runner_fmt
runner = CmdRunner(
module,
command="ansible-galaxy",
arg_formats=dict(
type=cmd_runner_fmt.as_func(lambda v: [] if v == 'both' else [v]),
galaxy_cmd=cmd_runner_fmt.as_list(),
upgrade=cmd_runner_fmt.as_bool("--upgrade"),
requirements_file=cmd_runner_fmt.as_opt_val('-r'),
dest=cmd_runner_fmt.as_opt_val('-p'),
force=cmd_runner_fmt.as_bool("--force"),
no_deps=cmd_runner_fmt.as_bool("--no-deps"),
version=cmd_runner_fmt.as_fixed("--version"),
name=cmd_runner_fmt.as_list(),
)
)
This is meant to be done once, then every time you need to execute the command you create a context and pass values as needed:
.. code-block:: python
# Run the command with these arguments, when values exist for them
with runner("type galaxy_cmd upgrade force no_deps dest requirements_file name", output_process=process) as ctx:
ctx.run(galaxy_cmd="install", upgrade=upgrade)
# version is fixed, requires no value
with runner("version") as ctx:
dummy, stdout, dummy = ctx.run()
# Another way of expressing it
dummy, stdout, dummy = runner("version").run()
Note that you can pass values for the arguments when calling ``run()``,
otherwise ``CmdRunner`` uses the module options with the exact same names to
provide values for the runner arguments. If no value is passed and no module option
is found for the name specified, then an exception is raised, unless the
argument is using ``cmd_runner_fmt.as_fixed`` as format function like the
``version`` in the example above. See more about it below.
In the first example, values of ``type``, ``force``, ``no_deps`` and others
are taken straight from the module, whilst ``galaxy_cmd`` and ``upgrade`` are
passed explicitly.
That generates a resulting command line similar to (example taken from the
output of an integration test):
.. code-block:: python
[
"<venv>/bin/ansible-galaxy",
"collection",
"install",
"--upgrade",
"-p",
"<collection-install-path>",
"netbox.netbox",
]
Argument formats
^^^^^^^^^^^^^^^^
As seen in the example, ``CmdRunner`` expects a parameter named ``arg_formats``
defining how to format each CLI named argument.
An "argument format" is nothing but a function to transform the value of a variable
into something formatted for the command line.
Argument format function
""""""""""""""""""""""""
An ``arg_format`` function should be of the form:
.. code-block:: python
def func(value):
return ["--some-param-name", value]
The parameter ``value`` can be of any type - although there are convenience
mechanisms to help handling sequence and mapping objects.
The result is expected to be of the type ``Sequence[str]`` type (most commonly
``list[str]`` or ``tuple[str]``), otherwise it is considered to be a ``str``,
and it is coerced into ``list[str]``.
This resulting sequence of strings is added to the command line when that
argument is actually used.
For example, if ``func`` returns:
- ``["nee", 2, "shruberries"]``, the command line adds arguments ``"nee" "2" "shruberries"``.
- ``2 == 2``, the command line adds argument ``True``.
- ``None``, the command line adds argument ``None``.
- ``[]``, the command line adds no command line argument for that particular argument.
Convenience format methods
""""""""""""""""""""""""""
In the same module as ``CmdRunner`` there is a class ``cmd_runner_fmt`` which
provides a set of convenience methods that return format functions for common cases.
In the first block of code in the `Quickstart`_ section you can see the importing of
that class:
.. code-block:: python
from ansible_collections.community.general.plugins.module_utils.cmd_runner import CmdRunner, cmd_runner_fmt
The same example shows how to make use of some of them in the instantiation of the ``CmdRunner`` object.
A description of each one of the convenience methods available and examples of how to use them is found below.
In these descriptions ``value`` refers to the single parameter passed to the formatting function.
- ``cmd_runner_fmt.as_list()``
This method does not receive any parameter, function returns ``value`` as-is.
- Creation:
``cmd_runner_fmt.as_list()``
- Example:
+----------------------+---------------------+
| Value | Outcome |
+======================+=====================+
| ``["foo", "bar"]`` | ``["foo", "bar"]`` |
+----------------------+---------------------+
| ``"foobar"`` | ``["foobar"]`` |
+----------------------+---------------------+
- ``cmd_runner_fmt.as_bool()``
This method receives two different parameters: ``args_true`` and ``args_false``, latter being optional.
If the boolean evaluation of ``value`` is ``True``, the format function returns ``args_true``.
If the boolean evaluation is ``False``, then the function returns ``args_false``
if it was provided, or ``[]`` otherwise.
- Creation:
``cmd_runner_fmt.as_bool("--force")``
- Example:
+------------+--------------------+
| Value | Outcome |
+============+====================+
| ``True`` | ``["--force"]`` |
+------------+--------------------+
| ``False`` | ``[]`` |
+------------+--------------------+
- ``cmd_runner_fmt.as_bool_not()``
This method receives one parameter, which is returned by the function when the boolean evaluation
of ``value`` is ``False``.
- Creation:
``cmd_runner_fmt.as_bool_not("--no-deps")``
- Example:
+-------------+---------------------+
| Value | Outcome |
+=============+=====================+
| ``True`` | ``[]`` |
+-------------+---------------------+
| ``False`` | ``["--no-deps"]`` |
+-------------+---------------------+
- ``cmd_runner_fmt.as_optval()``
This method receives one parameter ``arg``, the function returns the string concatenation
of ``arg`` and ``value``.
- Creation:
``cmd_runner_fmt.as_optval("-i")``
- Example:
+---------------+---------------------+
| Value | Outcome |
+===============+=====================+
| ``3`` | ``["-i3"]`` |
+---------------+---------------------+
| ``foobar`` | ``["-ifoobar"]`` |
+---------------+---------------------+
- ``cmd_runner_fmt.as_opt_val()``
This method receives one parameter ``arg``, the function returns ``[arg, value]``.
- Creation:
``cmd_runner_fmt.as_opt_val("--name")``
- Example:
+--------------+--------------------------+
| Value | Outcome |
+==============+==========================+
| ``abc`` | ``["--name", "abc"]`` |
+--------------+--------------------------+
- ``cmd_runner_fmt.as_opt_eq_val()``
This method receives one parameter ``arg``, the function returns the string of the form
``{arg}={value}``.
- Creation:
``cmd_runner_fmt.as_opt_eq_val("--num-cpus")``
- Example:
+------------+-------------------------+
| Value | Outcome |
+============+=========================+
| ``10`` | ``["--num-cpus=10"]`` |
+------------+-------------------------+
- ``cmd_runner_fmt.as_fixed()``
This method receives one parameter ``arg``, the function expects no ``value`` - if one
is provided then it is ignored.
The function returns ``arg`` as-is.
- Creation:
``cmd_runner_fmt.as_fixed("--version")``
- Example:
+---------+-----------------------+
| Value | Outcome |
+=========+=======================+
| | ``["--version"]`` |
+---------+-----------------------+
| 57 | ``["--version"]`` |
+---------+-----------------------+
- Note:
This is the only special case in which a value can be missing for the formatting function.
The example also comes from the code in `Quickstart`_.
In that case, the module has code to determine the command's version so that it can assert compatibility.
There is no *value* to be passed for that CLI argument.
- ``cmd_runner_fmt.as_map()``
This method receives one parameter ``arg`` which must be a dictionary, and an optional parameter ``default``.
The function returns the evaluation of ``arg[value]``.
If ``value not in arg``, then it returns ``default`` if defined, otherwise ``[]``.
- Creation:
``cmd_runner_fmt.as_map(dict(a=1, b=2, c=3), default=42)``
- Example:
+---------------------+---------------+
| Value | Outcome |
+=====================+===============+
| ``"b"`` | ``["2"]`` |
+---------------------+---------------+
| ``"yabadabadoo"`` | ``["42"]`` |
+---------------------+---------------+
- Note:
If ``default`` is not specified, invalid values return an empty list, meaning they are silently ignored.
- ``cmd_runner_fmt.as_func()``
This method receives one parameter ``arg`` which is itself is a format function and it must abide by the rules described above.
- Creation:
``cmd_runner_fmt.as_func(lambda v: [] if v == 'stable' else ['--channel', '{0}'.format(v)])``
- Note:
The outcome for that depends entirely on the function provided by the developer.
Other features for argument formatting
""""""""""""""""""""""""""""""""""""""
Some additional features are available as decorators:
- ``cmd_runner_fmt.unpack args()``
This decorator unpacks the incoming ``value`` as a list of elements.
For example, in ``ansible_collections.community.general.plugins.module_utils.puppet``, it is used as:
.. code-block:: python
@cmd_runner_fmt.unpack_args
def execute_func(execute, manifest):
if execute:
return ["--execute", execute]
else:
return [manifest]
runner = CmdRunner(
module,
command=_prepare_base_cmd(),
path_prefix=_PUPPET_PATH_PREFIX,
arg_formats=dict(
# ...
_execute=cmd_runner_fmt.as_func(execute_func),
# ...
),
)
Then, in :ansplugin:`community.general.puppet#module` it is put to use with:
.. code-block:: python
with runner(args_order) as ctx:
rc, stdout, stderr = ctx.run(_execute=[p['execute'], p['manifest']])
- ``cmd_runner_fmt.unpack_kwargs()``
Conversely, this decorator unpacks the incoming ``value`` as a ``dict``-like object.
- ``cmd_runner_fmt.stack()``
This decorator assumes ``value`` is a sequence and concatenates the output
of the wrapped function applied to each element of the sequence.
For example, in :ansplugin:`community.general.django_check#module`, the argument format for ``database``
is defined as:
.. code-block:: python
arg_formats = dict(
# ...
database=cmd_runner_fmt.stack(cmd_runner_fmt.as_opt_val)("--database"),
# ...
)
When receiving a list ``["abc", "def"]``, the output is:
.. code-block:: python
["--database", "abc", "--database", "def"]
Command Runner
^^^^^^^^^^^^^^
Settings that can be passed to the ``CmdRunner`` constructor are:
- ``module: AnsibleModule``
Module instance. Mandatory parameter.
- ``command: str | list[str]``
Command to be executed. It can be a single string, the executable name, or a list
of strings containing the executable name as the first element and, optionally, fixed parameters.
Those parameters are used in all executions of the runner.
- ``arg_formats: dict``
Mapping of argument names to formatting functions.
- ``default_args_order: str``
As the name suggests, a default ordering for the arguments. When
this is passed, the context can be created without specifying ``args_order``. Defaults to ``()``.
- ``check_rc: bool``
When ``True``, if the return code from the command is not zero, the module exits
with an error. Defaults to ``False``.
- ``path_prefix: list[str]``
If the command being executed is installed in a non-standard directory path,
additional paths might be provided to search for the executable. Defaults to ``None``.
- ``environ_update: dict``
Pass additional environment variables to be set during the command execution.
Defaults to ``None``.
- ``force_lang: str``
It is usually important to force the locale to one specific value, so that responses are consistent and, therefore, parseable.
Please note that using this option (which is enabled by default) overwrites the environment variables ``LANGUAGE`` and ``LC_ALL``.
To disable this mechanism, set this parameter to ``None``.
In community.general 9.1.0 a special value ``auto`` was introduced for this parameter, with the effect
that ``CmdRunner`` then tries to determine the best parseable locale for the runtime.
It should become the default value in the future, but for the time being the default value is ``C``.
When creating a context, the additional settings that can be passed to the call are:
- ``args_order: str``
Establishes the order in which the arguments are rendered in the command line.
This parameter is mandatory unless ``default_args_order`` was provided to the runner instance.
- ``output_process: func``
Function to transform the output of the executable into different values or formats.
See examples in section below.
- ``check_mode_skip: bool``
Whether to skip the actual execution of the command when the module is in check mode.
Defaults to ``False``.
- ``check_mode_return: any``
If ``check_mode_skip=True``, then return this value instead.
Additionally, any other valid parameters for ``AnsibleModule.run_command()`` may be passed, but unexpected behavior
might occur if redefining options already present in the runner or its context creation. Use with caution.
Processing results
^^^^^^^^^^^^^^^^^^
As mentioned, ``CmdRunner`` uses ``AnsibleModule.run_command()`` to execute the external command,
and it passes the return value from that method back to caller. That means that,
by default, the result is going to be a tuple ``(rc, stdout, stderr)``.
If you need to transform or process that output, you can pass a function to the context,
as the ``output_process`` parameter. It must be a function like:
.. code-block:: python
def process(rc, stdout, stderr):
# do some magic
return processed_value # whatever that is
In that case, the return of ``run()`` is the ``processed_value`` returned by the function.
PythonRunner
^^^^^^^^^^^^
The ``PythonRunner`` class is a specialized version of ``CmdRunner``, geared towards the execution of
Python scripts. It features two extra and mutually exclusive parameters ``python`` and ``venv`` in its constructor:
.. code-block:: python
from ansible_collections.community.general.plugins.module_utils.python_runner import PythonRunner
from ansible_collections.community.general.plugins.module_utils.cmd_runner import cmd_runner_fmt
runner = PythonRunner(
module,
command=["-m", "django"],
arg_formats=dict(...),
python="python",
venv="/path/to/some/venv",
)
The default value for ``python`` is the string ``python``, and the for ``venv`` it is ``None``.
The command line produced by such a command with ``python="python3.12"`` is something like:
.. code-block:: shell
/usr/bin/python3.12 -m django <arg1> <arg2> ...
And the command line for ``venv="/work/venv"`` is like:
.. code-block:: shell
/work/venv/bin/python -m django <arg1> <arg2> ...
You may provide the value of the ``command`` argument as a string (in that case the string is used as a script name)
or as a list, in which case the elements of the list must be valid arguments for the Python interpreter, as in the example above.
See `Command line and environment <https://docs.python.org/3/using/cmdline.html>`_ for more details.
If the parameter ``python`` is an absolute path, or contains directory separators, such as ``/``, then it is used
as-is, otherwise the runtime ``PATH`` is searched for that command name.
Other than that, everything else works as in ``CmdRunner``.
.. versionadded:: 4.8.0

View File

@@ -1,74 +0,0 @@
..
Copyright (c) Ansible Project
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
.. _ansible_collections.community.general.docsite.guide_deps:
``deps`` Guide
==============
Using ``deps``
^^^^^^^^^^^^^^
The ``ansible_collections.community.general.plugins.module_utils.deps`` module util simplifies
the importing of code as described in :ref:`Importing and using shared code <shared_code>`.
Please notice that ``deps`` is meant to be used specifically with Ansible modules, and not other types of plugins.
The same example from the Developer Guide would become:
.. code-block:: python
from ansible_collections.community.general.plugins.module_utils import deps
with deps.declare("foo"):
import foo
Then in ``main()``, just after the argspec (or anywhere in the code, for that matter), do
.. code-block:: python
deps.validate(module) # assuming module is a valid AnsibleModule instance
By default, ``deps`` will rely on ``ansible.module_utils.basic.missing_required_lib`` to generate
a message about a failing import. That function accepts parameters ``reason`` and ``url``, and
and so does ``deps```:
.. code-block:: python
with deps.declare("foo", reason="foo is needed to properly bar", url="https://foo.bar.io"):
import foo
If you would rather write a custom message instead of using ``missing_required_lib`` then do:
.. code-block:: python
with deps.declare("foo", msg="Custom msg explaining why foo is needed"):
import foo
``deps`` allows for multiple dependencies to be declared:
.. code-block:: python
with deps.declare("foo"):
import foo
with deps.declare("bar"):
import bar
with deps.declare("doe"):
import doe
By default, ``deps.validate()`` will check on all the declared dependencies, but if so desired,
they can be validated selectively by doing:
.. code-block:: python
deps.validate(module, "foo") # only validates the "foo" dependency
deps.validate(module, "doe:bar") # only validates the "doe" and "bar" dependencies
deps.validate(module, "-doe:bar") # validates all dependencies except "doe" and "bar"
.. versionadded:: 6.1.0

View File

@@ -1,176 +0,0 @@
..
Copyright (c) Ansible Project
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
.. _ansible_collections.community.general.docsite.guide_vardict:
VarDict Guide
=============
Introduction
^^^^^^^^^^^^
The ``ansible_collections.community.general.plugins.module_utils.vardict`` module util provides the
``VarDict`` class to help manage the module variables. That class is a container for module variables,
especially the ones for which the module must keep track of state changes, and the ones that should
be published as return values.
Each variable has extra behaviors controlled by associated metadata, simplifying the generation of
output values from the module.
Quickstart
""""""""""
The simplest way of using ``VarDict`` is:
.. code-block:: python
from ansible_collections.community.general.plugins.module_utils.vardict import VarDict
Then in ``main()``, or any other function called from there:
.. code-block:: python
vars = VarDict()
# Next 3 statements are equivalent
vars.abc = 123
vars["abc"] = 123
vars.set("abc", 123)
vars.xyz = "bananas"
vars.ghi = False
And by the time the module is about to exit:
.. code-block:: python
results = vars.output()
module.exit_json(**results)
That makes the return value of the module:
.. code-block:: javascript
{
"abc": 123,
"xyz": "bananas",
"ghi": false
}
Metadata
""""""""
The metadata values associated with each variable are:
- ``output: bool`` - marks the variable for module output as a module return value.
- ``fact: bool`` - marks the variable for module output as an Ansible fact.
- ``verbosity: int`` - sets the minimum level of verbosity for which the variable will be included in the output.
- ``change: bool`` - controls the detection of changes in the variable value.
- ``initial_value: any`` - when using ``change`` and need to forcefully set an intial value to the variable.
- ``diff: bool`` - used along with ``change``, this generates an Ansible-style diff ``dict``.
See the sections below for more details on how to use the metadata.
Using VarDict
^^^^^^^^^^^^^
Basic Usage
"""""""""""
As shown above, variables can be accessed using the ``[]`` operator, as in a ``dict`` object,
and also as an object attribute, such as ``vars.abc``. The form using the ``set()``
method is special in the sense that you can use it to set metadata values:
.. code-block:: python
vars.set("abc", 123, output=False)
vars.set("abc", 123, output=True, change=True)
Another way to set metadata after the variables have been created is:
.. code-block:: python
vars.set_meta("abc", output=False)
vars.set_meta("abc", output=True, change=True, diff=True)
You can use either operator and attribute forms to access the value of the variable. Other ways to
access its value and its metadata are:
.. code-block:: python
print("abc value = {0}".format(vars.var("abc")["value"])) # get the value
print("abc output? {0}".format(vars.get_meta("abc")["output"])) # get the metadata like this
The names of methods, such as ``set``, ``get_meta``, ``output`` amongst others, are reserved and
cannot be used as variable names. If you try to use a reserved name a ``ValueError`` exception
is raised with the message "Name <var> is reserved".
Generating output
"""""""""""""""""
By default, every variable create will be enable for output with minimum verbosity set to zero, in
other words, they will always be in the output by default.
You can control that when creating the variable for the first time or later in the code:
.. code-block:: python
vars.set("internal", x + 4, output=False)
vars.set_meta("internal", output=False)
You can also set the verbosity of some variable, like:
.. code-block:: python
vars.set("abc", x + 4)
vars.set("debug_x", x, verbosity=3)
results = vars.output(module._verbosity)
module.exit_json(**results)
If the module was invoked with verbosity lower than 3, then the output will only contain
the variable ``abc``. If running at higher verbosity, as in ``ansible-playbook -vvv``,
then the output will also contain ``debug_x``.
Generating facts is very similar to regular output, but variables are not marked as facts by default.
.. code-block:: python
vars.set("modulefact", x + 4, fact=True)
vars.set("debugfact", x, fact=True, verbosity=3)
results = vars.output(module._verbosity)
results["ansible_facts"] = {"module_name": vars.facts(module._verbosity)}
module.exit_json(**results)
Handling change
"""""""""""""""
You can use ``VarDict`` to determine whether variables have had their values changed.
.. code-block:: python
vars.set("abc", 42, change=True)
vars.abc = 90
results = vars.output()
results["changed"] = vars.has_changed
module.exit_json(**results)
If tracking changes in variables, you may want to present the difference between the initial and the final
values of it. For that, you want to use:
.. code-block:: python
vars.set("abc", 42, change=True, diff=True)
vars.abc = 90
results = vars.output()
results["changed"] = vars.has_changed
results["diff"] = vars.diff()
module.exit_json(**results)
.. versionadded:: 7.1.0

View File

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

File diff suppressed because it is too large Load Diff

View File

@@ -78,13 +78,12 @@ DOCUMENTATION = '''
EXAMPLES = r'''
# A polkit rule needed to use the module with a non-root user.
# See the Notes section for details.
/etc/polkit-1/rules.d/60-machinectl-fast-user-auth.rules: |
polkit.addRule(function(action, subject) {
if(action.id == "org.freedesktop.machine1.host-shell" &&
subject.isInGroup("wheel")) {
return polkit.Result.AUTH_SELF_KEEP;
}
});
60-machinectl-fast-user-auth.rules: |
polkit.addRule(function(action, subject) {
if(action.id == "org.freedesktop.machine1.host-shell" && subject.isInGroup("wheel")) {
return polkit.Result.AUTH_SELF_KEEP;
}
});
'''
from re import compile as re_compile

View File

@@ -1,128 +0,0 @@
# -*- coding: utf-8 -*-
# Copyright (c) 2024, Ansible Project
# 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
from __future__ import absolute_import, division, print_function
__metaclass__ = type
DOCUMENTATION = """
name: run0
short_description: Systemd's run0
description:
- This become plugins allows your remote/login user to execute commands as another user via the C(run0) utility.
author:
- Thomas Sjögren (@konstruktoid)
version_added: '9.0.0'
options:
become_user:
description: User you 'become' to execute the task.
default: root
ini:
- section: privilege_escalation
key: become_user
- section: run0_become_plugin
key: user
vars:
- name: ansible_become_user
- name: ansible_run0_user
env:
- name: ANSIBLE_BECOME_USER
- name: ANSIBLE_RUN0_USER
type: string
become_exe:
description: The C(run0) executable.
default: run0
ini:
- section: privilege_escalation
key: become_exe
- section: run0_become_plugin
key: executable
vars:
- name: ansible_become_exe
- name: ansible_run0_exe
env:
- name: ANSIBLE_BECOME_EXE
- name: ANSIBLE_RUN0_EXE
type: string
become_flags:
description: Options to pass to run0.
default: ''
ini:
- section: privilege_escalation
key: become_flags
- section: run0_become_plugin
key: flags
vars:
- name: ansible_become_flags
- name: ansible_run0_flags
env:
- name: ANSIBLE_BECOME_FLAGS
- name: ANSIBLE_RUN0_FLAGS
type: string
notes:
- This plugin will only work when a polkit rule is in place.
"""
EXAMPLES = r"""
# An example polkit rule that allows the user 'ansible' in the 'wheel' group
# to execute commands using run0 without authentication.
/etc/polkit-1/rules.d/60-run0-fast-user-auth.rules: |
polkit.addRule(function(action, subject) {
if(action.id == "org.freedesktop.systemd1.manage-units" &&
subject.isInGroup("wheel") &&
subject.user == "ansible") {
return polkit.Result.YES;
}
});
"""
from re import compile as re_compile
from ansible.plugins.become import BecomeBase
from ansible.module_utils._text import to_bytes
ansi_color_codes = re_compile(to_bytes(r"\x1B\[[0-9;]+m"))
class BecomeModule(BecomeBase):
name = "community.general.run0"
prompt = "Password: "
fail = ("==== AUTHENTICATION FAILED ====",)
success = ("==== AUTHENTICATION COMPLETE ====",)
require_tty = (
True # see https://github.com/ansible-collections/community.general/issues/6932
)
@staticmethod
def remove_ansi_codes(line):
return ansi_color_codes.sub(b"", line)
def build_become_command(self, cmd, shell):
super().build_become_command(cmd, shell)
if not cmd:
return cmd
become = self.get_option("become_exe")
flags = self.get_option("become_flags")
user = self.get_option("become_user")
return (
f"{become} --user={user} {flags} {self._build_success_command(cmd, shell)}"
)
def check_success(self, b_output):
b_output = self.remove_ansi_codes(b_output)
return super().check_success(b_output)
def check_incorrect_password(self, b_output):
b_output = self.remove_ansi_codes(b_output)
return super().check_incorrect_password(b_output)
def check_missing_password(self, b_output):
b_output = self.remove_ansi_codes(b_output)
return super().check_missing_password(b_output)

View File

@@ -55,21 +55,6 @@ DOCUMENTATION = """
ini:
- section: sudo_become_plugin
key: password
alt_method:
description:
- Whether to use an alternative method to call C(su). Instead of running C(su -l user /path/to/shell -c command),
it runs C(su -l user -c command).
- Use this when the default one is not working on your system.
required: false
type: boolean
ini:
- section: community.general.sudosu
key: alternative_method
vars:
- name: ansible_sudosu_alt_method
env:
- name: ANSIBLE_SUDOSU_ALT_METHOD
version_added: 9.2.0
"""
@@ -104,7 +89,4 @@ class BecomeModule(BecomeBase):
if user:
user = '%s' % (user)
if self.get_option('alt_method'):
return ' '.join([becomecmd, flags, prompt, "su -l", user, "-c", self._build_success_command(cmd, shell, True)])
else:
return ' '.join([becomecmd, flags, prompt, 'su -l', user, self._build_success_command(cmd, shell)])
return ' '.join([becomecmd, flags, prompt, 'su -l', user, self._build_success_command(cmd, shell)])

View File

@@ -18,10 +18,6 @@ DOCUMENTATION = '''
description:
- This callback plugin sends status updates to a HipChat channel during playbook execution.
- Before 2.4 only environment variables were available for configuring this plugin.
deprecated:
removed_in: 10.0.0
why: The hipchat service has been discontinued and the self-hosted variant has been End of Life since 2020.
alternative: There is none.
options:
token:
description: HipChat API token for v1 or v2 API.

View File

@@ -59,16 +59,13 @@ import uuid
import socket
import getpass
from datetime import datetime
from os.path import basename
from ansible.module_utils.urls import open_url
from ansible.parsing.ajson import AnsibleJSONEncoder
from ansible.plugins.callback import CallbackBase
from ansible_collections.community.general.plugins.module_utils.datetime import (
now,
)
class AzureLogAnalyticsSource(object):
def __init__(self):
@@ -96,7 +93,7 @@ class AzureLogAnalyticsSource(object):
return "https://{0}.ods.opinsights.azure.com/api/logs?api-version=2016-04-01".format(workspace_id)
def __rfc1123date(self):
return now().strftime('%a, %d %b %Y %H:%M:%S GMT')
return datetime.utcnow().strftime('%a, %d %b %Y %H:%M:%S GMT')
def send_event(self, workspace_id, shared_key, state, result, runtime):
if result._task_fields['args'].get('_ansible_check_mode') is True:
@@ -170,7 +167,7 @@ class CallbackModule(CallbackBase):
def _seconds_since_start(self, result):
return (
now() -
datetime.utcnow() -
self.start_datetimes[result._task._uuid]
).total_seconds()
@@ -188,10 +185,10 @@ class CallbackModule(CallbackBase):
self.loganalytics.ansible_playbook = basename(playbook._file_name)
def v2_playbook_on_task_start(self, task, is_conditional):
self.start_datetimes[task._uuid] = now()
self.start_datetimes[task._uuid] = datetime.utcnow()
def v2_playbook_on_handler_task_start(self, task):
self.start_datetimes[task._uuid] = now()
self.start_datetimes[task._uuid] = datetime.utcnow()
def v2_runner_on_ok(self, result, **kwargs):
self.loganalytics.send_event(

View File

@@ -99,6 +99,7 @@ from ansible import context
import socket
import uuid
import logging
from datetime import datetime
try:
import logstash
@@ -108,10 +109,6 @@ except ImportError:
from ansible.plugins.callback import CallbackBase
from ansible_collections.community.general.plugins.module_utils.datetime import (
now,
)
class CallbackModule(CallbackBase):
@@ -129,7 +126,7 @@ class CallbackModule(CallbackBase):
"pip install python-logstash for Python 2"
"pip install python3-logstash for Python 3")
self.start_time = now()
self.start_time = datetime.utcnow()
def _init_plugin(self):
if not self.disabled:
@@ -188,7 +185,7 @@ class CallbackModule(CallbackBase):
self.logger.info("ansible start", extra=data)
def v2_playbook_on_stats(self, stats):
end_time = now()
end_time = datetime.utcnow()
runtime = end_time - self.start_time
summarize_stat = {}
for host in stats.processed.keys():

View File

@@ -84,33 +84,6 @@ DOCUMENTATION = '''
- section: callback_opentelemetry
key: disable_attributes_in_logs
version_added: 7.1.0
store_spans_in_file:
default: None
type: str
description:
- It stores the exported spans in the given file
env:
- name: ANSIBLE_OPENTELEMETRY_STORE_SPANS_IN_FILE
ini:
- section: callback_opentelemetry
key: store_spans_in_file
version_added: 9.0.0
otel_exporter_otlp_traces_protocol:
type: str
description:
- E(OTEL_EXPORTER_OTLP_TRACES_PROTOCOL) represents the 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
choices:
- grpc
- http/protobuf
env:
- name: OTEL_EXPORTER_OTLP_TRACES_PROTOCOL
ini:
- section: callback_opentelemetry
key: otel_exporter_otlp_traces_protocol
version_added: 9.0.0
requirements:
- opentelemetry-api (Python library)
- opentelemetry-exporter-otlp (Python library)
@@ -134,7 +107,6 @@ examples: |
'''
import getpass
import json
import os
import socket
import sys
@@ -152,19 +124,15 @@ from ansible.plugins.callback import CallbackBase
try:
from opentelemetry import trace
from opentelemetry.trace import SpanKind
from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter as GRPCOTLPSpanExporter
from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter as HTTPOTLPSpanExporter
from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter
from opentelemetry.sdk.resources import SERVICE_NAME, Resource
from opentelemetry.trace.status import Status, StatusCode
from opentelemetry.trace.propagation.tracecontext import TraceContextTextMapPropagator
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import (
BatchSpanProcessor,
SimpleSpanProcessor
)
from opentelemetry.sdk.trace.export.in_memory_span_exporter import (
InMemorySpanExporter
BatchSpanProcessor
)
# Support for opentelemetry-api <= 1.12
try:
from opentelemetry.util._time import _time_ns
@@ -287,16 +255,7 @@ class OpenTelemetrySource(object):
task.dump = dump
task.add_host(HostData(host_uuid, host_name, status, result))
def generate_distributed_traces(self,
otel_service_name,
ansible_playbook,
tasks_data,
status,
traceparent,
disable_logs,
disable_attributes_in_logs,
otel_exporter_otlp_traces_protocol,
store_spans_in_file):
def generate_distributed_traces(self, otel_service_name, ansible_playbook, tasks_data, status, traceparent, disable_logs, disable_attributes_in_logs):
""" generate distributed traces from the collected TaskData and HostData """
tasks = []
@@ -312,16 +271,7 @@ class OpenTelemetrySource(object):
)
)
otel_exporter = None
if store_spans_in_file:
otel_exporter = InMemorySpanExporter()
processor = SimpleSpanProcessor(otel_exporter)
else:
if otel_exporter_otlp_traces_protocol == 'grpc':
otel_exporter = GRPCOTLPSpanExporter()
else:
otel_exporter = HTTPOTLPSpanExporter()
processor = BatchSpanProcessor(otel_exporter)
processor = BatchSpanProcessor(OTLPSpanExporter())
trace.get_tracer_provider().add_span_processor(processor)
@@ -343,8 +293,6 @@ class OpenTelemetrySource(object):
with tracer.start_as_current_span(task.name, start_time=task.start, end_on_exit=False) as span:
self.update_span_data(task, host_data, span, disable_logs, disable_attributes_in_logs)
return otel_exporter
def update_span_data(self, task_data, host_data, span, disable_logs, disable_attributes_in_logs):
""" update the span with the given TaskData and HostData """
@@ -402,8 +350,7 @@ class OpenTelemetrySource(object):
if not disable_logs:
# This will avoid populating span attributes to the logs
span.add_event(task_data.dump, attributes={} if disable_attributes_in_logs else attributes)
# Close span always
span.end(end_time=host_data.finish)
span.end(end_time=host_data.finish)
def set_span_attributes(self, span, attributes):
""" update the span attributes with the given attributes if not None """
@@ -515,8 +462,6 @@ class CallbackModule(CallbackBase):
self.errors = 0
self.disabled = False
self.traceparent = False
self.store_spans_in_file = False
self.otel_exporter_otlp_traces_protocol = None
if OTEL_LIBRARY_IMPORT_ERROR:
raise_from(
@@ -544,8 +489,6 @@ class CallbackModule(CallbackBase):
self.disable_logs = self.get_option('disable_logs')
self.store_spans_in_file = self.get_option('store_spans_in_file')
self.otel_service_name = self.get_option('otel_service_name')
if not self.otel_service_name:
@@ -554,22 +497,6 @@ class CallbackModule(CallbackBase):
# See https://github.com/open-telemetry/opentelemetry-specification/issues/740
self.traceparent = self.get_option('traceparent')
self.otel_exporter_otlp_traces_protocol = self.get_option('otel_exporter_otlp_traces_protocol')
def dump_results(self, task, result):
""" dump the results if disable_logs is not enabled """
if self.disable_logs:
return ""
# ansible.builtin.uri contains the response in the json field
save = dict(result._result)
if "json" in save and task.action in ("ansible.builtin.uri", "ansible.legacy.uri", "uri"):
save.pop("json")
# ansible.builtin.slurp contains the response in the content field
if "content" in save and task.action in ("ansible.builtin.slurp", "ansible.legacy.slurp", "slurp"):
save.pop("content")
return self._dump_results(save)
def v2_playbook_on_start(self, playbook):
self.ansible_playbook = basename(playbook._file_name)
@@ -619,7 +546,7 @@ class CallbackModule(CallbackBase):
self.tasks_data,
status,
result,
self.dump_results(self.tasks_data[result._task._uuid], result)
self._dump_results(result._result)
)
def v2_runner_on_ok(self, result):
@@ -627,7 +554,7 @@ class CallbackModule(CallbackBase):
self.tasks_data,
'ok',
result,
self.dump_results(self.tasks_data[result._task._uuid], result)
self._dump_results(result._result)
)
def v2_runner_on_skipped(self, result):
@@ -635,7 +562,7 @@ class CallbackModule(CallbackBase):
self.tasks_data,
'skipped',
result,
self.dump_results(self.tasks_data[result._task._uuid], result)
self._dump_results(result._result)
)
def v2_playbook_on_include(self, included_file):
@@ -651,22 +578,15 @@ class CallbackModule(CallbackBase):
status = Status(status_code=StatusCode.OK)
else:
status = Status(status_code=StatusCode.ERROR)
otel_exporter = self.opentelemetry.generate_distributed_traces(
self.opentelemetry.generate_distributed_traces(
self.otel_service_name,
self.ansible_playbook,
self.tasks_data,
status,
self.traceparent,
self.disable_logs,
self.disable_attributes_in_logs,
self.otel_exporter_otlp_traces_protocol,
self.store_spans_in_file
self.disable_attributes_in_logs
)
if self.store_spans_in_file:
spans = [json.loads(span.to_json()) for span in otel_exporter.get_finished_spans()]
with open(self.store_spans_in_file, "w", encoding="utf-8") as output:
json.dump({"spans": spans}, output, indent=4)
def v2_runner_on_async_failed(self, result, **kwargs):
self.errors += 1

View File

@@ -88,16 +88,13 @@ import uuid
import socket
import getpass
from datetime import datetime
from os.path import basename
from ansible.module_utils.urls import open_url
from ansible.parsing.ajson import AnsibleJSONEncoder
from ansible.plugins.callback import CallbackBase
from ansible_collections.community.general.plugins.module_utils.datetime import (
now,
)
class SplunkHTTPCollectorSource(object):
def __init__(self):
@@ -137,7 +134,7 @@ class SplunkHTTPCollectorSource(object):
else:
time_format = '%Y-%m-%d %H:%M:%S +0000'
data['timestamp'] = now().strftime(time_format)
data['timestamp'] = datetime.utcnow().strftime(time_format)
data['host'] = self.host
data['ip_address'] = self.ip_address
data['user'] = self.user
@@ -184,7 +181,7 @@ class CallbackModule(CallbackBase):
def _runtime(self, result):
return (
now() -
datetime.utcnow() -
self.start_datetimes[result._task._uuid]
).total_seconds()
@@ -223,10 +220,10 @@ class CallbackModule(CallbackBase):
self.splunk.ansible_playbook = basename(playbook._file_name)
def v2_playbook_on_task_start(self, task, is_conditional):
self.start_datetimes[task._uuid] = now()
self.start_datetimes[task._uuid] = datetime.utcnow()
def v2_playbook_on_handler_task_start(self, task):
self.start_datetimes[task._uuid] = now()
self.start_datetimes[task._uuid] = datetime.utcnow()
def v2_runner_on_ok(self, result, **kwargs):
self.splunk.send_event(

View File

@@ -46,16 +46,13 @@ import uuid
import socket
import getpass
from datetime import datetime
from os.path import basename
from ansible.module_utils.urls import open_url
from ansible.parsing.ajson import AnsibleJSONEncoder
from ansible.plugins.callback import CallbackBase
from ansible_collections.community.general.plugins.module_utils.datetime import (
now,
)
class SumologicHTTPCollectorSource(object):
def __init__(self):
@@ -87,7 +84,8 @@ class SumologicHTTPCollectorSource(object):
data['uuid'] = result._task._uuid
data['session'] = self.session
data['status'] = state
data['timestamp'] = now().strftime('%Y-%m-%d %H:%M:%S +0000')
data['timestamp'] = datetime.utcnow().strftime('%Y-%m-%d %H:%M:%S '
'+0000')
data['host'] = self.host
data['ip_address'] = self.ip_address
data['user'] = self.user
@@ -125,7 +123,7 @@ class CallbackModule(CallbackBase):
def _runtime(self, result):
return (
now() -
datetime.utcnow() -
self.start_datetimes[result._task._uuid]
).total_seconds()
@@ -146,10 +144,10 @@ class CallbackModule(CallbackBase):
self.sumologic.ansible_playbook = basename(playbook._file_name)
def v2_playbook_on_task_start(self, task, is_conditional):
self.start_datetimes[task._uuid] = now()
self.start_datetimes[task._uuid] = datetime.utcnow()
def v2_playbook_on_handler_task_start(self, task):
self.start_datetimes[task._uuid] = now()
self.start_datetimes[task._uuid] = datetime.utcnow()
def v2_runner_on_ok(self, result, **kwargs):
self.sumologic.send_event(

View File

@@ -1,127 +0,0 @@
# -*- coding: utf-8 -*-
# Copyright (c) 2024, kurokobo <kurokobo@protonmail.com>
# Copyright (c) 2014, Michael DeHaan <michael.dehaan@gmail.com>
# 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
from __future__ import absolute_import, division, print_function
__metaclass__ = type
DOCUMENTATION = r"""
name: timestamp
type: stdout
short_description: Adds simple timestamp for each header
version_added: 9.0.0
description:
- This callback adds simple timestamp for each header.
author: kurokobo (@kurokobo)
options:
timezone:
description:
- Timezone to use for the timestamp in IANA time zone format.
- For example C(America/New_York), C(Asia/Tokyo)). Ignored on Python < 3.9.
ini:
- section: callback_timestamp
key: timezone
env:
- name: ANSIBLE_CALLBACK_TIMESTAMP_TIMEZONE
type: string
format_string:
description:
- Format of the timestamp shown to user in 1989 C standard format.
- >
Refer to L(the Python documentation,https://docs.python.org/3/library/datetime.html#strftime-and-strptime-format-codes)
for the available format codes.
ini:
- section: callback_timestamp
key: format_string
env:
- name: ANSIBLE_CALLBACK_TIMESTAMP_FORMAT_STRING
default: "%H:%M:%S"
type: string
seealso:
- plugin: ansible.posix.profile_tasks
plugin_type: callback
description: >
You can use P(ansible.posix.profile_tasks#callback) callback plugin to time individual tasks and overall execution time
with detailed timestamps.
extends_documentation_fragment:
- ansible.builtin.default_callback
- ansible.builtin.result_format_callback
"""
from ansible.plugins.callback.default import CallbackModule as Default
from ansible.utils.display import get_text_width
from ansible.module_utils.common.text.converters import to_text
from datetime import datetime
import types
import sys
# Store whether the zoneinfo module is available
_ZONEINFO_AVAILABLE = sys.version_info >= (3, 9)
def get_datetime_now(tz):
"""
Returns the current timestamp with the specified timezone
"""
return datetime.now(tz=tz)
def banner(self, msg, color=None, cows=True):
"""
Prints a header-looking line with cowsay or stars with length depending on terminal width (3 minimum) with trailing timestamp
Based on the banner method of Display class from ansible.utils.display
https://github.com/ansible/ansible/blob/4403519afe89138042108e237aef317fd5f09c33/lib/ansible/utils/display.py#L511
"""
timestamp = get_datetime_now(self.timestamp_tzinfo).strftime(self.timestamp_format_string)
timestamp_len = get_text_width(timestamp) + 1 # +1 for leading space
msg = to_text(msg)
if self.b_cowsay and cows:
try:
self.banner_cowsay("%s @ %s" % (msg, timestamp))
return
except OSError:
self.warning("somebody cleverly deleted cowsay or something during the PB run. heh.")
msg = msg.strip()
try:
star_len = self.columns - get_text_width(msg) - timestamp_len
except EnvironmentError:
star_len = self.columns - len(msg) - timestamp_len
if star_len <= 3:
star_len = 3
stars = "*" * star_len
self.display("\n%s %s %s" % (msg, stars, timestamp), color=color)
class CallbackModule(Default):
CALLBACK_VERSION = 2.0
CALLBACK_TYPE = "stdout"
CALLBACK_NAME = "community.general.timestamp"
def __init__(self):
super(CallbackModule, self).__init__()
# Replace the banner method of the display object with the custom one
self._display.banner = types.MethodType(banner, self._display)
def set_options(self, task_keys=None, var_options=None, direct=None):
super(CallbackModule, self).set_options(task_keys=task_keys, var_options=var_options, direct=direct)
# Store zoneinfo for specified timezone if available
tzinfo = None
if _ZONEINFO_AVAILABLE and self.get_option("timezone"):
from zoneinfo import ZoneInfo
tzinfo = ZoneInfo(self.get_option("timezone"))
# Inject options into the display object
setattr(self._display, "timestamp_tzinfo", tzinfo)
setattr(self._display, "timestamp_format_string", self.get_option("format_string"))

View File

@@ -19,16 +19,6 @@ DOCUMENTATION = '''
- default_callback
requirements:
- set as stdout in configuration
seealso:
- plugin: ansible.builtin.default
plugin_type: callback
description: >
There is a parameter O(ansible.builtin.default#callback:result_format) in P(ansible.builtin.default#callback)
that allows you to change the output format to YAML.
notes:
- >
With ansible-core 2.13 or newer, you can instead specify V(yaml) for the parameter O(ansible.builtin.default#callback:result_format)
in P(ansible.builtin.default#callback).
'''
import yaml

View File

@@ -56,4 +56,5 @@ attributes:
support: full
membership:
- community.general.consul
version_added: 8.3.0
"""

View File

@@ -1,62 +0,0 @@
# -*- coding: utf-8 -*-
# Copyright (c) 2024, Alexei Znamensky <russoz@gmail.com>
# 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
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
class ModuleDocFragment(object):
DOCUMENTATION = r'''
options:
venv:
description:
- Use the 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:
description:
- Specifies the settings module to use.
- The value will be passed as is to the C(--settings) argument in C(django-admin).
type: str
required: true
pythonpath:
description:
- Adds the given filesystem path to the Python import search path.
- The value will be passed as is to the C(--pythonpath) argument in C(django-admin).
type: path
traceback:
description:
- Provides a full stack trace in the output when a C(CommandError) is raised.
type: bool
verbosity:
description:
- Specifies the amount of notification and debug information in the output of C(django-admin).
type: int
choices: [0, 1, 2, 3]
skip_checks:
description:
- Skips running system checks prior to running the command.
type: bool
notes:
- The C(django-admin) command is always executed using the C(C) locale, and the option C(--no-color) is always passed.
seealso:
- name: django-admin and manage.py in official Django documentation
description: >-
Refer to this documentation for the builtin commands and options of C(django-admin).
Please make sure that you select the right version of Django in the version selector on that page.
link: https://docs.djangoproject.com/en/5.0/ref/django-admin/
'''
DATABASE = r'''
options:
database:
description:
- Specify the database to be used.
type: str
default: default
'''

View File

@@ -16,13 +16,6 @@ options:
- Specify the target host of the Proxmox VE cluster.
type: str
required: true
api_port:
description:
- Specify the target port of the Proxmox VE cluster.
- Uses the E(PROXMOX_PORT) environment variable if not specified.
type: int
required: false
version_added: 9.1.0
api_user:
description:
- Specify the user to authenticate with.
@@ -72,13 +65,3 @@ options:
- Add the new VM to the specified pool.
type: str
'''
ACTIONGROUP_PROXMOX = r"""
options: {}
attributes:
action_group:
description: Use C(group/community.general.proxmox) in C(module_defaults) to set defaults for this module.
support: full
membership:
- community.general.proxmox
"""

View File

@@ -0,0 +1,120 @@
# -*- coding: utf-8 -*-
# Copyright (c) 2014, Matt Martz <matt@sivel.net>
# 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
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
class ModuleDocFragment(object):
# Standard Rackspace only documentation fragment
DOCUMENTATION = r'''
options:
api_key:
description:
- Rackspace API key, overrides O(credentials).
type: str
aliases: [ password ]
credentials:
description:
- File to find the Rackspace credentials in. Ignored if O(api_key) and
O(username) are provided.
type: path
aliases: [ creds_file ]
env:
description:
- Environment as configured in C(~/.pyrax.cfg),
see U(https://github.com/rackspace/pyrax/blob/master/docs/getting_started.md#pyrax-configuration).
type: str
region:
description:
- Region to create an instance in.
type: str
username:
description:
- Rackspace username, overrides O(credentials).
type: str
validate_certs:
description:
- Whether or not to require SSL validation of API endpoints.
type: bool
aliases: [ verify_ssl ]
requirements:
- pyrax
notes:
- The following environment variables can be used, E(RAX_USERNAME),
E(RAX_API_KEY), E(RAX_CREDS_FILE), E(RAX_CREDENTIALS), E(RAX_REGION).
- E(RAX_CREDENTIALS) and E(RAX_CREDS_FILE) point to a credentials file
appropriate for pyrax. See U(https://github.com/rackspace/pyrax/blob/master/docs/getting_started.md#authenticating).
- E(RAX_USERNAME) and E(RAX_API_KEY) obviate the use of a credentials file.
- E(RAX_REGION) defines a Rackspace Public Cloud region (DFW, ORD, LON, ...).
'''
# Documentation fragment including attributes to enable communication
# of other OpenStack clouds. Not all rax modules support this.
OPENSTACK = r'''
options:
api_key:
type: str
description:
- Rackspace API key, overrides O(credentials).
aliases: [ password ]
auth_endpoint:
type: str
description:
- The URI of the authentication service.
- If not specified will be set to U(https://identity.api.rackspacecloud.com/v2.0/).
credentials:
type: path
description:
- File to find the Rackspace credentials in. Ignored if O(api_key) and
O(username) are provided.
aliases: [ creds_file ]
env:
type: str
description:
- Environment as configured in C(~/.pyrax.cfg),
see U(https://github.com/rackspace/pyrax/blob/master/docs/getting_started.md#pyrax-configuration).
identity_type:
type: str
description:
- Authentication mechanism to use, such as rackspace or keystone.
default: rackspace
region:
type: str
description:
- Region to create an instance in.
tenant_id:
type: str
description:
- The tenant ID used for authentication.
tenant_name:
type: str
description:
- The tenant name used for authentication.
username:
type: str
description:
- Rackspace username, overrides O(credentials).
validate_certs:
description:
- Whether or not to require SSL validation of API endpoints.
type: bool
aliases: [ verify_ssl ]
deprecated:
removed_in: 9.0.0
why: This module relies on the deprecated package pyrax.
alternative: Use the Openstack modules instead.
requirements:
- pyrax
notes:
- The following environment variables can be used, E(RAX_USERNAME),
E(RAX_API_KEY), E(RAX_CREDS_FILE), E(RAX_CREDENTIALS), E(RAX_REGION).
- E(RAX_CREDENTIALS) and E(RAX_CREDS_FILE) points to a credentials file
appropriate for pyrax. See U(https://github.com/rackspace/pyrax/blob/master/docs/getting_started.md#authenticating).
- E(RAX_USERNAME) and E(RAX_API_KEY) obviate the use of a credentials file.
- E(RAX_REGION) defines a Rackspace Public Cloud region (DFW, ORD, LON, ...).
'''

View File

@@ -57,7 +57,7 @@ class IniParser(ConfigParser):
''' Implements a configparser which is able to return a dict '''
def __init__(self):
super().__init__(interpolation=None)
super().__init__()
self.optionxform = str
def as_dict(self):

View File

@@ -1,138 +0,0 @@
# -*- coding: utf-8 -*-
# Copyright (c) 2024 Vladimir Botka <vbotka@gmail.com>
# Copyright (c) 2024 Felix Fontein <felix@fontein.de>
# 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
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
DOCUMENTATION = '''
name: keep_keys
short_description: Keep specific keys from dictionaries in a list
version_added: "9.1.0"
author:
- Vladimir Botka (@vbotka)
- Felix Fontein (@felixfontein)
description: This filter keeps only specified keys from a provided list of dictionaries.
options:
_input:
description:
- A list of dictionaries.
- Top level keys must be strings.
type: list
elements: dictionary
required: true
target:
description:
- A single key or key pattern to keep, or a list of keys or keys patterns to keep.
- If O(matching_parameter=regex) there must be exactly one pattern provided.
type: raw
required: true
matching_parameter:
description: Specify the matching option of target keys.
type: str
default: equal
choices:
equal: Matches keys of exactly one of the O(target) items.
starts_with: Matches keys that start with one of the O(target) items.
ends_with: Matches keys that end with one of the O(target) items.
regex:
- Matches keys that match the regular expresion provided in O(target).
- In this case, O(target) must be a regex string or a list with single regex string.
'''
EXAMPLES = '''
l:
- {k0_x0: A0, k1_x1: B0, k2_x2: [C0], k3_x3: foo}
- {k0_x0: A1, k1_x1: B1, k2_x2: [C1], k3_x3: bar}
# 1) By default match keys that equal any of the items in the target.
t: [k0_x0, k1_x1]
r: "{{ l | community.general.keep_keys(target=t) }}"
# 2) Match keys that start with any of the items in the target.
t: [k0, k1]
r: "{{ l | community.general.keep_keys(target=t, matching_parameter='starts_with') }}"
# 3) Match keys that end with any of the items in target.
t: [x0, x1]
r: "{{ l | community.general.keep_keys(target=t, matching_parameter='ends_with') }}"
# 4) Match keys by the regex.
t: ['^.*[01]_x.*$']
r: "{{ l | community.general.keep_keys(target=t, matching_parameter='regex') }}"
# 5) Match keys by the regex.
t: '^.*[01]_x.*$'
r: "{{ l | community.general.keep_keys(target=t, matching_parameter='regex') }}"
# The results of above examples 1-5 are all the same.
r:
- {k0_x0: A0, k1_x1: B0}
- {k0_x0: A1, k1_x1: B1}
# 6) By default match keys that equal the target.
t: k0_x0
r: "{{ l | community.general.keep_keys(target=t) }}"
# 7) Match keys that start with the target.
t: k0
r: "{{ l | community.general.keep_keys(target=t, matching_parameter='starts_with') }}"
# 8) Match keys that end with the target.
t: x0
r: "{{ l | community.general.keep_keys(target=t, matching_parameter='ends_with') }}"
# 9) Match keys by the regex.
t: '^.*0_x.*$'
r: "{{ l | community.general.keep_keys(target=t, matching_parameter='regex') }}"
# The results of above examples 6-9 are all the same.
r:
- {k0_x0: A0}
- {k0_x0: A1}
'''
RETURN = '''
_value:
description: The list of dictionaries with selected keys.
type: list
elements: dictionary
'''
from ansible_collections.community.general.plugins.plugin_utils.keys_filter import (
_keys_filter_params,
_keys_filter_target_str)
def keep_keys(data, target=None, matching_parameter='equal'):
"""keep specific keys from dictionaries in a list"""
# test parameters
_keys_filter_params(data, matching_parameter)
# test and transform target
tt = _keys_filter_target_str(target, matching_parameter)
if matching_parameter == 'equal':
def keep_key(key):
return key in tt
elif matching_parameter == 'starts_with':
def keep_key(key):
return key.startswith(tt)
elif matching_parameter == 'ends_with':
def keep_key(key):
return key.endswith(tt)
elif matching_parameter == 'regex':
def keep_key(key):
return tt.match(key) is not None
return [dict((k, v) for k, v in d.items() if keep_key(k)) for d in data]
class FilterModule(object):
def filters(self):
return {
'keep_keys': keep_keys,
}

View File

@@ -1,5 +1,5 @@
# -*- coding: utf-8 -*-
# Copyright (c) 2020-2024, Vladimir Botka <vbotka@gmail.com>
# Copyright (c) 2020-2022, Vladimir Botka <vbotka@gmail.com>
# 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
@@ -12,32 +12,22 @@ DOCUMENTATION = '''
version_added: 2.0.0
author: Vladimir Botka (@vbotka)
description:
- Merge two or more lists by attribute O(index). Optional
parameters O(recursive) and O(list_merge) control the merging of
the nested dictionaries and lists.
- The function C(merge_hash) from C(ansible.utils.vars) is used.
- To learn details on how to use the parameters O(recursive) and
O(list_merge) see Ansible User's Guide chapter "Using filters to
manipulate data" section R(Combining hashes/dictionaries, combine_filter) or the
filter P(ansible.builtin.combine#filter).
- Merge two or more lists by attribute O(index). Optional parameters O(recursive) and O(list_merge)
control the merging of the lists in values. The function merge_hash from ansible.utils.vars
is used. To learn details on how to use the parameters O(recursive) and O(list_merge) see
Ansible User's Guide chapter "Using filters to manipulate data" section "Combining
hashes/dictionaries".
positional: another_list, index
options:
_input:
description:
- A list of dictionaries, or a list of lists of dictionaries.
- The required type of the C(elements) is set to C(raw)
because all elements of O(_input) can be either dictionaries
or lists.
description: A list of dictionaries.
type: list
elements: raw
elements: dictionary
required: true
another_list:
description:
- Another list of dictionaries, or a list of lists of dictionaries.
- This parameter can be specified multiple times.
description: Another list of dictionaries. This parameter can be specified multiple times.
type: list
elements: raw
elements: dictionary
index:
description:
- The dictionary key that must be present in every dictionary in every list that is used to
@@ -65,134 +55,40 @@ DOCUMENTATION = '''
'''
EXAMPLES = '''
# Some results below are manually formatted for better readability. The
# dictionaries' keys will be sorted alphabetically in real output.
- name: Example 1. Merge two lists. The results r1 and r2 are the same.
- name: Merge two lists
ansible.builtin.debug:
msg: |
r1: {{ r1 }}
r2: {{ r2 }}
msg: >-
{{ list1 | community.general.lists_mergeby(
list2,
'index',
recursive=True,
list_merge='append'
) }}"
vars:
list1:
- {index: a, value: 123}
- {index: b, value: 4}
- index: a
value: 123
- index: b
value: 42
list2:
- {index: a, foo: bar}
- {index: c, foo: baz}
r1: "{{ list1 | community.general.lists_mergeby(list2, 'index') }}"
r2: "{{ [list1, list2] | community.general.lists_mergeby('index') }}"
# r1:
# - {index: a, foo: bar, value: 123}
# - {index: b, value: 4}
# - {index: c, foo: baz}
# r2:
# - {index: a, foo: bar, value: 123}
# - {index: b, value: 4}
# - {index: c, foo: baz}
- name: Example 2. Merge three lists
ansible.builtin.debug:
var: r
vars:
list1:
- {index: a, value: 123}
- {index: b, value: 4}
list2:
- {index: a, foo: bar}
- {index: c, foo: baz}
list3:
- {index: d, foo: qux}
r: "{{ [list1, list2, list3] | community.general.lists_mergeby('index') }}"
# r:
# - {index: a, foo: bar, value: 123}
# - {index: b, value: 4}
# - {index: c, foo: baz}
# - {index: d, foo: qux}
- name: Example 3. Merge single list. The result is the same as 2.
ansible.builtin.debug:
var: r
vars:
list1:
- {index: a, value: 123}
- {index: b, value: 4}
- {index: a, foo: bar}
- {index: c, foo: baz}
- {index: d, foo: qux}
r: "{{ [list1, []] | community.general.lists_mergeby('index') }}"
# r:
# - {index: a, foo: bar, value: 123}
# - {index: b, value: 4}
# - {index: c, foo: baz}
# - {index: d, foo: qux}
- name: Example 4. Merge two lists. By default, replace nested lists.
ansible.builtin.debug:
var: r
vars:
list1:
- {index: a, foo: [X1, X2]}
- {index: b, foo: [X1, X2]}
list2:
- {index: a, foo: [Y1, Y2]}
- {index: b, foo: [Y1, Y2]}
r: "{{ [list1, list2] | community.general.lists_mergeby('index') }}"
# r:
# - {index: a, foo: [Y1, Y2]}
# - {index: b, foo: [Y1, Y2]}
- name: Example 5. Merge two lists. Append nested lists.
ansible.builtin.debug:
var: r
vars:
list1:
- {index: a, foo: [X1, X2]}
- {index: b, foo: [X1, X2]}
list2:
- {index: a, foo: [Y1, Y2]}
- {index: b, foo: [Y1, Y2]}
r: "{{ [list1, list2] | community.general.lists_mergeby('index', list_merge='append') }}"
# r:
# - {index: a, foo: [X1, X2, Y1, Y2]}
# - {index: b, foo: [X1, X2, Y1, Y2]}
- name: Example 6. Merge two lists. By default, do not merge nested dictionaries.
ansible.builtin.debug:
var: r
vars:
list1:
- {index: a, foo: {x: 1, y: 2}}
- {index: b, foo: [X1, X2]}
list2:
- {index: a, foo: {y: 3, z: 4}}
- {index: b, foo: [Y1, Y2]}
r: "{{ [list1, list2] | community.general.lists_mergeby('index') }}"
# r:
# - {index: a, foo: {y: 3, z: 4}}
# - {index: b, foo: [Y1, Y2]}
- name: Example 7. Merge two lists. Merge nested dictionaries too.
ansible.builtin.debug:
var: r
vars:
list1:
- {index: a, foo: {x: 1, y: 2}}
- {index: b, foo: [X1, X2]}
list2:
- {index: a, foo: {y: 3, z: 4}}
- {index: b, foo: [Y1, Y2]}
r: "{{ [list1, list2] | community.general.lists_mergeby('index', recursive=true) }}"
# r:
# - {index: a, foo: {x:1, y: 3, z: 4}}
# - {index: b, foo: [Y1, Y2]}
- index: a
foo: bar
- index: c
foo: baz
# Produces the following list of dictionaries:
# {
# "index": "a",
# "foo": "bar",
# "value": 123
# },
# {
# "index": "b",
# "value": 42
# },
# {
# "index": "c",
# "foo": "baz"
# }
'''
RETURN = '''
@@ -212,14 +108,13 @@ from operator import itemgetter
def list_mergeby(x, y, index, recursive=False, list_merge='replace'):
'''Merge 2 lists by attribute 'index'. The function 'merge_hash'
from ansible.utils.vars is used. This function is used by the
function lists_mergeby.
''' Merge 2 lists by attribute 'index'. The function merge_hash from ansible.utils.vars is used.
This function is used by the function lists_mergeby.
'''
d = defaultdict(dict)
for lst in (x, y):
for elem in lst:
for l in (x, y):
for elem in l:
if not isinstance(elem, Mapping):
msg = "Elements of list arguments for lists_mergeby must be dictionaries. %s is %s"
raise AnsibleFilterError(msg % (elem, type(elem)))
@@ -229,9 +124,20 @@ def list_mergeby(x, y, index, recursive=False, list_merge='replace'):
def lists_mergeby(*terms, **kwargs):
'''Merge 2 or more lists by attribute 'index'. To learn details
on how to use the parameters 'recursive' and 'list_merge' see
the filter ansible.builtin.combine.
''' Merge 2 or more lists by attribute 'index'. Optional parameters 'recursive' and 'list_merge'
control the merging of the lists in values. The function merge_hash from ansible.utils.vars
is used. To learn details on how to use the parameters 'recursive' and 'list_merge' see
Ansible User's Guide chapter "Using filters to manipulate data" section "Combining
hashes/dictionaries".
Example:
- debug:
msg: "{{ list1|
community.general.lists_mergeby(list2,
'index',
recursive=True,
list_merge='append')|
list }}"
'''
recursive = kwargs.pop('recursive', False)
@@ -249,7 +155,7 @@ def lists_mergeby(*terms, **kwargs):
"must be lists. %s is %s")
raise AnsibleFilterError(msg % (sublist, type(sublist)))
if len(sublist) > 0:
if all(isinstance(lst, Sequence) for lst in sublist):
if all(isinstance(l, Sequence) for l in sublist):
for item in sublist:
flat_list.append(item)
else:

View File

@@ -1,138 +0,0 @@
# -*- coding: utf-8 -*-
# Copyright (c) 2024 Vladimir Botka <vbotka@gmail.com>
# Copyright (c) 2024 Felix Fontein <felix@fontein.de>
# 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
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
DOCUMENTATION = '''
name: remove_keys
short_description: Remove specific keys from dictionaries in a list
version_added: "9.1.0"
author:
- Vladimir Botka (@vbotka)
- Felix Fontein (@felixfontein)
description: This filter removes only specified keys from a provided list of dictionaries.
options:
_input:
description:
- A list of dictionaries.
- Top level keys must be strings.
type: list
elements: dictionary
required: true
target:
description:
- A single key or key pattern to remove, or a list of keys or keys patterns to remove.
- If O(matching_parameter=regex) there must be exactly one pattern provided.
type: raw
required: true
matching_parameter:
description: Specify the matching option of target keys.
type: str
default: equal
choices:
equal: Matches keys of exactly one of the O(target) items.
starts_with: Matches keys that start with one of the O(target) items.
ends_with: Matches keys that end with one of the O(target) items.
regex:
- Matches keys that match the regular expresion provided in O(target).
- In this case, O(target) must be a regex string or a list with single regex string.
'''
EXAMPLES = '''
l:
- {k0_x0: A0, k1_x1: B0, k2_x2: [C0], k3_x3: foo}
- {k0_x0: A1, k1_x1: B1, k2_x2: [C1], k3_x3: bar}
# 1) By default match keys that equal any of the items in the target.
t: [k0_x0, k1_x1]
r: "{{ l | community.general.remove_keys(target=t) }}"
# 2) Match keys that start with any of the items in the target.
t: [k0, k1]
r: "{{ l | community.general.remove_keys(target=t, matching_parameter='starts_with') }}"
# 3) Match keys that end with any of the items in target.
t: [x0, x1]
r: "{{ l | community.general.remove_keys(target=t, matching_parameter='ends_with') }}"
# 4) Match keys by the regex.
t: ['^.*[01]_x.*$']
r: "{{ l | community.general.remove_keys(target=t, matching_parameter='regex') }}"
# 5) Match keys by the regex.
t: '^.*[01]_x.*$'
r: "{{ l | community.general.remove_keys(target=t, matching_parameter='regex') }}"
# The results of above examples 1-5 are all the same.
r:
- {k2_x2: [C0], k3_x3: foo}
- {k2_x2: [C1], k3_x3: bar}
# 6) By default match keys that equal the target.
t: k0_x0
r: "{{ l | community.general.remove_keys(target=t) }}"
# 7) Match keys that start with the target.
t: k0
r: "{{ l | community.general.remove_keys(target=t, matching_parameter='starts_with') }}"
# 8) Match keys that end with the target.
t: x0
r: "{{ l | community.general.remove_keys(target=t, matching_parameter='ends_with') }}"
# 9) Match keys by the regex.
t: '^.*0_x.*$'
r: "{{ l | community.general.remove_keys(target=t, matching_parameter='regex') }}"
# The results of above examples 6-9 are all the same.
r:
- {k1_x1: B0, k2_x2: [C0], k3_x3: foo}
- {k1_x1: B1, k2_x2: [C1], k3_x3: bar}
'''
RETURN = '''
_value:
description: The list of dictionaries with selected keys removed.
type: list
elements: dictionary
'''
from ansible_collections.community.general.plugins.plugin_utils.keys_filter import (
_keys_filter_params,
_keys_filter_target_str)
def remove_keys(data, target=None, matching_parameter='equal'):
"""remove specific keys from dictionaries in a list"""
# test parameters
_keys_filter_params(data, matching_parameter)
# test and transform target
tt = _keys_filter_target_str(target, matching_parameter)
if matching_parameter == 'equal':
def keep_key(key):
return key not in tt
elif matching_parameter == 'starts_with':
def keep_key(key):
return not key.startswith(tt)
elif matching_parameter == 'ends_with':
def keep_key(key):
return not key.endswith(tt)
elif matching_parameter == 'regex':
def keep_key(key):
return tt.match(key) is None
return [dict((k, v) for k, v in d.items() if keep_key(k)) for d in data]
class FilterModule(object):
def filters(self):
return {
'remove_keys': remove_keys,
}

View File

@@ -1,180 +0,0 @@
# -*- coding: utf-8 -*-
# Copyright (c) 2024 Vladimir Botka <vbotka@gmail.com>
# Copyright (c) 2024 Felix Fontein <felix@fontein.de>
# 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
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
DOCUMENTATION = '''
name: replace_keys
short_description: Replace specific keys in a list of dictionaries
version_added: "9.1.0"
author:
- Vladimir Botka (@vbotka)
- Felix Fontein (@felixfontein)
description: This filter replaces specified keys in a provided list of dictionaries.
options:
_input:
description:
- A list of dictionaries.
- Top level keys must be strings.
type: list
elements: dictionary
required: true
target:
description:
- A list of dictionaries with attributes C(before) and C(after).
- The value of O(target[].after) replaces key matching O(target[].before).
type: list
elements: dictionary
required: true
suboptions:
before:
description:
- A key or key pattern to change.
- The interpretation of O(target[].before) depends on O(matching_parameter).
- For a key that matches multiple O(target[].before)s, the B(first) matching O(target[].after) will be used.
type: str
after:
description: A matching key change to.
type: str
matching_parameter:
description: Specify the matching option of target keys.
type: str
default: equal
choices:
equal: Matches keys of exactly one of the O(target[].before) items.
starts_with: Matches keys that start with one of the O(target[].before) items.
ends_with: Matches keys that end with one of the O(target[].before) items.
regex: Matches keys that match one of the regular expressions provided in O(target[].before).
'''
EXAMPLES = '''
l:
- {k0_x0: A0, k1_x1: B0, k2_x2: [C0], k3_x3: foo}
- {k0_x0: A1, k1_x1: B1, k2_x2: [C1], k3_x3: bar}
# 1) By default, replace keys that are equal any of the attributes before.
t:
- {before: k0_x0, after: a0}
- {before: k1_x1, after: a1}
r: "{{ l | community.general.replace_keys(target=t) }}"
# 2) Replace keys that starts with any of the attributes before.
t:
- {before: k0, after: a0}
- {before: k1, after: a1}
r: "{{ l | community.general.replace_keys(target=t, matching_parameter='starts_with') }}"
# 3) Replace keys that ends with any of the attributes before.
t:
- {before: x0, after: a0}
- {before: x1, after: a1}
r: "{{ l | community.general.replace_keys(target=t, matching_parameter='ends_with') }}"
# 4) Replace keys that match any regex of the attributes before.
t:
- {before: "^.*0_x.*$", after: a0}
- {before: "^.*1_x.*$", after: a1}
r: "{{ l | community.general.replace_keys(target=t, matching_parameter='regex') }}"
# The results of above examples 1-4 are all the same.
r:
- {a0: A0, a1: B0, k2_x2: [C0], k3_x3: foo}
- {a0: A1, a1: B1, k2_x2: [C1], k3_x3: bar}
# 5) If more keys match the same attribute before the last one will be used.
t:
- {before: "^.*_x.*$", after: X}
r: "{{ l | community.general.replace_keys(target=t, matching_parameter='regex') }}"
# gives
r:
- X: foo
- X: bar
# 6) If there are items with equal attribute before the first one will be used.
t:
- {before: "^.*_x.*$", after: X}
- {before: "^.*_x.*$", after: Y}
r: "{{ l | community.general.replace_keys(target=t, matching_parameter='regex') }}"
# gives
r:
- X: foo
- X: bar
# 7) If there are more matches for a key the first one will be used.
l:
- {aaa1: A, bbb1: B, ccc1: C}
- {aaa2: D, bbb2: E, ccc2: F}
t:
- {before: a, after: X}
- {before: aa, after: Y}
r: "{{ l | community.general.replace_keys(target=t, matching_parameter='starts_with') }}"
# gives
r:
- {X: A, bbb1: B, ccc1: C}
- {X: D, bbb2: E, ccc2: F}
'''
RETURN = '''
_value:
description: The list of dictionaries with replaced keys.
type: list
elements: dictionary
'''
from ansible_collections.community.general.plugins.plugin_utils.keys_filter import (
_keys_filter_params,
_keys_filter_target_dict)
def replace_keys(data, target=None, matching_parameter='equal'):
"""replace specific keys in a list of dictionaries"""
# test parameters
_keys_filter_params(data, matching_parameter)
# test and transform target
tz = _keys_filter_target_dict(target, matching_parameter)
if matching_parameter == 'equal':
def replace_key(key):
for b, a in tz:
if key == b:
return a
return key
elif matching_parameter == 'starts_with':
def replace_key(key):
for b, a in tz:
if key.startswith(b):
return a
return key
elif matching_parameter == 'ends_with':
def replace_key(key):
for b, a in tz:
if key.endswith(b):
return a
return key
elif matching_parameter == 'regex':
def replace_key(key):
for b, a in tz:
if b.match(key):
return a
return key
return [dict((replace_key(k), v) for k, v in d.items()) for d in data]
class FilterModule(object):
def filters(self):
return {
'replace_keys': replace_keys,
}

View File

@@ -1,134 +0,0 @@
# -*- coding: utf-8 -*-
# Copyright (c) 2024 Vladimir Botka <vbotka@gmail.com>
# 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
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
DOCUMENTATION = '''
name: reveal_ansible_type
short_description: Return input type
version_added: "9.2.0"
author: Vladimir Botka (@vbotka)
description: This filter returns input type.
options:
_input:
description: Input data.
type: raw
required: true
alias:
description: Data type aliases.
default: {}
type: dictionary
'''
EXAMPLES = '''
# Substitution converts str to AnsibleUnicode
# -------------------------------------------
# String. AnsibleUnicode.
data: "abc"
result: '{{ data | community.general.reveal_ansible_type }}'
# result => AnsibleUnicode
# String. AnsibleUnicode alias str.
alias: {"AnsibleUnicode": "str"}
data: "abc"
result: '{{ data | community.general.reveal_ansible_type(alias) }}'
# result => str
# List. All items are AnsibleUnicode.
data: ["a", "b", "c"]
result: '{{ data | community.general.reveal_ansible_type }}'
# result => list[AnsibleUnicode]
# Dictionary. All keys are AnsibleUnicode. All values are AnsibleUnicode.
data: {"a": "foo", "b": "bar", "c": "baz"}
result: '{{ data | community.general.reveal_ansible_type }}'
# result => dict[AnsibleUnicode, AnsibleUnicode]
# No substitution and no alias. Type of strings is str
# ----------------------------------------------------
# String
result: '{{ "abc" | community.general.reveal_ansible_type }}'
# result => str
# Integer
result: '{{ 123 | community.general.reveal_ansible_type }}'
# result => int
# Float
result: '{{ 123.45 | community.general.reveal_ansible_type }}'
# result => float
# Boolean
result: '{{ true | community.general.reveal_ansible_type }}'
# result => bool
# List. All items are strings.
result: '{{ ["a", "b", "c"] | community.general.reveal_ansible_type }}'
# result => list[str]
# List of dictionaries.
result: '{{ [{"a": 1}, {"b": 2}] | community.general.reveal_ansible_type }}'
# result => list[dict]
# Dictionary. All keys are strings. All values are integers.
result: '{{ {"a": 1} | community.general.reveal_ansible_type }}'
# result => dict[str, int]
# Dictionary. All keys are strings. All values are integers.
result: '{{ {"a": 1, "b": 2} | community.general.reveal_ansible_type }}'
# result => dict[str, int]
# Type of strings is AnsibleUnicode or str
# ----------------------------------------
# Dictionary. The keys are integers or strings. All values are strings.
alias: {"AnsibleUnicode": "str"}
data: {1: 'a', 'b': 'b'}
result: '{{ data | community.general.reveal_ansible_type(alias) }}'
# result => dict[int|str, str]
# Dictionary. All keys are integers. All values are keys.
alias: {"AnsibleUnicode": "str"}
data: {1: 'a', 2: 'b'}
result: '{{ data | community.general.reveal_ansible_type(alias) }}'
# result => dict[int, str]
# Dictionary. All keys are strings. Multiple types values.
alias: {"AnsibleUnicode": "str"}
data: {'a': 1, 'b': 1.1, 'c': 'abc', 'd': True, 'e': ['x', 'y', 'z'], 'f': {'x': 1, 'y': 2}}
result: '{{ data | community.general.reveal_ansible_type(alias) }}'
# result => dict[str, bool|dict|float|int|list|str]
# List. Multiple types items.
alias: {"AnsibleUnicode": "str"}
data: [1, 2, 1.1, 'abc', True, ['x', 'y', 'z'], {'x': 1, 'y': 2}]
result: '{{ data | community.general.reveal_ansible_type(alias) }}'
# result => list[bool|dict|float|int|list|str]
'''
RETURN = '''
_value:
description: Type of the data.
type: str
'''
from ansible_collections.community.general.plugins.plugin_utils.ansible_type import _ansible_type
def reveal_ansible_type(data, alias=None):
"""Returns data type"""
return _ansible_type(data, alias)
class FilterModule(object):
def filters(self):
return {
'reveal_ansible_type': reveal_ansible_type
}

View File

@@ -63,7 +63,7 @@ class IniParser(ConfigParser):
''' Implements a configparser which sets the correct optionxform '''
def __init__(self):
super().__init__(interpolation=None)
super().__init__()
self.optionxform = str

View File

@@ -117,8 +117,7 @@ from ansible.errors import AnsibleError
from ansible.module_utils.common.text.converters import to_text
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
from ansible.utils.unsafe_proxy import wrap_var as make_unsafe
# xmlrpc
try:

View File

@@ -83,8 +83,7 @@ keyed_groups:
from ansible.errors import AnsibleError, AnsibleParserError
from ansible.module_utils.common.text.converters import to_native
from ansible.plugins.inventory import BaseInventoryPlugin, Constructable
from ansible_collections.community.general.plugins.plugin_utils.unsafe import make_unsafe
from ansible.utils.unsafe_proxy import wrap_var as make_unsafe
try:
import gitlab

View File

@@ -102,8 +102,7 @@ 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
from ansible.utils.unsafe_proxy import wrap_var as make_unsafe
class InventoryModule(BaseInventoryPlugin, Constructable):

View File

@@ -122,8 +122,7 @@ compose:
from ansible.errors import AnsibleError
from ansible.plugins.inventory import BaseInventoryPlugin, Constructable, Cacheable
from ansible_collections.community.general.plugins.plugin_utils.unsafe import make_unsafe
from ansible.utils.unsafe_proxy import wrap_var as make_unsafe
try:

View File

@@ -175,7 +175,7 @@ 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
from ansible.utils.unsafe_proxy import wrap_var as make_unsafe
try:
import ipaddress

Some files were not shown because too many files have changed in this diff Show More