1
0
Fork 0
mirror of https://github.com/ansible-collections/community.general.git synced 2026-06-12 11:05:38 +00:00
Commit graph

2480 commits

Author SHA1 Message Date
patchback[bot]
eed2e1d2ac
[PR #12124/b799c6f5 backport][stable-12] redfish_config: fix KeyError: 'ret' when SetManagerNic cannot find a matching NIC (#12173)
redfish_config: fix `KeyError: 'ret'` when `SetManagerNic` cannot find a matching NIC (#12124)

* fix(redfish_config): return proper error dict when manager NIC not found

get_manager_ethernet_uri() returned an empty dict {} when no matching NIC
was found, causing a KeyError on 'ret' in main(). Now returns a consistent
{"ret": False, "msg": ...} like all other error paths in the function.

Fixes #5892

* feat(changelog): add fragment for PR 12124

(cherry picked from commit b799c6f579)

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2026-06-02 21:18:06 +02:00
patchback[bot]
6da3c81889
[PR #12168/1e3da48d backport][stable-12] portage: include msg in depclean failure fail_json (#12174)
portage: include msg in depclean failure fail_json (#12168)

cleanup_packages() called module.fail_json(cmd=, rc=, stdout=, stderr=)
without the mandatory msg= argument. When the underlying emerge --depclean
exited non-zero, AnsibleModule.fail_json() itself crashed with
"AnsibleModule.fail_json() missing 1 required positional argument: 'msg'"
before the real failure could reach the controller, leaving users with no
diagnostic about why depclean actually failed.

Same wording style as the sibling install_packages() failure branch
("Packages not installed.").

(cherry picked from commit 1e3da48d70)

Co-authored-by: Yoann Gauthier-Colin <yoann@gwerlas.net>
2026-06-02 21:17:55 +02:00
Felix Fontein
141a273d1f Prepare 12.6.2. 2026-05-31 17:59:33 +02:00
patchback[bot]
a58bb6af00
[PR #12123/49ca175f backport][stable-12] htpasswd: fix hash_scheme aliases and Apache-compatible bcrypt (#12155)
htpasswd: fix `hash_scheme` aliases and Apache-compatible bcrypt (#12123)

* fix(htpasswd): support HtpasswdFile aliases and Apache-compatible bcrypt

CryptContext does not recognise HtpasswdFile alias names such as
portable, portable_apache_24, host_apache_24, causing a KeyError.
In addition, building a CryptContext for bcrypt produced $2b$ hashes
that Apache rejects (it only accepts $2y$/$2a$).

Use htpasswd_context for schemes it already supports, fall back to
htpasswd_context on KeyError for aliases, and import CryptContext
from module_utils/_crypt.py instead of passlib directly.

Fixes #6135



* feat(changelog): add fragment for PR 12123



* fix(_crypt): silence DeprecationWarning when importing stdlib crypt

On Python 3.11/3.12, `import crypt` emits a DeprecationWarning that
ansible-test sanity --test import treats as an error. Suppress it since
the import is an intentional fallback when passlib is not available.



* fix(htpasswd): fix sanity ignores and bcrypt version constraint

- Revert _crypt.py DeprecationWarning suppression; add sanity ignore
  entries for htpasswd.py import-3.11/3.12 instead (mirrors existing
  entries for _crypt.py itself)
- Pin bcrypt<4.2 in integration tests: bcrypt 4.2 removed __about__
  which passlib 1.7.x uses, breaking passlib.apache import
- Fix regex_search assertion to use 'is not none' for a boolean result
- Add bcrypt version constraint note to module documentation



* fix(htpasswd): handle system-installed bcrypt in integration tests

On Debian/Ubuntu, bcrypt may be installed by the system package manager
with no RECORD file, making pip downgrade impossible. Move bcrypt
installation into a self-contained block in test_schemes.yml with
ignore_errors, a functional passlib+bcrypt check, and always-cleanup.
Bcrypt tests are skipped when a compatible version cannot be used.



* refactor(htpasswd): extract obtain_crypt_context(); import CryptContext from passlib directly

Extract context selection logic into obtain_crypt_context(). Import
CryptContext inside the deps.declare("passlib") block instead of from
module_utils/_crypt.py — passlib is already a hard dependency and
other symbols are imported from it there. Remove now-unnecessary
htpasswd.py sanity import ignore entries.



---------


(cherry picked from commit 49ca175f01)

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-31 16:58:55 +02:00
patchback[bot]
31aabddc46
[PR #12121/6e6199ae backport][stable-12] parted: ignore MBR partition type codes in flags on SUSE systems (#12146)
parted: ignore MBR partition type codes in flags on SUSE systems (#12121)

* parted: ignore MBR partition type codes reported as flags by SUSE parted

SUSE's patched parted reports MBR partition type codes (e.g., type=8e for
Linux LVM) in the machine-parseable flags output. The module was trying to
unset these pseudo-flags via 'parted set N type=8e off', which is not a
valid parted command, causing the task to fail when using flags: [lvm] on
msdos-labelled disks on SUSE systems.

Fixes #6292



* feat(changelog): add fragment for PR 12121

* Update changelogs/fragments/12121-parted-suse-msdos-type-code.yml



---------



(cherry picked from commit 6e6199ae3d)

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: Felix Fontein <felix@fontein.de>
2026-05-31 08:35:36 +02:00
patchback[bot]
789789f202
[PR #12137/5d62edc6 backport][stable-12] pamd: handle non-PAM lines in authselect profile files (#12144)
pamd: handle non-PAM lines in authselect profile files (#12137)

* fix(pamd): handle non-PAM lines in authselect profile files



* test(pamd): add test for authselect directive lines



* feat(changelog): add fragment for PR 12137



---------


(cherry picked from commit 5d62edc673)

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-31 00:05:00 +02:00
patchback[bot]
2e628f9895
[PR #12113/ef5b22d1 backport][stable-12] unixy callback: fix KeyError when task is delegated to host without ansible_host set (#12142)
unixy callback: fix KeyError when task is delegated to host without ansible_host set (#12113)

* fixes issue #12112

* adjust PR ID

* adjust PR ID, mistake was made

* adjust PR ID

* I messed up all these numbers

---------


(cherry picked from commit ef5b22d18e)

Co-authored-by: Stefan Midjich <stemid@users.noreply.github.com>
Co-authored-by: Stefan Midjich <stefan@sydit.se>
2026-05-30 20:29:37 +02:00
patchback[bot]
410383e95f
[PR #12084/8468fea3 backport][stable-12] composer: config file hash to evaluate whether a change occurred (#12131)
composer: config file hash to evaluate whether a change occurred (#12084)

* composer: Use config file hash to evaluate whether a change occurred (instead of unreliable output). Ensure `--working-dir` option consistently comes first (sudo-friendly)

* Update plugins/modules/composer.py



* whitespace fixes + changelog fragment

* Update changelogs/fragments/composer-working-dir-and-config-sha256.yaml



* Update changelogs/fragments/composer-working-dir-and-config-sha256.yaml



* Update plugins/modules/composer.py



* fragment

* ruff format  plugins/modules/composer.py

---------



(cherry picked from commit 8468fea3b0)

Co-authored-by: Raphaël Droz <raphael@droz.eu>
Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
Co-authored-by: Felix Fontein <felix@fontein.de>
2026-05-30 14:34:42 +02:00
patchback[bot]
cd057ddcdb
[PR #12106/50046965 backport][stable-12] lxc_container: Fix create_script in plugins/module_utils/_lxc.py (#12110)
lxc_container: Fix create_script in plugins/module_utils/_lxc.py (#12106)

* Fix create_script in plugins/module_utils/_lxc.py

* Added changelog fragment

* Apply suggestions from code review - updated typing



* Apply suggestion from code review - fixed docstring argument name



* Apply suggestion from code review



* Update plugins/module_utils/_lxc.py



---------



(cherry picked from commit 50046965c9)

Co-authored-by: usbpc <3638901+usbpc@users.noreply.github.com>
Co-authored-by: Kevin Holm <kevin@holm.dev>
Co-authored-by: Felix Fontein <felix@fontein.de>
2026-05-27 12:48:57 +02:00
patchback[bot]
3e276c4e6e
[PR #12085/fdace385 backport][stable-12] nmcli: fix check/diff for bond arp_interval and arp_ip_target (#11588) (#12091)
nmcli: fix check/diff for bond arp_interval and arp_ip_target (#11588) (#12085)

* nmcli: bond ARP options stop lying in check/diff (#11588)

Align arp_interval/arp_ip_target keys with bond.options parsing, route
ARP settings via +bond.options, and fix bond MTU false positives.

* Changelog: nmcli fragment gets PR links and clearer diff wording

Address reviewer feedback on #12085 — both entries now cite the PR URL
and the MTU entry says "incorrectly reports diff" instead of "false positives".

---------


(cherry picked from commit fdace38501)

Co-authored-by: Asif Draxi <47986843+AsifAd@users.noreply.github.com>
Co-authored-by: Asif Draxi <asif.draxi@blackline.com>
2026-05-23 21:40:22 +02:00
Felix Fontein
1a7f01d0b2
Release 12.6.1. 2026-05-17 12:59:47 +02:00
Felix Fontein
dedbedf917 Revert "[PR #11996/2cb4a5d4 backport][stable-12] gitlab_user: update SSH keys when key material changes (#12038)"
This reverts commit b94ac3fa21.
2026-05-17 12:59:18 +02:00
patchback[bot]
3e50838589
[PR #12063/3558e3c7 backport][stable-12] Fix flatpak id check (#12073)
Fix flatpak id check (#12063)

* Fix flatpak id check

This PR fixes the flatpak ID check by allowing the last component of the ID to contain dashes. The regular expression will match the flatpak ID according to the flatpak specification. It matches all 4600+ IDs currently present in flathub.

Fixes #12062

* Add changelog fragment

* Update plugins/modules/flatpak.py



* Update changelog fragment.

---------


(cherry picked from commit 3558e3c74a)

Co-authored-by: Gerben Welter <gerben@welter.nu>
Co-authored-by: Felix Fontein <felix@fontein.de>
2026-05-17 11:49:48 +02:00
patchback[bot]
c54ddec34a
[PR #12039/c2485ea5 backport][stable-12] apt_rpm: fix upgrade of local RPM not present in repository (#9161) (#12066)
apt_rpm: fix upgrade of local RPM not present in repository (#9161) (#12039)

(cherry picked from commit c2485ea57b)

Co-authored-by: bne1hm <67783534+bne1hm@users.noreply.github.com>
2026-05-17 11:09:43 +02:00
patchback[bot]
fb3e873d98
[PR #12064/9cba458e backport][stable-12] cargo: fix version parsing when state=latest (#12069)
cargo: fix version parsing when `state=latest` (#12064)

* fix(cargo): fix greedy regex in get_latest_published_version

Fixes #8949

* docs(cargo): add changelog fragment for #12064

(cherry picked from commit 9cba458e3e)

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2026-05-17 11:09:33 +02:00
patchback[bot]
7304fd6b3c
[PR #12065/2f83a5b0 backport][stable-12] selective callback plugin: align host names in stats output (#12071)
selective callback plugin: align host names in stats output (#12065)

* fix(selective): align host names in stats output



* changelog(selective): add fragment for PR #12065



---------


(cherry picked from commit 2f83a5b084)

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-17 11:09:29 +02:00
patchback[bot]
dad425d3c6
[PR #12024/00060263 backport][stable-12] bundler: replace deprecated CLI flags with BUNDLE_* env vars (#12037)
bundler: replace deprecated CLI flags with `BUNDLE_*` env vars (#12024)

* fix(bundler): replace deprecated CLI flags with BUNDLE_* env vars

Bundler 2.1 deprecated --deployment, --without, --path, --clean, and
--binstubs; Bundler 4 has removed --clean entirely. Pass these options
as BUNDLE_* environment variables instead, which have been supported
since Bundler 1.0.0 and are scoped to the process (no persistent
.bundle/config written).

Fixes #4583, fixes #11380



* fix(bundler): add changelog fragment for PR #12024



---------


(cherry picked from commit 00060263a5)

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 08:07:49 +02:00
patchback[bot]
46f6a7a69a
[PR #12019/171feb5a backport][stable-12] datadog_downtime: handle uuid.UUID type in API response (#12036)
datadog_downtime: handle uuid.UUID type in API response (#12019)

* fix(datadog_downtime): convert uuid field to str for datadog-api-client>=2.28.0



* changelog: add fragment for PR 12019



---------


(cherry picked from commit 171feb5a2c)

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 08:07:37 +02:00
patchback[bot]
b94ac3fa21
[PR #11996/2cb4a5d4 backport][stable-12] gitlab_user: update SSH keys when key material changes (#12038)
gitlab_user: update SSH keys when key material changes (#11996)

* gitlab_user: update SSH keys when key material changes

Compare SSH keys by key type and key material so comment-only differences remain idempotent while changed keys are replaced. Add unit and integration coverage for SSH key updates.

Fixes #6516

* gitlab_user: add SSH key update modes

Restore backward-compatible same-name SSH key handling by default and
add explicit update and deduplicate modes for controlled replacement
behavior.

Refs: #6516

* Apply suggestions from code review



---------


(cherry picked from commit 2cb4a5d4e7)

Co-authored-by: Fulvius <31437530+LCerebo@users.noreply.github.com>
Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2026-05-13 08:07:21 +02:00
patchback[bot]
bb539f1d56
[PR #12013/abef8f2a backport][stable-12] xml: fix print_match not populating matches return value (#12021)
xml: fix `print_match` not populating `matches` return value (#12013)

* fix(xml): populate matches when print_match is set, fix returned doc



* test(xml): add integration tests for print_match



* changelog: add fragment for PR 12013



---------


(cherry picked from commit abef8f2aed)

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-10 10:22:16 +02:00
patchback[bot]
b1d88ae3c1
[PR #12014/b8659f5c backport][stable-12] pam_limits: only create backup file when content actually changes (#12020)
pam_limits: only create backup file when content actually changes (#12014)

* fix(pam_limits): only create backup when file is actually changed

Fixes #12011



* changelog: add fragment for PR 12014



---------


(cherry picked from commit b8659f5c61)

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-10 10:22:07 +02:00
patchback[bot]
b3669957d9
[PR #11917/798439f1 backport][stable-12] Fix gitlab_hook: add default value for releases_events parameter (#12017)
Fix gitlab_hook: add default value for releases_events parameter (#11917)

* Fix gitlab_hook: only pass releases_events to API when specified

The releases_events parameter now only gets passed to the GitLab API:
- On create: always passed (fixes 500 error when not specified)
- On update: only passed when explicitly specified by user

This avoids forcing the releases_events value during updates when not
intended by the user.

Fixes: https://github.com/ansible-collections/community.general/issues/11269

* Add changelog fragment for gitlab_hook releases_events fix

Fixes: https://github.com/ansible-collections/community.general/issues/11269

* Add PR link to changelog fragment

* Use .get() for safer dict access in releases_events handling

* Update plugins/modules/gitlab_hook.py

remove `.get()`



* Update plugins/modules/gitlab_hook.py

Remove the null check for `options[“releases_events”]`



---------



(cherry picked from commit 798439f1fe)

Co-authored-by: RealCharlesChia <161665317+RealCharlesChia@users.noreply.github.com>
Co-authored-by: Charles Chia <charleschia@email.com>
Co-authored-by: Felix Fontein <felix@fontein.de>
2026-05-09 22:05:55 +02:00
patchback[bot]
7400d367a0
[PR #11994/a43006c7 backport][stable-12] seport: fix idempotency when port is covered by an existing range (#12004)
seport: fix idempotency when port is covered by an existing range (#11994)

* fix(seport): handle port overlap with existing ranges

Fixes idempotency when a requested port is already covered by an
existing range registered for the same setype/proto. Also improves
the error message when libsemanage raises FileNotFoundError on a
port overlap validation failure.

Fixes #10105



* chore(seport): add changelog fragment for #11994



---------


(cherry picked from commit a43006c7cb)

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-07 07:21:38 +02:00
patchback[bot]
4df3fd064d
[PR #11990/645dd2d4 backport][stable-12] ldap_attrs: fix case-insensitive attribute lookup in state=exact (#12007)
ldap_attrs: fix case-insensitive attribute lookup in `state=exact` (#11990)

* fix(ldap_attrs): case-insensitive attribute lookup in _get_all_values_of

LDAP attribute names are case-insensitive (RFC 4512), but the previous
code used a case-sensitive dict lookup on the server's response. When
the server returns an attribute with different casing than requested,
the lookup returns [] causing state=exact to issue MOD_ADD instead of
MOD_REPLACE, which fails on single-valued attributes that already have
a value.

Fixes #1624



* feat(changelogs): add fragment for ldap_attrs fix #11990



---------


(cherry picked from commit 645dd2d448)

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-07 07:21:31 +02:00
patchback[bot]
7f688e78bf
[PR #11959/d87a8a16 backport][stable-12] xml: fail for non-string values (#12001)
xml: fail for non-string `value`s (#11959)

* fix(xml): coerce boolean values to string with a warning

Fixes #7171



* test(xml): add integration tests for boolean value handling



* changelog: add fragment for PR 11959



* adjustments from review

* test(xml): update boolean-value integration tests to expect failure

Now that xml fails on non-string values, replace the old success-path
tests with failure assertions and add a positive test for quoted strings.
Remove the no-longer-needed result XML fixtures.



* adjustments from review

* fix(xml): correct boolean test assertions to match actual error message format



---------


(cherry picked from commit d87a8a167f)

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-06 20:10:45 +02:00
patchback[bot]
caeafeec1f
[PR #11943/38d49d24 backport][stable-12] yarn: add Alpine Linux support in integration tests (#12002)
yarn: add Alpine Linux support in integration tests (#11943)

* test(yarn): add Alpine Linux support via apk

Install nodejs and yarn via apk on Alpine, sharing the functional
test block with the existing non-Alpine (pre-built binary) path.
Extracts the test block into tests.yml to avoid duplication.

Fixes #4270



* fix(yarn): skip Node.js runtime warnings in stderr processing

Node.js 24 emits DeprecationWarning lines to stderr (e.g. for url.parse())
that are not JSON, causing _process_yarn_error to fail with "Unexpected
stderr output from Yarn". Skip lines starting with "(node:" before
attempting JSON parsing.



* test(yarn): add changelog fragment for #11943



* fix(yarn): only JSON-parse lines starting with '{' in stderr

Node.js 24 emits multi-line DeprecationWarnings to stderr (e.g. the hint
line "(Use `node --trace-deprecation ...`") that are not JSON and were
tripping the "Unexpected stderr output from Yarn" failure. Yarn's
structured output always starts with '{', so skip any line that doesn't.



* test(yarn): install sqlite on Alpine to fix nodejs 22 symbol error

On Alpine 3.21 nodejs 22 requires SQLite session extension symbols
(sqlite3session_*) that are not present in sqlite-libs; installing
the full sqlite package provides them.



* test(yarn): refresh apk cache and upgrade sqlite-libs before installing nodejs

The CI Alpine container may have a stale sqlite-libs that lacks the
session extension symbols (sqlite3session_*) required by nodejs 22+.
Force a cache refresh and upgrade sqlite-libs to the latest revision.



* fix(yarn): warn on non-JSON stderr lines instead of silently skipping

Non-JSON lines in stderr (e.g. Node.js runtime DeprecationWarnings) are
surfaced to the user via module.warn() rather than being silently ignored,
since their content and meaning are not known in advance.



* prefix yarn output line

* Update changelogs/fragments/11943-yarn-nodejs-runtime-warnings.yml



---------



(cherry picked from commit 38d49d240e)

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: Felix Fontein <felix@fontein.de>
2026-05-06 20:10:35 +02:00
patchback[bot]
89450214dc
[PR #11995/02b969ee backport][stable-12] cobbler_system: fix KeyError when adding new interface to existing system (#12003)
cobbler_system: fix `KeyError` when adding new interface to existing system (#11995)

* fix(cobbler_system): handle missing interface device on existing system

When adding a new interface to an existing Cobbler system that does not
yet have that interface defined, the module raised a KeyError. Use .get()
with a fallback empty dict to safely handle that case. Also add a
continue after the unknown-property warning to prevent a secondary
KeyError on IFPROPS_MAPPING lookup.

Fixes: #7007



* chore(cobbler_system): add changelog fragment for #11995



---------


(cherry picked from commit 02b969ee4d)

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-06 20:10:26 +02:00
patchback[bot]
4e0fdb757f
[PR #11933/c4fc0ff4 backport][stable-12] ipa_group: fix idempotency when external: false on existing non-external group (#11987)
ipa_group: fix idempotency when `external: false` on existing non-external group (#11933)

* fix(ipa_group): skip group_mod when external flag matches IPA state

When external=false (the default), get_group_diff() left the external
key in the diff even though the group was already non-external, causing
a spurious group_mod call that IPA rejected with "no modifications to
be performed". The fix checks equality in both directions.

Fixes #5061

* fix(ipa_group): add changelog fragment for PR 11933

* add quoting to fragment

(cherry picked from commit c4fc0ff4e1)

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2026-05-03 21:39:58 +02:00
patchback[bot]
c2c1899359
[PR #11972/d7f248fb backport][stable-12] odbc: fetch rows before commit to fix HY010 function sequence error (#11983)
odbc: fetch rows before commit to fix HY010 function sequence error (#11972)

* fix(odbc): fetch rows before committing to fix HY010 function sequence error

Fixes #5395



* chore(odbc): add changelog fragment for PR #11972



---------


(cherry picked from commit d7f248fb01)

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-03 12:07:27 +02:00
patchback[bot]
064dc97956
[PR #11949/dd5bd733 backport][stable-12] apt_rpm: handle update-kernel rc=1 when no new kernel is available (#11973)
apt_rpm: handle `update-kernel` rc=1 when no new kernel is available (#11949)

* fix(apt_rpm): do not fail when update-kernel finds no new kernel

update-kernel exits with rc=1 when the kernel is already at the latest
version. Handle this case gracefully by checking for the known
"There are no available kernels" message in stderr and returning
changed=False instead of raising an error.

Fixes #10055

* fix(apt_rpm): add changelog fragment for #11949

* Apply suggestion from review



---------


(cherry picked from commit dd5bd733fc)

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
Co-authored-by: Felix Fontein <felix@fontein.de>
2026-05-02 10:20:50 +02:00
patchback[bot]
6e379091a4
[PR #11951/881f64c9 backport][stable-12] logstash_plugin: fix proxy support and improve error reporting (#11971)
logstash_plugin: fix proxy support and improve error reporting (#11951)

* fix(logstash_plugin): use env vars for proxy, expose stderr on failure

Replace broken -DproxyHost/-DproxyPort JVM flags with http_proxy/https_proxy
environment variables, which are respected by modern Logstash bundled JDK.
Also include stderr in fail_json so the actual error output is visible.

Fixes #8650

* feat(changelog): add fragment for PR 11951

(cherry picked from commit 881f64c93b)

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2026-05-02 10:04:32 +02:00
patchback[bot]
3eadab1a01
[PR #11947/2becfe45 backport][stable-12] zypper_repository: allow state=absent when .repo URL/file is unreachable (#11970)
zypper_repository: allow `state=absent` when `.repo` URL/file is unreachable (#11947)

* fix(zypper_repository): allow state=absent when .repo URL/file is unreachable

When removing a repository by .repo URL, a download failure used to cause
an unconditional fail_json. Now, for state=absent, the module warns and
falls back to deriving the alias from the .repo filename basename.



* feat(changelog): add fragment for PR 11947



---------


(cherry picked from commit 2becfe45b5)

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-02 10:04:22 +02:00
patchback[bot]
b6e41311fd
[PR #11954/89e0d070 backport][stable-12] puppet: fix TypeError when writing facts data (#11969)
puppet: fix `TypeError` when writing facts data (#11954)

* fix(puppet): remove erroneous encode() call in _write_structured_data()

Fixes #7932

* changelog: add fragment for puppet facts TypeError fix (#11954)

(cherry picked from commit 89e0d07071)

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2026-05-02 10:04:11 +02:00
patchback[bot]
10f4e9796d
[PR #11925/d0f0e9d0 backport][stable-12] lvol: fix thin-pool creation with percentage size (#11930)
lvol: fix thin-pool creation with percentage size (#11925)

* fix(lvol): use --extents (-l) for thin-pool creation with percentage size

Fixes #11923



* chore(lvol): add changelog fragment for #11925



* test(lvol): add integration tests for thin-pool creation with percentage sizes



* test(lvol): use extent-aligned size for thin-pool absolute-size idempotency test



* test(lvol): reduce thin-pool sizes to leave space for test_pvs.yml



* test(lvol): add shrink=false to thin-pool absolute-size idempotency check



* test(lvol): add shrink: false to thin volume idempotency test

LVM reports thin volume size slightly above requested (metadata overhead),
triggering spurious shrink attempts. Disable shrink for idempotency checks
to avoid false failures.



---------


(cherry picked from commit d0f0e9d00f)

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-29 21:42:57 +02:00
patchback[bot]
743591cedc
[PR #11926/c0d3464f backport][stable-12] crypttab: fix option parsing when value contains multiple equal signs (#11929)
crypttab: fix option parsing when value contains multiple equal signs (#11926)

* fix(crypttab): preserve option values containing multiple equal signs

Fixes #4963



* fix(crypttab): add changelog fragment for PR 11926



---------


(cherry picked from commit c0d3464fa7)

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-28 21:27:44 +02:00
patchback[bot]
412a348738
[PR #11918/89d82ab9 backport][stable-12] scaleway: fix NoneType error in get_resources() (#11924)
scaleway: fix NoneType error in get_resources() (#11918)

* scaleway: fix NoneType error in get_resources() when API returns empty or non-JSON response

* add changelog fragment for #11918

* Update changelogs/fragments/11361-scaleway-get-resources-none-type.yml



---------



(cherry picked from commit 89d82ab9df)

Co-authored-by: RealCharlesChia <161665317+RealCharlesChia@users.noreply.github.com>
Co-authored-by: RealCharlesChia <RealCharlesChia@users.noreply.github.com>
Co-authored-by: Felix Fontein <felix@fontein.de>
2026-04-27 21:13:47 +02:00
Felix Fontein
020fcb251f Prepare 12.6.1. 2026-04-22 20:51:30 +02:00
patchback[bot]
90aa3ec24d
[PR #11909/d57a6672 backport][stable-12] Replace default favicon URL again (#11913)
Replace default favicon URL again (#11909)

* replace default favicon URL

* add changelog fragment for PR 11909

* fix syntax for change fragment



* use higher res favicon by default

---------



(cherry picked from commit d57a667274)

Co-authored-by: Lars Krahl <57526005+mmslkr@users.noreply.github.com>
Co-authored-by: Lars Krahl <lars.krahl@telekom.de>
Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2026-04-22 20:17:17 +02:00
Felix Fontein
25b09239f6
Release 12.6.0. 2026-04-20 12:34:53 +02:00
patchback[bot]
be4cf3ba4d
[PR #11735/3e9689b1 backport][stable-12] jira - resolve Cloud assignee email to account ID via user search (#11891)
jira - resolve Cloud assignee email to account ID via user search (#11735)

* jira - resolve Cloud assignee email to account ID via user search

When cloud=true and assignee contains '@', look up a unique user with
GET /rest/api/2/user/search and use accountId for create, transition,
and edit. Document Jira Cloud vs Server/Data Center assignee behavior.

Fixes https://github.com/ansible-collections/community.general/issues/11734

Assisted-by AI: Claude 4.6 Opus (Anthropic) via Cursor IDE



* * Using urllib.parse.quote for URL encoding
* Adding "added in version" note for assignee when resolving account_id from email



* * Added cached variable 'user_email'
* Changed comparison to handle missing email safely
* Updated error message formatting to use repr-style values



* jira - adjust assignee and cloud descriptions (#11734)



* jira - resolve user-type field emails to account IDs on Jira Cloud (#11734)

When cloud=true, user-type fields (assignee, reporter, and any listed
in the new custom_user_fields parameter) that contain '@' are resolved
from email to Jira Cloud account ID via the user search API. Strings
without '@' are assumed to be account IDs. Add custom_user_fields
parameter for user to declare additional custom fields of user type.



* jira - address PR 11735 review (docs, assignee path, errors, naming)

- Clarify O(custom_user_fields): built-ins stay automatic; list extra
  user-typed fields without implying they are only custom-field IDs.
- On Jira Cloud, set assignee from the module param as a plain string and
  let resolve_user_fields() map it to accountId (including email lookup).
- Drop redundant ``or []`` when merging O(custom_user_fields) with the
  built-in user field list.
- Use public names USER_FIELDS, resolve_user_fields, and resolve_account_id
  (no leading underscore) per reviewer preference.
- Quote field name and email in resolution errors with explicit "…" text
  instead of repr-style !r, keeping values readable in failure messages.

Refs: https://github.com/ansible-collections/community.general/pull/11735

AI-assisted: Composer 2 (Anthropic) via Cursor IDE



* Changing fail_json formatting



* formatting fixes



* jira - fixing assignee as module option in description



---------


(cherry picked from commit 3e9689b13d)

Signed-off-by: Vladimir Vasilev <vvasilev@redhat.com>
Co-authored-by: vladi-k <53343355+vladi-k@users.noreply.github.com>
2026-04-20 09:36:05 +02:00
patchback[bot]
03da9164d1
[PR #11888/5b409fac backport][stable-12] filesystem - migrate LVM.get_fs_size() to use CmdRunner (#11889)
filesystem - migrate LVM.get_fs_size() to use CmdRunner (#11888)

* filesystem - migrate LVM.get_fs_size() to use CmdRunner



* filesystem - add changelog fragment for #11888



---------


(cherry picked from commit 5b409facbe)

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-04-20 09:35:55 +02:00
patchback[bot]
d99b778fa1
[PR #11887/9f80d89f backport][stable-12] lvol - migrate to CmdRunner (#11890)
lvol - migrate to CmdRunner (#11887)

* lvol - migrate to CmdRunner



* lvol - add changelog fragment for #11887



* adjust the changelog fragment

---------


(cherry picked from commit 9f80d89fc3)

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-20 09:35:47 +02:00
patchback[bot]
fa179e6d0c
[PR #11694/180da98a backport][stable-12] ipa_dnsrecord: add exclusive parameter for append-without-replace semantics (#11885)
ipa_dnsrecord: add `exclusive` parameter for append-without-replace semantics (#11694)

* ipa_dnsrecord: add solo parameter for append-without-replace semantics

Fixes #682

Adds O(solo) boolean parameter (default true, preserving current
replace behaviour) consistent with other DNS modules such as
community.general.dnsimple. When solo=false, only values not
already present in IPA are added, leaving existing values untouched.



* ipa_dnsrecord: rename solo parameter to exclusive

Rename O(solo) to O(exclusive) following reviewer feedback.
'exclusive' is the established Ansible convention for this semantic
(e.g. community.general.ini_file), while 'solo' implies single-value
DNS records.



* ipa_dnsrecord: fix changelog fragment symbol markup

Use double backticks per RST convention in changelog fragments,
not the O() macro (which is for module docstrings).



* Update plugins/modules/ipa_dnsrecord.py



* ipa_dnsrecord: implement exclusive semantics for state=absent

- exclusive=true + state=absent: remove all existing values of that
  record type and name, ignoring the specified record_value(s)
- exclusive=false + state=absent: remove only the specified values
  that actually exist in IPA, preserving all others

Also updates the exclusive parameter documentation to cover both
state=present and state=absent behaviour.



---------



(cherry picked from commit 180da98a7c)

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: Felix Fontein <felix@fontein.de>
2026-04-19 23:07:11 +02:00
patchback[bot]
dc79f4a170
[PR #11860/25b21183 backport][stable-12] udm_user, homectl - replace crypt/legacycrypt with passlib (#11884)
udm_user, homectl - replace crypt/legacycrypt with passlib (#11860)

* udm_user - replace crypt/legacycrypt with passlib

The stdlib crypt module was removed in Python 3.13. Replace the
crypt/legacycrypt import chain with passlib (already used elsewhere
in the collection) and use CryptContext.verify() for password
comparison.

Fixes #4690



* Add changelog fragment for PR 11860



* remove redundant ignore file entries

* udm_user, homectl - replace crypt/legacycrypt with _crypt module utils

Add a new _crypt module_utils that abstracts password hashing and
verification. It uses passlib when available, falling back to the
stdlib crypt or legacycrypt, and raises ImportError if none of them
can be imported. Both udm_user and homectl now use this shared
utility, fixing compatibility with Python 3.13+.

Fixes #4690



* Add BOTMETA entry for _crypt module utils



* _crypt - fix mypy errors and handle complete unavailability

Replace CryptContext = object fallback (rejected by mypy) with a
proper dummy class definition. Add has_crypt_context flag so modules
can detect when no backend is available. Update both modules to
import and check has_crypt_context instead of testing for None.



* adjsutments from review

* Update plugins/modules/homectl.py



* Update plugins/modules/udm_user.py



---------



(cherry picked from commit 25b21183bb)

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: Felix Fontein <felix@fontein.de>
2026-04-19 22:51:20 +02:00
patchback[bot]
748882dfa8
[PR #11879/77509be2 backport][stable-12] Replace .format() calls with f-strings across multiple plugins (#11881)
Replace .format() calls with f-strings across multiple plugins (#11879)

* Replace .format() calls with f-strings across multiple plugins



* Add changelog fragment for PR 11879



---------


(cherry picked from commit 77509be2aa)

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-04-19 12:49:29 +02:00
patchback[bot]
6458abb9c1
[PR #11838/d0d213a4 backport][stable-12] homebrew_cask: fix false failure on upgrade of latest-versioned casks (#11880)
homebrew_cask: fix false failure on upgrade of latest-versioned casks (#11838)

* homebrew_cask: fix false failure on upgrade of latest-versioned casks

Use rc == 0 to determine upgrade success, consistent with _upgrade_all().
The previous check (_current_cask_is_installed() and not _current_cask_is_outdated())
was unreliable: for `latest`-versioned casks under --greedy, brew may still
list the cask as outdated after a successful upgrade, causing the task to fail
with a harmless warning from stderr as the error message.

Fixes #1647



* homebrew_cask: add changelog fragment for #11838



* Fix changelog fragment

---------


(cherry picked from commit d0d213a41d)

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-19 12:49:23 +02:00
patchback[bot]
09201bf49e
[PR #11878/1b0b8d5c backport][stable-12] gitlab_project_variable - use find_project() for graceful error handling (#11882)
gitlab_project_variable - use find_project() for graceful error handling (#11878)

* gitlab_project_variable - use find_project() for consistent error handling

Replace the bare projects.get() call in GitlabProjectVariables.get_project()
with find_project() from module_utils/gitlab, which all other GitLab modules
already use. This ensures a graceful fail_json (with a clear error message)
when the project is not found, rather than an unhandled GitlabGetError
propagating as a module traceback.



* Add changelog fragment for PR 11878



* minor adjustment in f-string

---------


(cherry picked from commit 1b0b8d5cc1)

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-04-19 12:49:16 +02:00
patchback[bot]
973b5be063
[PR #11824/39f4cda6 backport][stable-12] locale_gen: support locales not yet listed in /etc/locale.gen (#11883)
locale_gen: support locales not yet listed in /etc/locale.gen (#11824)

* locale_gen: support locales not yet listed in /etc/locale.gen

On systems like Gentoo where /etc/locale.gen starts with only a handful
of commented examples, set_locale_glibc() now appends missing locale
entries sourced from /usr/share/i18n/SUPPORTED instead of silently
doing nothing. Also extracts the shared locale-entry regex into a
module-level constant RE_LOCALE_ENTRY.



* locale_gen: add changelog fragment for issue 2399



---------


(cherry picked from commit 39f4cda6b5)

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-19 12:49:10 +02:00
patchback[bot]
449a179d8f
[PR #11750/6c809dd9 backport][stable-12] pacemaker: fix race condition on resource creation (#11877)
pacemaker: fix race condition on resource creation (#11750)

* remove pacemaker wait arg and fix race condition

* fix up pacemaker resource and stonith polling

* add changelog for pacemaker timeout bug

* remove env from test case and fix changelog file name

* Update changelogs/fragments/11750-pacemaker-wait-race-condition.yml



---------


(cherry picked from commit 6c809dd9db)

Co-authored-by: munchtoast <45038532+munchtoast@users.noreply.github.com>
Co-authored-by: Felix Fontein <felix@fontein.de>
2026-04-18 22:55:56 +02:00
patchback[bot]
27ca6be10a
[PR #11813/edf8f249 backport][stable-12] parted: add unit_preserve_case option to fix unit case in return value (#11875)
parted: add unit_preserve_case option to fix unit case in return value (#11813)

* parted: add unit_preserve_case option to fix unit case in return value

Adds O(unit_preserve_case) feature flag (bool, default None) to control
the case of the ``unit`` field in the module return value.

Previously the unit was always lowercased (e.g. ``kib``), making it
impossible to feed ``disk.unit`` back as the ``unit`` parameter without
a validation error. With O(unit_preserve_case=true) the unit is returned
in its original mixed case (e.g. ``KiB``), matching the accepted input
values.

The default (None) emits a deprecation notice; the default will become
V(true) in community.general 14.0.0.

Fixes #1860



* parted: add changelog fragment for PR #11813



* adjustments from review

* Comment 15.0.0 deprecation in option decription.

* parted: fix unit test calls to parse_partition_info after signature change



* parted: fix unit_preserve_case - parted outputs lowercase units in machine mode

Parted's machine-parseable output always uses lowercase unit suffixes
(e.g. ``kib``, ``mib``) regardless of what was passed to the ``unit``
parameter. Removing the explicit ``.lower()`` call was therefore not
enough to preserve case.

Add a ``canonical_unit()`` helper that maps a unit string to its canonical
mixed-case form using ``parted_units`` as the reference, and use it
instead of a bare identity when ``unit_preserve_case=true``.

Also fix a yamllint violation in the DOCUMENTATION block (missing space
after ``#`` in inline comments).



* Update plugins/modules/parted.py



* Update plugins/modules/parted.py



---------



(cherry picked from commit edf8f24959)

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: Felix Fontein <felix@fontein.de>
2026-04-18 22:55:45 +02:00