Compare commits

..

64 Commits

Author SHA1 Message Date
Felix Fontein
d8b0108796 Remove CI. 2024-11-03 12:06:34 +01:00
Felix Fontein
8a0794d330 Release 7.5.9. 2024-11-03 11:34:20 +01:00
patchback[bot]
2c1172d5d2 [PR #9052/d0b4e91c backport][stable-7] modprobe: fix --check mode not being honored for persistent option (#9069)
modprobe: fix --check mode not being honored for persistent option (#9052)

* modprobe: fix --check mode not being honored for persistent option

* Add CHANGELOG

* Update CHANGELOG

* Update changelogs/fragments/9052-modprobe-bugfix.yml

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

---------

Co-authored-by: d-usuba <d-usuba@sakura.ad.jp>
Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit d0b4e91cac)

Co-authored-by: salmon111 <campfire@kumachans.net>
2024-10-29 20:27:38 +01:00
patchback[bot]
e49a26b6ab [PR #9035/b1f46040 backport][stable-7] Skip timezone test on RHEL 7.9 VMs (#9037)
Skip timezone test on RHEL 7.9 VMs (#9035)

Skip timezone test on RHEL 7.9 VMs.

(cherry picked from commit b1f4604067)

Co-authored-by: Felix Fontein <felix@fontein.de>
2024-10-19 14:21:27 +02:00
Felix Fontein
a781573977 Fix reuse workflow branches.
(cherry picked from commit 5874711c6e)
2024-10-19 12:36:27 +02:00
patchback[bot]
88b1d1e0c1 [PR #8925/7c913b23 backport][stable-7] Pass absolute paths to atomic_move() (#8957)
Pass absolute paths to atomic_move() (#8925)

Pass absolute paths to atmoic_move().

(cherry picked from commit 7c913b239a)

Co-authored-by: Felix Fontein <felix@fontein.de>
2024-10-02 09:50:35 +03:00
Felix Fontein
45dd6a59f8 Prepare 7.5.9 release. 2024-09-28 08:34:07 +03:00
patchback[bot]
71bf1184ef [PR #8913/199ba0a1 backport][stable-7] Fix parameter name (#8914)
Fix parameter name (#8913)

(cherry picked from commit 199ba0a170)

Co-authored-by: Niko Ehrenfeuchter <mail@he1ix.org>
2024-09-24 23:08:55 +03:00
patchback[bot]
855201d9fb [PR #8900/a32f1d69 backport][stable-7] ipa_hostgroup: fix state params (#8904)
ipa_hostgroup: fix state params (#8900)

* Fix ipa_hostgroup

* Add CHANGELOG fragment

(cherry picked from commit a32f1d699b)

Co-authored-by: alexander <79072457+abakanovskii@users.noreply.github.com>
2024-09-23 21:46:21 +03:00
patchback[bot]
4a6ed38ee2 [PR #8870/2f1df973 backport][stable-7] Remove private key and certificates from documentation (#8872)
Remove private key and certificates from documentation (#8870)

* Remove private key and certificate from example.

* Censor certificates in examples.

(cherry picked from commit 2f1df973a6)

Co-authored-by: Felix Fontein <felix@fontein.de>
2024-09-16 21:56:11 +02:00
patchback[bot]
c4ea44ffb4 [PR #8861/76ebda7f backport][stable-7] snap tests: re-enable test for --dangerous using smaller snap (#8866)
snap tests: re-enable test for --dangerous using smaller snap (#8861)

(cherry picked from commit 76ebda7faf)

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2024-09-13 22:58:45 +02:00
patchback[bot]
2109d10740 [PR #8843/d73f977b backport][stable-7] Remove link to Google Groups mailing list (#8844)
Remove link to Google Groups mailing list (#8843)

Remove link to Google Groups mailing list.

Ref: https://groups.google.com/g/ansible-project/c/B0oKR0aQqXs
(cherry picked from commit d73f977b7a)

Co-authored-by: Felix Fontein <felix@fontein.de>
2024-09-08 16:52:11 +02:00
patchback[bot]
d32a2e0df9 [PR #8815/593d302f backport][stable-7] Fix and enable test for datadog_downtime (#8817)
Fix and enable test for datadog_downtime (#8815)

The test has been disabled because it started to fail after an update of
the Datadog API client. The issue itself (id cannot be set in
constructor) and other issues (module name, additional attribute in API
responses) are now fixed. The test is now working fine again.

Fixes #3219.

(cherry picked from commit 593d302f0b)

Co-authored-by: Stefan Birkner <github@stefan-birkner.de>
2024-09-01 20:52:39 +02:00
patchback[bot]
4f5a5a5c3d [PR #8770/14e86bde backport][stable-7] one_template: update name in copyright (#8772)
one_template: update name in copyright (#8770)

finally got it changed this year :)

(cherry picked from commit 14e86bde07)

Co-authored-by: Jyrki Gadinger <nilsding@nilsding.org>
2024-08-17 18:12:02 +02:00
patchback[bot]
372639ba58 [PR #8725/5322dd94 backport][stable-7] Remove invalid cloud/gandi entry (#8726)
Remove invalid cloud/gandi entry (#8725)

Remove invalid cloud/gandi entry.

(cherry picked from commit 5322dd942e)

Co-authored-by: Felix Fontein <felix@fontein.de>
2024-08-08 10:16:32 +02:00
patchback[bot]
0e69322924 [PR #8710/c517f1c4 backport][stable-7] ensure util-linux-extra is installed in Ubuntu 24.04 (#8714)
ensure util-linux-extra is installed in Ubuntu 24.04 (#8710)

(cherry picked from commit c517f1c483)

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2024-08-05 21:06:32 +02:00
patchback[bot]
f436839cb8 [PR #8665/58f9860b backport][stable-7] Fix pipx tests (#8671)
Fix pipx tests (#8665)

* fix pipx tests

* enable pipx int tests

* replace ansible-lint with pylint in pipx test

* install jupyter in freebsd

* replace jupyter with mkdocs in pipx test

* adjust installed dependency for mkdocs

* fix pipx_info tests as well

(cherry picked from commit 58f9860ba7)

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2024-07-23 22:03:19 +02:00
patchback[bot]
641f7c0890 [PR #8634/a78f7b1e backport][stable-7] #8572 - Updated docs to include pip >= 20.3b1 requirement (#8635)
#8572 - Updated docs to include pip >= 20.3b1 requirement (#8634)

* #8572 - Updated docs to include pip >= 20.3b1 requirement

* Update plugins/modules/pip_package_info.py

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

---------

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

Co-authored-by: Daniel Poggenpohl <danowar2k@googlemail.com>
2024-07-14 22:29:01 +02:00
Felix Fontein
36bd15c804 Reformat and re-order changelogs/changelog.yaml.
(cherry picked from commit e794fa74da)
2024-07-11 22:48:47 +02:00
patchback[bot]
2d226ad94d [PR #8607/8451fc36 backport][stable-7] Remove EOL'ed FreeBSD 13.2 from CI (#8608)
Remove EOL'ed FreeBSD 13.2 from CI (#8607)

Remove EOL'ed FreeBSD 13.2 from CI.

Apparently the packages are no longer available.

(cherry picked from commit 8451fc36ca)

Co-authored-by: Felix Fontein <felix@fontein.de>
2024-07-09 11:34:09 +02:00
patchback[bot]
fade5f539c [PR #8596/45972c23 backport][stable-7] Bump fsfe/reuse-action from 3 to 4 (#8597)
Bump fsfe/reuse-action from 3 to 4 (#8596)

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

---
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 45972c23d4)

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-07-08 09:27:45 +02:00
patchback[bot]
2e1ac61ca9 [PR #8580/a3989095 backport][stable-7] merge_variables: correct misleading short description (#8589)
merge_variables: correct misleading short description (#8580)

The short description makes it sound like the plugin would only support
matching a given suffix, while the actual description clarifies the
actual matching capabilities (suffix, prefix or regular expression).

Update the short description accordingly.

(cherry picked from commit a3989095af)

Co-authored-by: Elias Probst <mail@eliasprobst.eu>
2024-07-06 21:22:49 +02:00
patchback[bot]
f2d078ebf0 [PR #8585/b2c77399 backport][stable-7] Add link to forum (#8586)
Add link to forum (#8585)

Add link to forum.

(cherry picked from commit b2c773996d)

Co-authored-by: Felix Fontein <felix@fontein.de>
2024-07-05 22:41:11 +02:00
Felix Fontein
fee6fcfbdd Fedora 32 and 33 images no longer work with ansible-core 2.11 on GHA. 2024-07-01 14:05:15 +02:00
patchback[bot]
393358bbb1 [PR #8567/01d8c7b7 backport][stable-7] Fix CI for CentOS 7 (#8568)
Fix CI for CentOS 7 (#8567)

Fix CI for CentOS 7.

(cherry picked from commit 01d8c7b769)

Co-authored-by: Felix Fontein <felix@fontein.de>
2024-07-01 14:02:09 +02:00
patchback[bot]
b98cc00fa3 [PR #8483/1ae6c825 backport][stable-7] CI: Bump Azure test container to 6.0.0 (#8484)
CI: Bump Azure test container to 6.0.0 (#8483)

Bump Azure test container to 6.0.0.

(cherry picked from commit 1ae6c82558)

Co-authored-by: Felix Fontein <felix@fontein.de>
2024-06-10 21:12:13 +02:00
Felix Fontein
9d51e05cfb [stable-7] docs: add seealso and notes for yaml callback plugin (#8396) (#8399)
docs: add seealso and notes for yaml callback plugin (#8396)

* docs: add seealso and notes for yaml callback plugin

* docs: correct links to parameters

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

* docs: shorten the long lines

---------

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

Co-authored-by: kurokobo <kuro664@gmail.com>
2024-05-20 17:23:41 +02:00
Felix Fontein
440bdb1119 Update CI cron schedules.
(cherry picked from commit 95e509753e)
2024-05-20 12:36:27 +02:00
Felix Fontein
d02f564019 Next expected release is 7.5.9. 2024-05-20 11:02:03 +02:00
Felix Fontein
adddf455fb Release 7.5.8. 2024-05-20 09:04:10 +02:00
patchback[bot]
0e3d9e1497 [PR #8392/704a5acc backport][stable-7] From now on automatically add period to new plugins in changelog, and use FQCNs (#8393)
* From now on automatically add period to new plugins in changelog, and use FQCNs (#8392)

From now on automatically add period to new plugins in changelog, and use FQCNs.

(cherry picked from commit 704a5acc63)

* Update changelogs.

---------

Co-authored-by: Felix Fontein <felix@fontein.de>
2024-05-20 09:02:54 +02:00
Felix Fontein
fec312eb54 [stable-7] fix(opentelemetry): avoid storing inmemory if logs are disabled (#8373) (#8391)
fix(opentelemetry): avoid storing inmemory if logs are disabled (#8373)

* fix(opentelemetry): avoid storing inmemory if logs are disabled

* changelog

* fix syntax

* refactor

* chore

* chore

* chore

* fix

(cherry picked from commit d87b9fe0dc)

Co-authored-by: Victor Martinez <victormartinezrubio@gmail.com>
2024-05-19 21:57:30 +02:00
patchback[bot]
f7b1393752 [PR #8367/03240ad7 backport][stable-7] fix(opentelemetry): close span even if no logs are sent (#8388)
fix(opentelemetry): close span even if no logs are sent (#8367)

* fix(opentelemetry): close span even if no logs are sent

* changelog

(cherry picked from commit 03240ad7dc)

Co-authored-by: Victor Martinez <victormartinezrubio@gmail.com>
2024-05-19 21:10:17 +02:00
Felix Fontein
6f8d1849b5 Prepare 7.5.8 release. 2024-05-18 16:33:02 +02:00
patchback[bot]
6a4bc401c5 [PR #8377/da8b133a backport][stable-7] add clarifying notes to scope description (#8385)
add clarifying notes to scope description (#8377)

(cherry picked from commit da8b133a73)

Co-authored-by: Jay Hendren <3742215+jayhendren@users.noreply.github.com>
2024-05-18 16:30:27 +02:00
patchback[bot]
f5f1a33a7e [PR #8365/cd01a928 backport][stable-7] Add REUSE badge (#8375)
Add REUSE badge (#8365)

Add REUSE badge.

(cherry picked from commit cd01a928ab)

Co-authored-by: Felix Fontein <felix@fontein.de>
2024-05-15 21:11:50 +02:00
patchback[bot]
0b0a4b0eaa [PR #8355/fabf6263 backport][stable-7] Fix sanitize for keycloak_identitiy_provider. (#8370)
Fix sanitize for keycloak_identitiy_provider. (#8355)

* Fix sanitize for keycloak_identitiy_provider.

* 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 fabf6263f1)

Co-authored-by: Florian Apolloner <florian@apolloner.eu>
2024-05-15 19:59:48 +02:00
patchback[bot]
24e5bf3d5b [PR #8345/7aa118b9 backport][stable-7] Add test for unsafe plugin util (#8347)
Add test for unsafe plugin util (#8345)

Add test for unsafe plugin util.

(cherry picked from commit 7aa118b957)

Co-authored-by: Felix Fontein <felix@fontein.de>
2024-05-12 01:01:14 +02:00
patchback[bot]
4f0b5b88a1 [PR #8341/b774435d backport][stable-7] Pass codecov token to ansible-test-gh-action (#8343)
Pass codecov token to ansible-test-gh-action (#8341)

Pass codecov token to ansible-test-gh-action.

(cherry picked from commit b774435d8d)

Co-authored-by: Felix Fontein <felix@fontein.de>
2024-05-11 21:47:41 +02:00
patchback[bot]
be4e7fc374 [PR #8320/a71e1913 backport][stable-7] keycloak_user_federation: fix diff of empty krbPrincipalAttribute (#8339)
keycloak_user_federation: fix diff of empty `krbPrincipalAttribute` (#8320)

keycloak_user_federation: fix diff of empty `krbPrincipalAttribute` (#8320)

(cherry picked from commit a71e19130d)

Co-authored-by: Eike Waldt <waldt@b1-systems.de>
2024-05-11 17:11:21 +02:00
patchback[bot]
ba9f295b3f [PR #8322/bc7ad0f0 backport][stable-7] CONTRIBUTING.md: update link for changelog fragments, and add more text on them (#8335)
CONTRIBUTING.md: update link for changelog fragments, and add more text on them (#8322)

Update link for changelog fragments, and add more text on them.

(cherry picked from commit bc7ad0f0ea)

Co-authored-by: Felix Fontein <felix@fontein.de>
2024-05-10 16:21:27 +02:00
patchback[bot]
4b4a2a5977 [PR #8325/feb443d2 backport][stable-7] Fix django_manage tests (#8327)
Fix django_manage tests (#8325)

Ensure that manage.py is executable.

(cherry picked from commit feb443d260)

Co-authored-by: Felix Fontein <felix@fontein.de>
2024-05-07 08:24:39 +02:00
Léo GATELLIER
5a1ee4e3ee [PR #7790/787fa462 backport][stable-7] fix(modules/gitlab_runner): Use correct argument to list all runners (#8311)
[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: patchback[bot] <45432694+patchback[bot]@users.noreply.github.com>
Co-authored-by: Mike Wadsten <mikewadsten@gmail.com>
2024-05-06 19:45:53 +02:00
patchback[bot]
11c0f9642c [PR #8313/bc609d74 backport][stable-7] Disable ejabberd tests on Arch Linux (#8318)
Disable ejabberd tests on Arch Linux (#8313)

Disable ejabberd tests on Arch Linux.

(cherry picked from commit bc609d74a0)

Co-authored-by: Felix Fontein <felix@fontein.de>
2024-05-05 20:42:49 +02:00
patchback[bot]
e42353d690 [PR #8312/4bd68ac1 backport][stable-7] Disable cpanm tests for RHEL 7 and CentOS 7 (#8315)
Disable cpanm tests for RHEL 7 and CentOS 7 (#8312)

Disable cpanm tests for RHEL 7 and CentOS 7.

(cherry picked from commit 4bd68ac153)

Co-authored-by: Felix Fontein <felix@fontein.de>
2024-05-05 20:42:38 +02:00
patchback[bot]
5af750d06b [PR #8291/fc2024d8 backport][stable-7] CI: Arch Linux switched to Python 3.12 (#8292)
CI: Arch Linux switched to Python 3.12 (#8291)

Arch Linux switched to Python 3.12.

(cherry picked from commit fc2024d837)

Co-authored-by: Felix Fontein <felix@fontein.de>
2024-04-28 19:07:47 +02:00
patchback[bot]
f745dd369e [PR #8237/45c2e0f8 backport][stable-7] use smaller snap, add disabled to aliases (#8283)
use smaller snap, add disabled to aliases (#8237)

* use smaller snap, add disabled to aliases

* rollback tag disabled in aliases

* comment out the test_dangerous as it takes too long

* comment out the test_dangerous as it takes too long

* Update tests/integration/targets/snap/tasks/main.yml

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

---------

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

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2024-04-26 21:09:46 +02:00
Felix Fontein
745c7a856e The next expected release will be 7.5.8. 2024-04-22 18:43:11 +02:00
Felix Fontein
4e1e5a92e3 Release 7.5.7. 2024-04-22 18:22:49 +02:00
Felix Fontein
12b39987a0 [stable-2.7] apt_rpm: fix package install check (#8263) (#8271)
apt_rpm: fix package install check (#8263)

Fix package install check.

(cherry picked from commit 17e11d7d7e)
2024-04-22 06:53:24 +02:00
patchback[bot]
32338f14e5 [PR #8238/a05a5982 backport][stable-7] bitwarden_secrets_manager: implement rate limit retry with backoff (#8260)
* bitwarden_secrets_manager: implement rate limit retry with backoff (#8238)

* bitwarden_secrets_manager: implement rate limit retry with backoff (#8230)

* bitwarden_secrets_manager: add changelog fragment for 90cd2d61 (#8238)

* bitwarden_secrets_manager: clarify "Too many requests" is an error condition (#8238)

* bitwarden_secrets_manager: avoid an extra _run_with_retry execution after the last (very long) delay

* bitwarden_secrets_manager: changelog fragment key and reference issue url

(cherry picked from commit a05a5982a6)

* Make Python 2 compatible.

---------

Co-authored-by: Matt Adams <matt@4dk.me>
Co-authored-by: Felix Fontein <felix@fontein.de>
2024-04-21 15:09:57 +02:00
patchback[bot]
2583e3993d [PR #8224/9d66a1dc backport][stable-7] keycloak_realm: add normalizations for enabledEventTypes, and supportedLocales (#8255)
keycloak_realm: add normalizations for enabledEventTypes, and supportedLocales (#8224)

keycloak_realm: add nomalizations for enabledEventTypes, and supportedLocales

Signed-off-by: Eike Waldt <waldt@b1-systems.de>
(cherry picked from commit 9d66a1dc1e)

Co-authored-by: Eike Waldt <waldt@b1-systems.de>
2024-04-21 09:10:44 +02:00
patchback[bot]
e4cef5cb24 [PR #8223/f55342d8 backport][stable-7] keycloak_client: add sorted defaultClientScopes and optionalClientScopes to normalizations (#8253)
keycloak_client: add sorted defaultClientScopes and optionalClientScopes to normalizations (#8223)

keycloak_client: add sorted defaultClientScopes and optionalClientScopes
to normalizations

Signed-off-by: Eike Waldt <waldt@b1-systems.de>
(cherry picked from commit f55342d8af)

Co-authored-by: Eike Waldt <waldt@b1-systems.de>
2024-04-21 09:10:33 +02:00
patchback[bot]
cde2be8100 [PR #8225/7fd37ea2 backport][stable-7] inventory plugins: make wrapping variables as unsafe smarter to avoid triggering an AWX bug (#8245)
inventory plugins: make wrapping variables as unsafe smarter to avoid triggering an AWX bug (#8225)

Make wrapping variables as unsafe smarter to avoid triggering an AWX bug.

(cherry picked from commit 7fd37ea247)

Co-authored-by: Felix Fontein <felix@fontein.de>
2024-04-20 10:08:26 +02:00
patchback[bot]
40ce650d08 [PR #8001/1b8e6bc9 backport][stable-7] puppet_utils: Do not force lang for cmd (#8241)
puppet_utils: Do not force lang for cmd (#8001)

puppet_utils: Add option to set LANG for puppet execution

Add option `environment_lang` to force the LANG when executing the
puppet agent. The default is the `C` LANG

(cherry picked from commit 1b8e6bc95b)

Co-authored-by: Niklas Schwarz <schwarz.niklas@hotmail.de>
2024-04-20 10:08:18 +02:00
Felix Fontein
c09b5e2c66 Prepare 7.5.7 release. 2024-04-18 07:58:40 +02:00
patchback[bot]
a618203c01 [PR #8211/bafad8ec backport][stable-7] Support newer 'riak admin' sub-command beside legacy 'riak-admin' command (#8231)
Support newer 'riak admin' sub-command beside legacy 'riak-admin' command (#8211)

* Support newer 'riak admin' sub-command

* Added changelog for riak admin sub-command

* Added blank line

* Apply suggestions from code review

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

* replaced string commands with lists

added white space

removed white space

removed parenthesis

* Update changelogs/fragments/8211-riak-admin-sub-command-support.yml

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

---------

Co-authored-by: Felix Fontein <felix@fontein.de>
Co-authored-by: Don Naro <dnaro@redhat.com>
(cherry picked from commit bafad8ecd4)

Co-authored-by: tobixx <tobixx@directbox.com>
2024-04-17 23:45:29 +02:00
patchback[bot]
882ce25ce2 [PR #8176/8491bf7b backport][stable-7] fix(aix_filesystem): remove extra param from running lsvg (#8208)
fix(aix_filesystem): remove extra param from running lsvg (#8176)

* fix(aix_filesystem): remove extra param from running lsvg

* chore: add new line to changlog file

* Update 8151-fix-lsvg_cmd-failed.yml

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

---------

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

Co-authored-by: Peter Shen <xianpeng.shen@gmail.com>
2024-04-09 08:01:20 +02:00
patchback[bot]
25a6603059 [PR #8175/b674f94f backport][stable-7] module_utils/ipa.py: fix regex when parsing version (#8205)
module_utils/ipa.py: fix regex when parsing version (#8175)

* module_utils/ipa.py: fix regex when parsing version

* add changelog fragments

* Update changelogs/fragments/8175-get_ipa_version_regex.yml

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

---------

Co-authored-by: Dmitriy Usachev <dmitrii.usachev@hyperus.team>
Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit b674f94f64)

Co-authored-by: Dmitriy Usachev <diman-110@list.ru>
2024-04-09 08:01:04 +02:00
patchback[bot]
065287f260 [PR #8168/610ecf9b backport][stable-7] updated lxd_container.py docs (#8196)
updated lxd_container.py docs (#8168)

linuxcontainer.org has phased out LXC/LXD support.
This edit reflects part of it in the docs.

(cherry picked from commit 610ecf9bf5)

Co-authored-by: Herschdorfer <herschdorfer@gmail.com>
2024-04-08 22:06:17 +02:00
Felix Fontein
b0cf8ce6e7 CI: rename devel to stable-2.17, move stable-2.14 from AZP to GHA (#8180)
* Replace devel with stable-2.17.

* Move stable-2.14 tests to GHA.
2024-04-03 07:57:34 +02:00
patchback[bot]
68eb07a900 [PR #8169/b444e873 backport][stable-7] xml: make module work with lxml 5.1.1 (#8171)
xml: make module work with lxml 5.1.1 (#8169)

Make module work with lxml 5.1.1.

(cherry picked from commit b444e8739c)

Co-authored-by: Felix Fontein <felix@fontein.de>
2024-03-30 22:48:30 +01:00
patchback[bot]
a7d8397449 [PR #8100/b2b8fc30 backport][stable-7] HAProxy skips the wait when drain=true and the backend is down - fix issue 8092 (#8156)
HAProxy skips the wait when drain=true and the backend is down - fix issue 8092 (#8100)

* fix issue 8092

* "is not" => "!="

* moved the drain & down cause to the wait

* added changelogs for PR 8100

* fixed yaml

* fixed file type

* Apply suggestions from code review

Removed a dot from a comment

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

* Update plugins/modules/haproxy.py

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

---------

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

Co-authored-by: RayJin2000 <rayjin2000@gmail.com>
2024-03-28 12:34:48 +01:00
Felix Fontein
c71274639d The next release will be 7.5.7. 2024-03-25 19:29:45 +01:00
113 changed files with 2629 additions and 3786 deletions

View File

@@ -1,9 +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
-->
## Azure Pipelines Configuration
Please see the [Documentation](https://github.com/ansible/community/wiki/Testing:-Azure-Pipelines) for more information.

View File

@@ -1,425 +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
trigger:
batch: true
branches:
include:
- main
- stable-*
pr:
autoCancel: true
branches:
include:
- main
- stable-*
schedules:
- cron: 0 8 * * *
displayName: Nightly (main)
always: true
branches:
include:
- main
- cron: 0 10 * * *
displayName: Nightly (active stable branches)
always: true
branches:
include:
- stable-8
- stable-7
- cron: 0 11 * * 0
displayName: Weekly (old stable branches)
always: true
branches:
include:
- stable-6
variables:
- name: checkoutPath
value: ansible_collections/community/general
- name: coverageBranches
value: main
- name: pipelinesCoverage
value: coverage
- name: entryPoint
value: tests/utils/shippable/shippable.sh
- name: fetchDepth
value: 0
resources:
containers:
- container: default
image: quay.io/ansible/azure-pipelines-test-container:4.0.1
pool: Standard
stages:
### Sanity
- stage: Sanity_devel
displayName: Sanity devel
dependsOn: []
jobs:
- template: templates/matrix.yml
parameters:
nameFormat: Test {0}
testFormat: devel/sanity/{0}
targets:
- test: 1
- test: 2
- test: 3
- test: 4
- test: extra
- stage: Sanity_2_16
displayName: Sanity 2.16
dependsOn: []
jobs:
- template: templates/matrix.yml
parameters:
nameFormat: Test {0}
testFormat: 2.16/sanity/{0}
targets:
- test: 1
- test: 2
- test: 3
- test: 4
- stage: Sanity_2_15
displayName: Sanity 2.15
dependsOn: []
jobs:
- template: templates/matrix.yml
parameters:
nameFormat: Test {0}
testFormat: 2.15/sanity/{0}
targets:
- test: 1
- 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
dependsOn: []
jobs:
- template: templates/matrix.yml
parameters:
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'
- stage: Units_2_16
displayName: Units 2.16
dependsOn: []
jobs:
- template: templates/matrix.yml
parameters:
nameFormat: Python {0}
testFormat: 2.16/units/{0}/1
targets:
- test: 2.7
- test: 3.6
- test: "3.11"
- stage: Units_2_15
displayName: Units 2.15
dependsOn: []
jobs:
- template: templates/matrix.yml
parameters:
nameFormat: Python {0}
testFormat: 2.15/units/{0}/1
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
displayName: Remote devel extra VMs
dependsOn: []
jobs:
- template: templates/matrix.yml
parameters:
testFormat: devel/{0}
targets:
- name: Alpine 3.19
test: alpine/3.19
# - name: Fedora 39
# test: fedora/39
- name: Ubuntu 22.04
test: ubuntu/22.04
groups:
- vm
- stage: Remote_devel
displayName: Remote devel
dependsOn: []
jobs:
- template: templates/matrix.yml
parameters:
testFormat: devel/{0}
targets:
- name: macOS 14.3
test: macos/14.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:
- 1
- 2
- 3
- stage: Remote_2_16
displayName: Remote 2.16
dependsOn: []
jobs:
- template: templates/matrix.yml
parameters:
testFormat: 2.16/{0}
targets:
- name: macOS 13.2
test: macos/13.2
- name: RHEL 9.2
test: rhel/9.2
- name: RHEL 8.8
test: rhel/8.8
- name: FreeBSD 13.2
test: freebsd/13.2
groups:
- 1
- 2
- 3
- stage: Remote_2_15
displayName: Remote 2.15
dependsOn: []
jobs:
- template: templates/matrix.yml
parameters:
testFormat: 2.15/{0}
targets:
- name: RHEL 9.1
test: rhel/9.1
- name: RHEL 8.7
test: rhel/8.7
- name: RHEL 7.9
test: rhel/7.9
# - name: FreeBSD 13.1
# test: freebsd/13.1
# - name: FreeBSD 12.4
# test: freebsd/12.4
groups:
- 1
- 2
- 3
- stage: Remote_2_14
displayName: Remote 2.14
dependsOn: []
jobs:
- template: templates/matrix.yml
parameters:
testFormat: 2.14/{0}
targets:
- name: RHEL 9.0
test: rhel/9.0
#- name: macOS 12.0
# test: macos/12.0
#- name: FreeBSD 12.4
# test: freebsd/12.4
groups:
- 1
- 2
- 3
### Docker
- stage: Docker_devel
displayName: Docker devel
dependsOn: []
jobs:
- template: templates/matrix.yml
parameters:
testFormat: devel/linux/{0}
targets:
- name: Fedora 39
test: fedora39
- name: Ubuntu 20.04
test: ubuntu2004
- name: Ubuntu 22.04
test: ubuntu2204
- name: Alpine 3.19
test: alpine319
groups:
- 1
- 2
- 3
- stage: Docker_2_16
displayName: Docker 2.16
dependsOn: []
jobs:
- template: templates/matrix.yml
parameters:
testFormat: 2.16/linux/{0}
targets:
- name: Fedora 38
test: fedora38
- name: openSUSE 15
test: opensuse15
- name: Alpine 3
test: alpine3
groups:
- 1
- 2
- 3
- stage: Docker_2_15
displayName: Docker 2.15
dependsOn: []
jobs:
- template: templates/matrix.yml
parameters:
testFormat: 2.15/linux/{0}
targets:
- name: Fedora 37
test: fedora37
- name: CentOS 7
test: centos7
groups:
- 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
displayName: Docker (community images) devel
dependsOn: []
jobs:
- template: templates/matrix.yml
parameters:
testFormat: devel/linux-community/{0}
targets:
- name: Debian Bullseye
test: debian-bullseye/3.9
- name: Debian Bookworm
test: debian-bookworm/3.11
- name: ArchLinux
test: archlinux/3.11
groups:
- 1
- 2
- 3
### Generic
- stage: Generic_devel
displayName: Generic devel
dependsOn: []
jobs:
- template: templates/matrix.yml
parameters:
nameFormat: Python {0}
testFormat: devel/generic/{0}/1
targets:
- test: '3.7'
- test: '3.12'
- stage: Generic_2_16
displayName: Generic 2.16
dependsOn: []
jobs:
- template: templates/matrix.yml
parameters:
nameFormat: Python {0}
testFormat: 2.16/generic/{0}/1
targets:
- test: '2.7'
- test: '3.6'
- test: '3.11'
- stage: Generic_2_15
displayName: Generic 2.15
dependsOn: []
jobs:
- template: templates/matrix.yml
parameters:
nameFormat: Python {0}
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_16
- Sanity_2_15
- Sanity_2_14
- Units_devel
- Units_2_16
- Units_2_15
- Units_2_14
- Remote_devel_extra_vms
- Remote_devel
- Remote_2_16
- Remote_2_15
- Remote_2_14
- Docker_devel
- 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_16
# - Generic_2_15
# - Generic_2_14
jobs:
- template: templates/coverage.yml

View File

@@ -1,24 +0,0 @@
#!/usr/bin/env bash
# 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
# Aggregate code coverage results for later processing.
set -o pipefail -eu
agent_temp_directory="$1"
PATH="${PWD}/bin:${PATH}"
mkdir "${agent_temp_directory}/coverage/"
options=(--venv --venv-system-site-packages --color -v)
ansible-test coverage combine --group-by command --export "${agent_temp_directory}/coverage/" "${options[@]}"
if ansible-test coverage analyze targets generate --help >/dev/null 2>&1; then
# Only analyze coverage if the installed version of ansible-test supports it.
# Doing so allows this script to work unmodified for multiple Ansible versions.
ansible-test coverage analyze targets generate "${agent_temp_directory}/coverage/coverage-analyze-targets.json" "${options[@]}"
fi

View File

@@ -1,64 +0,0 @@
#!/usr/bin/env python
# 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
"""
Combine coverage data from multiple jobs, keeping the data only from the most recent attempt from each job.
Coverage artifacts must be named using the format: "Coverage $(System.JobAttempt) {StableUniqueNameForEachJob}"
The recommended coverage artifact name format is: Coverage $(System.JobAttempt) $(System.StageDisplayName) $(System.JobDisplayName)
Keep in mind that Azure Pipelines does not enforce unique job display names (only names).
It is up to pipeline authors to avoid name collisions when deviating from the recommended format.
"""
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
import os
import re
import shutil
import sys
def main():
"""Main program entry point."""
source_directory = sys.argv[1]
if '/ansible_collections/' in os.getcwd():
output_path = "tests/output"
else:
output_path = "test/results"
destination_directory = os.path.join(output_path, 'coverage')
if not os.path.exists(destination_directory):
os.makedirs(destination_directory)
jobs = {}
count = 0
for name in os.listdir(source_directory):
match = re.search('^Coverage (?P<attempt>[0-9]+) (?P<label>.+)$', name)
label = match.group('label')
attempt = int(match.group('attempt'))
jobs[label] = max(attempt, jobs.get(label, 0))
for label, attempt in jobs.items():
name = 'Coverage {attempt} {label}'.format(label=label, attempt=attempt)
source = os.path.join(source_directory, name)
source_files = os.listdir(source)
for source_file in source_files:
source_path = os.path.join(source, source_file)
destination_path = os.path.join(destination_directory, source_file + '.' + label)
print('"%s" -> "%s"' % (source_path, destination_path))
shutil.copyfile(source_path, destination_path)
count += 1
print('Coverage file count: %d' % count)
print('##vso[task.setVariable variable=coverageFileCount]%d' % count)
print('##vso[task.setVariable variable=outputPath]%s' % output_path)
if __name__ == '__main__':
main()

View File

@@ -1,28 +0,0 @@
#!/usr/bin/env bash
# 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
# Check the test results and set variables for use in later steps.
set -o pipefail -eu
if [[ "$PWD" =~ /ansible_collections/ ]]; then
output_path="tests/output"
else
output_path="test/results"
fi
echo "##vso[task.setVariable variable=outputPath]${output_path}"
if compgen -G "${output_path}"'/junit/*.xml' > /dev/null; then
echo "##vso[task.setVariable variable=haveTestResults]true"
fi
if compgen -G "${output_path}"'/bot/ansible-test-*' > /dev/null; then
echo "##vso[task.setVariable variable=haveBotResults]true"
fi
if compgen -G "${output_path}"'/coverage/*' > /dev/null; then
echo "##vso[task.setVariable variable=haveCoverageData]true"
fi

View File

@@ -1,105 +0,0 @@
#!/usr/bin/env python
# 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
"""
Upload code coverage reports to codecov.io.
Multiple coverage files from multiple languages are accepted and aggregated after upload.
Python coverage, as well as PowerShell and Python stubs can all be uploaded.
"""
import argparse
import dataclasses
import pathlib
import shutil
import subprocess
import tempfile
import typing as t
import urllib.request
@dataclasses.dataclass(frozen=True)
class CoverageFile:
name: str
path: pathlib.Path
flags: t.List[str]
@dataclasses.dataclass(frozen=True)
class Args:
dry_run: bool
path: pathlib.Path
def parse_args() -> Args:
parser = argparse.ArgumentParser()
parser.add_argument('-n', '--dry-run', action='store_true')
parser.add_argument('path', type=pathlib.Path)
args = parser.parse_args()
# Store arguments in a typed dataclass
fields = dataclasses.fields(Args)
kwargs = {field.name: getattr(args, field.name) for field in fields}
return Args(**kwargs)
def process_files(directory: pathlib.Path) -> t.Tuple[CoverageFile, ...]:
processed = []
for file in directory.joinpath('reports').glob('coverage*.xml'):
name = file.stem.replace('coverage=', '')
# Get flags from name
flags = name.replace('-powershell', '').split('=') # Drop '-powershell' suffix
flags = [flag if not flag.startswith('stub') else flag.split('-')[0] for flag in flags] # Remove "-01" from stub files
processed.append(CoverageFile(name, file, flags))
return tuple(processed)
def upload_files(codecov_bin: pathlib.Path, files: t.Tuple[CoverageFile, ...], dry_run: bool = False) -> None:
for file in files:
cmd = [
str(codecov_bin),
'--name', file.name,
'--file', str(file.path),
]
for flag in file.flags:
cmd.extend(['--flags', flag])
if dry_run:
print(f'DRY-RUN: Would run command: {cmd}')
continue
subprocess.run(cmd, check=True)
def download_file(url: str, dest: pathlib.Path, flags: int, dry_run: bool = False) -> None:
if dry_run:
print(f'DRY-RUN: Would download {url} to {dest} and set mode to {flags:o}')
return
with urllib.request.urlopen(url) as resp:
with dest.open('w+b') as f:
# Read data in chunks rather than all at once
shutil.copyfileobj(resp, f, 64 * 1024)
dest.chmod(flags)
def main():
args = parse_args()
url = 'https://ansible-ci-files.s3.amazonaws.com/codecov/linux/codecov'
with tempfile.TemporaryDirectory(prefix='codecov-') as tmpdir:
codecov_bin = pathlib.Path(tmpdir) / 'codecov'
download_file(url, codecov_bin, 0o755, args.dry_run)
files = process_files(args.path)
upload_files(codecov_bin, files, args.dry_run)
if __name__ == '__main__':
main()

View File

@@ -1,19 +0,0 @@
#!/usr/bin/env bash
# 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
# Generate code coverage reports for uploading to Azure Pipelines and codecov.io.
set -o pipefail -eu
PATH="${PWD}/bin:${PATH}"
if ! ansible-test --help >/dev/null 2>&1; then
# Install the devel version of ansible-test for generating code coverage reports.
# This is only used by Ansible Collections, which are typically tested against multiple Ansible versions (in separate jobs).
# Since a version of ansible-test is required that can work the output from multiple older releases, the devel version is used.
pip install https://github.com/ansible/ansible/archive/devel.tar.gz --disable-pip-version-check
fi
ansible-test coverage xml --group-by command --stub --venv --venv-system-site-packages --color -v

View File

@@ -1,38 +0,0 @@
#!/usr/bin/env bash
# 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
# Configure the test environment and run the tests.
set -o pipefail -eu
entry_point="$1"
test="$2"
read -r -a coverage_branches <<< "$3" # space separated list of branches to run code coverage on for scheduled builds
export COMMIT_MESSAGE
export COMPLETE
export COVERAGE
export IS_PULL_REQUEST
if [ "${SYSTEM_PULLREQUEST_TARGETBRANCH:-}" ]; then
IS_PULL_REQUEST=true
COMMIT_MESSAGE=$(git log --format=%B -n 1 HEAD^2)
else
IS_PULL_REQUEST=
COMMIT_MESSAGE=$(git log --format=%B -n 1 HEAD)
fi
COMPLETE=
COVERAGE=
if [ "${BUILD_REASON}" = "Schedule" ]; then
COMPLETE=yes
if printf '%s\n' "${coverage_branches[@]}" | grep -q "^${BUILD_SOURCEBRANCHNAME}$"; then
COVERAGE=yes
fi
fi
"${entry_point}" "${test}" 2>&1 | "$(dirname "$0")/time-command.py"

View File

@@ -1,29 +0,0 @@
#!/usr/bin/env python
# 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
"""Prepends a relative timestamp to each input line from stdin and writes it to stdout."""
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
import sys
import time
def main():
"""Main program entry point."""
start = time.time()
sys.stdin.reconfigure(errors='surrogateescape')
sys.stdout.reconfigure(errors='surrogateescape')
for line in sys.stdin:
seconds = time.time() - start
sys.stdout.write('%02d:%02d %s' % (seconds // 60, seconds % 60, line))
sys.stdout.flush()
if __name__ == '__main__':
main()

View File

@@ -1,44 +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
# This template adds a job for processing code coverage data.
# It will upload results to Azure Pipelines and codecov.io.
# Use it from a job stage that completes after all other jobs have completed.
# This can be done by placing it in a separate summary stage that runs after the test stage(s) have completed.
jobs:
- job: Coverage
displayName: Code Coverage
container: default
workspace:
clean: all
steps:
- checkout: self
fetchDepth: $(fetchDepth)
path: $(checkoutPath)
- task: DownloadPipelineArtifact@2
displayName: Download Coverage Data
inputs:
path: coverage/
patterns: "Coverage */*=coverage.combined"
- bash: .azure-pipelines/scripts/combine-coverage.py coverage/
displayName: Combine Coverage Data
- bash: .azure-pipelines/scripts/report-coverage.sh
displayName: Generate Coverage Report
condition: gt(variables.coverageFileCount, 0)
- task: PublishCodeCoverageResults@1
inputs:
codeCoverageTool: Cobertura
# Azure Pipelines only accepts a single coverage data file.
# That means only Python or PowerShell coverage can be uploaded, but not both.
# Set the "pipelinesCoverage" variable to determine which type is uploaded.
# Use "coverage" for Python and "coverage-powershell" for PowerShell.
summaryFileLocation: "$(outputPath)/reports/$(pipelinesCoverage).xml"
displayName: Publish to Azure Pipelines
condition: gt(variables.coverageFileCount, 0)
- bash: .azure-pipelines/scripts/publish-codecov.py "$(outputPath)"
displayName: Publish to codecov.io
condition: gt(variables.coverageFileCount, 0)
continueOnError: true

View File

@@ -1,60 +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
# This template uses the provided targets and optional groups to generate a matrix which is then passed to the test template.
# If this matrix template does not provide the required functionality, consider using the test template directly instead.
parameters:
# A required list of dictionaries, one per test target.
# Each item in the list must contain a "test" or "name" key.
# Both may be provided. If one is omitted, the other will be used.
- name: targets
type: object
# An optional list of values which will be used to multiply the targets list into a matrix.
# Values can be strings or numbers.
- name: groups
type: object
default: []
# An optional format string used to generate the job name.
# - {0} is the name of an item in the targets list.
- name: nameFormat
type: string
default: "{0}"
# An optional format string used to generate the test name.
# - {0} is the name of an item in the targets list.
- name: testFormat
type: string
default: "{0}"
# An optional format string used to add the group to the job name.
# {0} is the formatted name of an item in the targets list.
# {{1}} is the group -- be sure to include the double "{{" and "}}".
- name: nameGroupFormat
type: string
default: "{0} - {{1}}"
# An optional format string used to add the group to the test name.
# {0} is the formatted test of an item in the targets list.
# {{1}} is the group -- be sure to include the double "{{" and "}}".
- name: testGroupFormat
type: string
default: "{0}/{{1}}"
jobs:
- template: test.yml
parameters:
jobs:
- ${{ if eq(length(parameters.groups), 0) }}:
- ${{ each target in parameters.targets }}:
- name: ${{ format(parameters.nameFormat, coalesce(target.name, target.test)) }}
test: ${{ format(parameters.testFormat, coalesce(target.test, target.name)) }}
- ${{ if not(eq(length(parameters.groups), 0)) }}:
- ${{ each group in parameters.groups }}:
- ${{ each target in parameters.targets }}:
- name: ${{ format(format(parameters.nameGroupFormat, parameters.nameFormat), coalesce(target.name, target.test), group) }}
test: ${{ format(format(parameters.testGroupFormat, parameters.testFormat), coalesce(target.test, target.name), group) }}

View File

@@ -1,50 +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
# This template uses the provided list of jobs to create test one or more test jobs.
# It can be used directly if needed, or through the matrix template.
parameters:
# A required list of dictionaries, one per test job.
# Each item in the list must contain a "job" and "name" key.
- name: jobs
type: object
jobs:
- ${{ each job in parameters.jobs }}:
- job: test_${{ replace(replace(replace(job.test, '/', '_'), '.', '_'), '-', '_') }}
displayName: ${{ job.name }}
container: default
workspace:
clean: all
steps:
- checkout: self
fetchDepth: $(fetchDepth)
path: $(checkoutPath)
- bash: .azure-pipelines/scripts/run-tests.sh "$(entryPoint)" "${{ job.test }}" "$(coverageBranches)"
displayName: Run Tests
- bash: .azure-pipelines/scripts/process-results.sh
condition: succeededOrFailed()
displayName: Process Results
- bash: .azure-pipelines/scripts/aggregate-coverage.sh "$(Agent.TempDirectory)"
condition: eq(variables.haveCoverageData, 'true')
displayName: Aggregate Coverage Data
- task: PublishTestResults@2
condition: eq(variables.haveTestResults, 'true')
inputs:
testResultsFiles: "$(outputPath)/junit/*.xml"
displayName: Publish Test Results
- task: PublishPipelineArtifact@1
condition: eq(variables.haveBotResults, 'true')
displayName: Publish Bot Results
inputs:
targetPath: "$(outputPath)/bot/"
artifactName: "Bot $(System.JobAttempt) $(System.StageDisplayName) $(System.JobDisplayName)"
- task: PublishPipelineArtifact@1
condition: eq(variables.haveCoverageData, 'true')
displayName: Publish Coverage Data
inputs:
targetPath: "$(Agent.TempDirectory)/coverage/"
artifactName: "Coverage $(System.JobAttempt) $(System.StageDisplayName) $(System.JobDisplayName)"

5
.github/BOTMETA.yml vendored
View File

@@ -1395,6 +1395,8 @@ files:
ignore: matze
labels: zypper
maintainers: $team_suse
$plugin_utils/unsafe.py:
maintainers: felixfontein
$tests/a_module.py:
maintainers: felixfontein
#########################
@@ -1414,7 +1416,6 @@ macros:
becomes: plugins/become
caches: plugins/cache
callbacks: plugins/callback
cliconfs: plugins/cliconf
connections: plugins/connection
doc_fragments: plugins/doc_fragments
filters: plugins/filter
@@ -1422,7 +1423,7 @@ macros:
lookups: plugins/lookup
module_utils: plugins/module_utils
modules: plugins/modules
terminals: plugins/terminal
plugin_utils: plugins/plugin_utils
tests: plugins/test
team_ansible_core:
team_aix: MorrisA bcoca d-little flynn1973 gforster kairoaraujo marvin-sinister mator molekuul ramooncamacho wtcross

View File

@@ -1,287 +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
# For the comprehensive list of the inputs supported by the ansible-community/ansible-test-gh-action GitHub Action, see
# https://github.com/marketplace/actions/ansible-test
name: EOL CI
on:
# Run EOL CI against all pushes (direct commits, also merged PRs), Pull Requests
push:
branches:
- main
- stable-*
pull_request:
# Run EOL CI once per day (at 10:00 UTC)
schedule:
- cron: '0 10 * * *'
concurrency:
# Make sure there is at most one active run per PR, but do not cancel any non-PR runs
group: ${{ github.workflow }}-${{ (github.head_ref && github.event.number) || github.run_id }}
cancel-in-progress: true
jobs:
sanity:
name: EOL Sanity (Ⓐ${{ matrix.ansible }})
strategy:
matrix:
ansible:
- '2.11'
- '2.12'
- '2.13'
# 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
# shrink over time, check out https://github.com/ansible-collections/news-for-maintainers/issues/28
# for the latest list.
runs-on: >-
${{ contains(fromJson(
'["2.9", "2.10", "2.11"]'
), matrix.ansible) && 'ubuntu-20.04' || 'ubuntu-latest' }}
steps:
- name: Perform sanity testing
uses: felixfontein/ansible-test-gh-action@main
with:
ansible-core-github-repository-slug: ${{ contains(fromJson('["2.10", "2.11"]'), matrix.ansible) && 'felixfontein/ansible' || 'ansible/ansible' }}
ansible-core-version: stable-${{ matrix.ansible }}
coverage: ${{ github.event_name == 'schedule' && 'always' || 'never' }}
pull-request-change-detection: 'true'
testing-type: sanity
units:
# 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
# shrink over time, check out https://github.com/ansible-collections/news-for-maintainers/issues/28
# for the latest list.
runs-on: >-
${{ contains(fromJson(
'["2.9", "2.10", "2.11"]'
), matrix.ansible) && 'ubuntu-20.04' || 'ubuntu-latest' }}
name: EOL Units (Ⓐ${{ matrix.ansible }}+py${{ matrix.python }})
strategy:
# As soon as the first unit test fails, cancel the others to free up the CI queue
fail-fast: true
matrix:
ansible:
- ''
python:
- ''
exclude:
- ansible: ''
include:
- ansible: '2.11'
python: '2.7'
- ansible: '2.11'
python: '3.5'
- ansible: '2.12'
python: '2.6'
- ansible: '2.12'
python: '3.8'
- ansible: '2.13'
python: '2.7'
- ansible: '2.13'
python: '3.8'
steps:
- name: >-
Perform unit testing against
Ansible version ${{ matrix.ansible }}
uses: felixfontein/ansible-test-gh-action@main
with:
ansible-core-github-repository-slug: ${{ contains(fromJson('["2.10", "2.11"]'), matrix.ansible) && 'felixfontein/ansible' || 'ansible/ansible' }}
ansible-core-version: stable-${{ matrix.ansible }}
coverage: ${{ github.event_name == 'schedule' && 'always' || 'never' }}
pre-test-cmd: >-
mkdir -p ../../ansible
;
git clone --depth=1 --single-branch https://github.com/ansible-collections/community.internal_test_tools.git ../../community/internal_test_tools
pull-request-change-detection: 'true'
target-python-version: ${{ matrix.python }}
testing-type: units
integration:
# 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
# shrink over time, check out https://github.com/ansible-collections/news-for-maintainers/issues/28
# for the latest list.
runs-on: >-
${{ contains(fromJson(
'["2.9", "2.10", "2.11"]'
), matrix.ansible) && 'ubuntu-20.04' || 'ubuntu-latest' }}
name: EOL I (Ⓐ${{ matrix.ansible }}+${{ matrix.docker }}+py${{ matrix.python }}:${{ matrix.target }})
strategy:
fail-fast: false
matrix:
ansible:
- ''
docker:
- ''
python:
- ''
target:
- ''
exclude:
- ansible: ''
include:
# 2.11
- ansible: '2.11'
docker: fedora32
python: ''
target: azp/posix/1/
- ansible: '2.11'
docker: fedora32
python: ''
target: azp/posix/2/
- ansible: '2.11'
docker: fedora32
python: ''
target: azp/posix/3/
- ansible: '2.11'
docker: fedora33
python: ''
target: azp/posix/1/
- ansible: '2.11'
docker: fedora33
python: ''
target: azp/posix/2/
- ansible: '2.11'
docker: fedora33
python: ''
target: azp/posix/3/
- ansible: '2.11'
docker: alpine3
python: ''
target: azp/posix/1/
- ansible: '2.11'
docker: alpine3
python: ''
target: azp/posix/2/
- ansible: '2.11'
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.11'
# docker: default
# python: '2.7'
# target: azp/generic/1/
# - ansible: '2.11'
# docker: default
# python: '3.5'
# target: azp/generic/1/
# 2.12
- ansible: '2.12'
docker: centos6
python: ''
target: azp/posix/1/
- ansible: '2.12'
docker: centos6
python: ''
target: azp/posix/2/
- ansible: '2.12'
docker: centos6
python: ''
target: azp/posix/3/
- ansible: '2.12'
docker: fedora34
python: ''
target: azp/posix/1/
- ansible: '2.12'
docker: fedora34
python: ''
target: azp/posix/2/
- ansible: '2.12'
docker: fedora34
python: ''
target: azp/posix/3/
- ansible: '2.12'
docker: ubuntu1804
python: ''
target: azp/posix/1/
- ansible: '2.12'
docker: ubuntu1804
python: ''
target: azp/posix/2/
- ansible: '2.12'
docker: ubuntu1804
python: ''
target: azp/posix/3/
# Right now all generic tests are disabled. Uncomment when at least one of them is re-enabled.
# - ansible: '2.12'
# docker: default
# python: '3.8'
# target: azp/generic/1/
# 2.13
- ansible: '2.13'
docker: fedora35
python: ''
target: azp/posix/1/
- ansible: '2.13'
docker: fedora35
python: ''
target: azp/posix/2/
- ansible: '2.13'
docker: fedora35
python: ''
target: azp/posix/3/
- ansible: '2.13'
docker: opensuse15py2
python: ''
target: azp/posix/1/
- ansible: '2.13'
docker: opensuse15py2
python: ''
target: azp/posix/2/
- ansible: '2.13'
docker: opensuse15py2
python: ''
target: azp/posix/3/
- ansible: '2.13'
docker: alpine3
python: ''
target: azp/posix/1/
- ansible: '2.13'
docker: alpine3
python: ''
target: azp/posix/2/
- ansible: '2.13'
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/
steps:
- name: >-
Perform integration testing against
Ansible version ${{ matrix.ansible }}
under Python ${{ matrix.python }}
uses: felixfontein/ansible-test-gh-action@main
with:
ansible-core-github-repository-slug: ${{ contains(fromJson('["2.10", "2.11"]'), matrix.ansible) && 'felixfontein/ansible' || 'ansible/ansible' }}
ansible-core-version: stable-${{ matrix.ansible }}
coverage: ${{ github.event_name == 'schedule' && 'always' || 'never' }}
docker-image: ${{ matrix.docker }}
integration-continue-on-error: 'false'
integration-diff: 'false'
integration-retry-on-error: 'true'
pre-test-cmd: >-
mkdir -p ../../ansible
;
git clone --depth=1 --single-branch https://github.com/ansible-collections/ansible.posix.git ../../ansible/posix
;
git clone --depth=1 --single-branch https://github.com/ansible-collections/community.crypto.git ../../community/crypto
;
git clone --depth=1 --single-branch https://github.com/ansible-collections/community.internal_test_tools.git ../../community/internal_test_tools
pull-request-change-detection: 'true'
target: ${{ matrix.target }}
target-python-version: ${{ matrix.python }}
testing-type: integration

View File

@@ -1,36 +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: "Code scanning - action"
on:
schedule:
- cron: '26 19 * * 1'
workflow_dispatch:
permissions:
contents: read
jobs:
CodeQL-Build:
permissions:
actions: read # for github/codeql-action/init to get workflow details
contents: read # for actions/checkout to fetch code
security-events: write # for github/codeql-action/autobuild to send a status report
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v3
with:
languages: python
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v3

View File

@@ -1,20 +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: import-galaxy
'on':
# Run CI against all pushes (direct commits, also merged PRs) to main, and all Pull Requests
push:
branches:
- main
- stable-*
pull_request:
jobs:
import-galaxy:
permissions:
contents: read
name: Test to import built collection artifact with Galaxy importer
uses: ansible-community/github-action-test-galaxy-import/.github/workflows/test-galaxy-import.yml@main

View File

@@ -1,30 +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: Verify REUSE
on:
push:
branches: [main]
pull_request_target:
types: [opened, synchronize, reopened]
branches: [main]
# Run CI once per day (at 07:30 UTC)
schedule:
- cron: '30 7 * * *'
jobs:
check:
permissions:
contents: read
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
ref: ${{ github.event.pull_request.head.sha || '' }}
- name: REUSE Compliance Check
uses: fsfe/reuse-action@v3

View File

@@ -2,89 +2,175 @@
**Topics**
- <a href="#v7-5-6">v7\.5\.6</a>
- <a href="#v7-5-9">v7\.5\.9</a>
- <a href="#release-summary">Release Summary</a>
- <a href="#security-fixes">Security Fixes</a>
- <a href="#bugfixes">Bugfixes</a>
- <a href="#v7-5-5">v7\.5\.5</a>
- <a href="#v7-5-8">v7\.5\.8</a>
- <a href="#release-summary-1">Release Summary</a>
- <a href="#minor-changes">Minor Changes</a>
- <a href="#security-fixes">Security Fixes</a>
- <a href="#bugfixes-1">Bugfixes</a>
- <a href="#v7-5-4">v7\.5\.4</a>
- <a href="#v7-5-7">v7\.5\.7</a>
- <a href="#release-summary-2">Release Summary</a>
- <a href="#bugfixes-2">Bugfixes</a>
- <a href="#v7-5-3">v7\.5\.3</a>
- <a href="#v7-5-6">v7\.5\.6</a>
- <a href="#release-summary-3">Release Summary</a>
- <a href="#security-fixes-1">Security Fixes</a>
- <a href="#bugfixes-3">Bugfixes</a>
- <a href="#v7-5-2">v7\.5\.2</a>
- <a href="#v7-5-5">v7\.5\.5</a>
- <a href="#release-summary-4">Release Summary</a>
- <a href="#minor-changes">Minor Changes</a>
- <a href="#bugfixes-4">Bugfixes</a>
- <a href="#v7-5-1">v7\.5\.1</a>
- <a href="#v7-5-4">v7\.5\.4</a>
- <a href="#release-summary-5">Release Summary</a>
- <a href="#bugfixes-5">Bugfixes</a>
- <a href="#v7-5-0">v7\.5\.0</a>
- <a href="#v7-5-3">v7\.5\.3</a>
- <a href="#release-summary-6">Release Summary</a>
- <a href="#minor-changes-1">Minor Changes</a>
- <a href="#deprecated-features">Deprecated Features</a>
- <a href="#bugfixes-6">Bugfixes</a>
- <a href="#v7-5-2">v7\.5\.2</a>
- <a href="#release-summary-7">Release Summary</a>
- <a href="#minor-changes-1">Minor Changes</a>
- <a href="#bugfixes-7">Bugfixes</a>
- <a href="#v7-5-1">v7\.5\.1</a>
- <a href="#release-summary-8">Release Summary</a>
- <a href="#bugfixes-8">Bugfixes</a>
- <a href="#v7-5-0">v7\.5\.0</a>
- <a href="#release-summary-9">Release Summary</a>
- <a href="#minor-changes-2">Minor Changes</a>
- <a href="#deprecated-features">Deprecated Features</a>
- <a href="#bugfixes-9">Bugfixes</a>
- <a href="#new-modules">New Modules</a>
- <a href="#v7-4-0">v7\.4\.0</a>
- <a href="#release-summary-7">Release Summary</a>
- <a href="#minor-changes-2">Minor Changes</a>
- <a href="#bugfixes-7">Bugfixes</a>
- <a href="#release-summary-10">Release Summary</a>
- <a href="#minor-changes-3">Minor Changes</a>
- <a href="#bugfixes-10">Bugfixes</a>
- <a href="#new-modules-1">New Modules</a>
- <a href="#v7-3-0">v7\.3\.0</a>
- <a href="#release-summary-8">Release Summary</a>
- <a href="#minor-changes-3">Minor Changes</a>
- <a href="#deprecated-features-1">Deprecated Features</a>
- <a href="#bugfixes-8">Bugfixes</a>
- <a href="#v7-2-1">v7\.2\.1</a>
- <a href="#release-summary-9">Release Summary</a>
- <a href="#bugfixes-9">Bugfixes</a>
- <a href="#v7-2-0">v7\.2\.0</a>
- <a href="#release-summary-10">Release Summary</a>
- <a href="#release-summary-11">Release Summary</a>
- <a href="#minor-changes-4">Minor Changes</a>
- <a href="#deprecated-features-1">Deprecated Features</a>
- <a href="#bugfixes-11">Bugfixes</a>
- <a href="#v7-2-1">v7\.2\.1</a>
- <a href="#release-summary-12">Release Summary</a>
- <a href="#bugfixes-12">Bugfixes</a>
- <a href="#v7-2-0">v7\.2\.0</a>
- <a href="#release-summary-13">Release Summary</a>
- <a href="#minor-changes-5">Minor Changes</a>
- <a href="#deprecated-features-2">Deprecated Features</a>
- <a href="#bugfixes-10">Bugfixes</a>
- <a href="#bugfixes-13">Bugfixes</a>
- <a href="#new-plugins">New Plugins</a>
- <a href="#lookup">Lookup</a>
- <a href="#new-modules-2">New Modules</a>
- <a href="#v7-1-0">v7\.1\.0</a>
- <a href="#release-summary-11">Release Summary</a>
- <a href="#minor-changes-5">Minor Changes</a>
- <a href="#release-summary-14">Release Summary</a>
- <a href="#minor-changes-6">Minor Changes</a>
- <a href="#deprecated-features-3">Deprecated Features</a>
- <a href="#bugfixes-11">Bugfixes</a>
- <a href="#bugfixes-14">Bugfixes</a>
- <a href="#known-issues">Known Issues</a>
- <a href="#new-modules-3">New Modules</a>
- <a href="#v7-0-1">v7\.0\.1</a>
- <a href="#release-summary-12">Release Summary</a>
- <a href="#bugfixes-12">Bugfixes</a>
- <a href="#release-summary-15">Release Summary</a>
- <a href="#bugfixes-15">Bugfixes</a>
- <a href="#v7-0-0">v7\.0\.0</a>
- <a href="#release-summary-13">Release Summary</a>
- <a href="#minor-changes-6">Minor Changes</a>
- <a href="#release-summary-16">Release Summary</a>
- <a href="#minor-changes-7">Minor Changes</a>
- <a href="#breaking-changes--porting-guide">Breaking Changes / Porting Guide</a>
- <a href="#deprecated-features-4">Deprecated Features</a>
- <a href="#removed-features-previously-deprecated">Removed Features \(previously deprecated\)</a>
- <a href="#bugfixes-13">Bugfixes</a>
- <a href="#bugfixes-16">Bugfixes</a>
- <a href="#new-plugins-1">New Plugins</a>
- <a href="#lookup-1">Lookup</a>
- <a href="#new-modules-4">New Modules</a>
This changelog describes changes after version 6\.0\.0\.
<a id="v7-5-6"></a>
## v7\.5\.6
<a id="v7-5-9"></a>
## v7\.5\.9
<a id="release-summary"></a>
### Release Summary
Regular bugfix release with security fixes\.
Maintenance release\.
This is the last 7\.x\.y release\. The 7\.x\.y release train is now effectively End of Life\.
Thanks to everyone who contributed to the community\.general 7\.x\.y releases\!
<a id="bugfixes"></a>
### Bugfixes
* ini\_file \- pass absolute paths to <code>module\.atomic\_move\(\)</code> \([https\://github\.com/ansible/ansible/issues/83950](https\://github\.com/ansible/ansible/issues/83950)\, [https\://github\.com/ansible\-collections/community\.general/pull/8925](https\://github\.com/ansible\-collections/community\.general/pull/8925)\)\.
* ipa\_hostgroup \- fix <code>enabled \`\` and \`\`disabled</code> states \([https\://github\.com/ansible\-collections/community\.general/issues/8408](https\://github\.com/ansible\-collections/community\.general/issues/8408)\, [https\://github\.com/ansible\-collections/community\.general/pull/8900](https\://github\.com/ansible\-collections/community\.general/pull/8900)\)\.
* java\_keystore \- pass absolute paths to <code>module\.atomic\_move\(\)</code> \([https\://github\.com/ansible/ansible/issues/83950](https\://github\.com/ansible/ansible/issues/83950)\, [https\://github\.com/ansible\-collections/community\.general/pull/8925](https\://github\.com/ansible\-collections/community\.general/pull/8925)\)\.
* jenkins\_plugin \- pass absolute paths to <code>module\.atomic\_move\(\)</code> \([https\://github\.com/ansible/ansible/issues/83950](https\://github\.com/ansible/ansible/issues/83950)\, [https\://github\.com/ansible\-collections/community\.general/pull/8925](https\://github\.com/ansible\-collections/community\.general/pull/8925)\)\.
* kdeconfig \- pass absolute paths to <code>module\.atomic\_move\(\)</code> \([https\://github\.com/ansible/ansible/issues/83950](https\://github\.com/ansible/ansible/issues/83950)\, [https\://github\.com/ansible\-collections/community\.general/pull/8925](https\://github\.com/ansible\-collections/community\.general/pull/8925)\)\.
* modprobe \- fix check mode not being honored for <code>persistent</code> option \([https\://github\.com/ansible\-collections/community\.general/issues/9051](https\://github\.com/ansible\-collections/community\.general/issues/9051)\, [https\://github\.com/ansible\-collections/community\.general/pull/9052](https\://github\.com/ansible\-collections/community\.general/pull/9052)\)\.
* pam\_limits \- pass absolute paths to <code>module\.atomic\_move\(\)</code> \([https\://github\.com/ansible/ansible/issues/83950](https\://github\.com/ansible/ansible/issues/83950)\, [https\://github\.com/ansible\-collections/community\.general/pull/8925](https\://github\.com/ansible\-collections/community\.general/pull/8925)\)\.
<a id="v7-5-8"></a>
## v7\.5\.8
<a id="release-summary-1"></a>
### Release Summary
Regular bugfix release\.
Note that this is the last regular bugfix release\. From now on\, the 7\.x\.y release train
will only receive major and security bugfixes\.
<a id="minor-changes"></a>
### Minor Changes
* 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 <code>python\-gitlab</code> \([https\://github\.com/ansible\-collections/community\.general/pull/7790](https\://github\.com/ansible\-collections/community\.general/pull/7790)\)\.
<a id="security-fixes"></a>
### Security Fixes
* keycloak\_identity\_provider \- the client secret was not correctly sanitized by the module\. The return values <code>proposed</code>\, <code>existing</code>\, and <code>end\_state</code>\, as well as the diff\, did contain the client secret unmasked \([https\://github\.com/ansible\-collections/community\.general/pull/8355](https\://github\.com/ansible\-collections/community\.general/pull/8355)\)\.
<a id="bugfixes-1"></a>
### Bugfixes
* gitlab\_runner \- fix pagination when checking for existing runners \([https\://github\.com/ansible\-collections/community\.general/pull/7790](https\://github\.com/ansible\-collections/community\.general/pull/7790)\)\.
* keycloak\_user\_federation \- fix diff of empty <code>krbPrincipalAttribute</code> \([https\://github\.com/ansible\-collections/community\.general/pull/8320](https\://github\.com/ansible\-collections/community\.general/pull/8320)\)\.
* opentelemetry callback plugin \- close spans always \([https\://github\.com/ansible\-collections/community\.general/pull/8367](https\://github\.com/ansible\-collections/community\.general/pull/8367)\)\.
* opentelemetry callback plugin \- honour the <code>disable\_logs</code> option to avoid storing task results since they are not used regardless \([https\://github\.com/ansible\-collections/community\.general/pull/8373](https\://github\.com/ansible\-collections/community\.general/pull/8373)\)\.
<a id="v7-5-7"></a>
## v7\.5\.7
<a id="release-summary-2"></a>
### Release Summary
Regular bugfix release\.
<a id="bugfixes-2"></a>
### Bugfixes
* aix\_filesystem \- fix <code>\_validate\_vg</code> not passing VG name to <code>lsvg\_cmd</code> \([https\://github\.com/ansible\-collections/community\.general/issues/8151](https\://github\.com/ansible\-collections/community\.general/issues/8151)\)\.
* apt\_rpm \- when checking whether packages were installed after running <code>apt\-get \-y install \<packages\></code>\, only the last package name was checked \([https\://github\.com/ansible\-collections/community\.general/pull/8263](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/issues/8230)\, [https\://github\.com/ansible\-collections/community\.general/pull/8238](https\://github\.com/ansible\-collections/community\.general/pull/8238)\)\.
* 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](https\://github\.com/ansible\-collections/community\.general/issues/8092)\)\.
* inventory plugins \- add unsafe wrapper to avoid marking strings that do not contain <code>\{</code> or <code>\}</code> 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/issues/8212)\, [https\://github\.com/ansible\-collections/community\.general/pull/8225](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](https\://github\.com/ansible\-collections/community\.general/pull/8175)\)\.
* keycloak\_client \- add sorted <code>defaultClientScopes</code> and <code>optionalClientScopes</code> to normalizations \([https\://github\.com/ansible\-collections/community\.general/pull/8223](https\://github\.com/ansible\-collections/community\.general/pull/8223)\)\.
* keycloak\_realm \- add normalizations for <code>enabledEventTypes</code> and <code>supportedLocales</code> \([https\://github\.com/ansible\-collections/community\.general/pull/8224](https\://github\.com/ansible\-collections/community\.general/pull/8224)\)\.
* puppet \- add option <code>environment\_lang</code> to set the environment language encoding\. Defaults to lang <code>C</code>\. It is recommended to set it to <code>C\.UTF\-8</code> or <code>en\_US\.UTF\-8</code> depending on what is available on your system\. \([https\://github\.com/ansible\-collections/community\.general/issues/8000](https\://github\.com/ansible\-collections/community\.general/issues/8000)\)
* riak \- support <code>riak admin</code> sub\-command in newer Riak KV versions beside the legacy <code>riak\-admin</code> main command \([https\://github\.com/ansible\-collections/community\.general/pull/8211](https\://github\.com/ansible\-collections/community\.general/pull/8211)\)\.
* 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](https\://github\.com/ansible\-collections/community\.general/pull/8169)\)\.
<a id="v7-5-6"></a>
## v7\.5\.6
<a id="release-summary-3"></a>
### Release Summary
Regular bugfix release with security fixes\.
<a id="security-fixes-1"></a>
### 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\://www\.die\-welt\.net/2024/03/remote\-code\-execution\-in\-ansible\-dynamic\-inventory\-plugins/)\, [https\://github\.com/ansible\-collections/community\.general/pull/8098](https\://github\.com/ansible\-collections/community\.general/pull/8098)\)\.
<a id="bugfixes"></a>
<a id="bugfixes-3"></a>
### Bugfixes
* aix\_filesystem \- fix issue with empty list items in crfs logic and option order \([https\://github\.com/ansible\-collections/community\.general/pull/8052](https\://github\.com/ansible\-collections/community\.general/pull/8052)\)\.
@@ -100,12 +186,12 @@ Regular bugfix release with security fixes\.
<a id="v7-5-5"></a>
## v7\.5\.5
<a id="release-summary-1"></a>
<a id="release-summary-4"></a>
### Release Summary
Regular bugfix release\.
<a id="bugfixes-1"></a>
<a id="bugfixes-4"></a>
### Bugfixes
* cargo \- fix idempotency issues when using a custom installation path for packages \(using the <code>\-\-path</code> parameter\)\. The initial installation runs fine\, but subsequent runs use the <code>get\_installed\(\)</code> function which did not check the given installation location\, before running <code>cargo install</code>\. This resulted in a false <code>changed</code> state\. Also the removal of packeges using <code>state\: absent</code> failed\, as the installation check did not use the given parameter \([https\://github\.com/ansible\-collections/community\.general/pull/7970](https\://github\.com/ansible\-collections/community\.general/pull/7970)\)\.
@@ -119,12 +205,12 @@ Regular bugfix release\.
<a id="v7-5-4"></a>
## v7\.5\.4
<a id="release-summary-2"></a>
<a id="release-summary-5"></a>
### Release Summary
Regular bugfix release\.
<a id="bugfixes-2"></a>
<a id="bugfixes-5"></a>
### Bugfixes
* homebrew \- detect already installed formulae and casks using JSON output from <code>brew info</code> \([https\://github\.com/ansible\-collections/community\.general/issues/864](https\://github\.com/ansible\-collections/community\.general/issues/864)\)\.
@@ -136,12 +222,12 @@ Regular bugfix release\.
<a id="v7-5-3"></a>
## v7\.5\.3
<a id="release-summary-3"></a>
<a id="release-summary-6"></a>
### Release Summary
Regular bugfix release\.
<a id="bugfixes-3"></a>
<a id="bugfixes-6"></a>
### Bugfixes
* keycloak\_identity\_provider \- <code>mappers</code> 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](https\://github\.com/ansible\-collections/community\.general/pull/7418)\)\.
@@ -152,17 +238,17 @@ Regular bugfix release\.
<a id="v7-5-2"></a>
## v7\.5\.2
<a id="release-summary-4"></a>
<a id="release-summary-7"></a>
### Release Summary
Regular bugfix release\.
<a id="minor-changes"></a>
<a id="minor-changes-1"></a>
### Minor Changes
* elastic callback plugin \- close elastic client to not leak resources \([https\://github\.com/ansible\-collections/community\.general/pull/7517](https\://github\.com/ansible\-collections/community\.general/pull/7517)\)\.
<a id="bugfixes-4"></a>
<a id="bugfixes-7"></a>
### Bugfixes
* cloudflare\_dns \- fix Cloudflare lookup of SHFP records \([https\://github\.com/ansible\-collections/community\.general/issues/7652](https\://github\.com/ansible\-collections/community\.general/issues/7652)\)\.
@@ -184,12 +270,12 @@ Regular bugfix release\.
<a id="v7-5-1"></a>
## v7\.5\.1
<a id="release-summary-5"></a>
<a id="release-summary-8"></a>
### Release Summary
Regular bugfix release\.
<a id="bugfixes-5"></a>
<a id="bugfixes-8"></a>
### Bugfixes
* composer \- fix impossible to run <code>working\_dir</code> dependent commands\. The module was throwing an error when trying to run a <code>working\_dir</code> dependent command\, because it tried to get the command help without passing the <code>working\_dir</code> \([https\://github\.com/ansible\-collections/community\.general/issues/3787](https\://github\.com/ansible\-collections/community\.general/issues/3787)\)\.
@@ -211,7 +297,7 @@ Regular bugfix release\.
<a id="v7-5-0"></a>
## v7\.5\.0
<a id="release-summary-6"></a>
<a id="release-summary-9"></a>
### Release Summary
Regular bugfix and feature release\.
@@ -219,7 +305,7 @@ Regular bugfix and feature release\.
Please note that this is the last minor 7\.x\.0 release\. Further releases
with major version 7 will be bugfix releases 7\.5\.y\.
<a id="minor-changes-1"></a>
<a id="minor-changes-2"></a>
### Minor Changes
* cargo \- add option <code>executable</code>\, which allows user to specify path to the cargo binary \([https\://github\.com/ansible\-collections/community\.general/pull/7352](https\://github\.com/ansible\-collections/community\.general/pull/7352)\)\.
@@ -248,7 +334,7 @@ with major version 7 will be bugfix releases 7\.5\.y\.
* The next major release\, community\.general 8\.0\.0\, will drop support for ansible\-core 2\.11 and 2\.12\, which have been End of Life for some time now\. This means that this collection no longer supports Python 2\.6 on the target\. Individual content might still work with unsupported ansible\-core versions\, but that can change at any time\. Also please note that from now on\, for every new major community\.general release\, we will drop support for all ansible\-core versions that have been End of Life for more than a few weeks on the date of the major release \([https\://github\.com/ansible\-community/community\-topics/discussions/271](https\://github\.com/ansible\-community/community\-topics/discussions/271)\, [https\://github\.com/ansible\-collections/community\.general/pull/7259](https\://github\.com/ansible\-collections/community\.general/pull/7259)\)\.
* redfish\_info\, redfish\_config\, redfish\_command \- the default value <code>10</code> for the <code>timeout</code> option is deprecated and will change to <code>60</code> in community\.general 9\.0\.0 \([https\://github\.com/ansible\-collections/community\.general/pull/7295](https\://github\.com/ansible\-collections/community\.general/pull/7295)\)\.
<a id="bugfixes-6"></a>
<a id="bugfixes-9"></a>
### Bugfixes
* gitlab\_group\_variable \- deleted all variables when used with <code>purge\=true</code> due to missing <code>raw</code> property in KNOWN attributes \([https\://github\.com/ansible\-collections/community\.general/issues/7250](https\://github\.com/ansible\-collections/community\.general/issues/7250)\)\.
@@ -264,21 +350,21 @@ with major version 7 will be bugfix releases 7\.5\.y\.
<a id="new-modules"></a>
### New Modules
* consul\_role \- Manipulate Consul roles
* gio\_mime \- Set default handler for MIME type\, for applications using Gnome GIO
* keycloak\_authz\_custom\_policy \- Allows administration of Keycloak client custom Javascript policies via Keycloak API
* keycloak\_realm\_key \- Allows administration of Keycloak realm keys via Keycloak API
* simpleinit\_msb \- Manage services on Source Mage GNU/Linux
* community\.general\.consul\_role \- Manipulate Consul roles
* community\.general\.gio\_mime \- Set default handler for MIME type\, for applications using Gnome GIO
* community\.general\.keycloak\_authz\_custom\_policy \- Allows administration of Keycloak client custom Javascript policies via Keycloak API
* community\.general\.keycloak\_realm\_key \- Allows administration of Keycloak realm keys via Keycloak API
* community\.general\.simpleinit\_msb \- Manage services on Source Mage GNU/Linux
<a id="v7-4-0"></a>
## v7\.4\.0
<a id="release-summary-7"></a>
<a id="release-summary-10"></a>
### Release Summary
Bugfix and feature release\.
<a id="minor-changes-2"></a>
<a id="minor-changes-3"></a>
### Minor Changes
* cobbler inventory plugin \- add <code>exclude\_mgmt\_classes</code> and <code>include\_mgmt\_classes</code> options to exclude or include hosts based on management classes \([https\://github\.com/ansible\-collections/community\.general/pull/7184](https\://github\.com/ansible\-collections/community\.general/pull/7184)\)\.
@@ -295,7 +381,7 @@ Bugfix and feature release\.
* redfish\_utils module utils \- support <code>Volumes</code> in response for <code>GetDiskInventory</code> \([https\://github\.com/ansible\-collections/community\.general/pull/6819](https\://github\.com/ansible\-collections/community\.general/pull/6819)\)\.
* unixy callback plugin \- add support for <code>check\_mode\_markers</code> option \([https\://github\.com/ansible\-collections/community\.general/pull/7179](https\://github\.com/ansible\-collections/community\.general/pull/7179)\)\.
<a id="bugfixes-7"></a>
<a id="bugfixes-10"></a>
### 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](https\://github\.com/ansible\-collections/community\.general/pull/7200)\)\.
@@ -308,18 +394,18 @@ Bugfix and feature release\.
<a id="new-modules-1"></a>
### New Modules
* jenkins\_build\_info \- Get information about Jenkins builds
* pnpm \- Manage node\.js packages with pnpm
* community\.general\.jenkins\_build\_info \- Get information about Jenkins builds
* community\.general\.pnpm \- Manage node\.js packages with pnpm
<a id="v7-3-0"></a>
## v7\.3\.0
<a id="release-summary-8"></a>
<a id="release-summary-11"></a>
### Release Summary
Feature and bugfix release\.
<a id="minor-changes-3"></a>
<a id="minor-changes-4"></a>
### Minor Changes
* chroot connection plugin \- add <code>disable\_root\_check</code> option \([https\://github\.com/ansible\-collections/community\.general/pull/7099](https\://github\.com/ansible\-collections/community\.general/pull/7099)\)\.
@@ -342,7 +428,7 @@ Feature and bugfix release\.
* ejabberd\_user \- deprecate the parameter <code>logging</code> in favour of producing more detailed information in the module output \([https\://github\.com/ansible\-collections/community\.general/pull/7043](https\://github\.com/ansible\-collections/community\.general/pull/7043)\)\.
<a id="bugfixes-8"></a>
<a id="bugfixes-11"></a>
### Bugfixes
* 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 <code>notes</code> \([https\://github\.com/ansible\-collections/community\.general/pull/7061](https\://github\.com/ansible\-collections/community\.general/pull/7061)\)\.
@@ -361,12 +447,12 @@ Feature and bugfix release\.
<a id="v7-2-1"></a>
## v7\.2\.1
<a id="release-summary-9"></a>
<a id="release-summary-12"></a>
### Release Summary
Bugfix release\.
<a id="bugfixes-9"></a>
<a id="bugfixes-12"></a>
### Bugfixes
* cmd\_runner module utils \- when a parameter in <code>argument\_spec</code> has no type\, meaning it is implicitly a <code>str</code>\, <code>CmdRunner</code> would fail trying to find the <code>type</code> key in that dictionary \([https\://github\.com/ansible\-collections/community\.general/pull/6968](https\://github\.com/ansible\-collections/community\.general/pull/6968)\)\.
@@ -378,12 +464,12 @@ Bugfix release\.
<a id="v7-2-0"></a>
## v7\.2\.0
<a id="release-summary-10"></a>
<a id="release-summary-13"></a>
### Release Summary
Regular bugfix and feature release\.
<a id="minor-changes-4"></a>
<a id="minor-changes-5"></a>
### Minor Changes
* 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](https\://github\.com/ansible\-collections/community\.general/pull/6923)\)\.
@@ -429,7 +515,7 @@ Regular bugfix and feature release\.
* 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](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](https\://github\.com/ansible\-collections/community\.general/pull/6909)\)\.
<a id="bugfixes-10"></a>
<a id="bugfixes-13"></a>
### Bugfixes
* cobbler inventory plugin \- fix calculation of cobbler\_ipv4/6\_address \([https\://github\.com/ansible\-collections/community\.general/pull/6925](https\://github\.com/ansible\-collections/community\.general/pull/6925)\)\.
@@ -458,20 +544,20 @@ Regular bugfix and feature release\.
<a id="lookup"></a>
#### Lookup
* bitwarden\_secrets\_manager \- Retrieve secrets from Bitwarden Secrets Manager
* community\.general\.bitwarden\_secrets\_manager \- Retrieve secrets from Bitwarden Secrets Manager
<a id="new-modules-2"></a>
### New Modules
* consul\_policy \- Manipulate Consul policies
* keycloak\_authz\_permission \- Allows administration of Keycloak client authorization permissions via Keycloak API
* keycloak\_authz\_permission\_info \- Query Keycloak client authorization permissions information
* proxmox\_vm\_info \- Retrieve information about one or more Proxmox VE virtual machines
* community\.general\.consul\_policy \- Manipulate Consul policies
* community\.general\.keycloak\_authz\_permission \- Allows administration of Keycloak client authorization permissions via Keycloak API
* community\.general\.keycloak\_authz\_permission\_info \- Query Keycloak client authorization permissions information
* community\.general\.proxmox\_vm\_info \- Retrieve information about one or more Proxmox VE virtual machines
<a id="v7-1-0"></a>
## v7\.1\.0
<a id="release-summary-11"></a>
<a id="release-summary-14"></a>
### Release Summary
Regular bugfix and feature release\.
@@ -484,7 +570,7 @@ ansible\-core 2\.15 or later to see it as it is intended\. Alternatively you can
look at [the devel docsite](https\://docs\.ansible\.com/ansible/devel/collections/community/general/)
for the rendered HTML version of the documentation of the latest release\.
<a id="minor-changes-5"></a>
<a id="minor-changes-6"></a>
### Minor Changes
* The collection will start using semantic markup \([https\://github\.com/ansible\-collections/community\.general/pull/6539](https\://github\.com/ansible\-collections/community\.general/pull/6539)\)\.
@@ -553,7 +639,7 @@ for the rendered HTML version of the documentation of the latest release\.
for removal in community\.general 10\.0\.0
\([https\://github\.com/ansible\-collections/community\.general/pull/6673](https\://github\.com/ansible\-collections/community\.general/pull/6673)\)\.
<a id="bugfixes-11"></a>
<a id="bugfixes-14"></a>
### Bugfixes
* 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/pull/6644)\, [https\://github\.com/ansible\-collections/community\.general/issues/6639](https\://github\.com/ansible\-collections/community\.general/issues/6639)\)\.
@@ -579,23 +665,23 @@ for the rendered HTML version of the documentation of the latest release\.
<a id="new-modules-3"></a>
### New Modules
* gitlab\_instance\_variable \- Creates\, updates\, or deletes GitLab instance variables
* gitlab\_merge\_request \- Create\, update\, or delete GitLab merge requests
* keycloak\_authentication\_required\_actions \- Allows administration of Keycloak authentication required actions
* keycloak\_user \- Create and configure a user in Keycloak
* lvg\_rename \- Renames LVM volume groups
* proxmox\_pool \- Pool management for Proxmox VE cluster
* proxmox\_pool\_member \- Add or delete members from Proxmox VE cluster pools
* community\.general\.gitlab\_instance\_variable \- Creates\, updates\, or deletes GitLab instance variables
* community\.general\.gitlab\_merge\_request \- Create\, update\, or delete GitLab merge requests
* community\.general\.keycloak\_authentication\_required\_actions \- Allows administration of Keycloak authentication required actions
* community\.general\.keycloak\_user \- Create and configure a user in Keycloak
* community\.general\.lvg\_rename \- Renames LVM volume groups
* community\.general\.proxmox\_pool \- Pool management for Proxmox VE cluster
* community\.general\.proxmox\_pool\_member \- Add or delete members from Proxmox VE cluster pools
<a id="v7-0-1"></a>
## v7\.0\.1
<a id="release-summary-12"></a>
<a id="release-summary-15"></a>
### Release Summary
Bugfix release for Ansible 8\.0\.0rc1\.
<a id="bugfixes-12"></a>
<a id="bugfixes-15"></a>
### Bugfixes
* nmcli \- fix bond option <code>xmit\_hash\_policy</code> \([https\://github\.com/ansible\-collections/community\.general/pull/6527](https\://github\.com/ansible\-collections/community\.general/pull/6527)\)\.
@@ -606,12 +692,12 @@ Bugfix release for Ansible 8\.0\.0rc1\.
<a id="v7-0-0"></a>
## v7\.0\.0
<a id="release-summary-13"></a>
<a id="release-summary-16"></a>
### Release Summary
This is release 7\.0\.0 of <code>community\.general</code>\, released on 2023\-05\-09\.
<a id="minor-changes-6"></a>
<a id="minor-changes-7"></a>
### Minor Changes
* apache2\_module \- add module argument <code>warn\_mpm\_absent</code> to control whether warning are raised in some edge cases \([https\://github\.com/ansible\-collections/community\.general/pull/5793](https\://github\.com/ansible\-collections/community\.general/pull/5793)\)\.
@@ -791,7 +877,7 @@ This is release 7\.0\.0 of <code>community\.general</code>\, released on 2023\-0
* xfconf \- generating facts was deprecated in community\.general 3\.0\.0\, however three factoids\, <code>property</code>\, <code>channel</code> and <code>value</code> continued to be generated by mistake\. This behaviour has been removed and <code>xfconf</code> generate no facts whatsoever \([https\://github\.com/ansible\-collections/community\.general/pull/5502](https\://github\.com/ansible\-collections/community\.general/pull/5502)\)\.
* xfconf \- generating facts was deprecated in community\.general 3\.0\.0\, however two factoids\, <code>previous\_value</code> and <code>type</code> continued to be generated by mistake\. This behaviour has been removed and <code>xfconf</code> generate no facts whatsoever \([https\://github\.com/ansible\-collections/community\.general/pull/5502](https\://github\.com/ansible\-collections/community\.general/pull/5502)\)\.
<a id="bugfixes-13"></a>
<a id="bugfixes-16"></a>
### Bugfixes
* ModuleHelper \- fix bug when adjusting the name of reserved output variables \([https\://github\.com/ansible\-collections/community\.general/pull/5755](https\://github\.com/ansible\-collections/community\.general/pull/5755)\)\.
@@ -907,20 +993,20 @@ This is release 7\.0\.0 of <code>community\.general</code>\, released on 2023\-0
<a id="lookup-1"></a>
#### Lookup
* merge\_variables \- merge variables with a certain suffix
* community\.general\.merge\_variables \- merge variables with a certain suffix
<a id="new-modules-4"></a>
### New Modules
* btrfs\_info \- Query btrfs filesystem info
* btrfs\_subvolume \- Manage btrfs subvolumes
* gitlab\_project\_badge \- Manage project badges on GitLab Server
* ilo\_redfish\_command \- Manages Out\-Of\-Band controllers using Redfish APIs
* ipbase\_info \- Retrieve IP geolocation and other facts of a host\'s IP address using the ipbase\.com API
* kdeconfig \- Manage KDE configuration files
* keycloak\_authz\_authorization\_scope \- Allows administration of Keycloak client authorization scopes via Keycloak API
* keycloak\_clientscope\_type \- Set the type of aclientscope in realm or client via Keycloak API
* keycloak\_clientsecret\_info \- Retrieve client secret via Keycloak API
* keycloak\_clientsecret\_regenerate \- Regenerate Keycloak client secret via Keycloak API
* ocapi\_command \- Manages Out\-Of\-Band controllers using Open Composable API \(OCAPI\)
* ocapi\_info \- Manages Out\-Of\-Band controllers using Open Composable API \(OCAPI\)
* community\.general\.btrfs\_info \- Query btrfs filesystem info
* community\.general\.btrfs\_subvolume \- Manage btrfs subvolumes
* community\.general\.gitlab\_project\_badge \- Manage project badges on GitLab Server
* community\.general\.ilo\_redfish\_command \- Manages Out\-Of\-Band controllers using Redfish APIs
* community\.general\.ipbase\_info \- Retrieve IP geolocation and other facts of a host\'s IP address using the ipbase\.com API
* community\.general\.kdeconfig \- Manage KDE configuration files
* community\.general\.keycloak\_authz\_authorization\_scope \- Allows administration of Keycloak client authorization scopes via Keycloak API
* community\.general\.keycloak\_clientscope\_type \- Set the type of aclientscope in realm or client via Keycloak API
* community\.general\.keycloak\_clientsecret\_info \- Retrieve client secret via Keycloak API
* community\.general\.keycloak\_clientsecret\_regenerate \- Regenerate Keycloak client secret via Keycloak API
* community\.general\.ocapi\_command \- Manages Out\-Of\-Band controllers using Open Composable API \(OCAPI\)
* community\.general\.ocapi\_info \- Manages Out\-Of\-Band controllers using Open Composable API \(OCAPI\)

View File

@@ -6,6 +6,81 @@ Community General Release Notes
This changelog describes changes after version 6.0.0.
v7.5.9
======
Release Summary
---------------
Maintenance release.
This is the last 7.x.y release. The 7.x.y release train is now effectively End of Life.
Thanks to everyone who contributed to the community.general 7.x.y releases!
Bugfixes
--------
- ini_file - pass absolute paths to ``module.atomic_move()`` (https://github.com/ansible/ansible/issues/83950, https://github.com/ansible-collections/community.general/pull/8925).
- ipa_hostgroup - fix ``enabled `` and ``disabled`` states (https://github.com/ansible-collections/community.general/issues/8408, https://github.com/ansible-collections/community.general/pull/8900).
- java_keystore - pass absolute paths to ``module.atomic_move()`` (https://github.com/ansible/ansible/issues/83950, https://github.com/ansible-collections/community.general/pull/8925).
- jenkins_plugin - pass absolute paths to ``module.atomic_move()`` (https://github.com/ansible/ansible/issues/83950, https://github.com/ansible-collections/community.general/pull/8925).
- kdeconfig - pass absolute paths to ``module.atomic_move()`` (https://github.com/ansible/ansible/issues/83950, https://github.com/ansible-collections/community.general/pull/8925).
- modprobe - fix check mode not being honored for ``persistent`` option (https://github.com/ansible-collections/community.general/issues/9051, https://github.com/ansible-collections/community.general/pull/9052).
- pam_limits - pass absolute paths to ``module.atomic_move()`` (https://github.com/ansible/ansible/issues/83950, https://github.com/ansible-collections/community.general/pull/8925).
v7.5.8
======
Release Summary
---------------
Regular bugfix release.
Note that this is the last regular bugfix release. From now on, the 7.x.y release train
will only receive major and security bugfixes.
Minor Changes
-------------
- 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).
Security Fixes
--------------
- 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
--------
- gitlab_runner - fix pagination when checking for existing runners (https://github.com/ansible-collections/community.general/pull/7790).
- keycloak_user_federation - fix diff of empty ``krbPrincipalAttribute`` (https://github.com/ansible-collections/community.general/pull/8320).
- 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).
v7.5.7
======
Release Summary
---------------
Regular bugfix release.
Bugfixes
--------
- aix_filesystem - fix ``_validate_vg`` not passing VG name to ``lsvg_cmd`` (https://github.com/ansible-collections/community.general/issues/8151).
- 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).
- 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).
- 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).
- keycloak_client - add sorted ``defaultClientScopes`` and ``optionalClientScopes`` to normalizations (https://github.com/ansible-collections/community.general/pull/8223).
- keycloak_realm - add normalizations for ``enabledEventTypes`` and ``supportedLocales`` (https://github.com/ansible-collections/community.general/pull/8224).
- 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)
- 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).
- 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).
v7.5.6
======
@@ -199,11 +274,11 @@ Bugfixes
New Modules
-----------
- consul_role - Manipulate Consul roles
- gio_mime - Set default handler for MIME type, for applications using Gnome GIO
- keycloak_authz_custom_policy - Allows administration of Keycloak client custom Javascript policies via Keycloak API
- keycloak_realm_key - Allows administration of Keycloak realm keys via Keycloak API
- simpleinit_msb - Manage services on Source Mage GNU/Linux
- community.general.consul_role - Manipulate Consul roles
- community.general.gio_mime - Set default handler for MIME type, for applications using Gnome GIO
- community.general.keycloak_authz_custom_policy - Allows administration of Keycloak client custom Javascript policies via Keycloak API
- community.general.keycloak_realm_key - Allows administration of Keycloak realm keys via Keycloak API
- community.general.simpleinit_msb - Manage services on Source Mage GNU/Linux
v7.4.0
======
@@ -243,8 +318,8 @@ Bugfixes
New Modules
-----------
- jenkins_build_info - Get information about Jenkins builds
- pnpm - Manage node.js packages with pnpm
- community.general.jenkins_build_info - Get information about Jenkins builds
- community.general.pnpm - Manage node.js packages with pnpm
v7.3.0
======
@@ -393,15 +468,15 @@ New Plugins
Lookup
~~~~~~
- bitwarden_secrets_manager - Retrieve secrets from Bitwarden Secrets Manager
- community.general.bitwarden_secrets_manager - Retrieve secrets from Bitwarden Secrets Manager
New Modules
-----------
- consul_policy - Manipulate Consul policies
- keycloak_authz_permission - Allows administration of Keycloak client authorization permissions via Keycloak API
- keycloak_authz_permission_info - Query Keycloak client authorization permissions information
- proxmox_vm_info - Retrieve information about one or more Proxmox VE virtual machines
- community.general.consul_policy - Manipulate Consul policies
- community.general.keycloak_authz_permission - Allows administration of Keycloak client authorization permissions via Keycloak API
- community.general.keycloak_authz_permission_info - Query Keycloak client authorization permissions information
- community.general.proxmox_vm_info - Retrieve information about one or more Proxmox VE virtual machines
v7.1.0
======
@@ -515,13 +590,13 @@ Known Issues
New Modules
-----------
- gitlab_instance_variable - Creates, updates, or deletes GitLab instance variables
- gitlab_merge_request - Create, update, or delete GitLab merge requests
- keycloak_authentication_required_actions - Allows administration of Keycloak authentication required actions
- keycloak_user - Create and configure a user in Keycloak
- lvg_rename - Renames LVM volume groups
- proxmox_pool - Pool management for Proxmox VE cluster
- proxmox_pool_member - Add or delete members from Proxmox VE cluster pools
- community.general.gitlab_instance_variable - Creates, updates, or deletes GitLab instance variables
- community.general.gitlab_merge_request - Create, update, or delete GitLab merge requests
- community.general.keycloak_authentication_required_actions - Allows administration of Keycloak authentication required actions
- community.general.keycloak_user - Create and configure a user in Keycloak
- community.general.lvg_rename - Renames LVM volume groups
- community.general.proxmox_pool - Pool management for Proxmox VE cluster
- community.general.proxmox_pool_member - Add or delete members from Proxmox VE cluster pools
v7.0.1
======
@@ -843,20 +918,20 @@ New Plugins
Lookup
~~~~~~
- merge_variables - merge variables with a certain suffix
- community.general.merge_variables - merge variables with a certain suffix
New Modules
-----------
- btrfs_info - Query btrfs filesystem info
- btrfs_subvolume - Manage btrfs subvolumes
- gitlab_project_badge - Manage project badges on GitLab Server
- ilo_redfish_command - Manages Out-Of-Band controllers using Redfish APIs
- ipbase_info - Retrieve IP geolocation and other facts of a host's IP address using the ipbase.com API
- kdeconfig - Manage KDE configuration files
- keycloak_authz_authorization_scope - Allows administration of Keycloak client authorization scopes via Keycloak API
- keycloak_clientscope_type - Set the type of aclientscope in realm or client via Keycloak API
- keycloak_clientsecret_info - Retrieve client secret via Keycloak API
- keycloak_clientsecret_regenerate - Regenerate Keycloak client secret via Keycloak API
- ocapi_command - Manages Out-Of-Band controllers using Open Composable API (OCAPI)
- ocapi_info - Manages Out-Of-Band controllers using Open Composable API (OCAPI)
- community.general.btrfs_info - Query btrfs filesystem info
- community.general.btrfs_subvolume - Manage btrfs subvolumes
- community.general.gitlab_project_badge - Manage project badges on GitLab Server
- community.general.ilo_redfish_command - Manages Out-Of-Band controllers using Redfish APIs
- community.general.ipbase_info - Retrieve IP geolocation and other facts of a host's IP address using the ipbase.com API
- community.general.kdeconfig - Manage KDE configuration files
- community.general.keycloak_authz_authorization_scope - Allows administration of Keycloak client authorization scopes via Keycloak API
- community.general.keycloak_clientscope_type - Set the type of aclientscope in realm or client via Keycloak API
- community.general.keycloak_clientsecret_info - Retrieve client secret via Keycloak API
- community.general.keycloak_clientsecret_regenerate - Regenerate Keycloak client secret via Keycloak API
- community.general.ocapi_command - Manages Out-Of-Band controllers using Open Composable API (OCAPI)
- community.general.ocapi_info - Manages Out-Of-Band controllers using Open Composable API (OCAPI)

View File

@@ -31,7 +31,9 @@ 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/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 :) )
* 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 :) )
* 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

@@ -9,6 +9,7 @@ SPDX-License-Identifier: GPL-3.0-or-later
[![Build Status](https://dev.azure.com/ansible/community.general/_apis/build/status/CI?branchName=stable-7)](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.
@@ -24,7 +25,7 @@ If you encounter abusive behavior violating the [Ansible Code of Conduct](https:
## Tested with Ansible
Tested with the current ansible-core 2.11, ansible-core 2.12, 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.11.0 are not supported. This includes all ansible-base 2.10 and Ansible 2.9 releases.
Tested with the current ansible-core 2.11, ansible-core 2.12, ansible-core 2.13, ansible-core 2.14, ansible-core 2.15, ansible-core 2.16, and ansible-core 2.17 releases. Ansible-core versions before 2.11.0 are not supported. This includes all ansible-base 2.10 and Ansible 2.9 releases.
Parts of this collection will not work with ansible-core 2.11 on Python 3.12+.

File diff suppressed because it is too large Load Diff

View File

@@ -18,20 +18,25 @@ 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

@@ -22,6 +22,7 @@ communication:
- topic: General usage and support questions
network: Libera
channel: '#ansible'
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

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

View File

@@ -350,7 +350,8 @@ 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)
span.end(end_time=host_data.finish)
# Close span always
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 """
@@ -497,6 +498,12 @@ class CallbackModule(CallbackBase):
# See https://github.com/open-telemetry/opentelemetry-specification/issues/740
self.traceparent = self.get_option('traceparent')
def dump_results(self, result):
""" dump the results if disable_logs is not enabled """
if self.disable_logs:
return ""
return self._dump_results(result._result)
def v2_playbook_on_start(self, playbook):
self.ansible_playbook = basename(playbook._file_name)
@@ -546,7 +553,7 @@ class CallbackModule(CallbackBase):
self.tasks_data,
status,
result,
self._dump_results(result._result)
self.dump_results(result)
)
def v2_runner_on_ok(self, result):
@@ -554,7 +561,7 @@ class CallbackModule(CallbackBase):
self.tasks_data,
'ok',
result,
self._dump_results(result._result)
self.dump_results(result)
)
def v2_runner_on_skipped(self, result):
@@ -562,7 +569,7 @@ class CallbackModule(CallbackBase):
self.tasks_data,
'skipped',
result,
self._dump_results(result._result)
self.dump_results(result)
)
def v2_playbook_on_include(self, included_file):

View File

@@ -19,6 +19,16 @@ 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

@@ -117,7 +117,8 @@ 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.utils.unsafe_proxy import wrap_var as make_unsafe
from ansible_collections.community.general.plugins.plugin_utils.unsafe import make_unsafe
# xmlrpc
try:

View File

@@ -84,7 +84,8 @@ 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.utils.unsafe_proxy import wrap_var as make_unsafe
from ansible_collections.community.general.plugins.plugin_utils.unsafe import make_unsafe
try:
import gitlab

View File

@@ -96,7 +96,8 @@ 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.utils.unsafe_proxy import wrap_var as make_unsafe
from ansible_collections.community.general.plugins.plugin_utils.unsafe import make_unsafe
class InventoryModule(BaseInventoryPlugin, Constructable):

View File

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

View File

@@ -161,7 +161,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.utils.unsafe_proxy import wrap_var as make_unsafe
from ansible_collections.community.general.plugins.plugin_utils.unsafe import make_unsafe
try:
import ipaddress

View File

@@ -126,7 +126,8 @@ from ansible.errors import AnsibleParserError
from ansible.module_utils.common.text.converters import to_native, to_text
from ansible.plugins.inventory import BaseInventoryPlugin, Constructable, Cacheable
from ansible.module_utils.common.process import get_bin_path
from ansible.utils.unsafe_proxy import wrap_var as make_unsafe
from ansible_collections.community.general.plugins.plugin_utils.unsafe import make_unsafe
class InventoryModule(BaseInventoryPlugin, Constructable, Cacheable):

View File

@@ -68,7 +68,8 @@ from ansible.plugins.inventory import BaseInventoryPlugin
from ansible.module_utils.common.text.converters import to_text
from ansible.module_utils.ansible_release import __version__ as ansible_version
from ansible.module_utils.six.moves.urllib.parse import urljoin
from ansible.utils.unsafe_proxy import wrap_var as make_unsafe
from ansible_collections.community.general.plugins.plugin_utils.unsafe import make_unsafe
class InventoryModule(BaseInventoryPlugin):

View File

@@ -97,7 +97,8 @@ except ImportError:
from ansible.errors import AnsibleError
from ansible.plugins.inventory import BaseInventoryPlugin, Constructable
from ansible.module_utils.common.text.converters import to_native
from ansible.utils.unsafe_proxy import wrap_var as make_unsafe
from ansible_collections.community.general.plugins.plugin_utils.unsafe import make_unsafe
from collections import namedtuple
import os

View File

@@ -222,9 +222,9 @@ from ansible.module_utils.common.text.converters import to_native
from ansible.module_utils.six import string_types
from ansible.module_utils.six.moves.urllib.parse import urlencode
from ansible.utils.display import Display
from ansible.utils.unsafe_proxy import wrap_var as make_unsafe
from ansible_collections.community.general.plugins.module_utils.version import LooseVersion
from ansible_collections.community.general.plugins.plugin_utils.unsafe import make_unsafe
# 3rd party imports
try:

View File

@@ -121,10 +121,10 @@ else:
from ansible.errors import AnsibleError
from ansible.plugins.inventory import BaseInventoryPlugin, Constructable
from ansible_collections.community.general.plugins.module_utils.scaleway import SCALEWAY_LOCATION, parse_pagination_link
from ansible_collections.community.general.plugins.plugin_utils.unsafe import make_unsafe
from ansible.module_utils.urls import open_url
from ansible.module_utils.common.text.converters import to_native, to_text
from ansible.module_utils.six import raise_from
from ansible.utils.unsafe_proxy import wrap_var as make_unsafe
import ansible.module_utils.six.moves.urllib.parse as urllib_parse

View File

@@ -72,7 +72,8 @@ from ansible.plugins.inventory import (
Cacheable
)
from ansible.utils.display import Display
from ansible.utils.unsafe_proxy import wrap_var as make_unsafe
from ansible_collections.community.general.plugins.plugin_utils.unsafe import make_unsafe
display = Display()

View File

@@ -62,7 +62,8 @@ from ansible.module_utils.common.text.converters import to_bytes, to_native, to_
from ansible.module_utils.common._collections_compat import MutableMapping
from ansible.plugins.inventory import BaseInventoryPlugin, Constructable, Cacheable
from ansible.module_utils.common.process import get_bin_path
from ansible.utils.unsafe_proxy import wrap_var as make_unsafe
from ansible_collections.community.general.plugins.plugin_utils.unsafe import make_unsafe
class InventoryModule(BaseInventoryPlugin, Constructable, Cacheable):

View File

@@ -82,9 +82,9 @@ from time import sleep
from ansible.errors import AnsibleError
from ansible.plugins.inventory import BaseInventoryPlugin, Constructable, Cacheable
from ansible.utils.unsafe_proxy import wrap_var as make_unsafe
from ansible_collections.community.general.plugins.module_utils.version import LooseVersion
from ansible_collections.community.general.plugins.plugin_utils.unsafe import make_unsafe
# 3rd party imports
try:

View File

@@ -70,6 +70,7 @@ RETURN = """
"""
from subprocess import Popen, PIPE
from time import sleep
from ansible.errors import AnsibleLookupError
from ansible.module_utils.common.text.converters import to_text
@@ -84,11 +85,29 @@ class BitwardenSecretsManagerException(AnsibleLookupError):
class BitwardenSecretsManager(object):
def __init__(self, path='bws'):
self._cli_path = path
self._max_retries = 3
self._retry_delay = 1
@property
def cli_path(self):
return self._cli_path
def _run_with_retry(self, args, stdin=None, retries=0):
out, err, rc = self._run(args, stdin)
if rc != 0:
if retries >= self._max_retries:
raise BitwardenSecretsManagerException("Max retries exceeded. Unable to retrieve secret.")
if "Too many requests" in err:
delay = self._retry_delay * (2 ** retries)
sleep(delay)
return self._run_with_retry(args, stdin, retries + 1)
else:
raise BitwardenSecretsManagerException("Command failed with return code {rc}: {err}".format(rc=rc, err=err))
return out, err, rc
def _run(self, args, stdin=None):
p = Popen([self.cli_path] + args, stdout=PIPE, stderr=PIPE, stdin=PIPE)
out, err = p.communicate(stdin)
@@ -107,7 +126,7 @@ class BitwardenSecretsManager(object):
'get', 'secret', secret_id
]
out, err, rc = self._run(params)
out, err, rc = self._run_with_retry(params)
if rc != 0:
raise BitwardenSecretsManagerException(to_text(err))

View File

@@ -11,7 +11,7 @@ DOCUMENTATION = """
- Roy Lenferink (@rlenferink)
- Mark Ettema (@m-a-r-k-e)
name: merge_variables
short_description: merge variables with a certain suffix
short_description: merge variables whose names match a given pattern
description:
- This lookup returns the merged result of all variables in scope that match the given prefixes, suffixes, or
regular expressions, optionally.

View File

@@ -21,15 +21,30 @@ except ImportError:
import traceback
def _determine_list_all_kwargs(version):
gitlab_version = LooseVersion(version)
if gitlab_version >= LooseVersion('4.0.0'):
# 4.0.0 removed 'as_list'
return {'iterator': True, 'per_page': 100}
elif gitlab_version >= LooseVersion('3.7.0'):
# 3.7.0 added 'get_all'
return {'as_list': False, 'get_all': True, 'per_page': 100}
else:
return {'as_list': False, 'all': True, 'per_page': 100}
GITLAB_IMP_ERR = None
try:
import gitlab
import requests
HAS_GITLAB_PACKAGE = True
list_all_kwargs = _determine_list_all_kwargs(gitlab.__version__)
except Exception:
gitlab = None
GITLAB_IMP_ERR = traceback.format_exc()
HAS_GITLAB_PACKAGE = False
list_all_kwargs = {}
def auth_argument_spec(spec=None):

View File

@@ -104,7 +104,7 @@ class IPAClient(object):
def get_ipa_version(self):
response = self.ping()['summary']
ipa_ver_regex = re.compile(r'IPA server version (\d\.\d\.\d).*')
ipa_ver_regex = re.compile(r'IPA server version (\d+\.\d+\.\d+).*')
version_match = ipa_ver_regex.match(response)
ipa_version = None
if version_match:

View File

@@ -107,5 +107,6 @@ def puppet_runner(module):
verbose=cmd_runner_fmt.as_bool("--verbose"),
),
check_rc=False,
force_lang=module.params["environment_lang"],
)
return runner

View File

@@ -242,7 +242,7 @@ def _validate_vg(module, vg):
if rc != 0:
module.fail_json(msg="Failed executing %s command." % lsvg_cmd)
rc, current_all_vgs, err = module.run_command([lsvg_cmd, "%s"])
rc, current_all_vgs, err = module.run_command([lsvg_cmd])
if rc != 0:
module.fail_json(msg="Failed executing %s command." % lsvg_cmd)

View File

@@ -204,7 +204,7 @@ def install_packages(module, pkgspec):
rc, out, err = module.run_command("%s -y install %s" % (APT_PATH, packages), environ_update={"LANG": "C"})
installed = True
for packages in pkgspec:
for package in pkgspec:
if not query_package_provides(module, package):
installed = False

View File

@@ -102,40 +102,40 @@ EXAMPLES = r'''
- name: Create a @home subvolume under the root subvolume
community.general.btrfs_subvolume:
name: /@home
device: /dev/vda2
filesystem_device: /dev/vda2
- name: Remove the @home subvolume if it exists
community.general.btrfs_subvolume:
name: /@home
state: absent
device: /dev/vda2
filesystem_device: /dev/vda2
- name: Create a snapshot of the root subvolume named @
community.general.btrfs_subvolume:
name: /@
snapshot_source: /
device: /dev/vda2
filesystem_device: /dev/vda2
- name: Create a snapshot of the root subvolume and make it the new default subvolume
community.general.btrfs_subvolume:
name: /@
snapshot_source: /
default: Yes
device: /dev/vda2
filesystem_device: /dev/vda2
- name: Create a snapshot of the /@ subvolume and recursively creating intermediate subvolumes as required
community.general.btrfs_subvolume:
name: /@snapshots/@2022_06_09
snapshot_source: /@
recursive: True
device: /dev/vda2
filesystem_device: /dev/vda2
- name: Remove the /@ subvolume and recursively delete child subvolumes as required
community.general.btrfs_subvolume:
name: /@snapshots/@2022_06_09
snapshot_source: /@
recursive: True
device: /dev/vda2
filesystem_device: /dev/vda2
'''

View File

@@ -121,7 +121,7 @@ from ansible.module_utils.basic import AnsibleModule
from ansible.module_utils.common.text.converters import to_native
from ansible_collections.community.general.plugins.module_utils.gitlab import (
auth_argument_spec, find_project, gitlab_authentication, gitlab, ensure_gitlab_package
auth_argument_spec, find_project, gitlab_authentication, gitlab, ensure_gitlab_package, list_all_kwargs
)
@@ -209,8 +209,7 @@ class GitLabDeployKey(object):
@param key_title Title of the key
'''
def find_deploy_key(self, project, key_title):
deploy_keys = project.keys.list(all=True)
for deploy_key in deploy_keys:
for deploy_key in project.keys.list(**list_all_kwargs):
if (deploy_key.title == key_title):
return deploy_key

View File

@@ -160,7 +160,7 @@ from ansible.module_utils.api import basic_auth_argument_spec
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.community.general.plugins.module_utils.gitlab import (
auth_argument_spec, gitlab_authentication, gitlab, ensure_gitlab_package
auth_argument_spec, gitlab_authentication, gitlab, ensure_gitlab_package, list_all_kwargs
)
@@ -171,16 +171,20 @@ class GitLabGroup(object):
# get user id if the user exists
def get_user_id(self, gitlab_user):
user_exists = self._gitlab.users.list(username=gitlab_user, all=True)
if user_exists:
return user_exists[0].id
return next(
(u.id for u in self._gitlab.users.list(username=gitlab_user, **list_all_kwargs)),
None
)
# get group id if group exists
def get_group_id(self, gitlab_group):
groups = self._gitlab.groups.list(search=gitlab_group, all=True)
for group in groups:
if group.full_path == gitlab_group:
return group.id
return next(
(
g.id for g in self._gitlab.groups.list(search=gitlab_group, **list_all_kwargs)
if g.full_path == gitlab_group
),
None
)
# get all members in a group
def get_members_in_a_group(self, gitlab_group_id):

View File

@@ -207,7 +207,8 @@ group_variable:
from ansible.module_utils.basic import AnsibleModule
from ansible.module_utils.api import basic_auth_argument_spec
from ansible_collections.community.general.plugins.module_utils.gitlab import (
auth_argument_spec, gitlab_authentication, ensure_gitlab_package, filter_returned_variables, vars_to_variables
auth_argument_spec, gitlab_authentication, ensure_gitlab_package, filter_returned_variables, vars_to_variables,
list_all_kwargs
)
@@ -222,14 +223,7 @@ class GitlabGroupVariables(object):
return self.repo.groups.get(group_name)
def list_all_group_variables(self):
page_nb = 1
variables = []
vars_page = self.group.variables.list(page=page_nb)
while len(vars_page) > 0:
variables += vars_page
page_nb += 1
vars_page = self.group.variables.list(page=page_nb)
return variables
return list(self.group.variables.list(**list_all_kwargs))
def create_variable(self, var_obj):
if self._module.check_mode:

View File

@@ -171,7 +171,7 @@ from ansible.module_utils.api import basic_auth_argument_spec
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.community.general.plugins.module_utils.gitlab import (
auth_argument_spec, find_project, gitlab_authentication, ensure_gitlab_package
auth_argument_spec, find_project, gitlab_authentication, ensure_gitlab_package, list_all_kwargs
)
@@ -266,8 +266,7 @@ class GitLabHook(object):
@param hook_url Url to call on event
'''
def find_hook(self, project, hook_url):
hooks = project.hooks.list(all=True)
for hook in hooks:
for hook in project.hooks.list(**list_all_kwargs):
if (hook.url == hook_url):
return hook

View File

@@ -139,7 +139,7 @@ instance_variable:
from ansible.module_utils.basic import AnsibleModule
from ansible.module_utils.api import basic_auth_argument_spec
from ansible_collections.community.general.plugins.module_utils.gitlab import (
auth_argument_spec, gitlab_authentication, ensure_gitlab_package, filter_returned_variables
auth_argument_spec, gitlab_authentication, ensure_gitlab_package, filter_returned_variables, list_all_kwargs
)
@@ -150,14 +150,7 @@ class GitlabInstanceVariables(object):
self._module = module
def list_all_instance_variables(self):
page_nb = 1
variables = []
gl_varibales_page = self.instance.variables.list(page=page_nb)
while len(gl_varibales_page) > 0:
variables += gl_varibales_page
page_nb += 1
gl_varibales_page = self.instance.variables.list(page=page_nb)
return variables
return list(self.instance.variables.list(**list_all_kwargs))
def create_variable(self, var_obj):
if self._module.check_mode:

View File

@@ -97,7 +97,7 @@ from ansible.module_utils.api import basic_auth_argument_spec
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.community.general.plugins.module_utils.gitlab import (
auth_argument_spec, gitlab_authentication, find_project, ensure_gitlab_package
auth_argument_spec, gitlab_authentication, find_project, ensure_gitlab_package, list_all_kwargs
)
@@ -105,7 +105,7 @@ def present_strategy(module, gl, project, wished_badge):
changed = False
existing_badge = None
for badge in project.badges.list(iterator=True):
for badge in project.badges.list(**list_all_kwargs):
if badge.image_url == wished_badge["image_url"]:
existing_badge = badge
break
@@ -135,7 +135,7 @@ def absent_strategy(module, gl, project, wished_badge):
changed = False
existing_badge = None
for badge in project.badges.list(iterator=True):
for badge in project.badges.list(**list_all_kwargs):
if badge.image_url == wished_badge["image_url"]:
existing_badge = badge
break

View File

@@ -227,7 +227,7 @@ from ansible.module_utils.api import basic_auth_argument_spec
from ansible_collections.community.general.plugins.module_utils.gitlab import (
auth_argument_spec, gitlab_authentication, ensure_gitlab_package, filter_returned_variables, vars_to_variables,
HAS_GITLAB_PACKAGE, GITLAB_IMP_ERR
list_all_kwargs, HAS_GITLAB_PACKAGE, GITLAB_IMP_ERR
)
@@ -242,14 +242,7 @@ class GitlabProjectVariables(object):
return self.repo.projects.get(project_name)
def list_all_project_variables(self):
page_nb = 1
variables = []
vars_page = self.project.variables.list(page=page_nb)
while len(vars_page) > 0:
variables += vars_page
page_nb += 1
vars_page = self.project.variables.list(page=page_nb)
return variables
return list(self.project.variables.list(**list_all_kwargs))
def create_variable(self, var_obj):
if self._module.check_mode:

View File

@@ -206,7 +206,7 @@ from ansible.module_utils.basic import AnsibleModule
from ansible.module_utils.common.text.converters import to_native
from ansible_collections.community.general.plugins.module_utils.gitlab import (
auth_argument_spec, gitlab_authentication, gitlab, ensure_gitlab_package
auth_argument_spec, gitlab_authentication, gitlab, ensure_gitlab_package, list_all_kwargs
)
@@ -309,7 +309,7 @@ class GitLabRunner(object):
@param description Description of the runner
'''
def find_runner(self, description):
runners = self._runners_endpoint(as_list=False)
runners = self._runners_endpoint(**list_all_kwargs)
for runner in runners:
# python-gitlab 2.2 through at least 2.5 returns a list of dicts for list() instead of a Runner

View File

@@ -234,7 +234,7 @@ from ansible.module_utils.basic import AnsibleModule
from ansible.module_utils.common.text.converters import to_native
from ansible_collections.community.general.plugins.module_utils.gitlab import (
auth_argument_spec, find_group, gitlab_authentication, gitlab, ensure_gitlab_package
auth_argument_spec, find_group, gitlab_authentication, gitlab, ensure_gitlab_package, list_all_kwargs
)
@@ -349,9 +349,10 @@ class GitLabUser(object):
@param sshkey_name Name of the ssh key
'''
def ssh_key_exists(self, user, sshkey_name):
keyList = map(lambda k: k.title, user.keys.list(all=True))
return sshkey_name in keyList
return any(
k.title == sshkey_name
for k in user.keys.list(**list_all_kwargs)
)
'''
@param user User object
@@ -519,10 +520,13 @@ class GitLabUser(object):
@param username Username of the user
'''
def find_user(self, username):
users = self._gitlab.users.list(search=username, all=True)
for user in users:
if (user.username == username):
return user
return next(
(
user for user in self._gitlab.users.list(search=username, **list_all_kwargs)
if user.username == username
),
None
)
'''
@param username Username of the user

View File

@@ -343,7 +343,7 @@ class HAProxy(object):
if state is not None:
self.execute(Template(cmd).substitute(pxname=backend, svname=svname))
if self.wait:
if self.wait and not (wait_for_status == "DRAIN" and state == "DOWN"):
self.wait_until_status(backend, svname, wait_for_status)
def get_state_for(self, pxname, svname):

View File

@@ -450,7 +450,7 @@ def do_ini(module, filename, section=None, option=None, values=None,
module.fail_json(msg="Unable to create temporary file %s", traceback=traceback.format_exc())
try:
module.atomic_move(tmpfile, target_filename)
module.atomic_move(tmpfile, os.path.abspath(target_filename))
except IOError:
module.ansible.fail_json(msg='Unable to move temporary \
file %s to %s, IOError' % (tmpfile, target_filename), traceback=traceback.format_exc())

View File

@@ -57,13 +57,14 @@ options:
state:
description:
- State to ensure.
- V("absent") and V("disabled") give the same results.
- V("present") and V("enabled") give the same results.
default: "present"
choices: ["absent", "disabled", "enabled", "present"]
type: str
extends_documentation_fragment:
- community.general.ipa.documentation
- community.general.attributes
'''
EXAMPLES = r'''
@@ -160,7 +161,7 @@ def ensure(module, client):
module_hostgroup = get_hostgroup_dict(description=module.params['description'])
changed = False
if state == 'present':
if state in ['present', 'enabled']:
if not ipa_hostgroup:
changed = True
if not module.check_mode:

View File

@@ -150,13 +150,11 @@ EXAMPLES = '''
name: example
certificate: |
-----BEGIN CERTIFICATE-----
h19dUZ2co2fI/ibYiwxWk4aeNE6KWvCaTQOMQ8t6Uo2XKhpL/xnjoAgh1uCQN/69
MG+34+RhUWzCfdZH7T8/qDxJw2kEPKluaYh7KnMsba+5jHjmtzix5QIDAQABo4IB
h19dUZ2co2f...
-----END CERTIFICATE-----
private_key: |
-----BEGIN RSA PRIVATE KEY-----
DBVFTEVDVFJJQ0lURSBERSBGUkFOQ0UxFzAVBgNVBAsMDjAwMDIgNTUyMDgxMzE3
GLlDNMw/uHyME7gHFsqJA7O11VY6O5WQ4IDP3m/s5ZV6s+Nn6Lerz17VZ99
DBVFTEVDVFJ...
-----END RSA PRIVATE KEY-----
password: changeit
dest: /etc/security/keystore.jks
@@ -472,7 +470,7 @@ class JavaKeystore:
if self.keystore_type == 'pkcs12':
# Preserve properties of the destination file, if any.
self.module.atomic_move(keystore_p12_path, self.keystore_path)
self.module.atomic_move(os.path.abspath(keystore_p12_path), os.path.abspath(self.keystore_path))
self.update_permissions()
self.result['changed'] = True
return self.result

View File

@@ -685,7 +685,7 @@ class JenkinsPlugin(object):
# Move the updates file to the right place if we could read it
if tmp_updates_file != updates_file:
self.module.atomic_move(tmp_updates_file, updates_file)
self.module.atomic_move(os.path.abspath(tmp_updates_file), os.path.abspath(updates_file))
# Check if we have the plugin data available
if not data.get('plugins', {}).get(self.params['name']):
@@ -718,7 +718,7 @@ class JenkinsPlugin(object):
details=to_native(e))
# Move the file onto the right place
self.module.atomic_move(tmp_f, f)
self.module.atomic_move(os.path.abspath(tmp_f), os.path.abspath(f))
def uninstall(self):
changed = False

View File

@@ -214,7 +214,7 @@ def run_module(module, tmpdir, kwriteconfig):
if module.params['backup'] and os.path.exists(b_path):
result['backup_file'] = module.backup_local(result['path'])
try:
module.atomic_move(b_tmpfile, b_path)
module.atomic_move(b_tmpfile, os.path.abspath(b_path))
except IOError:
module.ansible.fail_json(msg='Unable to move temporary file %s to %s, IOError' % (tmpfile, result['path']), traceback=traceback.format_exc())

View File

@@ -742,6 +742,12 @@ def normalise_cr(clientrep, remove_ids=False):
if 'attributes' in clientrep:
clientrep['attributes'] = list(sorted(clientrep['attributes']))
if 'defaultClientScopes' in clientrep:
clientrep['defaultClientScopes'] = list(sorted(clientrep['defaultClientScopes']))
if 'optionalClientScopes' in clientrep:
clientrep['optionalClientScopes'] = list(sorted(clientrep['optionalClientScopes']))
if 'redirectUris' in clientrep:
clientrep['redirectUris'] = list(sorted(clientrep['redirectUris']))

View File

@@ -437,7 +437,7 @@ def sanitize(idp):
idpcopy = deepcopy(idp)
if 'config' in idpcopy:
if 'clientSecret' in idpcopy['config']:
idpcopy['clientSecret'] = '**********'
idpcopy['config']['clientSecret'] = '**********'
return idpcopy

View File

@@ -582,6 +582,27 @@ from ansible_collections.community.general.plugins.module_utils.identity.keycloa
from ansible.module_utils.basic import AnsibleModule
def normalise_cr(realmrep):
""" Re-sorts any properties where the order is important so that diff's is minimised and the change detection is more effective.
:param realmrep: the realmrep dict to be sanitized
:return: normalised realmrep dict
"""
# Avoid the dict passed in to be modified
realmrep = realmrep.copy()
if 'enabledEventTypes' in realmrep:
realmrep['enabledEventTypes'] = list(sorted(realmrep['enabledEventTypes']))
if 'otpSupportedApplications' in realmrep:
realmrep['otpSupportedApplications'] = list(sorted(realmrep['otpSupportedApplications']))
if 'supportedLocales' in realmrep:
realmrep['supportedLocales'] = list(sorted(realmrep['supportedLocales']))
return realmrep
def sanitize_cr(realmrep):
""" Removes probably sensitive details from a realm representation.
@@ -595,7 +616,7 @@ def sanitize_cr(realmrep):
if 'saml.signing.private.key' in result['attributes']:
result['attributes'] = result['attributes'].copy()
result['attributes']['saml.signing.private.key'] = '********'
return result
return normalise_cr(result)
def main():
@@ -777,9 +798,11 @@ def main():
result['changed'] = True
if module.check_mode:
# We can only compare the current realm with the proposed updates we have
before_norm = normalise_cr(before_realm)
desired_norm = normalise_cr(desired_realm)
if module._diff:
result['diff'] = dict(before=before_realm_sanitized,
after=sanitize_cr(desired_realm))
result['diff'] = dict(before=sanitize_cr(before_norm),
after=sanitize_cr(desired_norm))
result['changed'] = (before_realm != desired_realm)
module.exit_json(**result)

View File

@@ -712,6 +712,9 @@ def sanitize(comp):
compcopy['config'] = dict((k, v[0]) for k, v in compcopy['config'].items())
if 'bindCredential' in compcopy['config']:
compcopy['config']['bindCredential'] = '**********'
# an empty string is valid for krbPrincipalAttribute but is filtered out in diff
if 'krbPrincipalAttribute' not in compcopy['config']:
compcopy['config']['krbPrincipalAttribute'] = ''
if 'mappers' in compcopy:
for mapper in compcopy['mappers']:
if 'config' in mapper:

View File

@@ -44,6 +44,8 @@ options:
type: str
description:
- The LDAP scope to use.
- V(subordinate) requires the LDAPv3 subordinate feature extension.
- V(children) is equivalent to a "subtree" scope.
filter:
default: '(objectClass=*)'
type: str

View File

@@ -86,8 +86,8 @@ options:
source:
description:
- 'The source for the instance
(for example V({ "type": "image", "mode": "pull", "server": "https://images.linuxcontainers.org",
"protocol": "lxd", "alias": "ubuntu/xenial/amd64" })).'
(for example V({ "type": "image", "mode": "pull", "server": "https://cloud-images.ubuntu.com/releases/",
"protocol": "simplestreams", "alias": "22.04" })).'
- 'See U(https://documentation.ubuntu.com/lxd/en/latest/api/) for complete API documentation.'
- 'Note that C(protocol) accepts two choices: V(lxd) or V(simplestreams).'
required: false
@@ -205,6 +205,9 @@ notes:
- You can copy a file in the created instance to the localhost
with C(command=lxc file pull instance_name/dir/filename filename).
See the first example below.
- linuxcontainers.org has phased out LXC/LXD support with March 2024
(U(https://discuss.linuxcontainers.org/t/important-notice-for-lxd-users-image-server/18479)).
Currently only Ubuntu is still providing images.
'''
EXAMPLES = '''
@@ -220,9 +223,9 @@ EXAMPLES = '''
source:
type: image
mode: pull
server: https://images.linuxcontainers.org
protocol: lxd # if you get a 404, try setting protocol: simplestreams
alias: ubuntu/xenial/amd64
server: https://cloud-images.ubuntu.com/releases/
protocol: simplestreams
alias: "22.04"
profiles: ["default"]
wait_for_ipv4_addresses: true
timeout: 600
@@ -264,6 +267,26 @@ EXAMPLES = '''
wait_for_ipv4_addresses: true
timeout: 600
# An example of creating a ubuntu-minial container
- hosts: localhost
connection: local
tasks:
- name: Create a started container
community.general.lxd_container:
name: mycontainer
ignore_volatile_options: true
state: started
source:
type: image
mode: pull
# Provides Ubuntu minimal images
server: https://cloud-images.ubuntu.com/minimal/releases/
protocol: simplestreams
alias: "22.04"
profiles: ["default"]
wait_for_ipv4_addresses: true
timeout: 600
# An example for creating container in project other than default
- hosts: localhost
connection: local
@@ -278,8 +301,8 @@ EXAMPLES = '''
protocol: simplestreams
type: image
mode: pull
server: https://images.linuxcontainers.org
alias: ubuntu/20.04/cloud
server: https://cloud-images.ubuntu.com/releases/
alias: "22.04"
profiles: ["default"]
wait_for_ipv4_addresses: true
timeout: 600
@@ -347,7 +370,7 @@ EXAMPLES = '''
source:
type: image
mode: pull
alias: ubuntu/xenial/amd64
alias: "22.04"
target: node01
- name: Create container on another node
@@ -358,7 +381,7 @@ EXAMPLES = '''
source:
type: image
mode: pull
alias: ubuntu/xenial/amd64
alias: "22.04"
target: node02
# An example for creating a virtual machine

View File

@@ -207,22 +207,7 @@ EXAMPLES = '''
security_protocol: 'ssl-with-validation-custom-ca'
certificate_authority: |
-----BEGIN CERTIFICATE-----
FAKECERTsdKgAwIBAgIBATANBgkqhkiG9w0BAQsFADAmMSQwIgYDVQQDDBtvcGVu
c2hpZnQtc2lnbmVyQDE1MDMzMjAxMTkwHhcNMTcwODIxMTI1NTE5WhcNMjIwODIw
MTI1NTIwWjAmMSQwIgYDVQQDDBtvcGVuc2hpZnQtc2lnbmVyQDE1MDMzMjAxMTkw
ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDUDnL2tQ2xf/zO7F7hmZ4S
ZuwKENdI4IYuWSxye4i3hPhKg6eKPzGzmDNWkIMDOrDAj1EgVSNPtPwsOL8OWvJm
AaTjr070D7ZGWWnrrDrWEClBx9Rx/6JAM38RT8Pu7c1hXBm0J81KufSLLYiZ/gOw
Znks5v5RUSGcAXvLkBJeATbsbh6fKX0RgQ3fFTvqQaE/r8LxcTN1uehPX1g5AaRa
z/SNDHaFtQlE3XcqAAukyMn4N5kdNcuwF3GlQ+tJnJv8SstPkfQcZbTMUQ7I2KpJ
ajXnMxmBhV5fCN4rb0QUNCrk2/B+EUMBY4MnxIakqNxnN1kvgI7FBbFgrHUe6QvJ
AgMBAAGjIzAhMA4GA1UdDwEB/wQEAwICpDAPBgNVHRMBAf8EBTADAQH/MA0GCSqG
SIb3DQEBCwUAA4IBAQAYRV57LUsqznSLZHA77o9+0fQetIE115DYP7wea42PODJI
QJ+JETEfoCr0+YOMAbVmznP9GH5cMTKEWHExcIpbMBU7nMZp6A3htcJgF2fgPzOA
aTUtzkuVCSrV//mbbYVxoFOc6sR3Br0wBs5+5iz3dBSt7xmgpMzZvqsQl655i051
gGSTIY3z5EJmBZBjwuTjal9mMoPGA4eoTPqlITJDHQ2bdCV2oDbc7zqupGrUfZFA
qzgieEyGzdCSRwjr1/PibA3bpwHyhD9CGD0PRVVTLhw6h6L5kuN1jA20OfzWxf/o
XUsdmRaWiF+l4s6Dcd56SuRp5SGNa2+vP9Of/FX5
FAKECERTsdKgAwI...
-----END CERTIFICATE-----
metrics:
auth_key: 'topSecret'
@@ -233,22 +218,7 @@ EXAMPLES = '''
security_protocol: 'ssl-with-validation-custom-ca'
certificate_authority: |
-----BEGIN CERTIFICATE-----
FAKECERTsdKgAwIBAgIBATANBgkqhkiG9w0BAQsFADAmMSQwIgYDVQQDDBtvcGVu
c2hpZnQtc2lnbmVyQDE1MDMzMjAxMTkwHhcNMTcwODIxMTI1NTE5WhcNMjIwODIw
MTI1NTIwWjAmMSQwIgYDVQQDDBtvcGVuc2hpZnQtc2lnbmVyQDE1MDMzMjAxMTkw
ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDUDnL2tQ2xf/zO7F7hmZ4S
ZuwKENdI4IYuWSxye4i3hPhKg6eKPzGzmDNWkIMDOrDAj1EgVSNPtPwsOL8OWvJm
AaTjr070D7ZGWWnrrDrWEClBx9Rx/6JAM38RT8Pu7c1hXBm0J81KufSLLYiZ/gOw
Znks5v5RUSGcAXvLkBJeATbsbh6fKX0RgQ3fFTvqQaE/r8LxcTN1uehPX1g5AaRa
z/SNDHaFtQlE3XcqAAukyMn4N5kdNcuwF3GlQ+tJnJv8SstPkfQcZbTMUQ7I2KpJ
ajXnMxmBhV5fCN4rb0QUNCrk2/B+EUMBY4MnxIakqNxnN1kvgI7FBbFgrHUe6QvJ
AgMBAAGjIzAhMA4GA1UdDwEB/wQEAwICpDAPBgNVHRMBAf8EBTADAQH/MA0GCSqG
SIb3DQEBCwUAA4IBAQAYRV57LUsqznSLZHA77o9+0fQetIE115DYP7wea42PODJI
QJ+JETEfoCr0+YOMAbVmznP9GH5cMTKEWHExcIpbMBU7nMZp6A3htcJgF2fgPzOA
aTUtzkuVCSrV//mbbYVxoFOc6sR3Br0wBs5+5iz3dBSt7xmgpMzZvqsQl655i051
gGSTIY3z5EJmBZBjwuTjal9mMoPGA4eoTPqlITJDHQ2bdCV2oDbc7zqupGrUfZFA
qzgieEyGzdCSRwjr1/PibA3bpwHyhD9CGD0PRVVTLhw6h6L5kuN1jA20OfzWxf/o
XUsdmRaWiF+l4s6Dcd56SuRp5SGNa2+vP9Of/FX5
FAKECERTsdKgAwI...
-----END CERTIFICATE-----
manageiq_connection:
url: 'https://127.0.0.1:80'
@@ -270,22 +240,7 @@ EXAMPLES = '''
security_protocol: 'ssl-with-validation-custom-ca'
certificate_authority: |
-----BEGIN CERTIFICATE-----
FAKECERTsdKgAwIBAgIBATANBgkqhkiG9w0BAQsFADAmMSQwIgYDVQQDDBtvcGVu
c2hpZnQtc2lnbmVyQDE1MDMzMjAxMTkwHhcNMTcwODIxMTI1NTE5WhcNMjIwODIw
MTI1NTIwWjAmMSQwIgYDVQQDDBtvcGVuc2hpZnQtc2lnbmVyQDE1MDMzMjAxMTkw
ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDUDnL2tQ2xf/zO7F7hmZ4S
ZuwKENdI4IYuWSxye4i3hPhKg6eKPzGzmDNWkIMDOrDAj1EgVSNPtPwsOL8OWvJm
AaTjr070D7ZGWWnrrDrWEClBx9Rx/6JAM38RT8Pu7c1hXBm0J81KufSLLYiZ/gOw
Znks5v5RUSGcAXvLkBJeATbsbh6fKX0RgQ3fFTvqQaE/r8LxcTN1uehPX1g5AaRa
z/SNDHaFtQlE3XcqAAukyMn4N5kdNcuwF3GlQ+tJnJv8SstPkfQcZbTMUQ7I2KpJ
ajXnMxmBhV5fCN4rb0QUNCrk2/B+EUMBY4MnxIakqNxnN1kvgI7FBbFgrHUe6QvJ
AgMBAAGjIzAhMA4GA1UdDwEB/wQEAwICpDAPBgNVHRMBAf8EBTADAQH/MA0GCSqG
SIb3DQEBCwUAA4IBAQAYRV57LUsqznSLZHA77o9+0fQetIE115DYP7wea42PODJI
QJ+JETEfoCr0+YOMAbVmznP9GH5cMTKEWHExcIpbMBU7nMZp6A3htcJgF2fgPzOA
aTUtzkuVCSrV//mbbYVxoFOc6sR3Br0wBs5+5iz3dBSt7xmgpMzZvqsQl655i051
gGSTIY3z5EJmBZBjwuTjal9mMoPGA4eoTPqlITJDHQ2bdCV2oDbc7zqupGrUfZFA
qzgieEyGzdCSRwjr1/PibA3bpwHyhD9CGD0PRVVTLhw6h6L5kuN1jA20OfzWxf/o
XUsdmRaWiF+l4s6Dcd56SuRp5SGNa2+vP9Of/FX5
FAKECERTsdKgAwI...
-----END CERTIFICATE-----
metrics:
auth_key: 'topSecret'
@@ -295,22 +250,7 @@ EXAMPLES = '''
security_protocol: 'ssl-with-validation-custom-ca'
certificate_authority: |
-----BEGIN CERTIFICATE-----
FAKECERTsdKgAwIBAgIBATANBgkqhkiG9w0BAQsFADAmMSQwIgYDVQQDDBtvcGVu
c2hpZnQtc2lnbmVyQDE1MDMzMjAxMTkwHhcNMTcwODIxMTI1NTE5WhcNMjIwODIw
MTI1NTIwWjAmMSQwIgYDVQQDDBtvcGVuc2hpZnQtc2lnbmVyQDE1MDMzMjAxMTkw
ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDUDnL2tQ2xf/zO7F7hmZ4S
ZuwKENdI4IYuWSxye4i3hPhKg6eKPzGzmDNWkIMDOrDAj1EgVSNPtPwsOL8OWvJm
AaTjr070D7ZGWWnrrDrWEClBx9Rx/6JAM38RT8Pu7c1hXBm0J81KufSLLYiZ/gOw
Znks5v5RUSGcAXvLkBJeATbsbh6fKX0RgQ3fFTvqQaE/r8LxcTN1uehPX1g5AaRa
z/SNDHaFtQlE3XcqAAukyMn4N5kdNcuwF3GlQ+tJnJv8SstPkfQcZbTMUQ7I2KpJ
ajXnMxmBhV5fCN4rb0QUNCrk2/B+EUMBY4MnxIakqNxnN1kvgI7FBbFgrHUe6QvJ
AgMBAAGjIzAhMA4GA1UdDwEB/wQEAwICpDAPBgNVHRMBAf8EBTADAQH/MA0GCSqG
SIb3DQEBCwUAA4IBAQAYRV57LUsqznSLZHA77o9+0fQetIE115DYP7wea42PODJI
QJ+JETEfoCr0+YOMAbVmznP9GH5cMTKEWHExcIpbMBU7nMZp6A3htcJgF2fgPzOA
aTUtzkuVCSrV//mbbYVxoFOc6sR3Br0wBs5+5iz3dBSt7xmgpMzZvqsQl655i051
gGSTIY3z5EJmBZBjwuTjal9mMoPGA4eoTPqlITJDHQ2bdCV2oDbc7zqupGrUfZFA
qzgieEyGzdCSRwjr1/PibA3bpwHyhD9CGD0PRVVTLhw6h6L5kuN1jA20OfzWxf/o
XUsdmRaWiF+l4s6Dcd56SuRp5SGNa2+vP9Of/FX5
FAKECERTsdKgAwI...
-----END CERTIFICATE-----
manageiq_connection:
url: 'https://127.0.0.1'
@@ -358,22 +298,7 @@ EXAMPLES = '''
validate_certs: true
certificate_authority: |
-----BEGIN CERTIFICATE-----
FAKECERTsdKgAwIBAgIBATANBgkqhkiG9w0BAQsFADAmMSQwIgYDVQQDDBtvcGVu
c2hpZnQtc2lnbmVyQDE1MDMzMjAxMTkwHhcNMTcwODIxMTI1NTE5WhcNMjIwODIw
MTI1NTIwWjAmMSQwIgYDVQQDDBtvcGVuc2hpZnQtc2lnbmVyQDE1MDMzMjAxMTkw
ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDUDnL2tQ2xf/zO7F7hmZ4S
ZuwKENdI4IYuWSxye4i3hPhKg6eKPzGzmDNWkIMDOrDAj1EgVSNPtPwsOL8OWvJm
AaTjr070D7ZGWWnrrDrWEClBx9Rx/6JAM38RT8Pu7c1hXBm0J81KufSLLYiZ/gOw
Znks5v5RUSGcAXvLkBJeATbsbh6fKX0RgQ3fFTvqQaE/r8LxcTN1uehPX1g5AaRa
z/SNDHaFtQlE3XcqAAukyMn4N5kdNcuwF3GlQ+tJnJv8SstPkfQcZbTMUQ7I2KpJ
ajXnMxmBhV5fCN4rb0QUNCrk2/B+EUMBY4MnxIakqNxnN1kvgI7FBbFgrHUe6QvJ
AgMBAAGjIzAhMA4GA1UdDwEB/wQEAwICpDAPBgNVHRMBAf8EBTADAQH/MA0GCSqG
SIb3DQEBCwUAA4IBAQAYRV57LUsqznSLZHA77o9+0fQetIE115DYP7wea42PODJI
QJ+JETEfoCr0+YOMAbVmznP9GH5cMTKEWHExcIpbMBU7nMZp6A3htcJgF2fgPzOA
aTUtzkuVCSrV//mbbYVxoFOc6sR3Br0wBs5+5iz3dBSt7xmgpMzZvqsQl655i051
gGSTIY3z5EJmBZBjwuTjal9mMoPGA4eoTPqlITJDHQ2bdCV2oDbc7zqupGrUfZFA
qzgieEyGzdCSRwjr1/PibA3bpwHyhD9CGD0PRVVTLhw6h6L5kuN1jA20OfzWxf/o
XUsdmRaWiF+l4s6Dcd56SuRp5SGNa2+vP9Of/FX5
FAKECERTsdKgAwI...
-----END CERTIFICATE-----
metrics:
hostname: 'metrics.example.com'
@@ -383,22 +308,7 @@ EXAMPLES = '''
validate_certs: true
certificate_authority: |
-----BEGIN CERTIFICATE-----
FAKECERTsdKgAwIBAgIBATANBgkqhkiG9w0BAQsFADAmMSQwIgYDVQQDDBtvcGVu
c2hpZnQtc2lnbmVyQDE1MDMzMjAxMTkwHhcNMTcwODIxMTI1NTE5WhcNMjIwODIw
MTI1NTIwWjAmMSQwIgYDVQQDDBtvcGVuc2hpZnQtc2lnbmVyQDE1MDMzMjAxMTkw
ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDUDnL2tQ2xf/zO7F7hmZ4S
ZuwKENdI4IYuWSxye4i3hPhKg6eKPzGzmDNWkIMDOrDAj1EgVSNPtPwsOL8OWvJm
AaTjr070D7ZGWWnrrDrWEClBx9Rx/6JAM38RT8Pu7c1hXBm0J81KufSLLYiZ/gOw
Znks5v5RUSGcAXvLkBJeATbsbh6fKX0RgQ3fFTvqQaE/r8LxcTN1uehPX1g5AaRa
z/SNDHaFtQlE3XcqAAukyMn4N5kdNcuwF3GlQ+tJnJv8SstPkfQcZbTMUQ7I2KpJ
ajXnMxmBhV5fCN4rb0QUNCrk2/B+EUMBY4MnxIakqNxnN1kvgI7FBbFgrHUe6QvJ
AgMBAAGjIzAhMA4GA1UdDwEB/wQEAwICpDAPBgNVHRMBAf8EBTADAQH/MA0GCSqG
SIb3DQEBCwUAA4IBAQAYRV57LUsqznSLZHA77o9+0fQetIE115DYP7wea42PODJI
QJ+JETEfoCr0+YOMAbVmznP9GH5cMTKEWHExcIpbMBU7nMZp6A3htcJgF2fgPzOA
aTUtzkuVCSrV//mbbYVxoFOc6sR3Br0wBs5+5iz3dBSt7xmgpMzZvqsQl655i051
gGSTIY3z5EJmBZBjwuTjal9mMoPGA4eoTPqlITJDHQ2bdCV2oDbc7zqupGrUfZFA
qzgieEyGzdCSRwjr1/PibA3bpwHyhD9CGD0PRVVTLhw6h6L5kuN1jA20OfzWxf/o
XUsdmRaWiF+l4s6Dcd56SuRp5SGNa2+vP9Of/FX5
FAKECERTsdKgAwI...
-----END CERTIFICATE-----
manageiq_connection:
url: 'https://127.0.0.1'
@@ -454,22 +364,7 @@ EXAMPLES = '''
validate_certs: 'true'
certificate_authority: |
-----BEGIN CERTIFICATE-----
FAKECERTsdKgAwIBAgIBATANBgkqhkiG9w0BAQsFADAmMSQwIgYDVQQDDBtvcGVu
c2hpZnQtc2lnbmVyQDE1MDMzMjAxMTkwHhcNMTcwODIxMTI1NTE5WhcNMjIwODIw
MTI1NTIwWjAmMSQwIgYDVQQDDBtvcGVuc2hpZnQtc2lnbmVyQDE1MDMzMjAxMTkw
ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDUDnL2tQ2xf/zO7F7hmZ4S
ZuwKENdI4IYuWSxye4i3hPhKg6eKPzGzmDNWkIMDOrDAj1EgVSNPtPwsOL8OWvJm
AaTjr070D7ZGWWnrrDrWEClBx9Rx/6JAM38RT8Pu7c1hXBm0J81KufSLLYiZ/gOw
Znks5v5RUSGcAXvLkBJeATbsbh6fKX0RgQ3fFTvqQaE/r8LxcTN1uehPX1g5AaRa
z/SNDHaFtQlE3XcqAAukyMn4N5kdNcuwF3GlQ+tJnJv8SstPkfQcZbTMUQ7I2KpJ
ajXnMxmBhV5fCN4rb0QUNCrk2/B+EUMBY4MnxIakqNxnN1kvgI7FBbFgrHUe6QvJ
AgMBAAGjIzAhMA4GA1UdDwEB/wQEAwICpDAPBgNVHRMBAf8EBTADAQH/MA0GCSqG
SIb3DQEBCwUAA4IBAQAYRV57LUsqznSLZHA77o9+0fQetIE115DYP7wea42PODJI
QJ+JETEfoCr0+YOMAbVmznP9GH5cMTKEWHExcIpbMBU7nMZp6A3htcJgF2fgPzOA
aTUtzkuVCSrV//mbbYVxoFOc6sR3Br0wBs5+5iz3dBSt7xmgpMzZvqsQl655i051
gGSTIY3z5EJmBZBjwuTjal9mMoPGA4eoTPqlITJDHQ2bdCV2oDbc7zqupGrUfZFA
qzgieEyGzdCSRwjr1/PibA3bpwHyhD9CGD0PRVVTLhw6h6L5kuN1jA20OfzWxf/o
XUsdmRaWiF+l4s6Dcd56SuRp5SGNa2+vP9Of/FX5
FAKECERTsdKgAwI...
-----END CERTIFICATE-----
ssh_keypair:
hostname: director.example.com
@@ -493,22 +388,7 @@ EXAMPLES = '''
validate_certs: 'true'
certificate_authority: |
-----BEGIN CERTIFICATE-----
FAKECERTsdKgAwIBAgIBATANBgkqhkiG9w0BAQsFADAmMSQwIgYDVQQDDBtvcGVu
c2hpZnQtc2lnbmVyQDE1MDMzMjAxMTkwHhcNMTcwODIxMTI1NTE5WhcNMjIwODIw
MTI1NTIwWjAmMSQwIgYDVQQDDBtvcGVuc2hpZnQtc2lnbmVyQDE1MDMzMjAxMTkw
ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDUDnL2tQ2xf/zO7F7hmZ4S
ZuwKENdI4IYuWSxye4i3hPhKg6eKPzGzmDNWkIMDOrDAj1EgVSNPtPwsOL8OWvJm
AaTjr070D7ZGWWnrrDrWEClBx9Rx/6JAM38RT8Pu7c1hXBm0J81KufSLLYiZ/gOw
Znks5v5RUSGcAXvLkBJeATbsbh6fKX0RgQ3fFTvqQaE/r8LxcTN1uehPX1g5AaRa
z/SNDHaFtQlE3XcqAAukyMn4N5kdNcuwF3GlQ+tJnJv8SstPkfQcZbTMUQ7I2KpJ
ajXnMxmBhV5fCN4rb0QUNCrk2/B+EUMBY4MnxIakqNxnN1kvgI7FBbFgrHUe6QvJ
AgMBAAGjIzAhMA4GA1UdDwEB/wQEAwICpDAPBgNVHRMBAf8EBTADAQH/MA0GCSqG
SIb3DQEBCwUAA4IBAQAYRV57LUsqznSLZHA77o9+0fQetIE115DYP7wea42PODJI
QJ+JETEfoCr0+YOMAbVmznP9GH5cMTKEWHExcIpbMBU7nMZp6A3htcJgF2fgPzOA
aTUtzkuVCSrV//mbbYVxoFOc6sR3Br0wBs5+5iz3dBSt7xmgpMzZvqsQl655i051
gGSTIY3z5EJmBZBjwuTjal9mMoPGA4eoTPqlITJDHQ2bdCV2oDbc7zqupGrUfZFA
qzgieEyGzdCSRwjr1/PibA3bpwHyhD9CGD0PRVVTLhw6h6L5kuN1jA20OfzWxf/o
XUsdmRaWiF+l4s6Dcd56SuRp5SGNa2+vP9Of/FX5
FAKECERTsdKgAwI...
-----END CERTIFICATE-----
metrics:
role: amqp

View File

@@ -163,8 +163,9 @@ class Modprobe(object):
def create_module_file(self):
file_path = os.path.join(MODULES_LOAD_LOCATION,
self.name + '.conf')
with open(file_path, 'w') as file:
file.write(self.name + '\n')
if not self.check_mode:
with open(file_path, 'w') as file:
file.write(self.name + '\n')
@property
def module_options_file_content(self):
@@ -175,8 +176,9 @@ class Modprobe(object):
def create_module_options_file(self):
new_file_path = os.path.join(PARAMETERS_FILES_LOCATION,
self.name + '.conf')
with open(new_file_path, 'w') as file:
file.write(self.module_options_file_content)
if not self.check_mode:
with open(new_file_path, 'w') as file:
file.write(self.module_options_file_content)
def disable_old_params(self):
@@ -190,7 +192,7 @@ class Modprobe(object):
file_content[index] = '#' + line
content_changed = True
if content_changed:
if not self.check_mode and content_changed:
with open(modprobe_file, 'w') as file:
file.write('\n'.join(file_content))
@@ -206,7 +208,7 @@ class Modprobe(object):
file_content[index] = '#' + line
content_changed = True
if content_changed:
if not self.check_mode and content_changed:
with open(module_file, 'w') as file:
file.write('\n'.join(file_content))

View File

@@ -1,7 +1,7 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
#
# Copyright (c) 2021, Georg Gadinger <nilsding@nilsding.org>
# Copyright (c) 2021, Jyrki Gadinger <nilsding@nilsding.org>
# 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
@@ -60,7 +60,7 @@ extends_documentation_fragment:
- community.general.attributes
author:
- "Georg Gadinger (@nilsding)"
- "Jyrki Gadinger (@nilsding)"
'''
EXAMPLES = '''

View File

@@ -339,7 +339,7 @@ def main():
pass
# Move tempfile to newfile
module.atomic_move(nf.name, limits_conf)
module.atomic_move(os.path.abspath(nf.name), os.path.abspath(limits_conf))
try:
nf.close()

View File

@@ -27,6 +27,7 @@ options:
type: list
elements: path
requirements:
- pip >= 20.3b1 (necessary for the C(--format) option)
- The requested pip executables must be installed on the target.
author:
- Matthew Jones (@matburt)

View File

@@ -116,6 +116,15 @@ options:
- Whether to print file changes details
type: bool
default: false
environment_lang:
description:
- The lang environment to use when running the puppet agent.
- The default value, V(C), is supported on every system, but can lead to encoding errors if UTF-8 is used in the output
- Use V(C.UTF-8) or V(en_US.UTF-8) or similar UTF-8 supporting locales in case of problems. You need to make sure
the selected locale is supported on the system the puppet agent runs on.
type: str
default: C
version_added: 8.6.0
requirements:
- puppet
author:
@@ -208,6 +217,7 @@ def main():
debug=dict(type='bool', default=False),
verbose=dict(type='bool', default=False),
use_srv_records=dict(type='bool'),
environment_lang=dict(type='str', default='C'),
),
supports_check_mode=True,
mutually_exclusive=[

View File

@@ -93,7 +93,7 @@ from ansible.module_utils.urls import fetch_url
def ring_check(module, riak_admin_bin):
cmd = '%s ringready' % riak_admin_bin
cmd = riak_admin_bin + ['ringready']
rc, out, err = module.run_command(cmd)
if rc == 0 and 'TRUE All nodes agree on the ring' in out:
return True
@@ -127,6 +127,7 @@ def main():
# make sure riak commands are on the path
riak_bin = module.get_bin_path('riak')
riak_admin_bin = module.get_bin_path('riak-admin')
riak_admin_bin = [riak_admin_bin] if riak_admin_bin is not None else [riak_bin, 'admin']
timeout = time.time() + 120
while True:
@@ -164,7 +165,7 @@ def main():
module.fail_json(msg=out)
elif command == 'kv_test':
cmd = '%s test' % riak_admin_bin
cmd = riak_admin_bin + ['test']
rc, out, err = module.run_command(cmd)
if rc == 0:
result['kv_test'] = out
@@ -175,7 +176,7 @@ def main():
if nodes.count(node_name) == 1 and len(nodes) > 1:
result['join'] = 'Node is already in cluster or staged to be in cluster.'
else:
cmd = '%s cluster join %s' % (riak_admin_bin, target_node)
cmd = riak_admin_bin + ['cluster', 'join', target_node]
rc, out, err = module.run_command(cmd)
if rc == 0:
result['join'] = out
@@ -184,7 +185,7 @@ def main():
module.fail_json(msg=out)
elif command == 'plan':
cmd = '%s cluster plan' % riak_admin_bin
cmd = riak_admin_bin + ['cluster', 'plan']
rc, out, err = module.run_command(cmd)
if rc == 0:
result['plan'] = out
@@ -194,7 +195,7 @@ def main():
module.fail_json(msg=out)
elif command == 'commit':
cmd = '%s cluster commit' % riak_admin_bin
cmd = riak_admin_bin + ['cluster', 'commit']
rc, out, err = module.run_command(cmd)
if rc == 0:
result['commit'] = out
@@ -206,7 +207,7 @@ def main():
if wait_for_handoffs:
timeout = time.time() + wait_for_handoffs
while True:
cmd = '%s transfers' % riak_admin_bin
cmd = riak_admin_bin + ['transfers']
rc, out, err = module.run_command(cmd)
if 'No transfers active' in out:
result['handoffs'] = 'No transfers active.'
@@ -216,7 +217,7 @@ def main():
module.fail_json(msg='Timeout waiting for handoffs.')
if wait_for_service:
cmd = [riak_admin_bin, 'wait_for_service', 'riak_%s' % wait_for_service, node_name]
cmd = riak_admin_bin + ['wait_for_service', 'riak_%s' % wait_for_service, node_name]
rc, out, err = module.run_command(cmd)
result['service'] = out

View File

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

View File

@@ -436,11 +436,16 @@ def is_attribute(tree, xpath, namespaces):
""" Test if a given xpath matches and that match is an attribute
An xpath attribute search will only match one item"""
# lxml 5.1.1 removed etree._ElementStringResult, so we can no longer simply assume it's there
# (https://github.com/lxml/lxml/commit/eba79343d0e7ad1ce40169f60460cdd4caa29eb3)
ElementStringResult = getattr(etree, '_ElementStringResult', None)
if xpath_matches(tree, xpath, namespaces):
match = tree.xpath(xpath, namespaces=namespaces)
if isinstance(match[0], etree._ElementStringResult):
if isinstance(match[0], etree._ElementUnicodeResult):
return True
elif isinstance(match[0], etree._ElementUnicodeResult):
elif ElementStringResult is not None and isinstance(match[0], ElementStringResult):
return True
return False

View File

@@ -0,0 +1,41 @@
# Copyright (c) 2023, 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
import re
from ansible.module_utils.six import binary_type, text_type
from ansible.module_utils.common._collections_compat import Mapping, Set
from ansible.module_utils.common.collections import is_sequence
from ansible.utils.unsafe_proxy import (
AnsibleUnsafe,
wrap_var as _make_unsafe,
)
_RE_TEMPLATE_CHARS = re.compile(u'[{}]')
_RE_TEMPLATE_CHARS_BYTES = re.compile(b'[{}]')
def make_unsafe(value):
if value is None or isinstance(value, AnsibleUnsafe):
return value
if isinstance(value, Mapping):
return dict((make_unsafe(key), make_unsafe(val)) for key, val in value.items())
elif isinstance(value, Set):
return set(make_unsafe(elt) for elt in value)
elif is_sequence(value):
return type(value)(make_unsafe(elt) for elt in value)
elif isinstance(value, binary_type):
if _RE_TEMPLATE_CHARS_BYTES.search(value):
value = _make_unsafe(value)
return value
elif isinstance(value, text_type):
if _RE_TEMPLATE_CHARS.search(value):
value = _make_unsafe(value)
return value
return value

View File

@@ -6,7 +6,8 @@
- name: bail out for non-supported platforms
meta: end_play
when:
- (ansible_os_family != "RedHat" or ansible_distribution_major_version|int < 7)
- (ansible_os_family != "RedHat" or ansible_distribution_major_version|int < 8) # TODO: bump back to 7
- (ansible_distribution != 'CentOS' or ansible_distribution_major_version|int < 8) # TODO: remove
- ansible_os_family != "Debian"
- name: install perl development package for Red Hat family

View File

@@ -43,6 +43,11 @@
chdir: "{{ tmp_django_root.path }}/startproj"
cmd: "{{ tmp_django_root.path }}/venv/bin/django-admin startapp app1"
- name: Make manage.py executable
file:
path: "{{ tmp_django_root.path }}/startproj/test_django_manage_1/manage.py"
mode: "0755"
- name: Check
community.general.django_manage:
project_path: "{{ tmp_django_root.path }}/startproj/test_django_manage_1"

View File

@@ -10,7 +10,8 @@
- name: Bail out if not supported
ansible.builtin.meta: end_play
when: ansible_distribution in ('Alpine', 'openSUSE Leap', 'CentOS', 'Fedora')
# TODO: remove Archlinux from the list
when: ansible_distribution in ('Alpine', 'openSUSE Leap', 'CentOS', 'Fedora', 'Archlinux')
- name: Remove ejabberd

View File

@@ -2,5 +2,4 @@
# 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
cloud/gandi
unsupported

View File

@@ -62,6 +62,7 @@
- result.existing == {}
- result.end_state.alias == "{{ idp }}"
- result.end_state.mappers != []
- result.end_state.config.client_secret = "**********"
- name: Update existing identity provider (no change)
community.general.keycloak_identity_provider:

View File

@@ -6,4 +6,3 @@ azp/posix/2
destructive
skip/python2
skip/python3.5
disabled # TODO

View File

@@ -217,76 +217,76 @@
- "'tox' not in uninstall_tox_again.application"
##############################################################################
- name: ensure application ansible-lint is uninstalled
- name: ensure application pylint is uninstalled
community.general.pipx:
name: ansible-lint
name: pylint
state: absent
- name: install application ansible-lint
- name: install application pylint
community.general.pipx:
name: ansible-lint
register: install_ansible_lint
name: pylint
register: install_pylint
- name: inject packages
community.general.pipx:
state: inject
name: ansible-lint
name: pylint
inject_packages:
- licenses
register: inject_pkgs_ansible_lint
register: inject_pkgs_pylint
- name: inject packages with apps
community.general.pipx:
state: inject
name: ansible-lint
name: pylint
inject_packages:
- black
install_apps: true
register: inject_pkgs_apps_ansible_lint
register: inject_pkgs_apps_pylint
- name: cleanup ansible-lint
- name: cleanup pylint
community.general.pipx:
state: absent
name: ansible-lint
register: uninstall_ansible_lint
name: pylint
register: uninstall_pylint
- name: check assertions inject_packages
assert:
that:
- install_ansible_lint is changed
- inject_pkgs_ansible_lint is changed
- '"ansible-lint" in inject_pkgs_ansible_lint.application'
- '"licenses" in inject_pkgs_ansible_lint.application["ansible-lint"]["injected"]'
- inject_pkgs_apps_ansible_lint is changed
- '"ansible-lint" in inject_pkgs_apps_ansible_lint.application'
- '"black" in inject_pkgs_apps_ansible_lint.application["ansible-lint"]["injected"]'
- uninstall_ansible_lint is changed
- install_pylint is changed
- inject_pkgs_pylint is changed
- '"pylint" in inject_pkgs_pylint.application'
- '"licenses" in inject_pkgs_pylint.application["pylint"]["injected"]'
- inject_pkgs_apps_pylint is changed
- '"pylint" in inject_pkgs_apps_pylint.application'
- '"black" in inject_pkgs_apps_pylint.application["pylint"]["injected"]'
- uninstall_pylint is changed
##############################################################################
- name: install jupyter - not working smoothly in freebsd
when: ansible_system != 'FreeBSD'
# when: ansible_system != 'FreeBSD'
block:
- name: ensure application jupyter is uninstalled
- name: ensure application mkdocs is uninstalled
community.general.pipx:
name: jupyter
name: mkdocs
state: absent
- name: install application jupyter
- name: install application mkdocs
community.general.pipx:
name: jupyter
name: mkdocs
install_deps: true
register: install_jupyter
register: install_mkdocs
- name: cleanup jupyter
- name: cleanup mkdocs
community.general.pipx:
state: absent
name: jupyter
name: mkdocs
- name: check assertions
assert:
that:
- install_jupyter is changed
- '"ipython" in install_jupyter.stdout'
- install_mkdocs is changed
- '"markdown_py" in install_mkdocs.stdout'
##############################################################################
- name: ensure /opt/pipx

View File

@@ -6,4 +6,3 @@ azp/posix/3
destructive
skip/python2
skip/python3.5
disabled # TODO

View File

@@ -68,7 +68,7 @@
apps:
- name: tox
source: tox==3.24.0
- name: ansible-lint
- name: pylint
inject_packages:
- licenses
@@ -81,7 +81,7 @@
- name: install applications
community.general.pipx:
name: "{{ item.name }}"
source: "{{ item.source|default(omit) }}"
source: "{{ item.source | default(omit) }}"
loop: "{{ apps }}"
- name: inject packages
@@ -102,9 +102,9 @@
include_injected: true
register: info2_all_deps
- name: retrieve application ansible-lint
- name: retrieve application pylint
community.general.pipx_info:
name: ansible-lint
name: pylint
include_deps: true
include_injected: true
register: info2_lint
@@ -131,10 +131,10 @@
- "'injected' in all_apps_deps[0]"
- "'licenses' in all_apps_deps[0].injected"
- lint|length == 1
- lint | length == 1
- all_apps_deps|length == 2
- lint[0] == all_apps_deps[0]
vars:
all_apps: "{{ info2_all.application|sort(attribute='name') }}"
all_apps_deps: "{{ info2_all_deps.application|sort(attribute='name') }}"
lint: "{{ info2_lint.application|sort(attribute='name') }}"
all_apps_deps: "{{ info2_all_deps.application | sort(attribute='name') }}"
lint: "{{ info2_lint.application | sort(attribute='name') }}"

View File

@@ -26,6 +26,12 @@
cacheable: true
when: ansible_os_family == "Archlinux"
- shell:
cmd: |
sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/*.repo
sed -i 's%#baseurl=http://mirror.centos.org/%baseurl=https://vault.centos.org/%g' /etc/yum.repos.d/*.repo
when: ansible_distribution in 'CentOS' and ansible_distribution_major_version == '7'
- shell:
cmd: |
sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-Linux-*.repo

View File

@@ -13,12 +13,10 @@
block:
- name: Include test
ansible.builtin.include_tasks: test.yml
# TODO: Find better package to install from a channel - microk8s installation takes multiple minutes, and even removal takes one minute!
# - name: Include test_channel
# ansible.builtin.include_tasks: test_channel.yml
# TODO: Find bettter package to download and install from sources - cider 1.6.0 takes over 35 seconds to install
# - name: Include test_dangerous
# ansible.builtin.include_tasks: test_dangerous.yml
- name: Include test_channel
ansible.builtin.include_tasks: test_channel.yml
- name: Include test_dangerous
ansible.builtin.include_tasks: test_dangerous.yml
- name: Include test_3dash
ansible.builtin.include_tasks: test_3dash.yml
- name: Include test_empty_list

View File

@@ -5,47 +5,44 @@
# NOTE This is currently disabled for performance reasons!
- name: Make sure package is not installed (microk8s)
- name: Make sure package is not installed (wisdom)
community.general.snap:
name: microk8s
name: wisdom
state: absent
# Test for https://github.com/ansible-collections/community.general/issues/1606
- name: Install package (microk8s)
- name: Install package (wisdom)
community.general.snap:
name: microk8s
classic: true
name: wisdom
state: present
register: install_microk8s
register: install_wisdom
- name: Install package with channel (microk8s)
- name: Install package with channel (wisdom)
community.general.snap:
name: microk8s
classic: true
channel: 1.20/stable
name: wisdom
state: present
register: install_microk8s_chan
channel: latest/edge
register: install_wisdom_chan
- name: Install package with channel (microk8s) again
- name: Install package with channel (wisdom) again
community.general.snap:
name: microk8s
classic: true
channel: 1.20/stable
name: wisdom
state: present
register: install_microk8s_chan_again
channel: latest/edge
register: install_wisdom_chan_again
- name: Remove package (microk8s)
- name: Remove package (wisdom)
community.general.snap:
name: microk8s
name: wisdom
state: absent
register: remove_microk8s
register: remove_wisdom
- assert:
that:
- install_microk8s is changed
- install_microk8s_chan is changed
- install_microk8s_chan_again is not changed
- remove_microk8s is changed
- install_wisdom is changed
- install_wisdom_chan is changed
- install_wisdom_chan_again is not changed
- remove_wisdom is changed
- name: Install package (shellcheck)
community.general.snap:

View File

@@ -5,43 +5,48 @@
# NOTE This is currently disabled for performance reasons!
- name: Make sure package is not installed (cider)
- name: Make sure package is not installed (bpytop)
community.general.snap:
name: cider
name: bpytop
state: absent
- name: Download cider snap
ansible.builtin.get_url:
url: https://github.com/ciderapp/cider-releases/releases/download/v1.6.0/cider_1.6.0_amd64.snap
dest: "{{ remote_tmp_dir }}/cider_1.6.0_amd64.snap"
mode: "0644"
- name: Download bpytop snap
ansible.builtin.command:
cmd: snap download bpytop
chdir: "{{ remote_tmp_dir }}"
register: bpytop_download
# Test for https://github.com/ansible-collections/community.general/issues/5715
- name: Install package from file (check)
community.general.snap:
name: "{{ remote_tmp_dir }}/cider_1.6.0_amd64.snap"
dangerous: true
state: present
check_mode: true
register: install_dangerous_check
- name: Test block
vars:
snap_file: "{{ (bpytop_download.stdout_lines[-1] | split(' '))[-1] }}"
snap_path: "{{ remote_tmp_dir }}/{{ snap_file }}"
block:
# Test for https://github.com/ansible-collections/community.general/issues/5715
- name: Install package from file (check)
community.general.snap:
name: "{{ snap_path }}"
dangerous: true
state: present
check_mode: true
register: install_dangerous_check
- name: Install package from file
community.general.snap:
name: "{{ remote_tmp_dir }}/cider_1.6.0_amd64.snap"
dangerous: true
state: present
register: install_dangerous
- name: Install package from file
community.general.snap:
name: "{{ snap_path }}"
dangerous: true
state: present
register: install_dangerous
- name: Install package from file
community.general.snap:
name: "{{ remote_tmp_dir }}/cider_1.6.0_amd64.snap"
dangerous: true
state: present
register: install_dangerous_idempot
- name: Install package from file (again)
community.general.snap:
name: "{{ snap_path }}"
dangerous: true
state: present
register: install_dangerous_idempot
- name: Remove package
community.general.snap:
name: cider
name: bpytop
state: absent
register: remove_dangerous

View File

@@ -7,3 +7,4 @@ destructive
skip/aix
skip/osx
skip/macos
skip/rhel7.9 # TODO: '/bin/timedatectl set-local-rtc no' fails with 'Failed to set local RTC: Failed to set RTC to local/UTC: Input/output error'

View File

@@ -60,6 +60,14 @@
state: present
when: ansible_distribution == 'Alpine'
- name: make sure hwclock is installed in Ubuntu 24.04
package:
name: util-linux-extra
state: present
when:
- ansible_distribution == 'Ubuntu'
- ansible_facts.distribution_major_version is version('24', '>=')
- name: make sure the dbus service is started under systemd
systemd:
name: dbus

View File

@@ -1,4 +1,5 @@
.azure-pipelines/scripts/publish-codecov.py replace-urlopen
plugins/callback/yaml.py validate-modules:invalid-documentation
plugins/lookup/etcd.py validate-modules:invalid-documentation
plugins/lookup/etcd3.py validate-modules:invalid-documentation
plugins/modules/consul.py validate-modules:doc-missing-type

View File

@@ -1,4 +1,5 @@
.azure-pipelines/scripts/publish-codecov.py replace-urlopen
plugins/callback/yaml.py validate-modules:invalid-documentation
plugins/lookup/etcd.py validate-modules:invalid-documentation
plugins/lookup/etcd3.py validate-modules:invalid-documentation
plugins/modules/consul.py validate-modules:doc-missing-type

View File

@@ -7,7 +7,7 @@ from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
from ansible_collections.community.general.plugins.modules.monitoring.datadog import datadog_downtime
from ansible_collections.community.general.plugins.modules import datadog_downtime
from ansible_collections.community.general.tests.unit.compat.mock import MagicMock, patch
from ansible_collections.community.general.tests.unit.plugins.modules.utils import (
AnsibleExitJson, AnsibleFailJson, ModuleTestCase, set_module_args
@@ -36,7 +36,7 @@ class TestDatadogDowntime(ModuleTestCase):
set_module_args({})
self.module.main()
@patch("ansible_collections.community.general.plugins.modules.monitoring.datadog.datadog_downtime.DowntimesApi")
@patch("ansible_collections.community.general.plugins.modules.datadog_downtime.DowntimesApi")
def test_create_downtime_when_no_id(self, downtimes_api_mock):
set_module_args({
"monitor_tags": ["foo:bar"],
@@ -60,10 +60,11 @@ class TestDatadogDowntime(ModuleTestCase):
downtime.end = 2222
downtime.timezone = "UTC"
downtime.recurrence = DowntimeRecurrence(
rrule="rrule"
rrule="rrule",
type="rrule"
)
create_downtime_mock = MagicMock(return_value=Downtime(id=12345))
create_downtime_mock = MagicMock(return_value=self.__downtime_with_id(12345))
downtimes_api_mock.return_value = MagicMock(create_downtime=create_downtime_mock)
with self.assertRaises(AnsibleExitJson) as result:
self.module.main()
@@ -71,7 +72,7 @@ class TestDatadogDowntime(ModuleTestCase):
self.assertEqual(result.exception.args[0]['downtime']['id'], 12345)
create_downtime_mock.assert_called_once_with(downtime)
@patch("ansible_collections.community.general.plugins.modules.monitoring.datadog.datadog_downtime.DowntimesApi")
@patch("ansible_collections.community.general.plugins.modules.datadog_downtime.DowntimesApi")
def test_create_downtime_when_id_and_disabled(self, downtimes_api_mock):
set_module_args({
"id": 1212,
@@ -96,11 +97,16 @@ class TestDatadogDowntime(ModuleTestCase):
downtime.end = 2222
downtime.timezone = "UTC"
downtime.recurrence = DowntimeRecurrence(
rrule="rrule"
rrule="rrule",
type="rrule"
)
create_downtime_mock = MagicMock(return_value=Downtime(id=12345))
get_downtime_mock = MagicMock(return_value=Downtime(id=1212, disabled=True))
disabled_downtime = Downtime()
disabled_downtime.disabled = True
disabled_downtime.id = 1212
create_downtime_mock = MagicMock(return_value=self.__downtime_with_id(12345))
get_downtime_mock = MagicMock(return_value=disabled_downtime)
downtimes_api_mock.return_value = MagicMock(
create_downtime=create_downtime_mock, get_downtime=get_downtime_mock
)
@@ -111,7 +117,7 @@ class TestDatadogDowntime(ModuleTestCase):
create_downtime_mock.assert_called_once_with(downtime)
get_downtime_mock.assert_called_once_with(1212)
@patch("ansible_collections.community.general.plugins.modules.monitoring.datadog.datadog_downtime.DowntimesApi")
@patch("ansible_collections.community.general.plugins.modules.datadog_downtime.DowntimesApi")
def test_update_downtime_when_not_disabled(self, downtimes_api_mock):
set_module_args({
"id": 1212,
@@ -136,11 +142,16 @@ class TestDatadogDowntime(ModuleTestCase):
downtime.end = 2222
downtime.timezone = "UTC"
downtime.recurrence = DowntimeRecurrence(
rrule="rrule"
rrule="rrule",
type="rrule"
)
update_downtime_mock = MagicMock(return_value=Downtime(id=1212))
get_downtime_mock = MagicMock(return_value=Downtime(id=1212, disabled=False))
enabled_downtime = Downtime()
enabled_downtime.disabled = False
enabled_downtime.id = 1212
update_downtime_mock = MagicMock(return_value=self.__downtime_with_id(1212))
get_downtime_mock = MagicMock(return_value=enabled_downtime)
downtimes_api_mock.return_value = MagicMock(
update_downtime=update_downtime_mock, get_downtime=get_downtime_mock
)
@@ -151,7 +162,7 @@ class TestDatadogDowntime(ModuleTestCase):
update_downtime_mock.assert_called_once_with(1212, downtime)
get_downtime_mock.assert_called_once_with(1212)
@patch("ansible_collections.community.general.plugins.modules.monitoring.datadog.datadog_downtime.DowntimesApi")
@patch("ansible_collections.community.general.plugins.modules.datadog_downtime.DowntimesApi")
def test_update_downtime_no_change(self, downtimes_api_mock):
set_module_args({
"id": 1212,
@@ -176,7 +187,8 @@ class TestDatadogDowntime(ModuleTestCase):
downtime.end = 2222
downtime.timezone = "UTC"
downtime.recurrence = DowntimeRecurrence(
rrule="rrule"
rrule="rrule",
type="rrule"
)
downtime_get = Downtime()
@@ -205,7 +217,7 @@ class TestDatadogDowntime(ModuleTestCase):
update_downtime_mock.assert_called_once_with(1212, downtime)
get_downtime_mock.assert_called_once_with(1212)
@patch("ansible_collections.community.general.plugins.modules.monitoring.datadog.datadog_downtime.DowntimesApi")
@patch("ansible_collections.community.general.plugins.modules.datadog_downtime.DowntimesApi")
def test_delete_downtime(self, downtimes_api_mock):
set_module_args({
"id": 1212,
@@ -215,12 +227,16 @@ class TestDatadogDowntime(ModuleTestCase):
})
cancel_downtime_mock = MagicMock()
get_downtime_mock = MagicMock(return_value=Downtime(id=1212))
downtimes_api_mock.return_value = MagicMock(
get_downtime=get_downtime_mock,
get_downtime=self.__downtime_with_id,
cancel_downtime=cancel_downtime_mock
)
with self.assertRaises(AnsibleExitJson) as result:
self.module.main()
self.assertTrue(result.exception.args[0]['changed'])
cancel_downtime_mock.assert_called_once_with(1212)
def __downtime_with_id(self, id):
downtime = Downtime()
downtime.id = id
return downtime

View File

@@ -0,0 +1,133 @@
# -*- coding: utf-8 -*-
# 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
# Make coding more python3-ish
from __future__ import absolute_import, division, print_function
__metaclass__ = type
import pytest
from ansible.utils.unsafe_proxy import AnsibleUnsafe
from ansible_collections.community.general.plugins.plugin_utils.unsafe import (
make_unsafe,
)
TEST_MAKE_UNSAFE = [
(
u'text',
[],
[
(),
],
),
(
u'{{text}}',
[
(),
],
[],
),
(
b'text',
[],
[
(),
],
),
(
b'{{text}}',
[
(),
],
[],
),
(
{
'skey': 'value',
'ukey': '{{value}}',
1: [
'value',
'{{value}}',
{
1.0: '{{value}}',
2.0: 'value',
},
],
},
[
('ukey', ),
(1, 1),
(1, 2, 1.0),
],
[
('skey', ),
(1, 0),
(1, 2, 2.0),
],
),
(
['value', '{{value}}'],
[
(1, ),
],
[
(0, ),
],
),
]
@pytest.mark.parametrize("value, check_unsafe_paths, check_safe_paths", TEST_MAKE_UNSAFE)
def test_make_unsafe(value, check_unsafe_paths, check_safe_paths):
unsafe_value = make_unsafe(value)
assert unsafe_value == value
for check_path in check_unsafe_paths:
obj = unsafe_value
for elt in check_path:
obj = obj[elt]
assert isinstance(obj, AnsibleUnsafe)
for check_path in check_safe_paths:
obj = unsafe_value
for elt in check_path:
obj = obj[elt]
assert not isinstance(obj, AnsibleUnsafe)
def test_make_unsafe_dict_key():
value = {
b'test': 1,
u'test': 2,
}
unsafe_value = make_unsafe(value)
assert unsafe_value == value
for obj in unsafe_value:
assert not isinstance(obj, AnsibleUnsafe)
value = {
b'{{test}}': 1,
u'{{test}}': 2,
}
unsafe_value = make_unsafe(value)
assert unsafe_value == value
for obj in unsafe_value:
assert isinstance(obj, AnsibleUnsafe)
def test_make_unsafe_set():
value = set([b'test', u'test'])
unsafe_value = make_unsafe(value)
assert unsafe_value == value
for obj in unsafe_value:
assert not isinstance(obj, AnsibleUnsafe)
value = set([b'{{test}}', u'{{test}}'])
unsafe_value = make_unsafe(value)
assert unsafe_value == value
for obj in unsafe_value:
assert isinstance(obj, AnsibleUnsafe)

View File

@@ -1 +0,0 @@
remote.sh

View File

@@ -1 +0,0 @@
remote.sh

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