Commit Graph

886 Commits

Author SHA1 Message Date
Alexei Znamensky
38d49d240e 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

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* 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.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

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

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* 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.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* 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.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* 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.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* 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.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* prefix yarn output line

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

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

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: Felix Fontein <felix@fontein.de>
2026-05-06 19:25:10 +02:00
Alexei Znamensky
d87a8a167f xml: fail for non-string values (#11959)
* fix(xml): coerce boolean values to string with a warning

Fixes #7171

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

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

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* changelog: add fragment for PR 11959

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* 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.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* adjustments from review

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

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-06 19:23:58 +02:00
Alexei Znamensky
f5da5c9681 gem - fix --user-install conflict with OS-injected --install-dir (#11873)
* gem - fix --user-install conflict with OS-injected --install-dir

Some distributions (e.g. Fedora) inject --install-dir via operating_system.rb
as a platform default. Combining that with --user-install causes a gem CLI
parser error. Resolve the user install directory at install time and pass
--install-dir instead, which is semantically equivalent and avoids the conflict.
Uninstall is intentionally left unscoped so gem can find gems regardless of
where they were originally installed.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* gem - add changelog fragment for #11873

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* gem - fix user_install handling for install and uninstall

Two issues found in CI:

1. `gem environment user_gemhome` is not supported on older RubyGems (e.g.
   Ubuntu 20.04 ships 3.1.2). Simplify get_user_install_dir() to always parse
   the full `gem environment` output for "USER INSTALLATION DIRECTORY", which
   is stable across all supported versions.

2. On Fedora, `gem uninstall` without flags only searches the system gem path
   (set by operating_system.rb), so it cannot find gems installed to the user
   dir via --install-dir. Add user_install to the uninstall args_order so that
   gem uninstall --user-install is passed when user_install=True. The OS
   defaults conflict only applies to gem install, not gem uninstall.
   The integration test is updated to be consistent: the user_install:false
   install/remove block now also specifies user_install:false on removal.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* gem - use --install-dir for both install and uninstall of user gems

gem uninstall --user-install does not reliably find gems on Fedora/RHEL when
running as root, because those systems may disable user gem home for root and
Gem.user_dir may differ from the path resolved via 'gem environment'.

Use --install-dir <user_dir> for uninstall as well, since that is the exact
path used during install, making the operation consistent across platforms.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* gem - add override_platform_install_dir option and type hints

- add type hints to all functions
- fix misleading comment about --install-dir scoping for uninstall
- add override_platform_install_dir option (default=false) to opt in to
  resolving and passing the user gem dir explicitly to both gem install
  and gem uninstall, working around OS-injected platform defaults on
  distributions such as Fedora
- reclassify changelog fragment as minor_changes (new parameter, not
  backport-eligible)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* test(gem): add integration test for override_platform_install_dir

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* test(gem): skip default user_install test on RedHat family

OS-injected --install-dir on RHEL/Fedora makes the default user_install: true
case fail. The override_platform_install_dir block already covers the correct
path on those platforms.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-04 07:28:56 +12:00
Alexei Znamensky
2aa6fc2cf7 snap: add revision parameter (#11984)
* feat(snap): add ``revision`` parameter

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* feat(snap): add changelog fragment for PR 11984

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-04 07:28:06 +12:00
Alexei Znamensky
7b05c05205 nomad: re-enable tests (#11956)
* nomad: re-enable tests

* test(nomad): revamp integration tests

- bump nomad to 2.0.0
- update job.hcl to Nomad 1.x+ HCL syntax
- add macOS support: skip unzip install on Darwin, add arm64/aarch64 arch mapping
- skip Alpine in aliases instead of runtime gate in main.yml
- move nomad_version/nomad_cmd/nomad_uri/arch_map to role vars
- flatten block structure

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-01 22:46:27 +12:00
Alexei Znamensky
b754d75d18 lmdb_kv lookup: enable tests (#11948)
* lmdb_kv lookup: enable tests

* skip freebsd 14.2
2026-04-30 23:51:40 +12:00
Alexei Znamensky
c7be9e4d5b odbc: add Arch Linux support via AUR psqlodbc (#11944)
* test(odbc): add Arch Linux support via AUR psqlodbc

Fixes #4267

* test(setup_postgresql_db): guard Arch Linux initdb with creates

* test(odbc): add setup_remote_tmp_dir dependency
2026-04-30 21:52:30 +12:00
Alexei Znamensky
036811e668 test(integration): enable homectl test for ArchLinux (#11945)
* test(integration): enable homectl test for ArchLinux

* install passlib in Arch Linux

* test: requires vm in homectl aliases
2026-04-30 21:47:22 +12:00
Alexei Znamensky
36b55c73e0 test(integration): enable homectl test for RHEL 9+ (#11941) 2026-04-30 10:34:29 +12:00
Alexei Znamensky
d0f0e9d00f lvol: fix thin-pool creation with percentage size (#11925)
* fix(lvol): use --extents (-l) for thin-pool creation with percentage size

Fixes #11923

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

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

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

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

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

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

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

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

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

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

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* 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.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-29 21:55:47 +12:00
Felix Fontein
4fa82b9617 Make all doc fragments, module utils, and plugin utils private (#11896)
* Make all doc fragments private.

* Make all plugin utils private.

* Make all module utils private.

* Reformat.

* Changelog fragment.

* Update configs and ignores.

* Adjust unit test names.
2026-04-20 20:16:26 +02:00
Felix Fontein
72c13c85ad Prepare main for 13.0.0 (#11834)
* Bump version to 13.0.0.

* Remove deprecated modules and plugins.

* Remove deprecated module utils.

* Remove leftovers.

* Remove mode=compatibility.

* Change default of is_pre740 from true to false.

* Change default of force_defaults from true to false.

* Remove support for ubuntu_legacy mechanism.

* Remove cpanm compatibility tests.
2026-04-20 12:35:43 +02:00
Alexei Znamensky
77509be2aa Replace .format() calls with f-strings across multiple plugins (#11879)
* Replace .format() calls with f-strings across multiple plugins

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>

* Add changelog fragment for PR 11879

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-04-19 22:37:32 +12:00
Alexei Znamensky
edf8f24959 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

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* parted: add changelog fragment for PR #11813

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* adjustments from review

* Comment 15.0.0 deprecation in option decription.

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

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

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

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Update plugins/modules/parted.py

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

* Update plugins/modules/parted.py

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

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: Felix Fontein <felix@fontein.de>
2026-04-18 22:38:09 +02:00
Felix Fontein
ef656cb9b6 CI: Replace Fedora 43 with 44 for devel (#11836)
* Replace Fedora 43 with 44 for devel in CI.

* Adjust tests.

* Adjust flatpak module to Fedora 44.
2026-04-16 21:41:19 +02:00
Alexei Znamensky
d1448b76c1 iso_extract: strip leading path separator from file entries (#11825)
* iso_extract: strip leading path separator from file entries

Fixes #5283

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* iso_extract: add changelog fragment for issue 5283

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-15 19:54:46 +02:00
Alexei Znamensky
972bed66f4 flatpak: add from_url parameter, deprecate URLs in name (#11748)
* flatpak: add from_url parameter, deprecate URLs in name

Adds a new `from_url` parameter for installing flatpaks from a
.flatpakref URL, using `flatpak install --from <url>`. The `name`
parameter then carries the reverse DNS application ID, enabling
reliable idempotency checks.

Passing URLs directly in `name` is now deprecated and will be
removed in community.general 14.0.0.

Fixes #4000

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* flatpak: add changelog fragment for PR #11748

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* flatpak: remove deprecation, adjust docs tone

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* flatpak: add integration tests for from_url parameter

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-13 21:12:35 +02:00
Alexei Znamensky
66886d08f5 integration tests: remove CentOS conditionals - part 2 (#11719)
* test(integration): remove CentOS references - part 2

* adjustments from review
2026-04-03 23:13:58 +13:00
Alexei Znamensky
8b114e999e consul integration tests: re-enable on macOS (#11697)
* consul integration tests: re-enable on macOS

- Update consul version to 1.22.6
- Add arm64/aarch64 architecture support
- Fix macOS Gatekeeper quarantine on downloaded binary
- Add wait_for before ACL bootstrap (race condition fix)
- Update HCL config to use tls stanza (required in 1.22)
- Disable gRPC port (conflicts with tls stanza when not configured)
- Remove skip/macos from aliases

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

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* changelogs/fragments: add PR number for consul tests fix

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* remove changelog fragment (test-only PR)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-03 07:54:20 +02:00
Alexei Znamensky
79431c36b5 integration tests: remove CentOS conditionals (#11715)
* test(integration): remove CentOS references

* further simplification

* more removals

* rollback systemd_info for now

* ufw: not trivially used with RHEL9 and RHEL10, simplifying tests

* remove tasks for setup_epel where unused

* adjustments from review
2026-04-03 07:37:05 +02:00
Alexei Znamensky
b79a45753f snap_connect: new module to manage snap interface connections (#11682)
* snap_connect: new module to manage snap interface connections

Fixes #7722

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* simplify _get_connections()

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-03 16:18:17 +13:00
Alexei Znamensky
982f9472c5 test(integration): fix for ansible-core devel changes in register (#11720) 2026-04-03 14:59:46 +13:00
Alexei Znamensky
f4e5fc09d7 monit: re-enable tests in RHEL (#11690)
* re-enable monit tests in rhel

* enable EPEL for RHEL<11

* rollback EPEL setup, skip only specific versions

* remove skip entirely

* change download URL in setup_epel, adjusted code to use it

* claude tries to install virtualenv, round 1

* claude tries python3 -m venv instead

* remove outdated centos6 file
2026-03-31 22:17:38 +13:00
Alexei Znamensky
68ae04a95a Cleanup of aliases skip statements (#11686)
* add scripts to clean aliases' skips

* remove legacy skips

* code cosmetics

* add license to ALIASES.md

* Fix typos in ALIASES.md documentation

* rolling back freebsd14.2 and 14.3 in iso_extract

* fix versions and re-run
2026-03-30 19:31:17 +02:00
Alexei Znamensky
d06c83eb68 etcd3: re-enable and fix tests, add unit tests (#11678)
* etcd3: re-enable and fix tests, add unit tests

- Add unit tests for community.general.etcd3 module (12 tests covering
  state=present/absent, idempotency, check mode, and error paths)
- Fix integration test setup: update etcd binary to v3.6.9 (from v3.2.14),
  download from GitHub releases, add health-check retry loop after start
- Work around etcd3 Python library incompatibility with protobuf >= 4.x
  by setting PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python
- Update to FQCNs throughout integration tests
- Re-enable both etcd3 and lookup_etcd3 integration targets

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

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* improve use of multiple context managers

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-25 15:55:16 +13:00
Alexei Znamensky
d6cb56c022 osx_defaults: add dict support (#11659)
* osx_defaults: add dict support

* add changelog frag

* osx_defaults: fix dict idempotency by using plutil -extract for type-preserving read

The previous approach piped `defaults read` output (old-style plist text)
through `plutil -convert json`. Old-style plist loses boolean type info
(booleans appear as 1/0, indistinguishable from integers), causing the
comparison to fail and reporting changed=True on every run.

Fix by exporting the domain binary plist to a temp file and using
`plutil -extract key json` which correctly preserves all plist types
(booleans stay true/false, integers stay integers, etc.).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* change param from bool to str

* Apply suggestion from review

* Update plugins/modules/osx_defaults.py

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

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: Felix Fontein <felix@fontein.de>
2026-03-23 20:16:21 +01:00
Alexei Znamensky
b1ac989c70 remove skip/aix from aliases files (#11660) 2026-03-23 06:38:06 +01:00
Alexei Znamensky
8d403dde5b ansible_galaxy_install: new param executable (#11646)
* ansible_galaxy_install: new param executable

* add changelog frag
2026-03-22 20:21:54 +01:00
Alexei Znamensky
4f5e5c9bb6 test(python_runner): add integration tests (#11638)
* test(python_runner): add integration tests

* simplify the test

* add missing quotes

* use setup_remote_tmp_dir

* build venv manually first
2026-03-22 17:31:51 +13:00
Felix Fontein
b4336659f6 CI: Remove FreeBSD 14.3 for devel, and replace macOS 15.3 with 26.3 (#11631)
* Replace FreeBSD 14.3 with 14.4, and macOS 15.3 with 26.3.

* FreeBSD 14.4 seems to have the same problem as FreeBSD 15.0, disabling for now.
2026-03-21 17:27:51 +01:00
Felix Fontein
bc22fbcaa0 CI: Replace apt_repository and apt_key with deb822_repository (#11625)
Replace apt_repository and apt_key with deb822_repository.
2026-03-19 23:12:40 +01:00
Christoph Fiehe
dae2157bb7 merge_variables: extended merge capabilities added (#11536)
* merge_variables: extended merge capabilities added

This extension gives you more control over the variable merging process of the lookup plugin `merge_variables`. It closes the gap between Puppet's Hiera merging capabilities and the limitations of Ansible's default variable plugin `host_group_vars` regarding fragment-based value definition. You can now decide which merge strategy should be applied to dicts, lists, and other types. Furthermore, you can specify a merge strategy that should be applied in case of type conflicts.

The default behavior of the plugin has been preserved so that it is fully backward-compatible with the already implemented state.

Signed-off-by: Fiehe Christoph  <c.fiehe@eurodata.de>

* Update changelogs/fragments/11536-merge-variables-extended-merging-capabilities.yml

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

* Update plugins/lookup/merge_variables.py

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

* Periods added at the end of each choice description

Signed-off-by: Fiehe Christoph  <c.fiehe@eurodata.de>

* Update plugins/lookup/merge_variables.py

Co-authored-by: Mark <40321020+m-a-r-k-e@users.noreply.github.com>

* ref: follow project standard for choice descriptions

Signed-off-by: Fiehe Christoph  <c.fiehe@eurodata.de>

* ref: more examples added and refactoring

Signed-off-by: Fiehe Christoph  <c.fiehe@eurodata.de>

* Update plugins/lookup/merge_variables.py

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

* ref: some more comments to examples added

Signed-off-by: Fiehe Christoph  <c.fiehe@eurodata.de>

* fix: unused import removed

Signed-off-by: Fiehe Christoph  <c.fiehe@eurodata.de>

* ref: re-add "merge" to strategy map

Signed-off-by: Fiehe Christoph  <c.fiehe@eurodata.de>

* Update comments

Signed-off-by: Fiehe Christoph  <c.fiehe@eurodata.de>

* Specification of transformations solely as string

Signed-off-by: Fiehe Christoph  <c.fiehe@eurodata.de>

* Comments updated

Signed-off-by: Fiehe Christoph  <c.fiehe@eurodata.de>

* ref: `append_rp` and `prepend_rp` removed
feat: options dict for list transformations re-added
feat: allow setting `keep` for dedup transformation with possible values: `first` (default) and `last`

Signed-off-by: Fiehe Christoph  <c.fiehe@eurodata.de>

* ref: improve options documentation

Signed-off-by: Fiehe Christoph  <c.fiehe@eurodata.de>

* ref: documentation improved, avoiding words like newer or older in merge description

Signed-off-by: Fiehe Christoph  <c.fiehe@eurodata.de>

* Update plugins/lookup/merge_variables.py

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

* ref: "prio" replaced by "dict"

Signed-off-by: Fiehe Christoph  <c.fiehe@eurodata.de>

* feat: two integration tests added

Signed-off-by: Fiehe Christoph  <c.fiehe@eurodata.de>

---------

Signed-off-by: Fiehe Christoph  <c.fiehe@eurodata.de>
Co-authored-by: Fiehe Christoph <c.fiehe@eurodata.de>
Co-authored-by: Felix Fontein <felix@fontein.de>
Co-authored-by: Mark <40321020+m-a-r-k-e@users.noreply.github.com>
2026-03-19 22:45:44 +01:00
thomasbargetz
25b5655be7 keycloak_authentication_v2: verify providerIds (fix 11583) (#11585)
* 11583 verify providerIds in keycloak_authentication_v2

* 11583 code cleanup

---------

Co-authored-by: Thomas Bargetz <thomas.bargetz@rise-world.com>
2026-03-18 07:06:09 +01:00
thomasbargetz
e7a253b4c9 keycloak_authentication_v2: covers idp flow overrides in safe swap (fix 11582) (#11601)
* 11582 keycloak_authentication_v2 covers idp flow overrides in safe swap

* 11583 update documentation and comments
2026-03-18 06:49:24 +01:00
thomasbargetz
a69f7e60b4 add module keycloak_authentication_v2 (#11557)
* add module keycloak_authentication_v2

* skip sanity checks, because the run into a recursion

* 11556 fix documentation

* 11556 limit the depth of nested flows to 4

* 11556 code cleanup

* 11556 code cleanup - add type hints

* 11556 add keycloak_authentication_v2 to meta/runtime.yml

* 11556 code cleanup - remove custom type hints

* 11556 code cleanup - none checks

* Update plugins/modules/keycloak_authentication_v2.py

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>

* Update plugins/modules/keycloak_authentication_v2.py

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

* 11556 code cleanup - remove document starts

* 11556 cleanup

* 11556 cleanup

---------

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
Co-authored-by: Felix Fontein <felix@fontein.de>
Co-authored-by: Thomas Bargetz <thomas.bargetz@rise-world.com>
2026-03-12 22:04:08 +01:00
Felix Fontein
4cd91ba4d4 Fix templating bug in iptables_state tests (#11541)
* Fix templating bug in iptables_state tests.

* Try to install older packages on RHEL.
2026-03-11 22:02:08 +01:00
Alexei Znamensky
93112d23e5 monit: remove unstable tag from integration tests (#11562) 2026-03-10 06:42:54 +01:00
Matt Clay
9b9d8eac09 Update tests to pass on macOS arm64 (#11544) 2026-02-27 18:55:29 +01:00
Felix Fontein
e118b23ba0 Simplify and extend from_ini tests (#11534)
Simplify and extend from_ini tests.
2026-02-23 06:16:51 +01:00
Robert Sander
aec0e61ba1 adds parameter delimiters to from_ini filter (#11512)
* adds parameter delimiters to from_ini filter

fixes issue #11506

* adds changelog fragment

* fixes pylint dangerous-default-value / W0102

* does not assume default delimiters

let that be decided in the super class

* Update plugins/filter/from_ini.py

verbose description

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

* Update changelogs/fragments/11512-from_ini-delimiters.yaml

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

* adds input validation

* adss check for delimiters not None

* adds missing import

* removes the negation

* adds suggestions from russoz

* adds ruff format suggestion

---------

Co-authored-by: Felix Fontein <felix@fontein.de>
2026-02-23 05:44:32 +01:00
Ivan Kokalovic
34938ca1ef keycloak_user_rolemapping: handle None response for client role lookup (#11471)
* fix(keycloak_user_rolemapping): handle None response for client role lookup

When adding a client role to a user who has no existing roles for that
client, get_client_user_rolemapping_by_id() returns None. The existing
code indexed directly into the result causing a TypeError. Add the same
None check that already existed for realm roles since PR #11256.

Fixes #10960

* fix(tests): use dict format for task vars in keycloak_user_rolemapping tests

Task-level vars requires a YAML mapping, not a sequence. The leading
dash (- roles:) produced a list instead of a dict, which ansible-core
2.20 rejects with "Vars in a Task must be specified as a dictionary".

* Update changelogs/fragments/keycloak-user-rolemapping-client-none-check.yml

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

---------

Co-authored-by: Felix Fontein <felix@fontein.de>
2026-02-18 20:24:35 +01:00
Ivan Kokalovic
80d21f2a0d keycloak_realm_key: add full support for all Keycloak key providers (#11468)
* feat(keycloak_realm_key): add support for auto-generated key providers

Add support for Keycloak's auto-generated key providers where Keycloak
manages the key material automatically:

- rsa-generated: Auto-generates RSA signing keys
- hmac-generated: Auto-generates HMAC signing keys
- aes-generated: Auto-generates AES encryption keys
- ecdsa-generated: Auto-generates ECDSA signing keys

New algorithms:
- HMAC: HS256, HS384, HS512
- ECDSA: ES256, ES384, ES512
- AES: AES (no algorithm parameter needed)

New config options:
- secret_size: For HMAC/AES providers (key size in bytes)
- key_size: For RSA-generated provider (key size in bits)
- elliptic_curve: For ECDSA-generated provider (P-256, P-384, P-521)

Changes:
- Make private_key/certificate optional (only required for rsa/rsa-enc)
- Add provider-algorithm validation with clear error messages
- Fix KeyError when managing default realm keys (issue #11459)
- Maintain backward compatibility: RS256 default works for rsa/rsa-generated

Fixes: #11459

* fix: address sanity test failures

- Add 'default: RS256' to algorithm documentation to match spec
- Add no_log=True to secret_size parameter per sanity check

* feat(keycloak_realm_key): extend support for all Keycloak key providers

Add support for remaining auto-generated key providers:
- rsa-enc-generated (RSA encryption keys with RSA1_5, RSA-OAEP, RSA-OAEP-256)
- ecdh-generated (ECDH key exchange with ECDH_ES, ECDH_ES_A128KW/A192KW/A256KW)
- eddsa-generated (EdDSA signing with Ed25519, Ed448 curves)

Changes:
- Add provider-specific elliptic curve config key mapping
  (ecdsaEllipticCurveKey, ecdhEllipticCurveKey, eddsaEllipticCurveKey)
- Add PROVIDERS_WITHOUT_ALGORITHM constant for providers that don't need algorithm
- Add elliptic curve validation per provider type
- Update documentation with all supported algorithms and examples
- Add comprehensive integration tests for all new providers

This completes full coverage of all Keycloak key provider types.

* style: apply ruff formatting

* feat(keycloak_realm_key): add java-keystore provider and update_password

Add support for java-keystore provider to import keys from Java
Keystore (JKS or PKCS12) files on the Keycloak server filesystem.

Add update_password parameter to control password handling for
java-keystore provider:
- always (default): Always send passwords to Keycloak
- on_create: Only send passwords when creating, preserve existing
  passwords when updating (enables idempotent playbooks)

The on_create mode sends the masked value ("**********") that Keycloak
recognizes as "preserve existing password", matching the behavior when
re-importing an exported realm.

Replace password_checksum with update_password - the checksum approach
was complex and error-prone. The update_password parameter is simpler
and follows the pattern used by ansible.builtin.user module.

Also adds key_info return value containing kid, certificate fingerprint,
status, and expiration for java-keystore keys.

* address PR review feedback

- Remove no_log=True from secret_size (just an int, not sensitive)
- Add version_added: 12.4.0 to new parameters and return values
- Remove "Added in community.general 12.4.0" from description text
- Consolidate changelog entries into 4 focused entries
- Remove bugfix from changelog (now in separate PR #11470)

* address review feedback from russoz and felixfontein

- remove docstrings from module-local helpers
- remove line-by-line comments and unnecessary null guard
- use specific exceptions instead of bare except Exception
- use module.params["key"] instead of .get("key")
- consolidate changelog into single entry
- avoid "complete set" claim, reference Keycloak 26 instead

* address round 2 review feedback

- Extract remove_sensitive_config_keys() helper (DRY refactor)
- Simplify RS256 validation to single code path
- Add TypeError to inner except in compute_certificate_fingerprint()
- Remove redundant comments (L812, L1031)
- Switch .get() to direct dict access for module.params
2026-02-18 07:48:37 +01:00
Alexei Znamensky
63ddca7f21 supervisorctl: remove unstable tag from integration tests (#11484) 2026-02-10 21:09:02 +13:00
Felix Fontein
476f2bf641 Integration tests: replace ansible_xxx with ansible_facts.xxx (#11479)
Replace ansible_xxx with ansible_facts.xxx.
2026-02-07 18:18:48 +01:00
Ivan Kokalovic
df6d6269a6 keycloak_client: add valid_post_logout_redirect_uris and backchannel_logout_url (#11473)
* feat(keycloak_client): add valid_post_logout_redirect_uris and backchannel_logout_url

Add two new convenience parameters that map to client attributes:

- valid_post_logout_redirect_uris: sets post.logout.redirect.uris
  attribute (list items joined with ##)
- backchannel_logout_url: sets backchannel.logout.url attribute

These fields are not top-level in the Keycloak REST API but are stored
as client attributes. The new parameters provide a user-friendly
interface without requiring users to know the internal attribute names
and ##-separator format.

Fixes #6812, fixes #4892

* consolidate changelog and add PR link per review feedback
2026-02-07 16:19:29 +01:00
Ivan Kokalovic
c41de53dbb keycloak: URL-encode query parameters for usernames with special characters (#11472)
* fix(keycloak): URL-encode query params for usernames with special chars

get_user_by_username() concatenates the username directly into the URL
query string. When the username contains a +, it is interpreted as a
space by the server, returning no match and causing a TypeError.

Use urllib.parse.quote() (already imported) for the username parameter.
Also replace three fragile .replace(' ', '%20') calls in the authz
search methods with proper quote() calls.

Fixes #10305

* Update changelogs/fragments/keycloak-url-encode-query-params.yml

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>

---------

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2026-02-06 07:10:55 +01:00
Nicolas Boutet
53e1e86bcc Logstash plugin version fix (#11440)
* logstash_plugin: fix argument order when using version parameter

* logstash_plugin: add integration tests

* logstash_plugin: add changelog fragment
2026-01-26 06:17:23 +01:00
Matt Williams
864695f898 Add to_toml filter (#11423)
* Add to_toml filter

This is based heavily on the to_yaml filter, but
with a pared-down feature set.

* Protect import

* Don't quote datetime as a string

* Use Ansible error types

* Import correct error types

* Don't use AnsibleTypeError

It doesn't seem to be available on older Ansible
core versions.

* Fix antsibull-nox errors

* Install dependencies for to_toml integration test

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

* Reduce author list to main contributor

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

* Update version added for to_toml

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

* Use AnsibleError for missing import

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

* Use AnsibleFilterError for runtime type check

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

* Move common code to plugin_utils/_tags.py

* Mark module util as private

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

* Update BOTMETA for to_toml

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

* Fix typo

* Correct version number

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

* Use to_text for to_toml dict key conversions

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

* Add tomlkit requirement to docs

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

* Add missing import

* Add aliases for for to_toml integration test

---------

Co-authored-by: Felix Fontein <felix@fontein.de>
2026-01-22 06:41:49 +01:00
Felix Fontein
236b9c0e04 Sort imports with ruff check --fix (#11400)
Sort imports with ruff check --fix.
2026-01-09 07:40:58 +01:00
Felix Fontein
0e6ba07261 Update CI pipelines (#11401)
Update CI pipelines:
- Fedora 42 -> 43 for devel
- RHEL 10.0 -> 10.1 for all ansible-core branches
- FreeBSD 13.5 -> 15.0 for devel
- Alpine 3.22 -> 3.23 for devel
2026-01-08 09:41:28 +01:00