diff --git a/.azure-pipelines/azure-pipelines.yml b/.azure-pipelines/azure-pipelines.yml index 06a87dda57..808c0a34ae 100644 --- a/.azure-pipelines/azure-pipelines.yml +++ b/.azure-pipelines/azure-pipelines.yml @@ -29,14 +29,14 @@ schedules: always: true branches: include: + - stable-11 - stable-10 - - stable-9 - cron: 0 11 * * 0 displayName: Weekly (old stable branches) always: true branches: include: - - stable-8 + - stable-9 variables: - name: checkoutPath @@ -70,6 +70,19 @@ stages: - test: 2 - test: 3 - test: 4 + - stage: Sanity_2_19 + displayName: Sanity 2.19 + dependsOn: [] + jobs: + - template: templates/matrix.yml + parameters: + nameFormat: Test {0} + testFormat: 2.19/sanity/{0} + targets: + - test: 1 + - test: 2 + - test: 3 + - test: 4 - stage: Sanity_2_18 displayName: Sanity 2.18 dependsOn: [] @@ -112,6 +125,17 @@ stages: - test: '3.11' - test: '3.12' - test: '3.13' + - stage: Units_2_19 + displayName: Units 2.19 + dependsOn: [] + jobs: + - template: templates/matrix.yml + parameters: + nameFormat: Python {0} + testFormat: 2.19/units/{0}/1 + targets: + - test: 3.9 + - test: "3.13" - stage: Units_2_18 displayName: Units 2.18 dependsOn: [] @@ -176,6 +200,20 @@ stages: - 1 - 2 - 3 + - stage: Remote_2_19 + displayName: Remote 2.19 + dependsOn: [] + jobs: + - template: templates/matrix.yml + parameters: + testFormat: 2.19/{0} + targets: + - name: RHEL 10.0 + test: rhel/10.0 + groups: + - 1 + - 2 + - 3 - stage: Remote_2_18 displayName: Remote 2.18 dependsOn: [] @@ -232,6 +270,20 @@ stages: - 1 - 2 - 3 + - stage: Docker_2_19 + displayName: Docker 2.19 + dependsOn: [] + jobs: + - template: templates/matrix.yml + parameters: + testFormat: 2.19/linux/{0} + targets: + - name: Ubuntu 24.04 + test: ubuntu2404 + groups: + - 1 + - 2 + - 3 - stage: Docker_2_18 displayName: Docker 2.18 dependsOn: [] @@ -303,6 +355,17 @@ stages: # - test: '3.8' # - test: '3.11' # - test: '3.13' +# - stage: Generic_2_19 +# displayName: Generic 2.19 +# dependsOn: [] +# jobs: +# - template: templates/matrix.yml +# parameters: +# nameFormat: Python {0} +# testFormat: 2.19/generic/{0}/1 +# targets: +# - test: '3.9' +# - test: '3.13' # - stage: Generic_2_18 # displayName: Generic 2.18 # dependsOn: [] @@ -330,21 +393,26 @@ stages: condition: succeededOrFailed() dependsOn: - Sanity_devel + - Sanity_2_19 - Sanity_2_18 - Sanity_2_17 - Units_devel + - Units_2_19 - Units_2_18 - Units_2_17 - Remote_devel_extra_vms - Remote_devel + - Remote_2_19 - Remote_2_18 - Remote_2_17 - Docker_devel + - Docker_2_19 - Docker_2_18 - Docker_2_17 - Docker_community_devel # Right now all generic tests are disabled. Uncomment when at least one of them is re-enabled. # - Generic_devel +# - Generic_2_19 # - Generic_2_18 # - Generic_2_17 jobs: diff --git a/.github/BOTMETA.yml b/.github/BOTMETA.yml index fc5f7abbdc..fac3fae8f8 100644 --- a/.github/BOTMETA.yml +++ b/.github/BOTMETA.yml @@ -92,6 +92,8 @@ files: maintainers: ryancurrah $callbacks/syslog_json.py: maintainers: imjoseangel + $callbacks/tasks_only.py: + maintainers: felixfontein $callbacks/timestamp.py: maintainers: kurokobo $callbacks/unixy.py: @@ -781,6 +783,8 @@ files: maintainers: brettmilford unnecessary-username juanmcasanova $modules/jenkins_build_info.py: maintainers: juanmcasanova + $modules/jenkins_credential.py: + maintainers: YoussefKhalidAli $modules/jenkins_job.py: maintainers: sermilrod $modules/jenkins_job_info.py: @@ -1053,7 +1057,7 @@ files: $modules/ovh_monthly_billing.py: maintainers: fraff $modules/pacemaker_cluster.py: - maintainers: matbu + maintainers: matbu munchtoast $modules/pacemaker_resource.py: maintainers: munchtoast $modules/packet_: @@ -1513,6 +1517,22 @@ files: maintainers: russoz docs/docsite/rst/guide_deps.rst: maintainers: russoz + docs/docsite/rst/guide_iocage.rst: + maintainers: russoz felixfontein + docs/docsite/rst/guide_iocage_inventory.rst: + maintainers: vbotka + docs/docsite/rst/guide_iocage_inventory_aliases.rst: + maintainers: vbotka + docs/docsite/rst/guide_iocage_inventory_basics.rst: + maintainers: vbotka + docs/docsite/rst/guide_iocage_inventory_dhcp.rst: + maintainers: vbotka + docs/docsite/rst/guide_iocage_inventory_hooks.rst: + maintainers: vbotka + docs/docsite/rst/guide_iocage_inventory_properties.rst: + maintainers: vbotka + docs/docsite/rst/guide_iocage_inventory_tags.rst: + maintainers: vbotka docs/docsite/rst/guide_modulehelper.rst: maintainers: russoz docs/docsite/rst/guide_online.rst: diff --git a/.yamllint b/.yamllint new file mode 100644 index 0000000000..c10d86ab19 --- /dev/null +++ b/.yamllint @@ -0,0 +1,52 @@ +--- +# 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 + +extends: default + +ignore: | + /changelogs/ + +rules: + line-length: + max: 1000 + level: error + document-start: disable + document-end: disable + truthy: + level: error + allowed-values: + - 'true' + - 'false' + indentation: + spaces: 2 + indent-sequences: true + key-duplicates: enable + trailing-spaces: enable + new-line-at-end-of-file: disable + hyphens: + max-spaces-after: 1 + empty-lines: + max: 2 + max-start: 0 + max-end: 0 + commas: + max-spaces-before: 0 + min-spaces-after: 1 + max-spaces-after: 1 + colons: + max-spaces-before: 0 + max-spaces-after: 1 + brackets: + min-spaces-inside: 0 + max-spaces-inside: 0 + braces: + min-spaces-inside: 0 + max-spaces-inside: 1 + octal-values: + forbid-implicit-octal: true + forbid-explicit-octal: true + comments: + min-spaces-from-content: 1 + comments-indentation: false diff --git a/CHANGELOG.md b/CHANGELOG.md index b35c52441b..8fe0b634c9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,645 @@ -# Placeholder changelog +# Community General Release Notes -This file is a placeholder; a version-specific `CHANGELOG-vX.md` will be generated during releases from fragments -under `changelogs/fragments`. On release branches once a release has been created, consult the branch's version-specific -file for changes that have occurred in that branch. +**Topics** + +- v11\.1\.0 + - Release Summary + - Minor Changes + - Deprecated Features + - Bugfixes + - New Plugins + - Callback + - New Modules +- v11\.0\.0 + - Release Summary + - Minor Changes + - Deprecated Features + - Removed Features \(previously deprecated\) + - Security Fixes + - Bugfixes + - Known Issues + - New Plugins + - Callback + - Connection + - Filter + - Inventory + - Lookup + - New Modules +This changelog describes changes after version 10\.0\.0\. + + +## v11\.1\.0 + + +### Release Summary + +Regular bugfix and feature release\. + + +### Minor Changes + +* cloudflare\_dns \- adds support for PTR records \([https\://github\.com/ansible\-collections/community\.general/pull/10267](https\://github\.com/ansible\-collections/community\.general/pull/10267)\)\. +* cloudflare\_dns \- remove redundant brackets in conditionals\, no functional changes \([https\://github\.com/ansible\-collections/community\.general/pull/10328](https\://github\.com/ansible\-collections/community\.general/pull/10328)\)\. +* cloudflare\_dns \- simplify validations and refactor some code\, no functional changes \([https\://github\.com/ansible\-collections/community\.general/pull/10269](https\://github\.com/ansible\-collections/community\.general/pull/10269)\)\. +* crypttab \- remove redundant brackets in conditionals\, no functional changes \([https\://github\.com/ansible\-collections/community\.general/pull/10328](https\://github\.com/ansible\-collections/community\.general/pull/10328)\)\. +* datadog\_monitor \- remove redundant brackets in conditionals\, no functional changes \([https\://github\.com/ansible\-collections/community\.general/pull/10328](https\://github\.com/ansible\-collections/community\.general/pull/10328)\)\. +* dense callback plugin \- use f\-strings instead of concatenation \([https\://github\.com/ansible\-collections/community\.general/pull/10285](https\://github\.com/ansible\-collections/community\.general/pull/10285)\)\. +* gitlab\_deploy\_key \- remove redundant brackets in conditionals\, no functional changes \([https\://github\.com/ansible\-collections/community\.general/pull/10328](https\://github\.com/ansible\-collections/community\.general/pull/10328)\)\. +* gitlab\_group\_access\_token \- remove redundant brackets in conditionals\, no functional changes \([https\://github\.com/ansible\-collections/community\.general/pull/10328](https\://github\.com/ansible\-collections/community\.general/pull/10328)\)\. +* gitlab\_hook \- remove redundant brackets in conditionals\, no functional changes \([https\://github\.com/ansible\-collections/community\.general/pull/10328](https\://github\.com/ansible\-collections/community\.general/pull/10328)\)\. +* gitlab\_project\_access\_token \- remove redundant brackets in conditionals\, no functional changes \([https\://github\.com/ansible\-collections/community\.general/pull/10328](https\://github\.com/ansible\-collections/community\.general/pull/10328)\)\. +* gitlab\_runner \- remove redundant brackets in conditionals\, no functional changes \([https\://github\.com/ansible\-collections/community\.general/pull/10328](https\://github\.com/ansible\-collections/community\.general/pull/10328)\)\. +* iocage inventory plugin \- use f\-strings instead of concatenation \([https\://github\.com/ansible\-collections/community\.general/pull/10285](https\://github\.com/ansible\-collections/community\.general/pull/10285)\)\. +* ipa\_group \- remove redundant brackets in conditionals\, no functional changes \([https\://github\.com/ansible\-collections/community\.general/pull/10328](https\://github\.com/ansible\-collections/community\.general/pull/10328)\)\. +* jc filter plugin \- use f\-strings instead of concatenation \([https\://github\.com/ansible\-collections/community\.general/pull/10285](https\://github\.com/ansible\-collections/community\.general/pull/10285)\)\. +* jenkins\_build \- remove redundant brackets in conditionals\, no functional changes \([https\://github\.com/ansible\-collections/community\.general/pull/10328](https\://github\.com/ansible\-collections/community\.general/pull/10328)\)\. +* jenkins\_build\_info \- remove redundant brackets in conditionals\, no functional changes \([https\://github\.com/ansible\-collections/community\.general/pull/10328](https\://github\.com/ansible\-collections/community\.general/pull/10328)\)\. +* keycloak \- add support for grant\_type\=client\_credentials to all keycloak modules\, so that specifying auth\_client\_id and auth\_client\_secret is sufficient for authentication \([https\://github\.com/ansible\-collections/community\.general/pull/10231](https\://github\.com/ansible\-collections/community\.general/pull/10231)\)\. +* keycloak module utils \- remove redundant brackets in conditionals\, no functional changes \([https\://github\.com/ansible\-collections/community\.general/pull/10328](https\://github\.com/ansible\-collections/community\.general/pull/10328)\)\. +* logstash callback plugin \- remove redundant brackets in conditionals\, no functional changes \([https\://github\.com/ansible\-collections/community\.general/pull/10328](https\://github\.com/ansible\-collections/community\.general/pull/10328)\)\. +* mail callback plugin \- use f\-strings instead of concatenation \([https\://github\.com/ansible\-collections/community\.general/pull/10285](https\://github\.com/ansible\-collections/community\.general/pull/10285)\)\. +* nmcli \- remove redundant brackets in conditionals\, no functional changes \([https\://github\.com/ansible\-collections/community\.general/pull/10328](https\://github\.com/ansible\-collections/community\.general/pull/10328)\)\. +* nmcli \- simplify validations and refactor some code\, no functional changes \([https\://github\.com/ansible\-collections/community\.general/pull/10323](https\://github\.com/ansible\-collections/community\.general/pull/10323)\)\. +* oneandone\_firewall\_policy \- remove redundant brackets in conditionals\, no functional changes \([https\://github\.com/ansible\-collections/community\.general/pull/10328](https\://github\.com/ansible\-collections/community\.general/pull/10328)\)\. +* oneandone\_load\_balancer \- remove redundant brackets in conditionals\, no functional changes \([https\://github\.com/ansible\-collections/community\.general/pull/10328](https\://github\.com/ansible\-collections/community\.general/pull/10328)\)\. +* oneandone\_monitoring\_policy \- remove redundant brackets in conditionals\, no functional changes \([https\://github\.com/ansible\-collections/community\.general/pull/10328](https\://github\.com/ansible\-collections/community\.general/pull/10328)\)\. +* onepassword\_info \- remove redundant brackets in conditionals\, no functional changes \([https\://github\.com/ansible\-collections/community\.general/pull/10328](https\://github\.com/ansible\-collections/community\.general/pull/10328)\)\. +* osx\_defaults \- remove redundant brackets in conditionals\, no functional changes \([https\://github\.com/ansible\-collections/community\.general/pull/10328](https\://github\.com/ansible\-collections/community\.general/pull/10328)\)\. +* ovh\_ip\_loadbalancing\_backend \- remove redundant brackets in conditionals\, no functional changes \([https\://github\.com/ansible\-collections/community\.general/pull/10328](https\://github\.com/ansible\-collections/community\.general/pull/10328)\)\. +* pacemaker\_cluster \- add state\=maintenance for managing pacemaker maintenance mode \([https\://github\.com/ansible\-collections/community\.general/issues/10200](https\://github\.com/ansible\-collections/community\.general/issues/10200)\, [https\://github\.com/ansible\-collections/community\.general/pull/10227](https\://github\.com/ansible\-collections/community\.general/pull/10227)\)\. +* pacemaker\_cluster \- rename node to name and add node alias \([https\://github\.com/ansible\-collections/community\.general/pull/10227](https\://github\.com/ansible\-collections/community\.general/pull/10227)\)\. +* pacemaker\_resource \- enhance module by removing duplicative code \([https\://github\.com/ansible\-collections/community\.general/pull/10227](https\://github\.com/ansible\-collections/community\.general/pull/10227)\)\. +* packet\_device \- remove redundant brackets in conditionals\, no functional changes \([https\://github\.com/ansible\-collections/community\.general/pull/10328](https\://github\.com/ansible\-collections/community\.general/pull/10328)\)\. +* pagerduty \- remove redundant brackets in conditionals\, no functional changes \([https\://github\.com/ansible\-collections/community\.general/pull/10328](https\://github\.com/ansible\-collections/community\.general/pull/10328)\)\. +* pingdom \- remove redundant brackets in conditionals\, no functional changes \([https\://github\.com/ansible\-collections/community\.general/pull/10328](https\://github\.com/ansible\-collections/community\.general/pull/10328)\)\. +* python\_runner module utils \- remove redundant brackets in conditionals\, no functional changes \([https\://github\.com/ansible\-collections/community\.general/pull/10328](https\://github\.com/ansible\-collections/community\.general/pull/10328)\)\. +* rhevm \- remove redundant brackets in conditionals\, no functional changes \([https\://github\.com/ansible\-collections/community\.general/pull/10328](https\://github\.com/ansible\-collections/community\.general/pull/10328)\)\. +* rocketchat \- remove redundant brackets in conditionals\, no functional changes \([https\://github\.com/ansible\-collections/community\.general/pull/10328](https\://github\.com/ansible\-collections/community\.general/pull/10328)\)\. +* sensu\_silence \- remove redundant brackets in conditionals\, no functional changes \([https\://github\.com/ansible\-collections/community\.general/pull/10328](https\://github\.com/ansible\-collections/community\.general/pull/10328)\)\. +* sl\_vm \- remove redundant brackets in conditionals\, no functional changes \([https\://github\.com/ansible\-collections/community\.general/pull/10328](https\://github\.com/ansible\-collections/community\.general/pull/10328)\)\. +* urpmi \- remove redundant brackets in conditionals\, no functional changes \([https\://github\.com/ansible\-collections/community\.general/pull/10328](https\://github\.com/ansible\-collections/community\.general/pull/10328)\)\. +* wsl connection plugin \- use f\-strings instead of concatenation \([https\://github\.com/ansible\-collections/community\.general/pull/10285](https\://github\.com/ansible\-collections/community\.general/pull/10285)\)\. +* xattr \- remove redundant brackets in conditionals\, no functional changes \([https\://github\.com/ansible\-collections/community\.general/pull/10328](https\://github\.com/ansible\-collections/community\.general/pull/10328)\)\. +* xen\_orchestra inventory plugin \- use f\-strings instead of concatenation \([https\://github\.com/ansible\-collections/community\.general/pull/10285](https\://github\.com/ansible\-collections/community\.general/pull/10285)\)\. +* xfconf \- minor adjustments the the code \([https\://github\.com/ansible\-collections/community\.general/pull/10311](https\://github\.com/ansible\-collections/community\.general/pull/10311)\)\. +* xml \- remove redundant brackets in conditionals\, no functional changes \([https\://github\.com/ansible\-collections/community\.general/pull/10328](https\://github\.com/ansible\-collections/community\.general/pull/10328)\)\. + + +### Deprecated Features + +* catapult \- module is deprecated and will be removed in community\.general 13\.0\.0 \([https\://github\.com/ansible\-collections/community\.general/issues/10318](https\://github\.com/ansible\-collections/community\.general/issues/10318)\, [https\://github\.com/ansible\-collections/community\.general/pull/10329](https\://github\.com/ansible\-collections/community\.general/pull/10329)\)\. +* pacemaker\_cluster \- the parameter state will become a required parameter in community\.general 12\.0\.0 \([https\://github\.com/ansible\-collections/community\.general/pull/10227](https\://github\.com/ansible\-collections/community\.general/pull/10227)\)\. + + +### Bugfixes + +* dependent lookup plugin \- avoid deprecated ansible\-core 2\.19 functionality \([https\://github\.com/ansible\-collections/community\.general/pull/10359](https\://github\.com/ansible\-collections/community\.general/pull/10359)\)\. +* github\_release \- support multiple types of GitHub tokens\; no longer failing when ghs\_ token type is provided \([https\://github\.com/ansible\-collections/community\.general/issues/10338](https\://github\.com/ansible\-collections/community\.general/issues/10338)\, [https\://github\.com/ansible\-collections/community\.general/pull/10339](https\://github\.com/ansible\-collections/community\.general/pull/10339)\)\. +* icinga2 inventory plugin \- avoid using deprecated option when templating options \([https\://github\.com/ansible\-collections/community\.general/pull/10271](https\://github\.com/ansible\-collections/community\.general/pull/10271)\)\. +* incus connection plugin \- fix error handling to return more useful Ansible errors to the user \([https\://github\.com/ansible\-collections/community\.general/issues/10344](https\://github\.com/ansible\-collections/community\.general/issues/10344)\, [https\://github\.com/ansible\-collections/community\.general/pull/10349](https\://github\.com/ansible\-collections/community\.general/pull/10349)\)\. +* linode inventory plugin \- avoid using deprecated option when templating options \([https\://github\.com/ansible\-collections/community\.general/pull/10271](https\://github\.com/ansible\-collections/community\.general/pull/10271)\)\. +* logstash callback plugin \- remove reference to Python 2 library \([https\://github\.com/ansible\-collections/community\.general/pull/10345](https\://github\.com/ansible\-collections/community\.general/pull/10345)\)\. + + +### New Plugins + + +#### Callback + +* community\.general\.tasks\_only \- Only show tasks\. + + +### New Modules + +* community\.general\.jenkins\_credential \- Manage Jenkins credentials and domains via API\. + + +## v11\.0\.0 + + +### Release Summary + +This is release 11\.0\.0 of community\.general\, released on 2025\-06\-16\. + + +### Minor Changes + +* CmdRunner module utils \- the convenience method cmd\_runner\_fmt\.as\_fixed\(\) now accepts multiple arguments as a list \([https\://github\.com/ansible\-collections/community\.general/pull/9893](https\://github\.com/ansible\-collections/community\.general/pull/9893)\)\. +* MH module utils \- delegate debug to the underlying AnsibleModule instance or issues a warning if an attribute already exists with that name \([https\://github\.com/ansible\-collections/community\.general/pull/9577](https\://github\.com/ansible\-collections/community\.general/pull/9577)\)\. +* alternatives \- add family parameter that allows to utilize the \-\-family option available in RedHat version of update\-alternatives \([https\://github\.com/ansible\-collections/community\.general/issues/5060](https\://github\.com/ansible\-collections/community\.general/issues/5060)\, [https\://github\.com/ansible\-collections/community\.general/pull/9096](https\://github\.com/ansible\-collections/community\.general/pull/9096)\)\. +* apache2\_mod\_proxy \- better handling regexp extraction \([https\://github\.com/ansible\-collections/community\.general/pull/9609](https\://github\.com/ansible\-collections/community\.general/pull/9609)\)\. +* apache2\_mod\_proxy \- change type of state to a list of strings\. No change for the users \([https\://github\.com/ansible\-collections/community\.general/pull/9600](https\://github\.com/ansible\-collections/community\.general/pull/9600)\)\. +* apache2\_mod\_proxy \- code simplification\, no change in functionality \([https\://github\.com/ansible\-collections/community\.general/pull/9457](https\://github\.com/ansible\-collections/community\.general/pull/9457)\)\. +* apache2\_mod\_proxy \- improve readability when using results from fecth\_url\(\) \([https\://github\.com/ansible\-collections/community\.general/pull/9608](https\://github\.com/ansible\-collections/community\.general/pull/9608)\)\. +* apache2\_mod\_proxy \- refactor repeated code into method \([https\://github\.com/ansible\-collections/community\.general/pull/9599](https\://github\.com/ansible\-collections/community\.general/pull/9599)\)\. +* apache2\_mod\_proxy \- remove unused parameter and code from Balancer constructor \([https\://github\.com/ansible\-collections/community\.general/pull/9614](https\://github\.com/ansible\-collections/community\.general/pull/9614)\)\. +* apache2\_mod\_proxy \- simplified and improved string manipulation \([https\://github\.com/ansible\-collections/community\.general/pull/9614](https\://github\.com/ansible\-collections/community\.general/pull/9614)\)\. +* apache2\_mod\_proxy \- use deps to handle dependencies \([https\://github\.com/ansible\-collections/community\.general/pull/9612](https\://github\.com/ansible\-collections/community\.general/pull/9612)\)\. +* apache2\_module \- added workaround for new PHP module name\, from php7\_module to php\_module \([https\://github\.com/ansible\-collections/community\.general/pull/9951](https\://github\.com/ansible\-collections/community\.general/pull/9951)\)\. +* bitwarden lookup plugin \- add new option collection\_name to filter results by collection name\, and new option result\_count to validate number of results \([https\://github\.com/ansible\-collections/community\.general/pull/9728](https\://github\.com/ansible\-collections/community\.general/pull/9728)\)\. +* bitwarden lookup plugin \- use f\-strings instead of interpolations or format \([https\://github\.com/ansible\-collections/community\.general/pull/9324](https\://github\.com/ansible\-collections/community\.general/pull/9324)\)\. +* cargo \- add features parameter to allow activating specific features when installing Rust packages \([https\://github\.com/ansible\-collections/community\.general/pull/10198](https\://github\.com/ansible\-collections/community\.general/pull/10198)\)\. +* cartesian lookup plugin \- removed compatibility code for ansible\-core \< 2\.14 \([https\://github\.com/ansible\-collections/community\.general/pull/10160](https\://github\.com/ansible\-collections/community\.general/pull/10160)\)\. +* cgroup\_memory\_recap callback plugin \- adjust standard preamble for Python 3 \([https\://github\.com/ansible\-collections/community\.general/pull/9583](https\://github\.com/ansible\-collections/community\.general/pull/9583)\)\. +* cgroup\_memory\_recap callback plugin \- use f\-strings instead of interpolations or format \([https\://github\.com/ansible\-collections/community\.general/pull/9321](https\://github\.com/ansible\-collections/community\.general/pull/9321)\)\. +* chef\_databag lookup plugin \- use f\-strings instead of interpolations or format \([https\://github\.com/ansible\-collections/community\.general/pull/9324](https\://github\.com/ansible\-collections/community\.general/pull/9324)\)\. +* chroot connection plugin \- adjust standard preamble for Python 3 \([https\://github\.com/ansible\-collections/community\.general/pull/9584](https\://github\.com/ansible\-collections/community\.general/pull/9584)\)\. +* chroot connection plugin \- clean up string conversions \([https\://github\.com/ansible\-collections/community\.general/pull/9379](https\://github\.com/ansible\-collections/community\.general/pull/9379)\)\. +* chroot connection plugin \- use f\-strings instead of interpolations or format \([https\://github\.com/ansible\-collections/community\.general/pull/9322](https\://github\.com/ansible\-collections/community\.general/pull/9322)\)\. +* cloud\_init\_data\_facts \- open file using open\(\) as a context manager \([https\://github\.com/ansible\-collections/community\.general/pull/9579](https\://github\.com/ansible\-collections/community\.general/pull/9579)\)\. +* cloudflare\_dns \- add support for comment and tags \([https\://github\.com/ansible\-collections/community\.general/pull/9132](https\://github\.com/ansible\-collections/community\.general/pull/9132)\)\. +* cobbler inventory plugin \- add connection\_timeout option to specify the connection timeout to the cobbler server \([https\://github\.com/ansible\-collections/community\.general/pull/11063](https\://github\.com/ansible\-collections/community\.general/pull/11063)\)\. +* cobbler inventory plugin \- add facts\_level option to allow requesting fully rendered variables for Cobbler systems \([https\://github\.com/ansible\-collections/community\.general/issues/9419](https\://github\.com/ansible\-collections/community\.general/issues/9419)\, [https\://github\.com/ansible\-collections/community\.general/pull/9975](https\://github\.com/ansible\-collections/community\.general/pull/9975)\)\. +* cobbler inventory plugin \- adjust standard preamble for Python 3 \([https\://github\.com/ansible\-collections/community\.general/pull/9584](https\://github\.com/ansible\-collections/community\.general/pull/9584)\)\. +* cobbler inventory plugin \- clean up string conversions \([https\://github\.com/ansible\-collections/community\.general/pull/9379](https\://github\.com/ansible\-collections/community\.general/pull/9379)\)\. +* cobbler inventory plugin \- use f\-strings instead of interpolations or format \([https\://github\.com/ansible\-collections/community\.general/pull/9323](https\://github\.com/ansible\-collections/community\.general/pull/9323)\)\. +* collection\_version lookup plugin \- use f\-strings instead of interpolations or format \([https\://github\.com/ansible\-collections/community\.general/pull/9324](https\://github\.com/ansible\-collections/community\.general/pull/9324)\)\. +* consul\_kv lookup plugin \- use f\-strings instead of interpolations or format \([https\://github\.com/ansible\-collections/community\.general/pull/9324](https\://github\.com/ansible\-collections/community\.general/pull/9324)\)\. +* consul\_token \- fix idempotency when policies or roles are supplied by name \([https\://github\.com/ansible\-collections/community\.general/issues/9841](https\://github\.com/ansible\-collections/community\.general/issues/9841)\, [https\://github\.com/ansible\-collections/community\.general/pull/9845](https\://github\.com/ansible\-collections/community\.general/pull/9845)\)\. +* context\_demo callback plugin \- adjust standard preamble for Python 3 \([https\://github\.com/ansible\-collections/community\.general/pull/9583](https\://github\.com/ansible\-collections/community\.general/pull/9583)\)\. +* context\_demo callback plugin \- use f\-strings instead of interpolations or format \([https\://github\.com/ansible\-collections/community\.general/pull/9321](https\://github\.com/ansible\-collections/community\.general/pull/9321)\)\. +* counter filter plugin \- adjust standard preamble for Python 3 \([https\://github\.com/ansible\-collections/community\.general/pull/9585](https\://github\.com/ansible\-collections/community\.general/pull/9585)\)\. +* counter\_enabled callback plugin \- adjust standard preamble for Python 3 \([https\://github\.com/ansible\-collections/community\.general/pull/9583](https\://github\.com/ansible\-collections/community\.general/pull/9583)\)\. +* counter\_enabled callback plugin \- use f\-strings instead of interpolations or format \([https\://github\.com/ansible\-collections/community\.general/pull/9321](https\://github\.com/ansible\-collections/community\.general/pull/9321)\)\. +* cpanm \- enable usage of option \-\-with\-recommends \([https\://github\.com/ansible\-collections/community\.general/issues/9554](https\://github\.com/ansible\-collections/community\.general/issues/9554)\, [https\://github\.com/ansible\-collections/community\.general/pull/9555](https\://github\.com/ansible\-collections/community\.general/pull/9555)\)\. +* cpanm \- enable usage of option \-\-with\-suggests \([https\://github\.com/ansible\-collections/community\.general/pull/9555](https\://github\.com/ansible\-collections/community\.general/pull/9555)\)\. +* crc32 filter plugin \- adjust standard preamble for Python 3 \([https\://github\.com/ansible\-collections/community\.general/pull/9585](https\://github\.com/ansible\-collections/community\.general/pull/9585)\)\. +* credstash lookup plugin \- use f\-strings instead of interpolations or format \([https\://github\.com/ansible\-collections/community\.general/pull/9324](https\://github\.com/ansible\-collections/community\.general/pull/9324)\)\. +* cronvar \- open file using open\(\) as a context manager \([https\://github\.com/ansible\-collections/community\.general/pull/9579](https\://github\.com/ansible\-collections/community\.general/pull/9579)\)\. +* crypttab \- open file using open\(\) as a context manager \([https\://github\.com/ansible\-collections/community\.general/pull/9579](https\://github\.com/ansible\-collections/community\.general/pull/9579)\)\. +* cyberarkpassword lookup plugin \- clean up string conversions \([https\://github\.com/ansible\-collections/community\.general/pull/9379](https\://github\.com/ansible\-collections/community\.general/pull/9379)\)\. +* cyberarkpassword lookup plugin \- use f\-strings instead of interpolations or format \([https\://github\.com/ansible\-collections/community\.general/pull/9324](https\://github\.com/ansible\-collections/community\.general/pull/9324)\)\. +* default\_without\_diff callback plugin \- adjust standard preamble for Python 3 \([https\://github\.com/ansible\-collections/community\.general/pull/9583](https\://github\.com/ansible\-collections/community\.general/pull/9583)\)\. +* dense callback plugin \- adjust standard preamble for Python 3 \([https\://github\.com/ansible\-collections/community\.general/pull/9583](https\://github\.com/ansible\-collections/community\.general/pull/9583)\)\. +* dense callback plugin \- use f\-strings instead of interpolations or format \([https\://github\.com/ansible\-collections/community\.general/pull/9321](https\://github\.com/ansible\-collections/community\.general/pull/9321)\)\. +* dependent lookup plugin \- removed compatibility code for ansible\-core \< 2\.14 \([https\://github\.com/ansible\-collections/community\.general/pull/10160](https\://github\.com/ansible\-collections/community\.general/pull/10160)\)\. +* dependent lookup plugin \- use f\-strings instead of interpolations or format \([https\://github\.com/ansible\-collections/community\.general/pull/9324](https\://github\.com/ansible\-collections/community\.general/pull/9324)\)\. +* deps module utils \- add deps\.clear\(\) to clear out previously declared dependencies \([https\://github\.com/ansible\-collections/community\.general/pull/9179](https\://github\.com/ansible\-collections/community\.general/pull/9179)\)\. +* dict filter plugin \- adjust standard preamble for Python 3 \([https\://github\.com/ansible\-collections/community\.general/pull/9585](https\://github\.com/ansible\-collections/community\.general/pull/9585)\)\. +* dict\_kv filter plugin \- adjust standard preamble for Python 3 \([https\://github\.com/ansible\-collections/community\.general/pull/9585](https\://github\.com/ansible\-collections/community\.general/pull/9585)\)\. +* dig lookup plugin \- clean up string conversions \([https\://github\.com/ansible\-collections/community\.general/pull/9379](https\://github\.com/ansible\-collections/community\.general/pull/9379)\)\. +* dig lookup plugin \- use f\-strings instead of interpolations or format \([https\://github\.com/ansible\-collections/community\.general/pull/9324](https\://github\.com/ansible\-collections/community\.general/pull/9324)\)\. +* diy callback plugin \- adjust standard preamble for Python 3 \([https\://github\.com/ansible\-collections/community\.general/pull/9583](https\://github\.com/ansible\-collections/community\.general/pull/9583)\)\. +* diy callback plugin \- use f\-strings instead of interpolations or format \([https\://github\.com/ansible\-collections/community\.general/pull/9321](https\://github\.com/ansible\-collections/community\.general/pull/9321)\)\. +* dnstxt lookup plugin \- clean up string conversions \([https\://github\.com/ansible\-collections/community\.general/pull/9379](https\://github\.com/ansible\-collections/community\.general/pull/9379)\)\. +* dnstxt lookup plugin \- use f\-strings instead of interpolations or format \([https\://github\.com/ansible\-collections/community\.general/pull/9324](https\://github\.com/ansible\-collections/community\.general/pull/9324)\)\. +* doas become plugin \- adjust standard preamble for Python 3 \([https\://github\.com/ansible\-collections/community\.general/pull/9583](https\://github\.com/ansible\-collections/community\.general/pull/9583)\)\. +* doas become plugin \- use f\-strings instead of interpolations or format \([https\://github\.com/ansible\-collections/community\.general/pull/9319](https\://github\.com/ansible\-collections/community\.general/pull/9319)\)\. +* dsv lookup plugin \- use f\-strings instead of interpolations or format \([https\://github\.com/ansible\-collections/community\.general/pull/9324](https\://github\.com/ansible\-collections/community\.general/pull/9324)\)\. +* dzdo become plugin \- adjust standard preamble for Python 3 \([https\://github\.com/ansible\-collections/community\.general/pull/9583](https\://github\.com/ansible\-collections/community\.general/pull/9583)\)\. +* dzdo become plugin \- use f\-strings instead of interpolations or format \([https\://github\.com/ansible\-collections/community\.general/pull/9319](https\://github\.com/ansible\-collections/community\.general/pull/9319)\)\. +* elastic callback plugin \- adjust standard preamble for Python 3 \([https\://github\.com/ansible\-collections/community\.general/pull/9583](https\://github\.com/ansible\-collections/community\.general/pull/9583)\)\. +* elastic callback plugin \- instead of trying to extract the ansible\-core version from task data\, use ansible\-core\'s actual version \([https\://github\.com/ansible\-collections/community\.general/pull/10193](https\://github\.com/ansible\-collections/community\.general/pull/10193)\)\. +* elastic callback plugin \- use f\-strings instead of interpolations or format \([https\://github\.com/ansible\-collections/community\.general/pull/9321](https\://github\.com/ansible\-collections/community\.general/pull/9321)\)\. +* etcd lookup plugin \- use f\-strings instead of interpolations or format \([https\://github\.com/ansible\-collections/community\.general/pull/9324](https\://github\.com/ansible\-collections/community\.general/pull/9324)\)\. +* etcd3 lookup plugin \- clean up string conversions \([https\://github\.com/ansible\-collections/community\.general/pull/9379](https\://github\.com/ansible\-collections/community\.general/pull/9379)\)\. +* etcd3 lookup plugin \- use f\-strings instead of interpolations or format \([https\://github\.com/ansible\-collections/community\.general/pull/9324](https\://github\.com/ansible\-collections/community\.general/pull/9324)\)\. +* filetree lookup plugin \- use f\-strings instead of interpolations or format \([https\://github\.com/ansible\-collections/community\.general/pull/9324](https\://github\.com/ansible\-collections/community\.general/pull/9324)\)\. +* flattened lookup plugin \- removed compatibility code for ansible\-core \< 2\.14 \([https\://github\.com/ansible\-collections/community\.general/pull/10160](https\://github\.com/ansible\-collections/community\.general/pull/10160)\)\. +* from\_csv filter plugin \- adjust standard preamble for Python 3 \([https\://github\.com/ansible\-collections/community\.general/pull/9585](https\://github\.com/ansible\-collections/community\.general/pull/9585)\)\. +* from\_csv filter plugin \- clean up string conversions \([https\://github\.com/ansible\-collections/community\.general/pull/9379](https\://github\.com/ansible\-collections/community\.general/pull/9379)\)\. +* from\_ini filter plugin \- adjust standard preamble for Python 3 \([https\://github\.com/ansible\-collections/community\.general/pull/9585](https\://github\.com/ansible\-collections/community\.general/pull/9585)\)\. +* from\_ini filter plugin \- clean up string conversions \([https\://github\.com/ansible\-collections/community\.general/pull/9379](https\://github\.com/ansible\-collections/community\.general/pull/9379)\)\. +* funcd connection plugin \- adjust standard preamble for Python 3 \([https\://github\.com/ansible\-collections/community\.general/pull/9584](https\://github\.com/ansible\-collections/community\.general/pull/9584)\)\. +* funcd connection plugin \- use f\-strings instead of interpolations or format \([https\://github\.com/ansible\-collections/community\.general/pull/9322](https\://github\.com/ansible\-collections/community\.general/pull/9322)\)\. +* git\_config \- remove redundant required\=False from argument\_spec \([https\://github\.com/ansible\-collections/community\.general/pull/10177](https\://github\.com/ansible\-collections/community\.general/pull/10177)\)\. +* github\_app\_access\_token lookup plugin \- use f\-strings instead of interpolations or format \([https\://github\.com/ansible\-collections/community\.general/pull/9324](https\://github\.com/ansible\-collections/community\.general/pull/9324)\)\. +* github\_key \- add api\_url parameter to support GitHub Enterprise Server installations \([https\://github\.com/ansible\-collections/community\.general/pull/10191](https\://github\.com/ansible\-collections/community\.general/pull/10191)\)\. +* gitlab\_instance\_variable \- add support for raw variables suboption \([https\://github\.com/ansible\-collections/community\.general/pull/9425](https\://github\.com/ansible\-collections/community\.general/pull/9425)\)\. +* gitlab\_project \- add option build\_timeout \([https\://github\.com/ansible\-collections/community\.general/pull/9960](https\://github\.com/ansible\-collections/community\.general/pull/9960)\)\. +* gitlab\_project\_members \- extend choices parameter access\_level by missing upstream valid value owner \([https\://github\.com/ansible\-collections/community\.general/pull/9953](https\://github\.com/ansible\-collections/community\.general/pull/9953)\)\. +* gitlab\_runners inventory plugin \- adjust standard preamble for Python 3 \([https\://github\.com/ansible\-collections/community\.general/pull/9584](https\://github\.com/ansible\-collections/community\.general/pull/9584)\)\. +* gitlab\_runners inventory plugin \- clean up string conversions \([https\://github\.com/ansible\-collections/community\.general/pull/9379](https\://github\.com/ansible\-collections/community\.general/pull/9379)\)\. +* gitlab\_runners inventory plugin \- use f\-strings instead of interpolations or format \([https\://github\.com/ansible\-collections/community\.general/pull/9323](https\://github\.com/ansible\-collections/community\.general/pull/9323)\)\. +* groupby\_as\_dict filter plugin \- adjust standard preamble for Python 3 \([https\://github\.com/ansible\-collections/community\.general/pull/9585](https\://github\.com/ansible\-collections/community\.general/pull/9585)\)\. +* hashids filter plugin \- adjust standard preamble for Python 3 \([https\://github\.com/ansible\-collections/community\.general/pull/9585](https\://github\.com/ansible\-collections/community\.general/pull/9585)\)\. +* hiera lookup plugin \- use f\-strings instead of interpolations or format \([https\://github\.com/ansible\-collections/community\.general/pull/9324](https\://github\.com/ansible\-collections/community\.general/pull/9324)\)\. +* homebrew \- greatly speed up module when multiple packages are passed in the name option \([https\://github\.com/ansible\-collections/community\.general/pull/9181](https\://github\.com/ansible\-collections/community\.general/pull/9181)\)\. +* homebrew \- remove duplicated package name validation \([https\://github\.com/ansible\-collections/community\.general/pull/9076](https\://github\.com/ansible\-collections/community\.general/pull/9076)\)\. +* hpilo\_boot \- add option to get an idempotent behavior while powering on server\, resulting in success instead of failure when using state\: boot\_once option \([https\://github\.com/ansible\-collections/community\.general/pull/9646](https\://github\.com/ansible\-collections/community\.general/pull/9646)\)\. +* icinga2 inventory plugin \- adjust standard preamble for Python 3 \([https\://github\.com/ansible\-collections/community\.general/pull/9584](https\://github\.com/ansible\-collections/community\.general/pull/9584)\)\. +* icinga2 inventory plugin \- use f\-strings instead of interpolations or format \([https\://github\.com/ansible\-collections/community\.general/pull/9323](https\://github\.com/ansible\-collections/community\.general/pull/9323)\)\. +* idrac\_redfish\_command\, idrac\_redfish\_config\, idrac\_redfish\_info \- add validate\_certs\, ca\_path\, and ciphers options to configure TLS/SSL \([https\://github\.com/ansible\-collections/community\.general/issues/3686](https\://github\.com/ansible\-collections/community\.general/issues/3686)\, [https\://github\.com/ansible\-collections/community\.general/pull/9964](https\://github\.com/ansible\-collections/community\.general/pull/9964)\)\. +* ilo\_redfish\_command\, ilo\_redfish\_config\, ilo\_redfish\_info \- add validate\_certs\, ca\_path\, and ciphers options to configure TLS/SSL \([https\://github\.com/ansible\-collections/community\.general/issues/3686](https\://github\.com/ansible\-collections/community\.general/issues/3686)\, [https\://github\.com/ansible\-collections/community\.general/pull/9964](https\://github\.com/ansible\-collections/community\.general/pull/9964)\)\. +* incus connection plugin \- adds remote\_user and incus\_become\_method parameters for allowing a non\-root user to connect to an Incus instance \([https\://github\.com/ansible\-collections/community\.general/pull/9743](https\://github\.com/ansible\-collections/community\.general/pull/9743)\)\. +* incus connection plugin \- adjust standard preamble for Python 3 \([https\://github\.com/ansible\-collections/community\.general/pull/9584](https\://github\.com/ansible\-collections/community\.general/pull/9584)\)\. +* incus connection plugin \- use f\-strings instead of interpolations or format \([https\://github\.com/ansible\-collections/community\.general/pull/9322](https\://github\.com/ansible\-collections/community\.general/pull/9322)\)\. +* ini\_file \- modify an inactive option also when there are spaces in front of the comment symbol \([https\://github\.com/ansible\-collections/community\.general/pull/10102](https\://github\.com/ansible\-collections/community\.general/pull/10102)\, [https\://github\.com/ansible\-collections/community\.general/issues/8539](https\://github\.com/ansible\-collections/community\.general/issues/8539)\)\. +* iocage connection plugin \- adjust standard preamble for Python 3 \([https\://github\.com/ansible\-collections/community\.general/pull/9584](https\://github\.com/ansible\-collections/community\.general/pull/9584)\)\. +* iocage connection plugin \- use f\-strings instead of interpolations or format \([https\://github\.com/ansible\-collections/community\.general/pull/9322](https\://github\.com/ansible\-collections/community\.general/pull/9322)\)\. +* iocage inventory plugin \- adjust standard preamble for Python 3 \([https\://github\.com/ansible\-collections/community\.general/pull/9584](https\://github\.com/ansible\-collections/community\.general/pull/9584)\)\. +* iocage inventory plugin \- clean up string conversions \([https\://github\.com/ansible\-collections/community\.general/pull/9379](https\://github\.com/ansible\-collections/community\.general/pull/9379)\)\. +* iocage inventory plugin \- the new parameter hooks\_results of the plugin is a list of files inside a jail that provide configuration parameters for the inventory\. The inventory plugin reads the files from the jails and put the contents into the items of created variable iocage\_hooks \([https\://github\.com/ansible\-collections/community\.general/issues/9650](https\://github\.com/ansible\-collections/community\.general/issues/9650)\, [https\://github\.com/ansible\-collections/community\.general/pull/9651](https\://github\.com/ansible\-collections/community\.general/pull/9651)\)\. +* iocage inventory plugin \- the new parameter inventory\_hostname\_tag of the plugin provides the name of the tag in the C\(iocage properties notes\) that contains the jails alias\. The new parameter inventory\_hostname\_required\, if enabled\, makes the tag mandatory \([https\://github\.com/ansible\-collections/community\.general/issues/10206](https\://github\.com/ansible\-collections/community\.general/issues/10206)\, [https\://github\.com/ansible\-collections/community\.general/pull/10207](https\://github\.com/ansible\-collections/community\.general/pull/10207)\)\. +* iocage inventory plugin \- the new parameter sudo of the plugin lets the command iocage list \-l to run as root on the iocage host\. This is needed to get the IPv4 of a running DHCP jail \([https\://github\.com/ansible\-collections/community\.general/issues/9572](https\://github\.com/ansible\-collections/community\.general/issues/9572)\, [https\://github\.com/ansible\-collections/community\.general/pull/9573](https\://github\.com/ansible\-collections/community\.general/pull/9573)\)\. +* iptables\_state action plugin \- adjust standard preamble for Python 3 \([https\://github\.com/ansible\-collections/community\.general/pull/9583](https\://github\.com/ansible\-collections/community\.general/pull/9583)\)\. +* iptables\_state action plugin \- use f\-strings instead of interpolations or format \([https\://github\.com/ansible\-collections/community\.general/pull/9318](https\://github\.com/ansible\-collections/community\.general/pull/9318)\)\. +* iso\_extract \- adds password parameter that is passed to 7z \([https\://github\.com/ansible\-collections/community\.general/pull/9159](https\://github\.com/ansible\-collections/community\.general/pull/9159)\)\. +* jabber callback plugin \- adjust standard preamble for Python 3 \([https\://github\.com/ansible\-collections/community\.general/pull/9583](https\://github\.com/ansible\-collections/community\.general/pull/9583)\)\. +* jabber callback plugin \- use f\-strings instead of interpolations or format \([https\://github\.com/ansible\-collections/community\.general/pull/9321](https\://github\.com/ansible\-collections/community\.general/pull/9321)\)\. +* jail connection plugin \- adjust standard preamble for Python 3 \([https\://github\.com/ansible\-collections/community\.general/pull/9584](https\://github\.com/ansible\-collections/community\.general/pull/9584)\)\. +* jail connection plugin \- use f\-strings instead of interpolations or format \([https\://github\.com/ansible\-collections/community\.general/pull/9322](https\://github\.com/ansible\-collections/community\.general/pull/9322)\)\. +* jc filter plugin \- adjust standard preamble for Python 3 \([https\://github\.com/ansible\-collections/community\.general/pull/9585](https\://github\.com/ansible\-collections/community\.general/pull/9585)\)\. +* jira \- adds client\_cert and client\_key parameters for supporting client certificate authentification when connecting to Jira \([https\://github\.com/ansible\-collections/community\.general/pull/9753](https\://github\.com/ansible\-collections/community\.general/pull/9753)\)\. +* jira \- transition operation now has status\_id to directly reference wanted transition \([https\://github\.com/ansible\-collections/community\.general/pull/9602](https\://github\.com/ansible\-collections/community\.general/pull/9602)\)\. +* json\_query filter plugin \- adjust standard preamble for Python 3 \([https\://github\.com/ansible\-collections/community\.general/pull/9585](https\://github\.com/ansible\-collections/community\.general/pull/9585)\)\. +* keep\_keys filter plugin \- adjust standard preamble for Python 3 \([https\://github\.com/ansible\-collections/community\.general/pull/9585](https\://github\.com/ansible\-collections/community\.general/pull/9585)\)\. +* keycloak \- add an action group for Keycloak modules to allow module\_defaults to be set for Keycloak tasks \([https\://github\.com/ansible\-collections/community\.general/pull/9284](https\://github\.com/ansible\-collections/community\.general/pull/9284)\)\. +* keycloak module\_utils \- user groups can now be referenced by their name\, like staff\, or their path\, like /staff/engineering\. The path syntax allows users to reference subgroups\, which is not possible otherwise \([https\://github\.com/ansible\-collections/community\.general/pull/9898](https\://github\.com/ansible\-collections/community\.general/pull/9898)\)\. +* keycloak\_\* modules \- refresh\_token parameter added\. When multiple authentication parameters are provided \(token\, refresh\_token\, and auth\_username/auth\_password\)\, modules will now automatically retry requests upon authentication errors \(401\)\, using in order the token\, refresh token\, and username/password \([https\://github\.com/ansible\-collections/community\.general/pull/9494](https\://github\.com/ansible\-collections/community\.general/pull/9494)\)\. +* keycloak\_realm \- remove ID requirement when creating a realm to allow Keycloak generating its own realm ID \([https\://github\.com/ansible\-collections/community\.general/pull/9768](https\://github\.com/ansible\-collections/community\.general/pull/9768)\)\. +* keycloak\_user module \- user groups can now be referenced by their name\, like staff\, or their path\, like /staff/engineering\. The path syntax allows users to reference subgroups\, which is not possible otherwise \([https\://github\.com/ansible\-collections/community\.general/pull/9898](https\://github\.com/ansible\-collections/community\.general/pull/9898)\)\. +* keyring lookup plugin \- use f\-strings instead of interpolations or format \([https\://github\.com/ansible\-collections/community\.general/pull/9324](https\://github\.com/ansible\-collections/community\.general/pull/9324)\)\. +* known\_hosts \- open file using open\(\) as a context manager \([https\://github\.com/ansible\-collections/community\.general/pull/9579](https\://github\.com/ansible\-collections/community\.general/pull/9579)\)\. +* ksu become plugin \- adjust standard preamble for Python 3 \([https\://github\.com/ansible\-collections/community\.general/pull/9583](https\://github\.com/ansible\-collections/community\.general/pull/9583)\)\. +* ksu become plugin \- use f\-strings instead of interpolations or format \([https\://github\.com/ansible\-collections/community\.general/pull/9319](https\://github\.com/ansible\-collections/community\.general/pull/9319)\)\. +* lastpass lookup plugin \- use f\-strings instead of interpolations or format \([https\://github\.com/ansible\-collections/community\.general/pull/9324](https\://github\.com/ansible\-collections/community\.general/pull/9324)\)\. +* launchd \- add plist option for services such as sshd\, where the plist filename doesn\'t match the service name \([https\://github\.com/ansible\-collections/community\.general/pull/9102](https\://github\.com/ansible\-collections/community\.general/pull/9102)\)\. +* linode inventory plugin \- adjust standard preamble for Python 3 \([https\://github\.com/ansible\-collections/community\.general/pull/9584](https\://github\.com/ansible\-collections/community\.general/pull/9584)\)\. +* linode inventory plugin \- use f\-strings instead of interpolations or format \([https\://github\.com/ansible\-collections/community\.general/pull/9323](https\://github\.com/ansible\-collections/community\.general/pull/9323)\)\. +* lists filter plugin \- adjust standard preamble for Python 3 \([https\://github\.com/ansible\-collections/community\.general/pull/9585](https\://github\.com/ansible\-collections/community\.general/pull/9585)\)\. +* lists\_mergeby filter plugin \- adjust standard preamble for Python 3 \([https\://github\.com/ansible\-collections/community\.general/pull/9585](https\://github\.com/ansible\-collections/community\.general/pull/9585)\)\. +* lldp \- adds multivalues parameter to control behavior when lldpctl outputs an attribute multiple times \([https\://github\.com/ansible\-collections/community\.general/pull/9657](https\://github\.com/ansible\-collections/community\.general/pull/9657)\)\. +* lmdb\_kv lookup plugin \- clean up string conversions \([https\://github\.com/ansible\-collections/community\.general/pull/9379](https\://github\.com/ansible\-collections/community\.general/pull/9379)\)\. +* lmdb\_kv lookup plugin \- use f\-strings instead of interpolations or format \([https\://github\.com/ansible\-collections/community\.general/pull/9324](https\://github\.com/ansible\-collections/community\.general/pull/9324)\)\. +* locale\_gen \- invert the logic to determine ubuntu\_mode\, making it look first for /etc/locale\.gen \(set ubuntu\_mode to False\) and only then looking for /var/lib/locales/supported\.d/ \(set ubuntu\_mode to True\) \([https\://github\.com/ansible\-collections/community\.general/pull/9238](https\://github\.com/ansible\-collections/community\.general/pull/9238)\, [https\://github\.com/ansible\-collections/community\.general/issues/9131](https\://github\.com/ansible\-collections/community\.general/issues/9131)\, [https\://github\.com/ansible\-collections/community\.general/issues/8487](https\://github\.com/ansible\-collections/community\.general/issues/8487)\)\. +* locale\_gen \- new return value mechanism to better express the semantics of the ubuntu\_mode\, with the possible values being either glibc \(ubuntu\_mode\=False\) or ubuntu\_legacy \(ubuntu\_mode\=True\) \([https\://github\.com/ansible\-collections/community\.general/pull/9238](https\://github\.com/ansible\-collections/community\.general/pull/9238)\)\. +* log\_plays callback plugin \- adjust standard preamble for Python 3 \([https\://github\.com/ansible\-collections/community\.general/pull/9583](https\://github\.com/ansible\-collections/community\.general/pull/9583)\)\. +* log\_plays callback plugin \- use f\-strings instead of interpolations or format \([https\://github\.com/ansible\-collections/community\.general/pull/9321](https\://github\.com/ansible\-collections/community\.general/pull/9321)\)\. +* loganalytics callback plugin \- adjust standard preamble for Python 3 \([https\://github\.com/ansible\-collections/community\.general/pull/9583](https\://github\.com/ansible\-collections/community\.general/pull/9583)\)\. +* loganalytics callback plugin \- instead of trying to extract the ansible\-core version from task data\, use ansible\-core\'s actual version \([https\://github\.com/ansible\-collections/community\.general/pull/10193](https\://github\.com/ansible\-collections/community\.general/pull/10193)\)\. +* loganalytics callback plugin \- use f\-strings instead of interpolations or format \([https\://github\.com/ansible\-collections/community\.general/pull/9321](https\://github\.com/ansible\-collections/community\.general/pull/9321)\)\. +* logdna callback plugin \- adjust standard preamble for Python 3 \([https\://github\.com/ansible\-collections/community\.general/pull/9583](https\://github\.com/ansible\-collections/community\.general/pull/9583)\)\. +* logdna callback plugin \- use f\-strings instead of interpolations or format \([https\://github\.com/ansible\-collections/community\.general/pull/9321](https\://github\.com/ansible\-collections/community\.general/pull/9321)\)\. +* logentries callback plugin \- adjust standard preamble for Python 3 \([https\://github\.com/ansible\-collections/community\.general/pull/9583](https\://github\.com/ansible\-collections/community\.general/pull/9583)\)\. +* logentries callback plugin \- clean up string conversions \([https\://github\.com/ansible\-collections/community\.general/pull/9379](https\://github\.com/ansible\-collections/community\.general/pull/9379)\)\. +* logentries callback plugin \- use f\-strings instead of interpolations or format \([https\://github\.com/ansible\-collections/community\.general/pull/9321](https\://github\.com/ansible\-collections/community\.general/pull/9321)\)\. +* logstash callback plugin \- adjust standard preamble for Python 3 \([https\://github\.com/ansible\-collections/community\.general/pull/9583](https\://github\.com/ansible\-collections/community\.general/pull/9583)\)\. +* lvg \- add remove\_extra\_pvs parameter to control if ansible should remove physical volumes which are not in the pvs parameter \([https\://github\.com/ansible\-collections/community\.general/pull/9698](https\://github\.com/ansible\-collections/community\.general/pull/9698)\)\. +* lxc connection plugin \- adjust standard preamble for Python 3 \([https\://github\.com/ansible\-collections/community\.general/pull/9584](https\://github\.com/ansible\-collections/community\.general/pull/9584)\)\. +* lxc connection plugin \- use f\-strings instead of interpolations or format \([https\://github\.com/ansible\-collections/community\.general/pull/9322](https\://github\.com/ansible\-collections/community\.general/pull/9322)\)\. +* lxd connection plugin \- adds remote\_user and lxd\_become\_method parameters for allowing a non\-root user to connect to an LXD instance \([https\://github\.com/ansible\-collections/community\.general/pull/9659](https\://github\.com/ansible\-collections/community\.general/pull/9659)\)\. +* lxd connection plugin \- adjust standard preamble for Python 3 \([https\://github\.com/ansible\-collections/community\.general/pull/9584](https\://github\.com/ansible\-collections/community\.general/pull/9584)\)\. +* lxd connection plugin \- use f\-strings instead of interpolations or format \([https\://github\.com/ansible\-collections/community\.general/pull/9322](https\://github\.com/ansible\-collections/community\.general/pull/9322)\)\. +* lxd inventory plugin \- adjust standard preamble for Python 3 \([https\://github\.com/ansible\-collections/community\.general/pull/9584](https\://github\.com/ansible\-collections/community\.general/pull/9584)\)\. +* lxd inventory plugin \- clean up string conversions \([https\://github\.com/ansible\-collections/community\.general/pull/9379](https\://github\.com/ansible\-collections/community\.general/pull/9379)\)\. +* lxd inventory plugin \- use f\-strings instead of interpolations or format \([https\://github\.com/ansible\-collections/community\.general/pull/9323](https\://github\.com/ansible\-collections/community\.general/pull/9323)\)\. +* machinectl become plugin \- adjust standard preamble for Python 3 \([https\://github\.com/ansible\-collections/community\.general/pull/9583](https\://github\.com/ansible\-collections/community\.general/pull/9583)\)\. +* machinectl become plugin \- use f\-strings instead of interpolations or format \([https\://github\.com/ansible\-collections/community\.general/pull/9319](https\://github\.com/ansible\-collections/community\.general/pull/9319)\)\. +* mail callback plugin \- adjust standard preamble for Python 3 \([https\://github\.com/ansible\-collections/community\.general/pull/9583](https\://github\.com/ansible\-collections/community\.general/pull/9583)\)\. +* mail callback plugin \- use f\-strings instead of interpolations or format \([https\://github\.com/ansible\-collections/community\.general/pull/9321](https\://github\.com/ansible\-collections/community\.general/pull/9321)\)\. +* manageiq\_alert\_profiles \- improve handling of parameter requirements \([https\://github\.com/ansible\-collections/community\.general/pull/9449](https\://github\.com/ansible\-collections/community\.general/pull/9449)\)\. +* manifold lookup plugin \- clean up string conversions \([https\://github\.com/ansible\-collections/community\.general/pull/9379](https\://github\.com/ansible\-collections/community\.general/pull/9379)\)\. +* manifold lookup plugin \- use f\-strings instead of interpolations or format \([https\://github\.com/ansible\-collections/community\.general/pull/9324](https\://github\.com/ansible\-collections/community\.general/pull/9324)\)\. +* maven\_artifact \- removed compatibility code for ansible\-core \< 2\.12 \([https\://github\.com/ansible\-collections/community\.general/pull/10192](https\://github\.com/ansible\-collections/community\.general/pull/10192)\)\. +* memcached cache plugin \- adjust standard preamble for Python 3 \([https\://github\.com/ansible\-collections/community\.general/pull/9583](https\://github\.com/ansible\-collections/community\.general/pull/9583)\)\. +* memcached cache plugin \- use f\-strings instead of interpolations or format \([https\://github\.com/ansible\-collections/community\.general/pull/9320](https\://github\.com/ansible\-collections/community\.general/pull/9320)\)\. +* merge\_variables lookup plugin \- use f\-strings instead of interpolations or format \([https\://github\.com/ansible\-collections/community\.general/pull/9324](https\://github\.com/ansible\-collections/community\.general/pull/9324)\)\. +* nmap inventory plugin \- adds dns\_servers option for specifying DNS servers for name resolution\. Accepts hostnames or IP addresses in the same format as the exclude option \([https\://github\.com/ansible\-collections/community\.general/pull/9849](https\://github\.com/ansible\-collections/community\.general/pull/9849)\)\. +* nmap inventory plugin \- adjust standard preamble for Python 3 \([https\://github\.com/ansible\-collections/community\.general/pull/9584](https\://github\.com/ansible\-collections/community\.general/pull/9584)\)\. +* nmap inventory plugin \- clean up string conversions \([https\://github\.com/ansible\-collections/community\.general/pull/9379](https\://github\.com/ansible\-collections/community\.general/pull/9379)\)\. +* nmap inventory plugin \- use f\-strings instead of interpolations or format \([https\://github\.com/ansible\-collections/community\.general/pull/9323](https\://github\.com/ansible\-collections/community\.general/pull/9323)\)\. +* nmcli \- add sriov parameter that enables support for SR\-IOV settings \([https\://github\.com/ansible\-collections/community\.general/pull/9168](https\://github\.com/ansible\-collections/community\.general/pull/9168)\)\. +* nmcli \- add a option fail\_over\_mac \([https\://github\.com/ansible\-collections/community\.general/issues/9570](https\://github\.com/ansible\-collections/community\.general/issues/9570)\, [https\://github\.com/ansible\-collections/community\.general/pull/9571](https\://github\.com/ansible\-collections/community\.general/pull/9571)\)\. +* nmcli \- add support for Infiniband MAC setting when type is infiniband \([https\://github\.com/ansible\-collections/community\.general/pull/9962](https\://github\.com/ansible\-collections/community\.general/pull/9962)\)\. +* nmcli \- adds VRF support with new type value vrf and new slave\_type value vrf as well as new table parameter \([https\://github\.com/ansible\-collections/community\.general/pull/9658](https\://github\.com/ansible\-collections/community\.general/pull/9658)\, [https\://github\.com/ansible\-collections/community\.general/issues/8014](https\://github\.com/ansible\-collections/community\.general/issues/8014)\)\. +* nmcli \- adds autoconnect\_priority and autoconnect\_retries options to support autoconnect logic \([https\://github\.com/ansible\-collections/community\.general/pull/10134](https\://github\.com/ansible\-collections/community\.general/pull/10134)\)\. +* nrdp callback plugin \- adjust standard preamble for Python 3 \([https\://github\.com/ansible\-collections/community\.general/pull/9583](https\://github\.com/ansible\-collections/community\.general/pull/9583)\)\. +* nrdp callback plugin \- use f\-strings instead of interpolations or format \([https\://github\.com/ansible\-collections/community\.general/pull/9321](https\://github\.com/ansible\-collections/community\.general/pull/9321)\)\. +* null callback plugin \- adjust standard preamble for Python 3 \([https\://github\.com/ansible\-collections/community\.general/pull/9583](https\://github\.com/ansible\-collections/community\.general/pull/9583)\)\. +* one\_template \- adds filter option for retrieving templates which are not owned by the user \([https\://github\.com/ansible\-collections/community\.general/pull/9547](https\://github\.com/ansible\-collections/community\.general/pull/9547)\, [https\://github\.com/ansible\-collections/community\.general/issues/9278](https\://github\.com/ansible\-collections/community\.general/issues/9278)\)\. +* one\_vm \- update allowed values for updateconf to include new parameters as per the latest OpenNebula API documentation\. + Added parameters\: + + - OS\: FIRMWARE\; + - CPU\_MODEL\: MODEL\, FEATURES\; + - FEATURES\: VIRTIO\_BLK\_QUEUES\, VIRTIO\_SCSI\_QUEUES\, IOTHREADS\; + - GRAPHICS\: PORT\, COMMAND\; + - VIDEO\: ATS\, IOMMU\, RESOLUTION\, TYPE\, VRAM\; + - RAW\: VALIDATE\; + - BACKUP\_CONFIG\: FS\_FREEZE\, KEEP\_LAST\, BACKUP\_VOLATILE\, MODE\, INCREMENT\_MODE\. + + \([https\://github\.com/ansible\-collections/community\.general/pull/9959](https\://github\.com/ansible\-collections/community\.general/pull/9959)\)\. +* onepassword lookup plugin \- clean up string conversions \([https\://github\.com/ansible\-collections/community\.general/pull/9379](https\://github\.com/ansible\-collections/community\.general/pull/9379)\)\. +* onepassword lookup plugin \- use f\-strings instead of interpolations or format \([https\://github\.com/ansible\-collections/community\.general/pull/9324](https\://github\.com/ansible\-collections/community\.general/pull/9324)\)\. +* onepassword\_doc lookup plugin \- use f\-strings instead of interpolations or format \([https\://github\.com/ansible\-collections/community\.general/pull/9324](https\://github\.com/ansible\-collections/community\.general/pull/9324)\)\. +* onepassword\_ssh\_key \- refactor to move code to lookup class \([https\://github\.com/ansible\-collections/community\.general/pull/9633](https\://github\.com/ansible\-collections/community\.general/pull/9633)\)\. +* online inventory plugin \- adjust standard preamble for Python 3 \([https\://github\.com/ansible\-collections/community\.general/pull/9584](https\://github\.com/ansible\-collections/community\.general/pull/9584)\)\. +* online inventory plugin \- use f\-strings instead of interpolations or format \([https\://github\.com/ansible\-collections/community\.general/pull/9323](https\://github\.com/ansible\-collections/community\.general/pull/9323)\)\. +* opennebula inventory plugin \- adjust standard preamble for Python 3 \([https\://github\.com/ansible\-collections/community\.general/pull/9584](https\://github\.com/ansible\-collections/community\.general/pull/9584)\)\. +* opennebula inventory plugin \- clean up string conversions \([https\://github\.com/ansible\-collections/community\.general/pull/9379](https\://github\.com/ansible\-collections/community\.general/pull/9379)\)\. +* opennebula inventory plugin \- use f\-strings instead of interpolations or format \([https\://github\.com/ansible\-collections/community\.general/pull/9323](https\://github\.com/ansible\-collections/community\.general/pull/9323)\)\. +* opentelemetry callback plugin \- adjust standard preamble for Python 3 \([https\://github\.com/ansible\-collections/community\.general/pull/9583](https\://github\.com/ansible\-collections/community\.general/pull/9583)\)\. +* opentelemetry callback plugin \- instead of trying to extract the ansible\-core version from task data\, use ansible\-core\'s actual version \([https\://github\.com/ansible\-collections/community\.general/pull/10193](https\://github\.com/ansible\-collections/community\.general/pull/10193)\)\. +* opentelemetry callback plugin \- remove code handling Python versions prior to 3\.7 \([https\://github\.com/ansible\-collections/community\.general/pull/9482](https\://github\.com/ansible\-collections/community\.general/pull/9482)\)\. +* opentelemetry callback plugin \- remove code handling Python versions prior to 3\.7 \([https\://github\.com/ansible\-collections/community\.general/pull/9503](https\://github\.com/ansible\-collections/community\.general/pull/9503)\)\. +* opentelemetry callback plugin \- use f\-strings instead of interpolations or format \([https\://github\.com/ansible\-collections/community\.general/pull/9321](https\://github\.com/ansible\-collections/community\.general/pull/9321)\)\. +* pacemaker\_cluster \- remove unused code \([https\://github\.com/ansible\-collections/community\.general/pull/9471](https\://github\.com/ansible\-collections/community\.general/pull/9471)\)\. +* pacemaker\_cluster \- using safer mechanism to run external command \([https\://github\.com/ansible\-collections/community\.general/pull/9471](https\://github\.com/ansible\-collections/community\.general/pull/9471)\)\. +* pacemaker\_resource \- add maintenance mode support for handling resource creation and deletion \([https\://github\.com/ansible\-collections/community\.general/issues/10180](https\://github\.com/ansible\-collections/community\.general/issues/10180)\, [https\://github\.com/ansible\-collections/community\.general/pull/10194](https\://github\.com/ansible\-collections/community\.general/pull/10194)\)\. +* pacman\_key \- support verifying that keys are trusted and not expired \([https\://github\.com/ansible\-collections/community\.general/issues/9949](https\://github\.com/ansible\-collections/community\.general/issues/9949)\, [https\://github\.com/ansible\-collections/community\.general/pull/9950](https\://github\.com/ansible\-collections/community\.general/pull/9950)\)\. +* parted \- open file using open\(\) as a context manager \([https\://github\.com/ansible\-collections/community\.general/pull/9579](https\://github\.com/ansible\-collections/community\.general/pull/9579)\)\. +* passwordstore lookup plugin \- use f\-strings instead of interpolations or format \([https\://github\.com/ansible\-collections/community\.general/pull/9324](https\://github\.com/ansible\-collections/community\.general/pull/9324)\)\. +* pbrun become plugin \- adjust standard preamble for Python 3 \([https\://github\.com/ansible\-collections/community\.general/pull/9583](https\://github\.com/ansible\-collections/community\.general/pull/9583)\)\. +* pbrun become plugin \- use f\-strings instead of interpolations or format \([https\://github\.com/ansible\-collections/community\.general/pull/9319](https\://github\.com/ansible\-collections/community\.general/pull/9319)\)\. +* pfexec become plugin \- adjust standard preamble for Python 3 \([https\://github\.com/ansible\-collections/community\.general/pull/9583](https\://github\.com/ansible\-collections/community\.general/pull/9583)\)\. +* pfexec become plugin \- use f\-strings instead of interpolations or format \([https\://github\.com/ansible\-collections/community\.general/pull/9319](https\://github\.com/ansible\-collections/community\.general/pull/9319)\)\. +* pickle cache plugin \- adjust standard preamble for Python 3 \([https\://github\.com/ansible\-collections/community\.general/pull/9583](https\://github\.com/ansible\-collections/community\.general/pull/9583)\)\. +* pipx \- add return value version \([https\://github\.com/ansible\-collections/community\.general/pull/9180](https\://github\.com/ansible\-collections/community\.general/pull/9180)\)\. +* pipx \- parameter name now accepts Python package specifiers \([https\://github\.com/ansible\-collections/community\.general/issues/7815](https\://github\.com/ansible\-collections/community\.general/issues/7815)\, [https\://github\.com/ansible\-collections/community\.general/pull/10031](https\://github\.com/ansible\-collections/community\.general/pull/10031)\)\. +* pipx module\_utils \- filtering application list by name now happens in the modules \([https\://github\.com/ansible\-collections/community\.general/pull/10031](https\://github\.com/ansible\-collections/community\.general/pull/10031)\)\. +* pipx\_info \- add return value version \([https\://github\.com/ansible\-collections/community\.general/pull/9180](https\://github\.com/ansible\-collections/community\.general/pull/9180)\)\. +* pipx\_info \- filtering application list by name now happens in the module \([https\://github\.com/ansible\-collections/community\.general/pull/10031](https\://github\.com/ansible\-collections/community\.general/pull/10031)\)\. +* pmrun become plugin \- adjust standard preamble for Python 3 \([https\://github\.com/ansible\-collections/community\.general/pull/9583](https\://github\.com/ansible\-collections/community\.general/pull/9583)\)\. +* pmrun become plugin \- use f\-strings instead of interpolations or format \([https\://github\.com/ansible\-collections/community\.general/pull/9319](https\://github\.com/ansible\-collections/community\.general/pull/9319)\)\. +* pulp\_repo \- open file using open\(\) as a context manager \([https\://github\.com/ansible\-collections/community\.general/pull/9579](https\://github\.com/ansible\-collections/community\.general/pull/9579)\)\. +* puppet \- improve parameter formatting\, no impact to user \([https\://github\.com/ansible\-collections/community\.general/pull/10014](https\://github\.com/ansible\-collections/community\.general/pull/10014)\)\. +* qubes connection plugin \- adjust standard preamble for Python 3 \([https\://github\.com/ansible\-collections/community\.general/pull/9584](https\://github\.com/ansible\-collections/community\.general/pull/9584)\)\. +* qubes connection plugin \- use f\-strings instead of interpolations or format \([https\://github\.com/ansible\-collections/community\.general/pull/9322](https\://github\.com/ansible\-collections/community\.general/pull/9322)\)\. +* random\_mac filter plugin \- adjust standard preamble for Python 3 \([https\://github\.com/ansible\-collections/community\.general/pull/9585](https\://github\.com/ansible\-collections/community\.general/pull/9585)\)\. +* random\_pet lookup plugin \- use f\-strings instead of interpolations or format \([https\://github\.com/ansible\-collections/community\.general/pull/9324](https\://github\.com/ansible\-collections/community\.general/pull/9324)\)\. +* redfish module utils \- add REDFISH\_COMMON\_ARGUMENT\_SPEC\, a corresponding redfish docs fragment\, and support for its validate\_certs\, ca\_path\, and ciphers options \([https\://github\.com/ansible\-collections/community\.general/issues/3686](https\://github\.com/ansible\-collections/community\.general/issues/3686)\, [https\://github\.com/ansible\-collections/community\.general/pull/9964](https\://github\.com/ansible\-collections/community\.general/pull/9964)\)\. +* redfish module utils \- removed compatibility code for ansible\-core \< 2\.14 \([https\://github\.com/ansible\-collections/community\.general/pull/10160](https\://github\.com/ansible\-collections/community\.general/pull/10160)\)\. +* redfish\_command \- add PowerFullPowerCycle to power command options \([https\://github\.com/ansible\-collections/community\.general/pull/9729](https\://github\.com/ansible\-collections/community\.general/pull/9729)\)\. +* redfish\_command \- add update\_custom\_oem\_header\, update\_custom\_oem\_params\, and update\_custom\_oem\_mime\_type options \([https\://github\.com/ansible\-collections/community\.general/pull/9123](https\://github\.com/ansible\-collections/community\.general/pull/9123)\)\. +* redfish\_command\, redfish\_config\, redfish\_info \- add validate\_certs and ca\_path options to configure TLS/SSL \([https\://github\.com/ansible\-collections/community\.general/issues/3686](https\://github\.com/ansible\-collections/community\.general/issues/3686)\, [https\://github\.com/ansible\-collections/community\.general/pull/9964](https\://github\.com/ansible\-collections/community\.general/pull/9964)\)\. +* redfish\_config \- add command SetPowerRestorePolicy to set the desired power state of the system when power is restored \([https\://github\.com/ansible\-collections/community\.general/pull/9837](https\://github\.com/ansible\-collections/community\.general/pull/9837)\)\. +* redfish\_info \- add command GetAccountServiceConfig to get full information about AccountService configuration \([https\://github\.com/ansible\-collections/community\.general/pull/9403](https\://github\.com/ansible\-collections/community\.general/pull/9403)\)\. +* redfish\_info \- add command GetPowerRestorePolicy to get the desired power state of the system when power is restored \([https\://github\.com/ansible\-collections/community\.general/pull/9824](https\://github\.com/ansible\-collections/community\.general/pull/9824)\)\. +* redfish\_utils module utils \- remove redundant code \([https\://github\.com/ansible\-collections/community\.general/pull/9190](https\://github\.com/ansible\-collections/community\.general/pull/9190)\)\. +* redhat\_subscription \- open file using open\(\) as a context manager \([https\://github\.com/ansible\-collections/community\.general/pull/9579](https\://github\.com/ansible\-collections/community\.general/pull/9579)\)\. +* redis cache plugin \- adjust standard preamble for Python 3 \([https\://github\.com/ansible\-collections/community\.general/pull/9583](https\://github\.com/ansible\-collections/community\.general/pull/9583)\)\. +* redis cache plugin \- clean up string conversions \([https\://github\.com/ansible\-collections/community\.general/pull/9379](https\://github\.com/ansible\-collections/community\.general/pull/9379)\)\. +* redis cache plugin \- use f\-strings instead of interpolations or format \([https\://github\.com/ansible\-collections/community\.general/pull/9320](https\://github\.com/ansible\-collections/community\.general/pull/9320)\)\. +* redis lookup plugin \- use f\-strings instead of interpolations or format \([https\://github\.com/ansible\-collections/community\.general/pull/9324](https\://github\.com/ansible\-collections/community\.general/pull/9324)\)\. +* remove\_keys filter plugin \- adjust standard preamble for Python 3 \([https\://github\.com/ansible\-collections/community\.general/pull/9585](https\://github\.com/ansible\-collections/community\.general/pull/9585)\)\. +* replace\_keys filter plugin \- adjust standard preamble for Python 3 \([https\://github\.com/ansible\-collections/community\.general/pull/9585](https\://github\.com/ansible\-collections/community\.general/pull/9585)\)\. +* revbitspss lookup plugin \- use f\-strings instead of interpolations or format \([https\://github\.com/ansible\-collections/community\.general/pull/9324](https\://github\.com/ansible\-collections/community\.general/pull/9324)\)\. +* reveal\_ansible\_type filter plugin \- adjust standard preamble for Python 3 \([https\://github\.com/ansible\-collections/community\.general/pull/9585](https\://github\.com/ansible\-collections/community\.general/pull/9585)\)\. +* rocketchat \- fix duplicate JSON conversion for Rocket\.Chat \< 7\.4\.0 \([https\://github\.com/ansible\-collections/community\.general/pull/9965](https\://github\.com/ansible\-collections/community\.general/pull/9965)\)\. +* rocketchat \- option is\_pre740 has been added to control the format of the payload\. For Rocket\.Chat 7\.4\.0 or newer\, it must be set to false \([https\://github\.com/ansible\-collections/community\.general/pull/9882](https\://github\.com/ansible\-collections/community\.general/pull/9882)\)\. +* rpm\_ostree\_pkg \- added the options apply\_live \([https\://github\.com/ansible\-collections/community\.general/pull/9167](https\://github\.com/ansible\-collections/community\.general/pull/9167)\)\. +* rpm\_ostree\_pkg \- added the return value needs\_reboot \([https\://github\.com/ansible\-collections/community\.general/pull/9167](https\://github\.com/ansible\-collections/community\.general/pull/9167)\)\. +* run0 become plugin \- adjust standard preamble for Python 3 \([https\://github\.com/ansible\-collections/community\.general/pull/9583](https\://github\.com/ansible\-collections/community\.general/pull/9583)\)\. +* saltstack connection plugin \- adjust standard preamble for Python 3 \([https\://github\.com/ansible\-collections/community\.general/pull/9584](https\://github\.com/ansible\-collections/community\.general/pull/9584)\)\. +* saltstack connection plugin \- use f\-strings instead of interpolations or format \([https\://github\.com/ansible\-collections/community\.general/pull/9322](https\://github\.com/ansible\-collections/community\.general/pull/9322)\)\. +* say callback plugin \- adjust standard preamble for Python 3 \([https\://github\.com/ansible\-collections/community\.general/pull/9583](https\://github\.com/ansible\-collections/community\.general/pull/9583)\)\. +* say callback plugin \- use f\-strings instead of interpolations or format \([https\://github\.com/ansible\-collections/community\.general/pull/9321](https\://github\.com/ansible\-collections/community\.general/pull/9321)\)\. +* scaleway inventory plugin \- adjust standard preamble for Python 3 \([https\://github\.com/ansible\-collections/community\.general/pull/9584](https\://github\.com/ansible\-collections/community\.general/pull/9584)\)\. +* scaleway inventory plugin \- clean up string conversions \([https\://github\.com/ansible\-collections/community\.general/pull/9379](https\://github\.com/ansible\-collections/community\.general/pull/9379)\)\. +* scaleway inventory plugin \- use f\-strings instead of interpolations or format \([https\://github\.com/ansible\-collections/community\.general/pull/9323](https\://github\.com/ansible\-collections/community\.general/pull/9323)\)\. +* scaleway\_lb \- minor simplification in the code \([https\://github\.com/ansible\-collections/community\.general/pull/9189](https\://github\.com/ansible\-collections/community\.general/pull/9189)\)\. +* selective callback plugin \- adjust standard preamble for Python 3 \([https\://github\.com/ansible\-collections/community\.general/pull/9583](https\://github\.com/ansible\-collections/community\.general/pull/9583)\)\. +* selective callback plugin \- use f\-strings instead of interpolations or format \([https\://github\.com/ansible\-collections/community\.general/pull/9321](https\://github\.com/ansible\-collections/community\.general/pull/9321)\)\. +* sesu become plugin \- adjust standard preamble for Python 3 \([https\://github\.com/ansible\-collections/community\.general/pull/9583](https\://github\.com/ansible\-collections/community\.general/pull/9583)\)\. +* sesu become plugin \- use f\-strings instead of interpolations or format \([https\://github\.com/ansible\-collections/community\.general/pull/9319](https\://github\.com/ansible\-collections/community\.general/pull/9319)\)\. +* shelvefile lookup plugin \- use f\-strings instead of interpolations or format \([https\://github\.com/ansible\-collections/community\.general/pull/9324](https\://github\.com/ansible\-collections/community\.general/pull/9324)\)\. +* shutdown action plugin \- adjust standard preamble for Python 3 \([https\://github\.com/ansible\-collections/community\.general/pull/9583](https\://github\.com/ansible\-collections/community\.general/pull/9583)\)\. +* shutdown action plugin \- clean up string conversions \([https\://github\.com/ansible\-collections/community\.general/pull/9379](https\://github\.com/ansible\-collections/community\.general/pull/9379)\)\. +* shutdown action plugin \- use f\-strings instead of interpolations or format \([https\://github\.com/ansible\-collections/community\.general/pull/9318](https\://github\.com/ansible\-collections/community\.general/pull/9318)\)\. +* slack callback plugin \- add http\_agent option to enable the user to set a custom user agent for slack callback plugin \([https\://github\.com/ansible\-collections/community\.general/issues/9813](https\://github\.com/ansible\-collections/community\.general/issues/9813)\, [https\://github\.com/ansible\-collections/community\.general/pull/9836](https\://github\.com/ansible\-collections/community\.general/pull/9836)\)\. +* slack callback plugin \- adjust standard preamble for Python 3 \([https\://github\.com/ansible\-collections/community\.general/pull/9583](https\://github\.com/ansible\-collections/community\.general/pull/9583)\)\. +* slack callback plugin \- clean up string conversions \([https\://github\.com/ansible\-collections/community\.general/pull/9379](https\://github\.com/ansible\-collections/community\.general/pull/9379)\)\. +* slack callback plugin \- use f\-strings instead of interpolations or format \([https\://github\.com/ansible\-collections/community\.general/pull/9321](https\://github\.com/ansible\-collections/community\.general/pull/9321)\)\. +* snap \- add return value version \([https\://github\.com/ansible\-collections/community\.general/pull/9598](https\://github\.com/ansible\-collections/community\.general/pull/9598)\)\. +* snap\_alias \- add return value version \([https\://github\.com/ansible\-collections/community\.general/pull/9598](https\://github\.com/ansible\-collections/community\.general/pull/9598)\)\. +* solaris\_zone \- open file using open\(\) as a context manager \([https\://github\.com/ansible\-collections/community\.general/pull/9579](https\://github\.com/ansible\-collections/community\.general/pull/9579)\)\. +* sorcery \- open file using open\(\) as a context manager \([https\://github\.com/ansible\-collections/community\.general/pull/9579](https\://github\.com/ansible\-collections/community\.general/pull/9579)\)\. +* splunk callback plugin \- adjust standard preamble for Python 3 \([https\://github\.com/ansible\-collections/community\.general/pull/9583](https\://github\.com/ansible\-collections/community\.general/pull/9583)\)\. +* splunk callback plugin \- instead of trying to extract the ansible\-core version from task data\, use ansible\-core\'s actual version \([https\://github\.com/ansible\-collections/community\.general/pull/10193](https\://github\.com/ansible\-collections/community\.general/pull/10193)\)\. +* splunk callback plugin \- use f\-strings instead of interpolations or format \([https\://github\.com/ansible\-collections/community\.general/pull/9321](https\://github\.com/ansible\-collections/community\.general/pull/9321)\)\. +* ssh\_config \- add dynamicforward option \([https\://github\.com/ansible\-collections/community\.general/pull/9192](https\://github\.com/ansible\-collections/community\.general/pull/9192)\)\. +* ssh\_config \- add other\_options option \([https\://github\.com/ansible\-collections/community\.general/issues/8053](https\://github\.com/ansible\-collections/community\.general/issues/8053)\, [https\://github\.com/ansible\-collections/community\.general/pull/9684](https\://github\.com/ansible\-collections/community\.general/pull/9684)\)\. +* stackpath\_compute inventory plugin \- adjust standard preamble for Python 3 \([https\://github\.com/ansible\-collections/community\.general/pull/9584](https\://github\.com/ansible\-collections/community\.general/pull/9584)\)\. +* stackpath\_compute inventory plugin \- use f\-strings instead of interpolations or format \([https\://github\.com/ansible\-collections/community\.general/pull/9323](https\://github\.com/ansible\-collections/community\.general/pull/9323)\)\. +* sudosu become plugin \- adjust standard preamble for Python 3 \([https\://github\.com/ansible\-collections/community\.general/pull/9583](https\://github\.com/ansible\-collections/community\.general/pull/9583)\)\. +* sudosu become plugin \- use f\-strings instead of interpolations or format \([https\://github\.com/ansible\-collections/community\.general/pull/9319](https\://github\.com/ansible\-collections/community\.general/pull/9319)\)\. +* sumologic callback plugin \- adjust standard preamble for Python 3 \([https\://github\.com/ansible\-collections/community\.general/pull/9583](https\://github\.com/ansible\-collections/community\.general/pull/9583)\)\. +* sumologic callback plugin \- instead of trying to extract the ansible\-core version from task data\, use ansible\-core\'s actual version \([https\://github\.com/ansible\-collections/community\.general/pull/10193](https\://github\.com/ansible\-collections/community\.general/pull/10193)\)\. +* syslog\_json callback plugin \- adjust standard preamble for Python 3 \([https\://github\.com/ansible\-collections/community\.general/pull/9583](https\://github\.com/ansible\-collections/community\.general/pull/9583)\)\. +* systemd\_info \- add wildcard expression support in unitname option \([https\://github\.com/ansible\-collections/community\.general/pull/9821](https\://github\.com/ansible\-collections/community\.general/pull/9821)\)\. +* systemd\_info \- extend support to timer units \([https\://github\.com/ansible\-collections/community\.general/pull/9891](https\://github\.com/ansible\-collections/community\.general/pull/9891)\)\. +* terraform \- adds the no\_color parameter\, which suppresses or allows color codes in stdout from Terraform commands \([https\://github\.com/ansible\-collections/community\.general/pull/10154](https\://github\.com/ansible\-collections/community\.general/pull/10154)\)\. +* time filter plugin \- adjust standard preamble for Python 3 \([https\://github\.com/ansible\-collections/community\.general/pull/9585](https\://github\.com/ansible\-collections/community\.general/pull/9585)\)\. +* timestamp callback plugin \- adjust standard preamble for Python 3 \([https\://github\.com/ansible\-collections/community\.general/pull/9583](https\://github\.com/ansible\-collections/community\.general/pull/9583)\)\. +* timestamp callback plugin \- use f\-strings instead of interpolations or format \([https\://github\.com/ansible\-collections/community\.general/pull/9321](https\://github\.com/ansible\-collections/community\.general/pull/9321)\)\. +* timezone \- open file using open\(\) as a context manager \([https\://github\.com/ansible\-collections/community\.general/pull/9579](https\://github\.com/ansible\-collections/community\.general/pull/9579)\)\. +* to\_ini filter plugin \- adjust standard preamble for Python 3 \([https\://github\.com/ansible\-collections/community\.general/pull/9585](https\://github\.com/ansible\-collections/community\.general/pull/9585)\)\. +* to\_ini filter plugin \- clean up string conversions \([https\://github\.com/ansible\-collections/community\.general/pull/9379](https\://github\.com/ansible\-collections/community\.general/pull/9379)\)\. +* tss lookup plugin \- clean up string conversions \([https\://github\.com/ansible\-collections/community\.general/pull/9379](https\://github\.com/ansible\-collections/community\.general/pull/9379)\)\. +* tss lookup plugin \- use f\-strings instead of interpolations or format \([https\://github\.com/ansible\-collections/community\.general/pull/9324](https\://github\.com/ansible\-collections/community\.general/pull/9324)\)\. +* ufw \- add support for vrrp protocol \([https\://github\.com/ansible\-collections/community\.general/issues/9562](https\://github\.com/ansible\-collections/community\.general/issues/9562)\, [https\://github\.com/ansible\-collections/community\.general/pull/9582](https\://github\.com/ansible\-collections/community\.general/pull/9582)\)\. +* unicode\_normalize filter plugin \- adjust standard preamble for Python 3 \([https\://github\.com/ansible\-collections/community\.general/pull/9585](https\://github\.com/ansible\-collections/community\.general/pull/9585)\)\. +* unixy callback plugin \- adjust standard preamble for Python 3 \([https\://github\.com/ansible\-collections/community\.general/pull/9583](https\://github\.com/ansible\-collections/community\.general/pull/9583)\)\. +* unixy callback plugin \- use f\-strings instead of interpolations or format \([https\://github\.com/ansible\-collections/community\.general/pull/9321](https\://github\.com/ansible\-collections/community\.general/pull/9321)\)\. +* version\_sort filter plugin \- adjust standard preamble for Python 3 \([https\://github\.com/ansible\-collections/community\.general/pull/9585](https\://github\.com/ansible\-collections/community\.general/pull/9585)\)\. +* virtualbox inventory plugin \- adjust standard preamble for Python 3 \([https\://github\.com/ansible\-collections/community\.general/pull/9584](https\://github\.com/ansible\-collections/community\.general/pull/9584)\)\. +* virtualbox inventory plugin \- clean up string conversions \([https\://github\.com/ansible\-collections/community\.general/pull/9379](https\://github\.com/ansible\-collections/community\.general/pull/9379)\)\. +* virtualbox inventory plugin \- use f\-strings instead of interpolations or format \([https\://github\.com/ansible\-collections/community\.general/pull/9323](https\://github\.com/ansible\-collections/community\.general/pull/9323)\)\. +* vmadm \- add new options flexible\_disk\_size and owner\_uuid \([https\://github\.com/ansible\-collections/community\.general/pull/9892](https\://github\.com/ansible\-collections/community\.general/pull/9892)\)\. +* wdc\_redfish\_command\, wdc\_redfish\_info \- add validate\_certs\, ca\_path\, and ciphers options to configure TLS/SSL \([https\://github\.com/ansible\-collections/community\.general/issues/3686](https\://github\.com/ansible\-collections/community\.general/issues/3686)\, [https\://github\.com/ansible\-collections/community\.general/pull/9964](https\://github\.com/ansible\-collections/community\.general/pull/9964)\)\. +* xbps \- add root and repository options to enable bootstrapping new void installations \([https\://github\.com/ansible\-collections/community\.general/pull/9174](https\://github\.com/ansible\-collections/community\.general/pull/9174)\)\. +* xcc\_redfish\_command \- add validate\_certs\, ca\_path\, and ciphers options to configure TLS/SSL \([https\://github\.com/ansible\-collections/community\.general/issues/3686](https\://github\.com/ansible\-collections/community\.general/issues/3686)\, [https\://github\.com/ansible\-collections/community\.general/pull/9964](https\://github\.com/ansible\-collections/community\.general/pull/9964)\)\. +* xen\_orchestra inventory plugin \- add use\_vm\_uuid and use\_host\_uuid boolean options to allow switching over to using VM/Xen name labels instead of UUIDs as item names \([https\://github\.com/ansible\-collections/community\.general/pull/9787](https\://github\.com/ansible\-collections/community\.general/pull/9787)\)\. +* xen\_orchestra inventory plugin \- adjust standard preamble for Python 3 \([https\://github\.com/ansible\-collections/community\.general/pull/9584](https\://github\.com/ansible\-collections/community\.general/pull/9584)\)\. +* xen\_orchestra inventory plugin \- use f\-strings instead of interpolations or format \([https\://github\.com/ansible\-collections/community\.general/pull/9323](https\://github\.com/ansible\-collections/community\.general/pull/9323)\)\. +* xfconf \- add return value version \([https\://github\.com/ansible\-collections/community\.general/pull/9226](https\://github\.com/ansible\-collections/community\.general/pull/9226)\)\. +* xfconf\_info \- add return value version \([https\://github\.com/ansible\-collections/community\.general/pull/9226](https\://github\.com/ansible\-collections/community\.general/pull/9226)\)\. +* xml \- support adding value of children when creating with subnodes \([https\://github\.com/ansible\-collections/community\.general/pull/8437](https\://github\.com/ansible\-collections/community\.general/pull/8437)\)\. +* yaml cache plugin \- adjust standard preamble for Python 3 \([https\://github\.com/ansible\-collections/community\.general/pull/9583](https\://github\.com/ansible\-collections/community\.general/pull/9583)\)\. +* yaml callback plugin \- adjust standard preamble for Python 3 \([https\://github\.com/ansible\-collections/community\.general/pull/9583](https\://github\.com/ansible\-collections/community\.general/pull/9583)\)\. +* yaml callback plugin \- use f\-strings instead of interpolations or format \([https\://github\.com/ansible\-collections/community\.general/pull/9321](https\://github\.com/ansible\-collections/community\.general/pull/9321)\)\. +* zone connection plugin \- adjust standard preamble for Python 3 \([https\://github\.com/ansible\-collections/community\.general/pull/9584](https\://github\.com/ansible\-collections/community\.general/pull/9584)\)\. +* zone connection plugin \- use f\-strings instead of interpolations or format \([https\://github\.com/ansible\-collections/community\.general/pull/9322](https\://github\.com/ansible\-collections/community\.general/pull/9322)\)\. +* zypper \- add quiet option \([https\://github\.com/ansible\-collections/community\.general/pull/9270](https\://github\.com/ansible\-collections/community\.general/pull/9270)\)\. +* zypper \- add simple\_errors option \([https\://github\.com/ansible\-collections/community\.general/pull/9270](https\://github\.com/ansible\-collections/community\.general/pull/9270)\)\. +* zypper \- adds skip\_post\_errors that allows to skip RPM post\-install errors \(Zypper return code 107\) \([https\://github\.com/ansible\-collections/community\.general/issues/9972](https\://github\.com/ansible\-collections/community\.general/issues/9972)\)\. + + +### Deprecated Features + +* MH module utils \- attribute debug definition in subclasses of MH is now deprecated\, as that name will become a delegation to AnsibleModule in community\.general 12\.0\.0\, and any such attribute will be overridden by that delegation in that version \([https\://github\.com/ansible\-collections/community\.general/pull/9577](https\://github\.com/ansible\-collections/community\.general/pull/9577)\)\. +* atomic\_container \- module is deprecated and will be removed in community\.general 13\.0\.0 \([https\://github\.com/ansible\-collections/community\.general/pull/9487](https\://github\.com/ansible\-collections/community\.general/pull/9487)\)\. +* atomic\_host \- module is deprecated and will be removed in community\.general 13\.0\.0 \([https\://github\.com/ansible\-collections/community\.general/pull/9487](https\://github\.com/ansible\-collections/community\.general/pull/9487)\)\. +* atomic\_image \- module is deprecated and will be removed in community\.general 13\.0\.0 \([https\://github\.com/ansible\-collections/community\.general/pull/9487](https\://github\.com/ansible\-collections/community\.general/pull/9487)\)\. +* facter \- module is deprecated and will be removed in community\.general 12\.0\.0\, use community\.general\.facter\_facts instead \([https\://github\.com/ansible\-collections/community\.general/pull/9451](https\://github\.com/ansible\-collections/community\.general/pull/9451)\)\. +* locale\_gen \- ubuntu\_mode\=True\, or mechanism\=ubuntu\_legacy is deprecated and will be removed in community\.general 13\.0\.0 \([https\://github\.com/ansible\-collections/community\.general/pull/9238](https\://github\.com/ansible\-collections/community\.general/pull/9238)\)\. +* manifold lookup plugin \- plugin is deprecated and will be removed in community\.general 11\.0\.0 \([https\://github\.com/ansible\-collections/community\.general/pull/10028](https\://github\.com/ansible\-collections/community\.general/pull/10028)\)\. +* opkg \- deprecate value \"\" for parameter force \([https\://github\.com/ansible\-collections/community\.general/pull/9172](https\://github\.com/ansible\-collections/community\.general/pull/9172)\)\. +* pipx module\_utils \- function make\_process\_list\(\) is deprecated and will be removed in community\.general 13\.0\.0 \([https\://github\.com/ansible\-collections/community\.general/pull/10031](https\://github\.com/ansible\-collections/community\.general/pull/10031)\)\. +* profitbricks \- module is deprecated and will be removed in community\.general 11\.0\.0 \([https\://github\.com/ansible\-collections/community\.general/pull/9733](https\://github\.com/ansible\-collections/community\.general/pull/9733)\)\. +* profitbricks\_datacenter \- module is deprecated and will be removed in community\.general 11\.0\.0 \([https\://github\.com/ansible\-collections/community\.general/pull/9733](https\://github\.com/ansible\-collections/community\.general/pull/9733)\)\. +* profitbricks\_nic \- module is deprecated and will be removed in community\.general 11\.0\.0 \([https\://github\.com/ansible\-collections/community\.general/pull/9733](https\://github\.com/ansible\-collections/community\.general/pull/9733)\)\. +* profitbricks\_volume \- module is deprecated and will be removed in community\.general 11\.0\.0 \([https\://github\.com/ansible\-collections/community\.general/pull/9733](https\://github\.com/ansible\-collections/community\.general/pull/9733)\)\. +* profitbricks\_volume\_attachments \- module is deprecated and will be removed in community\.general 11\.0\.0 \([https\://github\.com/ansible\-collections/community\.general/pull/9733](https\://github\.com/ansible\-collections/community\.general/pull/9733)\)\. +* pure module utils \- the module utils is deprecated and will be removed from community\.general 12\.0\.0\. The modules using this were removed in community\.general 3\.0\.0 \([https\://github\.com/ansible\-collections/community\.general/pull/9432](https\://github\.com/ansible\-collections/community\.general/pull/9432)\)\. +* purestorage doc fragments \- the doc fragment is deprecated and will be removed from community\.general 12\.0\.0\. The modules using this were removed in community\.general 3\.0\.0 \([https\://github\.com/ansible\-collections/community\.general/pull/9432](https\://github\.com/ansible\-collections/community\.general/pull/9432)\)\. +* redfish\_utils module utils \- deprecate method RedfishUtils\.\_init\_session\(\) \([https\://github\.com/ansible\-collections/community\.general/pull/9190](https\://github\.com/ansible\-collections/community\.general/pull/9190)\)\. +* sensu\_check \- module is deprecated and will be removed in community\.general 13\.0\.0\, use collection sensu\.sensu\_go instead \([https\://github\.com/ansible\-collections/community\.general/pull/9483](https\://github\.com/ansible\-collections/community\.general/pull/9483)\)\. +* sensu\_client \- module is deprecated and will be removed in community\.general 13\.0\.0\, use collection sensu\.sensu\_go instead \([https\://github\.com/ansible\-collections/community\.general/pull/9483](https\://github\.com/ansible\-collections/community\.general/pull/9483)\)\. +* sensu\_handler \- module is deprecated and will be removed in community\.general 13\.0\.0\, use collection sensu\.sensu\_go instead \([https\://github\.com/ansible\-collections/community\.general/pull/9483](https\://github\.com/ansible\-collections/community\.general/pull/9483)\)\. +* sensu\_silence \- module is deprecated and will be removed in community\.general 13\.0\.0\, use collection sensu\.sensu\_go instead \([https\://github\.com/ansible\-collections/community\.general/pull/9483](https\://github\.com/ansible\-collections/community\.general/pull/9483)\)\. +* sensu\_subscription \- module is deprecated and will be removed in community\.general 13\.0\.0\, use collection sensu\.sensu\_go instead \([https\://github\.com/ansible\-collections/community\.general/pull/9483](https\://github\.com/ansible\-collections/community\.general/pull/9483)\)\. +* slack \- the default value auto of the prepend\_hash option is deprecated and will change to never in community\.general 12\.0\.0 \([https\://github\.com/ansible\-collections/community\.general/pull/9443](https\://github\.com/ansible\-collections/community\.general/pull/9443)\)\. +* stackpath\_compute inventory plugin \- plugin is deprecated and will be removed in community\.general 11\.0\.0 \([https\://github\.com/ansible\-collections/community\.general/pull/10026](https\://github\.com/ansible\-collections/community\.general/pull/10026)\)\. +* yaml callback plugin \- deprecate plugin in favor of result\_format\=yaml in plugin ansible\.bulitin\.default \([https\://github\.com/ansible\-collections/community\.general/pull/9456](https\://github\.com/ansible\-collections/community\.general/pull/9456)\)\. +* yaml callback plugin \- the YAML callback plugin was deprecated for removal in community\.general 13\.0\.0\. Since it needs to use ansible\-core internals since ansible\-core 2\.19 that are changing a lot\, we will remove this plugin already from community\.general 12\.0\.0 to ease the maintenance burden \([https\://github\.com/ansible\-collections/community\.general/pull/10213](https\://github\.com/ansible\-collections/community\.general/pull/10213)\)\. + + +### Removed Features \(previously deprecated\) + +* Dropped support for ansible\-core 2\.15\. The collection now requires ansible\-core 2\.16 or newer\. This means that on the controller\, Python 3\.10\+ is required\. On the target side\, Python 2\.7 and Python 3\.6\+ are supported \([https\://github\.com/ansible\-collections/community\.general/pull/10160](https\://github\.com/ansible\-collections/community\.general/pull/10160)\, [https\://github\.com/ansible\-collections/community\.general/pull/10192](https\://github\.com/ansible\-collections/community\.general/pull/10192)\)\. +* The Proxmox content \(modules and plugins\) has been moved to the [new collection community\.proxmox](https\://github\.com/ansible\-collections/community\.proxmox)\. Since community\.general 11\.0\.0\, these modules and plugins have been replaced by deprecated redirections to community\.proxmox\. You need to explicitly install community\.proxmox\, for example with ansible\-galaxy collection install community\.proxmox\, or by installing a new enough version of the Ansible community package\. We suggest to update your roles and playbooks to use the new FQCNs as soon as possible to avoid getting deprecation messages \([https\://github\.com/ansible\-collections/community\.general/pull/10110](https\://github\.com/ansible\-collections/community\.general/pull/10110)\)\. +* apt\_rpm \- the present and installed states are no longer equivalent to latest\, but to present\_not\_latest \([https\://github\.com/ansible\-collections/community\.general/pull/10126](https\://github\.com/ansible\-collections/community\.general/pull/10126)\)\. +* clc\_\* modules and doc fragment \- the modules were removed since CenturyLink Cloud services went EOL in September 2023 \([https\://github\.com/ansible\-collections/community\.general/pull/10126](https\://github\.com/ansible\-collections/community\.general/pull/10126)\)\. +* django\_manage \- the ack\_venv\_creation\_deprecation option has been removed\. It had no effect anymore anyway \([https\://github\.com/ansible\-collections/community\.general/pull/10126](https\://github\.com/ansible\-collections/community\.general/pull/10126)\)\. +* git\_config \- it is no longer allowed to use state\=present with no value to read the config value\. Use the community\.general\.git\_config\_info module instead \([https\://github\.com/ansible\-collections/community\.general/pull/10126](https\://github\.com/ansible\-collections/community\.general/pull/10126)\)\. +* git\_config \- the list\_all option has been removed\. Use the community\.general\.git\_config\_info module instead \([https\://github\.com/ansible\-collections/community\.general/pull/10126](https\://github\.com/ansible\-collections/community\.general/pull/10126)\)\. +* hipchat \- the module was removed since the hipchat service has been discontinued and the self\-hosted variant has been End of Life since 2020 \([https\://github\.com/ansible\-collections/community\.general/pull/10126](https\://github\.com/ansible\-collections/community\.general/pull/10126)\)\. +* manifold lookup plugin \- the plugin was removed since the company was acquired in 2021 and service was ceased afterwards \([https\://github\.com/ansible\-collections/community\.general/pull/10126](https\://github\.com/ansible\-collections/community\.general/pull/10126)\)\. +* mh\.mixins\.deps module utils \- this module utils has been removed\. Use the deps module utils instead \([https\://github\.com/ansible\-collections/community\.general/pull/10126](https\://github\.com/ansible\-collections/community\.general/pull/10126)\)\. +* mh\.mixins\.vars module utils \- this module utils has been removed\. Use VarDict from the vardict module utils instead \([https\://github\.com/ansible\-collections/community\.general/pull/10126](https\://github\.com/ansible\-collections/community\.general/pull/10126)\)\. +* mh\.module\_helper module utils \- AnsibleModule and VarsMixin are no longer provided \([https\://github\.com/ansible\-collections/community\.general/pull/10126](https\://github\.com/ansible\-collections/community\.general/pull/10126)\)\. +* mh\.module\_helper module utils \- VarDict is now imported from the vardict module utils and no longer from the removed mh\.mixins\.vars module utils \([https\://github\.com/ansible\-collections/community\.general/pull/10126](https\://github\.com/ansible\-collections/community\.general/pull/10126)\)\. +* mh\.module\_helper module utils \- the attributes use\_old\_vardict and mute\_vardict\_deprecation from ModuleHelper have been removed\. We suggest to remove them from your modules if you no longer support community\.general \< 11\.0\.0 \([https\://github\.com/ansible\-collections/community\.general/pull/10126](https\://github\.com/ansible\-collections/community\.general/pull/10126)\)\. +* module\_helper module utils \- StateMixin\, DependencyCtxMgr\, VarMeta\, VarDict\, and VarsMixin are no longer provided \([https\://github\.com/ansible\-collections/community\.general/pull/10126](https\://github\.com/ansible\-collections/community\.general/pull/10126)\)\. +* pipx \- module no longer supports pipx older than 1\.7\.0 \([https\://github\.com/ansible\-collections/community\.general/pull/10137](https\://github\.com/ansible\-collections/community\.general/pull/10137)\)\. +* pipx\_info \- module no longer supports pipx older than 1\.7\.0 \([https\://github\.com/ansible\-collections/community\.general/pull/10137](https\://github\.com/ansible\-collections/community\.general/pull/10137)\)\. +* profitbrick\* modules \- the modules were removed since the supporting library is unsupported since 2021 \([https\://github\.com/ansible\-collections/community\.general/pull/10126](https\://github\.com/ansible\-collections/community\.general/pull/10126)\)\. +* redfish\_utils module utils \- the \_init\_session method has been removed \([https\://github\.com/ansible\-collections/community\.general/pull/10126](https\://github\.com/ansible\-collections/community\.general/pull/10126)\)\. +* stackpath\_compute inventory plugin \- the plugin was removed since the company and the service were sunset in June 2024 \([https\://github\.com/ansible\-collections/community\.general/pull/10126](https\://github\.com/ansible\-collections/community\.general/pull/10126)\)\. + + +### Security Fixes + +* keycloak\_authentication \- API calls did not properly set the priority during update resulting in incorrectly sorted authentication flows\. This apparently only affects Keycloak 25 or newer \([https\://github\.com/ansible\-collections/community\.general/pull/9263](https\://github\.com/ansible\-collections/community\.general/pull/9263)\)\. +* keycloak\_client \- Sanitize saml\.encryption\.private\.key so it does not show in the logs \([https\://github\.com/ansible\-collections/community\.general/pull/9621](https\://github\.com/ansible\-collections/community\.general/pull/9621)\)\. + + +### Bugfixes + +* apache2\_mod\_proxy \- make compatible with Python 3 \([https\://github\.com/ansible\-collections/community\.general/pull/9762](https\://github\.com/ansible\-collections/community\.general/pull/9762)\)\. +* apache2\_mod\_proxy \- passing the cluster\'s page as referer for the member\'s pages\. This makes the module actually work again for halfway modern Apache versions\. According to some comments founds on the net the referer was required since at least 2019 for some versions of Apache 2 \([https\://github\.com/ansible\-collections/community\.general/pull/9762](https\://github\.com/ansible\-collections/community\.general/pull/9762)\)\. +* cloudflare\_dns \- fix crash when deleting a DNS record or when updating a record with solo\=true \([https\://github\.com/ansible\-collections/community\.general/issues/9652](https\://github\.com/ansible\-collections/community\.general/issues/9652)\, [https\://github\.com/ansible\-collections/community\.general/pull/9649](https\://github\.com/ansible\-collections/community\.general/pull/9649)\)\. +* cloudlare\_dns \- handle exhausted response stream in case of HTTP errors to show nice error message to the user \([https\://github\.com/ansible\-collections/community\.general/issues/9782](https\://github\.com/ansible\-collections/community\.general/issues/9782)\, [https\://github\.com/ansible\-collections/community\.general/pull/9818](https\://github\.com/ansible\-collections/community\.general/pull/9818)\)\. +* cobbler\_system \- fix bug with Cobbler \>\= 3\.4\.0 caused by giving more than 2 positional arguments to CobblerXMLRPCInterface\.get\_system\_handle\(\) \([https\://github\.com/ansible\-collections/community\.general/issues/8506](https\://github\.com/ansible\-collections/community\.general/issues/8506)\, [https\://github\.com/ansible\-collections/community\.general/pull/10145](https\://github\.com/ansible\-collections/community\.general/pull/10145)\)\. +* cobbler\_system \- update minimum version number to avoid wrong comparisons that happen in some cases using LooseVersion class which results in TypeError \([https\://github\.com/ansible\-collections/community\.general/issues/8506](https\://github\.com/ansible\-collections/community\.general/issues/8506)\, [https\://github\.com/ansible\-collections/community\.general/pull/10145](https\://github\.com/ansible\-collections/community\.general/pull/10145)\, [https\://github\.com/ansible\-collections/community\.general/pull/10178](https\://github\.com/ansible\-collections/community\.general/pull/10178)\)\. +* dependent look plugin \- make compatible with ansible\-core\'s Data Tagging feature \([https\://github\.com/ansible\-collections/community\.general/pull/9833](https\://github\.com/ansible\-collections/community\.general/pull/9833)\)\. +* dig lookup plugin \- correctly handle NoNameserver exception \([https\://github\.com/ansible\-collections/community\.general/pull/9363](https\://github\.com/ansible\-collections/community\.general/pull/9363)\, [https\://github\.com/ansible\-collections/community\.general/issues/9362](https\://github\.com/ansible\-collections/community\.general/issues/9362)\)\. +* diy callback plugin \- make compatible with ansible\-core\'s Data Tagging feature \([https\://github\.com/ansible\-collections/community\.general/pull/9833](https\://github\.com/ansible\-collections/community\.general/pull/9833)\)\. +* dnf\_config\_manager \- fix hanging when prompting to import GPG keys \([https\://github\.com/ansible\-collections/community\.general/pull/9124](https\://github\.com/ansible\-collections/community\.general/pull/9124)\, [https\://github\.com/ansible\-collections/community\.general/issues/8830](https\://github\.com/ansible\-collections/community\.general/issues/8830)\)\. +* dnf\_config\_manager \- forces locale to C before module starts\. If the locale was set to non\-English\, the output of the dnf config\-manager could not be parsed \([https\://github\.com/ansible\-collections/community\.general/pull/9157](https\://github\.com/ansible\-collections/community\.general/pull/9157)\, [https\://github\.com/ansible\-collections/community\.general/issues/9046](https\://github\.com/ansible\-collections/community\.general/issues/9046)\)\. +* dnf\_versionlock \- add support for dnf5 \([https\://github\.com/ansible\-collections/community\.general/issues/9556](https\://github\.com/ansible\-collections/community\.general/issues/9556)\)\. +* elasticsearch\_plugin \- fix ERROR\: D is not a recognized option issue when configuring proxy settings \([https\://github\.com/ansible\-collections/community\.general/pull/9774](https\://github\.com/ansible\-collections/community\.general/pull/9774)\, [https\://github\.com/ansible\-collections/community\.general/issues/9773](https\://github\.com/ansible\-collections/community\.general/issues/9773)\)\. +* flatpak \- force the locale language to C when running the flatpak command \([https\://github\.com/ansible\-collections/community\.general/pull/9187](https\://github\.com/ansible\-collections/community\.general/pull/9187)\, [https\://github\.com/ansible\-collections/community\.general/issues/8883](https\://github\.com/ansible\-collections/community\.general/issues/8883)\)\. +* gio\_mime \- fix command line when determining version of gio \([https\://github\.com/ansible\-collections/community\.general/pull/9171](https\://github\.com/ansible\-collections/community\.general/pull/9171)\, [https\://github\.com/ansible\-collections/community\.general/issues/9158](https\://github\.com/ansible\-collections/community\.general/issues/9158)\)\. +* github\_deploy\_key \- check that key really exists on 422 to avoid masking other errors \([https\://github\.com/ansible\-collections/community\.general/issues/6718](https\://github\.com/ansible\-collections/community\.general/issues/6718)\, [https\://github\.com/ansible\-collections/community\.general/pull/10011](https\://github\.com/ansible\-collections/community\.general/pull/10011)\)\. +* github\_key \- in check mode\, a faulty call to \`datetime\.strftime\(\.\.\.\)\` was being made which generated an exception \([https\://github\.com/ansible\-collections/community\.general/issues/9185](https\://github\.com/ansible\-collections/community\.general/issues/9185)\)\. +* gitlab\_group\_access\_token\, gitlab\_project\_access\_token \- fix handling of group and project access tokens for changes in GitLab 17\.10 \([https\://github\.com/ansible\-collections/community\.general/pull/10196](https\://github\.com/ansible\-collections/community\.general/pull/10196)\)\. +* hashids and unicode\_normalize filter plugins \- avoid deprecated AnsibleFilterTypeError on ansible\-core 2\.19 \([https\://github\.com/ansible\-collections/community\.general/pull/9992](https\://github\.com/ansible\-collections/community\.general/pull/9992)\)\. +* homebrew \- emit a useful error message if brew info reports a package tap is null \([https\://github\.com/ansible\-collections/community\.general/pull/10013](https\://github\.com/ansible\-collections/community\.general/pull/10013)\, [https\://github\.com/ansible\-collections/community\.general/issues/10012](https\://github\.com/ansible\-collections/community\.general/issues/10012)\)\. +* homebrew \- fix crash when package names include tap \([https\://github\.com/ansible\-collections/community\.general/issues/9777](https\://github\.com/ansible\-collections/community\.general/issues/9777)\, [https\://github\.com/ansible\-collections/community\.general/pull/9803](https\://github\.com/ansible\-collections/community\.general/pull/9803)\)\. +* homebrew \- fix incorrect handling of aliased homebrew modules when the alias is requested \([https\://github\.com/ansible\-collections/community\.general/pull/9255](https\://github\.com/ansible\-collections/community\.general/pull/9255)\, [https\://github\.com/ansible\-collections/community\.general/issues/9240](https\://github\.com/ansible\-collections/community\.general/issues/9240)\)\. +* homebrew \- fix incorrect handling of homebrew modules when a tap is requested \([https\://github\.com/ansible\-collections/community\.general/pull/9546](https\://github\.com/ansible\-collections/community\.general/pull/9546)\, [https\://github\.com/ansible\-collections/community\.general/issues/9533](https\://github\.com/ansible\-collections/community\.general/issues/9533)\)\. +* homebrew \- make package name parsing more resilient \([https\://github\.com/ansible\-collections/community\.general/pull/9665](https\://github\.com/ansible\-collections/community\.general/pull/9665)\, [https\://github\.com/ansible\-collections/community\.general/issues/9641](https\://github\.com/ansible\-collections/community\.general/issues/9641)\)\. +* homebrew\_cask \- allow \+ symbol in Homebrew cask name validation regex \([https\://github\.com/ansible\-collections/community\.general/pull/9128](https\://github\.com/ansible\-collections/community\.general/pull/9128)\)\. +* homebrew\_cask \- handle unusual brew version strings \([https\://github\.com/ansible\-collections/community\.general/issues/8432](https\://github\.com/ansible\-collections/community\.general/issues/8432)\, [https\://github\.com/ansible\-collections/community\.general/pull/9881](https\://github\.com/ansible\-collections/community\.general/pull/9881)\)\. +* htpasswd \- report changes when file permissions are adjusted \([https\://github\.com/ansible\-collections/community\.general/issues/9485](https\://github\.com/ansible\-collections/community\.general/issues/9485)\, [https\://github\.com/ansible\-collections/community\.general/pull/9490](https\://github\.com/ansible\-collections/community\.general/pull/9490)\)\. +* iocage inventory plugin \- the plugin parses the IP4 tab of the jails list and put the elements into the new variable iocage\_ip4\_dict\. In multiple interface format the variable iocage\_ip4 keeps the comma\-separated list of IP4 \([https\://github\.com/ansible\-collections/community\.general/issues/9538](https\://github\.com/ansible\-collections/community\.general/issues/9538)\)\. +* ipa\_host \- module revoked existing host certificates even if user\_certificate was not given \([https\://github\.com/ansible\-collections/community\.general/pull/9694](https\://github\.com/ansible\-collections/community\.general/pull/9694)\)\. +* java\_cert \- the module no longer fails if the optional parameters pkcs12\_alias and cert\_alias are not provided \([https\://github\.com/ansible\-collections/community\.general/pull/9970](https\://github\.com/ansible\-collections/community\.general/pull/9970)\)\. +* kdeconfig \- allow option values beginning with a dash \([https\://github\.com/ansible\-collections/community\.general/issues/10127](https\://github\.com/ansible\-collections/community\.general/issues/10127)\, [https\://github\.com/ansible\-collections/community\.general/pull/10128](https\://github\.com/ansible\-collections/community\.general/pull/10128)\)\. +* keycloak \- update more than 10 sub\-groups \([https\://github\.com/ansible\-collections/community\.general/issues/9690](https\://github\.com/ansible\-collections/community\.general/issues/9690)\, [https\://github\.com/ansible\-collections/community\.general/pull/9692](https\://github\.com/ansible\-collections/community\.general/pull/9692)\)\. +* keycloak module utils \- replaces missing return in get\_role\_composites method which caused it to return None instead of composite roles \([https\://github\.com/ansible\-collections/community\.general/issues/9678](https\://github\.com/ansible\-collections/community\.general/issues/9678)\, [https\://github\.com/ansible\-collections/community\.general/pull/9691](https\://github\.com/ansible\-collections/community\.general/pull/9691)\)\. +* keycloak\_authentication \- fix authentification config duplication for Keycloak \< 26\.2\.0 \([https\://github\.com/ansible\-collections/community\.general/pull/9987](https\://github\.com/ansible\-collections/community\.general/pull/9987)\)\. +* keycloak\_client \- fix and improve existing tests\. The module showed a diff without actual changes\, solved by improving the normalise\_cr\(\) function \([https\://github\.com/ansible\-collections/community\.general/pull/9644](https\://github\.com/ansible\-collections/community\.general/pull/9644)\)\. +* keycloak\_client \- fix diff by removing code that turns the attributes dict which contains additional settings into a list \([https\://github\.com/ansible\-collections/community\.general/pull/9077](https\://github\.com/ansible\-collections/community\.general/pull/9077)\)\. +* keycloak\_client \- fix the idempotency regression by normalizing the Keycloak response for after\_client \([https\://github\.com/ansible\-collections/community\.general/issues/9905](https\://github\.com/ansible\-collections/community\.general/issues/9905)\, [https\://github\.com/ansible\-collections/community\.general/pull/9976](https\://github\.com/ansible\-collections/community\.general/pull/9976)\)\. +* keycloak\_client \- in check mode\, detect whether the lists in before client \(for example redirect URI list\) contain items that the lists in the desired client do not contain \([https\://github\.com/ansible\-collections/community\.general/pull/9739](https\://github\.com/ansible\-collections/community\.general/pull/9739)\)\. +* keycloak\_clientscope \- fix diff and end\_state by removing the code that turns the attributes dict\, which contains additional config items\, into a list \([https\://github\.com/ansible\-collections/community\.general/pull/9082](https\://github\.com/ansible\-collections/community\.general/pull/9082)\)\. +* keycloak\_clientscope\_type \- sort the default and optional clientscope lists to improve the diff \([https\://github\.com/ansible\-collections/community\.general/pull/9202](https\://github\.com/ansible\-collections/community\.general/pull/9202)\)\. +* keycloak\_user\_rolemapping \- fix \-\-diff mode \([https\://github\.com/ansible\-collections/community\.general/issues/10067](https\://github\.com/ansible\-collections/community\.general/issues/10067)\, [https\://github\.com/ansible\-collections/community\.general/pull/10075](https\://github\.com/ansible\-collections/community\.general/pull/10075)\)\. +* lldp \- fix crash caused by certain lldpctl output where an attribute is defined as branch and leaf \([https\://github\.com/ansible\-collections/community\.general/pull/9657](https\://github\.com/ansible\-collections/community\.general/pull/9657)\)\. +* nmcli \- enable changing only the order of DNS servers or search suffixes \([https\://github\.com/ansible\-collections/community\.general/issues/8724](https\://github\.com/ansible\-collections/community\.general/issues/8724)\, [https\://github\.com/ansible\-collections/community\.general/pull/9880](https\://github\.com/ansible\-collections/community\.general/pull/9880)\)\. +* onepassword\_doc lookup plugin \- ensure that 1Password Connect support also works for this plugin \([https\://github\.com/ansible\-collections/community\.general/pull/9625](https\://github\.com/ansible\-collections/community\.general/pull/9625)\)\. +* passwordstore lookup plugin \- fix subkey creation even when create\=false \([https\://github\.com/ansible\-collections/community\.general/issues/9105](https\://github\.com/ansible\-collections/community\.general/issues/9105)\, [https\://github\.com/ansible\-collections/community\.general/pull/9106](https\://github\.com/ansible\-collections/community\.general/pull/9106)\)\. +* pickle cache plugin \- avoid extra JSON serialization with ansible\-core \>\= 2\.19 \([https\://github\.com/ansible\-collections/community\.general/pull/10136](https\://github\.com/ansible\-collections/community\.general/pull/10136)\)\. +* pipx \- honor option global when state\=latest \([https\://github\.com/ansible\-collections/community\.general/pull/9623](https\://github\.com/ansible\-collections/community\.general/pull/9623)\)\. +* qubes connection plugin \- fix the printing of debug information \([https\://github\.com/ansible\-collections/community\.general/pull/9334](https\://github\.com/ansible\-collections/community\.general/pull/9334)\)\. +* redfish\_utils module utils \- Fix VerifyBiosAttributes command on multi system resource nodes \([https\://github\.com/ansible\-collections/community\.general/pull/9234](https\://github\.com/ansible\-collections/community\.general/pull/9234)\)\. +* redfish\_utils module utils \- remove undocumented default applytime \([https\://github\.com/ansible\-collections/community\.general/pull/9114](https\://github\.com/ansible\-collections/community\.general/pull/9114)\)\. +* redhat\_subscription \- do not try to unsubscribe \(i\.e\. remove subscriptions\) + when unregistering a system\: newer versions of subscription\-manager\, as + available in EL 10 and Fedora 41\+\, do not support entitlements anymore\, and + thus unsubscribing will fail + \([https\://github\.com/ansible\-collections/community\.general/pull/9578](https\://github\.com/ansible\-collections/community\.general/pull/9578)\)\. +* redhat\_subscription \- use the \"enable\_content\" option \(when available\) when + registering using D\-Bus\, to ensure that subscription\-manager enables the + content on registration\; this is particular important on EL 10\+ and Fedora + 41\+ + \([https\://github\.com/ansible\-collections/community\.general/pull/9778](https\://github\.com/ansible\-collections/community\.general/pull/9778)\)\. +* reveal\_ansible\_type filter plugin and ansible\_type test plugin \- make compatible with ansible\-core\'s Data Tagging feature \([https\://github\.com/ansible\-collections/community\.general/pull/9833](https\://github\.com/ansible\-collections/community\.general/pull/9833)\)\. +* rundeck\_acl\_policy \- ensure that project ACLs are sent to the correct endpoint \([https\://github\.com/ansible\-collections/community\.general/pull/10097](https\://github\.com/ansible\-collections/community\.general/pull/10097)\)\. +* slack \- fail if Slack API response is not OK with error message \([https\://github\.com/ansible\-collections/community\.general/pull/9198](https\://github\.com/ansible\-collections/community\.general/pull/9198)\)\. +* sudoers \- display stdout and stderr raised while failed validation \([https\://github\.com/ansible\-collections/community\.general/issues/9674](https\://github\.com/ansible\-collections/community\.general/issues/9674)\, [https\://github\.com/ansible\-collections/community\.general/pull/9871](https\://github\.com/ansible\-collections/community\.general/pull/9871)\)\. +* sysrc \- no longer always reporting changed\=true when state\=absent\. This fixes the method exists\(\) \([https\://github\.com/ansible\-collections/community\.general/issues/10004](https\://github\.com/ansible\-collections/community\.general/issues/10004)\, [https\://github\.com/ansible\-collections/community\.general/pull/10005](https\://github\.com/ansible\-collections/community\.general/pull/10005)\)\. +* sysrc \- split the output of sysrc \-e \-a on the first \= only \([https\://github\.com/ansible\-collections/community\.general/issues/10120](https\://github\.com/ansible\-collections/community\.general/issues/10120)\, [https\://github\.com/ansible\-collections/community\.general/pull/10121](https\://github\.com/ansible\-collections/community\.general/pull/10121)\)\. +* xml \- ensure file descriptor is closed \([https\://github\.com/ansible\-collections/community\.general/pull/9695](https\://github\.com/ansible\-collections/community\.general/pull/9695)\)\. +* yaml callback plugin \- adjust to latest changes in ansible\-core devel \([https\://github\.com/ansible\-collections/community\.general/pull/10212](https\://github\.com/ansible\-collections/community\.general/pull/10212)\)\. +* yaml callback plugin \- use ansible\-core internals to avoid breakage with Data Tagging \([https\://github\.com/ansible\-collections/community\.general/pull/9833](https\://github\.com/ansible\-collections/community\.general/pull/9833)\)\. +* yaml callback plugin \- when using ansible\-core 2\.19\.0b2 or newer\, uses a new utility provided by ansible\-core\. This allows us to remove all hacks and vendored code that was part of the plugin for ansible\-core versions with Data Tagging so far \([https\://github\.com/ansible\-collections/community\.general/pull/10242](https\://github\.com/ansible\-collections/community\.general/pull/10242)\)\. +* zfs \- fix handling of multi\-line values of user\-defined ZFS properties \([https\://github\.com/ansible\-collections/community\.general/pull/6264](https\://github\.com/ansible\-collections/community\.general/pull/6264)\)\. +* zfs\_facts \- parameter type now accepts multple values as documented \([https\://github\.com/ansible\-collections/community\.general/issues/5909](https\://github\.com/ansible\-collections/community\.general/issues/5909)\, [https\://github\.com/ansible\-collections/community\.general/pull/9697](https\://github\.com/ansible\-collections/community\.general/pull/9697)\)\. +* zypper\_repository \- make compatible with Python 3\.12\+ \([https\://github\.com/ansible\-collections/community\.general/issues/10222](https\://github\.com/ansible\-collections/community\.general/issues/10222)\, [https\://github\.com/ansible\-collections/community\.general/pull/10223](https\://github\.com/ansible\-collections/community\.general/pull/10223)\)\. +* zypper\_repository \- use metalink attribute to identify repositories without \ element \([https\://github\.com/ansible\-collections/community\.general/issues/10224](https\://github\.com/ansible\-collections/community\.general/issues/10224)\, [https\://github\.com/ansible\-collections/community\.general/pull/10225](https\://github\.com/ansible\-collections/community\.general/pull/10225)\)\. + + +### Known Issues + +* reveal\_ansible\_type filter plugin and ansible\_type test plugin \- note that ansible\-core\'s Data Tagging feature implements new aliases\, such as \_AnsibleTaggedStr for str\, \_AnsibleTaggedInt for int\, and \_AnsibleTaggedFloat for float \([https\://github\.com/ansible\-collections/community\.general/pull/9833](https\://github\.com/ansible\-collections/community\.general/pull/9833)\)\. + + +### New Plugins + + +#### Callback + +* community\.general\.print\_task \- Prints playbook task snippet to job output\. + + +#### Connection + +* community\.general\.wsl \- Run tasks in WSL distribution using wsl\.exe CLI via SSH\. + + +#### Filter + +* community\.general\.accumulate \- Produce a list of accumulated sums of the input list contents\. +* community\.general\.json\_diff \- Create a JSON patch by comparing two JSON files\. +* community\.general\.json\_patch \- Apply a JSON\-Patch \(RFC 6902\) operation to an object\. +* community\.general\.json\_patch\_recipe \- Apply JSON\-Patch \(RFC 6902\) operations to an object\. +* community\.general\.to\_prettytable \- Format a list of dictionaries as an ASCII table\. + + +#### Inventory + +* community\.general\.iocage \- iocage inventory source\. + + +#### Lookup + +* community\.general\.onepassword\_ssh\_key \- Fetch SSH keys stored in 1Password\. + + +### New Modules + +* community\.general\.android\_sdk \- Manages Android SDK packages\. +* community\.general\.decompress \- Decompresses compressed files\. +* community\.general\.ldap\_inc \- Use the Modify\-Increment LDAP V3 feature to increment an attribute value\. +* community\.general\.lvm\_pv \- Manage LVM Physical Volumes\. +* community\.general\.pacemaker\_resource \- Manage pacemaker resources\. +* community\.general\.systemd\_creds\_decrypt \- C\(systemd\)\'s C\(systemd\-creds decrypt\) plugin\. +* community\.general\.systemd\_creds\_encrypt \- C\(systemd\)\'s C\(systemd\-creds encrypt\) plugin\. +* community\.general\.systemd\_info \- Gather C\(systemd\) unit info\. +* community\.general\.xdg\_mime \- Set default handler for MIME types\, for applications using XDG tools\. +* community\.general\.zpool \- Manage ZFS zpools\. diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 119e04e170..34d54467b8 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -1,6 +1,624 @@ -Placeholder changelog -===================== +=============================== +Community General Release Notes +=============================== -This file is a placeholder; a version-specific ``CHANGELOG-vX.rst`` will be generated during releases from fragments -under ``changelogs/fragments``. On release branches once a release has been created, consult the branch's version-specific -file for changes that have occurred in that branch. +.. contents:: Topics + +This changelog describes changes after version 10.0.0. + +v11.1.0 +======= + +Release Summary +--------------- + +Regular bugfix and feature release. + +Minor Changes +------------- + +- cloudflare_dns - adds support for PTR records (https://github.com/ansible-collections/community.general/pull/10267). +- cloudflare_dns - remove redundant brackets in conditionals, no functional changes (https://github.com/ansible-collections/community.general/pull/10328). +- cloudflare_dns - simplify validations and refactor some code, no functional changes (https://github.com/ansible-collections/community.general/pull/10269). +- crypttab - remove redundant brackets in conditionals, no functional changes (https://github.com/ansible-collections/community.general/pull/10328). +- datadog_monitor - remove redundant brackets in conditionals, no functional changes (https://github.com/ansible-collections/community.general/pull/10328). +- dense callback plugin - use f-strings instead of concatenation (https://github.com/ansible-collections/community.general/pull/10285). +- gitlab_deploy_key - remove redundant brackets in conditionals, no functional changes (https://github.com/ansible-collections/community.general/pull/10328). +- gitlab_group_access_token - remove redundant brackets in conditionals, no functional changes (https://github.com/ansible-collections/community.general/pull/10328). +- gitlab_hook - remove redundant brackets in conditionals, no functional changes (https://github.com/ansible-collections/community.general/pull/10328). +- gitlab_project_access_token - remove redundant brackets in conditionals, no functional changes (https://github.com/ansible-collections/community.general/pull/10328). +- gitlab_runner - remove redundant brackets in conditionals, no functional changes (https://github.com/ansible-collections/community.general/pull/10328). +- iocage inventory plugin - use f-strings instead of concatenation (https://github.com/ansible-collections/community.general/pull/10285). +- ipa_group - remove redundant brackets in conditionals, no functional changes (https://github.com/ansible-collections/community.general/pull/10328). +- jc filter plugin - use f-strings instead of concatenation (https://github.com/ansible-collections/community.general/pull/10285). +- jenkins_build - remove redundant brackets in conditionals, no functional changes (https://github.com/ansible-collections/community.general/pull/10328). +- jenkins_build_info - remove redundant brackets in conditionals, no functional changes (https://github.com/ansible-collections/community.general/pull/10328). +- keycloak - add support for ``grant_type=client_credentials`` to all keycloak modules, so that specifying ``auth_client_id`` and ``auth_client_secret`` is sufficient for authentication (https://github.com/ansible-collections/community.general/pull/10231). +- keycloak module utils - remove redundant brackets in conditionals, no functional changes (https://github.com/ansible-collections/community.general/pull/10328). +- logstash callback plugin - remove redundant brackets in conditionals, no functional changes (https://github.com/ansible-collections/community.general/pull/10328). +- mail callback plugin - use f-strings instead of concatenation (https://github.com/ansible-collections/community.general/pull/10285). +- nmcli - remove redundant brackets in conditionals, no functional changes (https://github.com/ansible-collections/community.general/pull/10328). +- nmcli - simplify validations and refactor some code, no functional changes (https://github.com/ansible-collections/community.general/pull/10323). +- oneandone_firewall_policy - remove redundant brackets in conditionals, no functional changes (https://github.com/ansible-collections/community.general/pull/10328). +- oneandone_load_balancer - remove redundant brackets in conditionals, no functional changes (https://github.com/ansible-collections/community.general/pull/10328). +- oneandone_monitoring_policy - remove redundant brackets in conditionals, no functional changes (https://github.com/ansible-collections/community.general/pull/10328). +- onepassword_info - remove redundant brackets in conditionals, no functional changes (https://github.com/ansible-collections/community.general/pull/10328). +- osx_defaults - remove redundant brackets in conditionals, no functional changes (https://github.com/ansible-collections/community.general/pull/10328). +- ovh_ip_loadbalancing_backend - remove redundant brackets in conditionals, no functional changes (https://github.com/ansible-collections/community.general/pull/10328). +- pacemaker_cluster - add ``state=maintenance`` for managing pacemaker maintenance mode (https://github.com/ansible-collections/community.general/issues/10200, https://github.com/ansible-collections/community.general/pull/10227). +- pacemaker_cluster - rename ``node`` to ``name`` and add ``node`` alias (https://github.com/ansible-collections/community.general/pull/10227). +- pacemaker_resource - enhance module by removing duplicative code (https://github.com/ansible-collections/community.general/pull/10227). +- packet_device - remove redundant brackets in conditionals, no functional changes (https://github.com/ansible-collections/community.general/pull/10328). +- pagerduty - remove redundant brackets in conditionals, no functional changes (https://github.com/ansible-collections/community.general/pull/10328). +- pingdom - remove redundant brackets in conditionals, no functional changes (https://github.com/ansible-collections/community.general/pull/10328). +- python_runner module utils - remove redundant brackets in conditionals, no functional changes (https://github.com/ansible-collections/community.general/pull/10328). +- rhevm - remove redundant brackets in conditionals, no functional changes (https://github.com/ansible-collections/community.general/pull/10328). +- rocketchat - remove redundant brackets in conditionals, no functional changes (https://github.com/ansible-collections/community.general/pull/10328). +- sensu_silence - remove redundant brackets in conditionals, no functional changes (https://github.com/ansible-collections/community.general/pull/10328). +- sl_vm - remove redundant brackets in conditionals, no functional changes (https://github.com/ansible-collections/community.general/pull/10328). +- urpmi - remove redundant brackets in conditionals, no functional changes (https://github.com/ansible-collections/community.general/pull/10328). +- wsl connection plugin - use f-strings instead of concatenation (https://github.com/ansible-collections/community.general/pull/10285). +- xattr - remove redundant brackets in conditionals, no functional changes (https://github.com/ansible-collections/community.general/pull/10328). +- xen_orchestra inventory plugin - use f-strings instead of concatenation (https://github.com/ansible-collections/community.general/pull/10285). +- xfconf - minor adjustments the the code (https://github.com/ansible-collections/community.general/pull/10311). +- xml - remove redundant brackets in conditionals, no functional changes (https://github.com/ansible-collections/community.general/pull/10328). + +Deprecated Features +------------------- + +- catapult - module is deprecated and will be removed in community.general 13.0.0 (https://github.com/ansible-collections/community.general/issues/10318, https://github.com/ansible-collections/community.general/pull/10329). +- pacemaker_cluster - the parameter ``state`` will become a required parameter in community.general 12.0.0 (https://github.com/ansible-collections/community.general/pull/10227). + +Bugfixes +-------- + +- dependent lookup plugin - avoid deprecated ansible-core 2.19 functionality (https://github.com/ansible-collections/community.general/pull/10359). +- github_release - support multiple types of GitHub tokens; no longer failing when ``ghs_`` token type is provided (https://github.com/ansible-collections/community.general/issues/10338, https://github.com/ansible-collections/community.general/pull/10339). +- icinga2 inventory plugin - avoid using deprecated option when templating options (https://github.com/ansible-collections/community.general/pull/10271). +- incus connection plugin - fix error handling to return more useful Ansible errors to the user (https://github.com/ansible-collections/community.general/issues/10344, https://github.com/ansible-collections/community.general/pull/10349). +- linode inventory plugin - avoid using deprecated option when templating options (https://github.com/ansible-collections/community.general/pull/10271). +- logstash callback plugin - remove reference to Python 2 library (https://github.com/ansible-collections/community.general/pull/10345). + +New Plugins +----------- + +Callback +~~~~~~~~ + +- community.general.tasks_only - Only show tasks. + +New Modules +----------- + +- community.general.jenkins_credential - Manage Jenkins credentials and domains via API. + +v11.0.0 +======= + +Release Summary +--------------- + +This is release 11.0.0 of ``community.general``, released on 2025-06-16. + +Minor Changes +------------- + +- CmdRunner module utils - the convenience method ``cmd_runner_fmt.as_fixed()`` now accepts multiple arguments as a list (https://github.com/ansible-collections/community.general/pull/9893). +- MH module utils - delegate ``debug`` to the underlying ``AnsibleModule`` instance or issues a warning if an attribute already exists with that name (https://github.com/ansible-collections/community.general/pull/9577). +- alternatives - add ``family`` parameter that allows to utilize the ``--family`` option available in RedHat version of update-alternatives (https://github.com/ansible-collections/community.general/issues/5060, https://github.com/ansible-collections/community.general/pull/9096). +- apache2_mod_proxy - better handling regexp extraction (https://github.com/ansible-collections/community.general/pull/9609). +- apache2_mod_proxy - change type of ``state`` to a list of strings. No change for the users (https://github.com/ansible-collections/community.general/pull/9600). +- apache2_mod_proxy - code simplification, no change in functionality (https://github.com/ansible-collections/community.general/pull/9457). +- apache2_mod_proxy - improve readability when using results from ``fecth_url()`` (https://github.com/ansible-collections/community.general/pull/9608). +- apache2_mod_proxy - refactor repeated code into method (https://github.com/ansible-collections/community.general/pull/9599). +- apache2_mod_proxy - remove unused parameter and code from ``Balancer`` constructor (https://github.com/ansible-collections/community.general/pull/9614). +- apache2_mod_proxy - simplified and improved string manipulation (https://github.com/ansible-collections/community.general/pull/9614). +- apache2_mod_proxy - use ``deps`` to handle dependencies (https://github.com/ansible-collections/community.general/pull/9612). +- apache2_module - added workaround for new PHP module name, from ``php7_module`` to ``php_module`` (https://github.com/ansible-collections/community.general/pull/9951). +- bitwarden lookup plugin - add new option ``collection_name`` to filter results by collection name, and new option ``result_count`` to validate number of results (https://github.com/ansible-collections/community.general/pull/9728). +- bitwarden lookup plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9324). +- cargo - add ``features`` parameter to allow activating specific features when installing Rust packages (https://github.com/ansible-collections/community.general/pull/10198). +- cartesian lookup plugin - removed compatibility code for ansible-core < 2.14 (https://github.com/ansible-collections/community.general/pull/10160). +- cgroup_memory_recap callback plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). +- cgroup_memory_recap callback plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9321). +- chef_databag lookup plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9324). +- chroot connection plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9584). +- chroot connection plugin - clean up string conversions (https://github.com/ansible-collections/community.general/pull/9379). +- chroot connection plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9322). +- cloud_init_data_facts - open file using ``open()`` as a context manager (https://github.com/ansible-collections/community.general/pull/9579). +- cloudflare_dns - add support for ``comment`` and ``tags`` (https://github.com/ansible-collections/community.general/pull/9132). +- cobbler inventory plugin - add ``connection_timeout`` option to specify the connection timeout to the cobbler server (https://github.com/ansible-collections/community.general/pull/11063). +- cobbler inventory plugin - add ``facts_level`` option to allow requesting fully rendered variables for Cobbler systems (https://github.com/ansible-collections/community.general/issues/9419, https://github.com/ansible-collections/community.general/pull/9975). +- cobbler inventory plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9584). +- cobbler inventory plugin - clean up string conversions (https://github.com/ansible-collections/community.general/pull/9379). +- cobbler inventory plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9323). +- collection_version lookup plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9324). +- consul_kv lookup plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9324). +- consul_token - fix idempotency when ``policies`` or ``roles`` are supplied by name (https://github.com/ansible-collections/community.general/issues/9841, https://github.com/ansible-collections/community.general/pull/9845). +- context_demo callback plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). +- context_demo callback plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9321). +- counter filter plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9585). +- counter_enabled callback plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). +- counter_enabled callback plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9321). +- cpanm - enable usage of option ``--with-recommends`` (https://github.com/ansible-collections/community.general/issues/9554, https://github.com/ansible-collections/community.general/pull/9555). +- cpanm - enable usage of option ``--with-suggests`` (https://github.com/ansible-collections/community.general/pull/9555). +- crc32 filter plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9585). +- credstash lookup plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9324). +- cronvar - open file using ``open()`` as a context manager (https://github.com/ansible-collections/community.general/pull/9579). +- crypttab - open file using ``open()`` as a context manager (https://github.com/ansible-collections/community.general/pull/9579). +- cyberarkpassword lookup plugin - clean up string conversions (https://github.com/ansible-collections/community.general/pull/9379). +- cyberarkpassword lookup plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9324). +- default_without_diff callback plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). +- dense callback plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). +- dense callback plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9321). +- dependent lookup plugin - removed compatibility code for ansible-core < 2.14 (https://github.com/ansible-collections/community.general/pull/10160). +- dependent lookup plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9324). +- deps module utils - add ``deps.clear()`` to clear out previously declared dependencies (https://github.com/ansible-collections/community.general/pull/9179). +- dict filter plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9585). +- dict_kv filter plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9585). +- dig lookup plugin - clean up string conversions (https://github.com/ansible-collections/community.general/pull/9379). +- dig lookup plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9324). +- diy callback plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). +- diy callback plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9321). +- dnstxt lookup plugin - clean up string conversions (https://github.com/ansible-collections/community.general/pull/9379). +- dnstxt lookup plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9324). +- doas become plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). +- doas become plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9319). +- dsv lookup plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9324). +- dzdo become plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). +- dzdo become plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9319). +- elastic callback plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). +- elastic callback plugin - instead of trying to extract the ansible-core version from task data, use ansible-core's actual version (https://github.com/ansible-collections/community.general/pull/10193). +- elastic callback plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9321). +- etcd lookup plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9324). +- etcd3 lookup plugin - clean up string conversions (https://github.com/ansible-collections/community.general/pull/9379). +- etcd3 lookup plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9324). +- filetree lookup plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9324). +- flattened lookup plugin - removed compatibility code for ansible-core < 2.14 (https://github.com/ansible-collections/community.general/pull/10160). +- from_csv filter plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9585). +- from_csv filter plugin - clean up string conversions (https://github.com/ansible-collections/community.general/pull/9379). +- from_ini filter plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9585). +- from_ini filter plugin - clean up string conversions (https://github.com/ansible-collections/community.general/pull/9379). +- funcd connection plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9584). +- funcd connection plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9322). +- git_config - remove redundant ``required=False`` from ``argument_spec`` (https://github.com/ansible-collections/community.general/pull/10177). +- github_app_access_token lookup plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9324). +- github_key - add ``api_url`` parameter to support GitHub Enterprise Server installations (https://github.com/ansible-collections/community.general/pull/10191). +- gitlab_instance_variable - add support for ``raw`` variables suboption (https://github.com/ansible-collections/community.general/pull/9425). +- gitlab_project - add option ``build_timeout`` (https://github.com/ansible-collections/community.general/pull/9960). +- gitlab_project_members - extend choices parameter ``access_level`` by missing upstream valid value ``owner`` (https://github.com/ansible-collections/community.general/pull/9953). +- gitlab_runners inventory plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9584). +- gitlab_runners inventory plugin - clean up string conversions (https://github.com/ansible-collections/community.general/pull/9379). +- gitlab_runners inventory plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9323). +- groupby_as_dict filter plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9585). +- hashids filter plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9585). +- hiera lookup plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9324). +- homebrew - greatly speed up module when multiple packages are passed in the ``name`` option (https://github.com/ansible-collections/community.general/pull/9181). +- homebrew - remove duplicated package name validation (https://github.com/ansible-collections/community.general/pull/9076). +- hpilo_boot - add option to get an idempotent behavior while powering on server, resulting in success instead of failure when using ``state: boot_once`` option (https://github.com/ansible-collections/community.general/pull/9646). +- icinga2 inventory plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9584). +- icinga2 inventory plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9323). +- idrac_redfish_command, idrac_redfish_config, idrac_redfish_info - add ``validate_certs``, ``ca_path``, and ``ciphers`` options to configure TLS/SSL (https://github.com/ansible-collections/community.general/issues/3686, https://github.com/ansible-collections/community.general/pull/9964). +- ilo_redfish_command, ilo_redfish_config, ilo_redfish_info - add ``validate_certs``, ``ca_path``, and ``ciphers`` options to configure TLS/SSL (https://github.com/ansible-collections/community.general/issues/3686, https://github.com/ansible-collections/community.general/pull/9964). +- incus connection plugin - adds ``remote_user`` and ``incus_become_method`` parameters for allowing a non-root user to connect to an Incus instance (https://github.com/ansible-collections/community.general/pull/9743). +- incus connection plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9584). +- incus connection plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9322). +- ini_file - modify an inactive option also when there are spaces in front of the comment symbol (https://github.com/ansible-collections/community.general/pull/10102, https://github.com/ansible-collections/community.general/issues/8539). +- iocage connection plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9584). +- iocage connection plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9322). +- iocage inventory plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9584). +- iocage inventory plugin - clean up string conversions (https://github.com/ansible-collections/community.general/pull/9379). +- iocage inventory plugin - the new parameter ``hooks_results`` of the plugin is a list of files inside a jail that provide configuration parameters for the inventory. The inventory plugin reads the files from the jails and put the contents into the items of created variable ``iocage_hooks`` (https://github.com/ansible-collections/community.general/issues/9650, https://github.com/ansible-collections/community.general/pull/9651). +- iocage inventory plugin - the new parameter ``inventory_hostname_tag`` of the plugin provides the name of the tag in the C(iocage properties notes) that contains the jails alias. The new parameter ``inventory_hostname_required``, if enabled, makes the tag mandatory (https://github.com/ansible-collections/community.general/issues/10206, https://github.com/ansible-collections/community.general/pull/10207). +- iocage inventory plugin - the new parameter ``sudo`` of the plugin lets the command ``iocage list -l`` to run as root on the iocage host. This is needed to get the IPv4 of a running DHCP jail (https://github.com/ansible-collections/community.general/issues/9572, https://github.com/ansible-collections/community.general/pull/9573). +- iptables_state action plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). +- iptables_state action plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9318). +- iso_extract - adds ``password`` parameter that is passed to 7z (https://github.com/ansible-collections/community.general/pull/9159). +- jabber callback plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). +- jabber callback plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9321). +- jail connection plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9584). +- jail connection plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9322). +- jc filter plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9585). +- jira - adds ``client_cert`` and ``client_key`` parameters for supporting client certificate authentification when connecting to Jira (https://github.com/ansible-collections/community.general/pull/9753). +- jira - transition operation now has ``status_id`` to directly reference wanted transition (https://github.com/ansible-collections/community.general/pull/9602). +- json_query filter plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9585). +- keep_keys filter plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9585). +- keycloak - add an action group for Keycloak modules to allow ``module_defaults`` to be set for Keycloak tasks (https://github.com/ansible-collections/community.general/pull/9284). +- keycloak module_utils - user groups can now be referenced by their name, like ``staff``, or their path, like ``/staff/engineering``. The path syntax allows users to reference subgroups, which is not possible otherwise (https://github.com/ansible-collections/community.general/pull/9898). +- keycloak_* modules - ``refresh_token`` parameter added. When multiple authentication parameters are provided (``token``, ``refresh_token``, and ``auth_username``/``auth_password``), modules will now automatically retry requests upon authentication errors (401), using in order the token, refresh token, and username/password (https://github.com/ansible-collections/community.general/pull/9494). +- keycloak_realm - remove ID requirement when creating a realm to allow Keycloak generating its own realm ID (https://github.com/ansible-collections/community.general/pull/9768). +- keycloak_user module - user groups can now be referenced by their name, like ``staff``, or their path, like ``/staff/engineering``. The path syntax allows users to reference subgroups, which is not possible otherwise (https://github.com/ansible-collections/community.general/pull/9898). +- keyring lookup plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9324). +- known_hosts - open file using ``open()`` as a context manager (https://github.com/ansible-collections/community.general/pull/9579). +- ksu become plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). +- ksu become plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9319). +- lastpass lookup plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9324). +- launchd - add ``plist`` option for services such as sshd, where the plist filename doesn't match the service name (https://github.com/ansible-collections/community.general/pull/9102). +- linode inventory plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9584). +- linode inventory plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9323). +- lists filter plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9585). +- lists_mergeby filter plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9585). +- lldp - adds ``multivalues`` parameter to control behavior when lldpctl outputs an attribute multiple times (https://github.com/ansible-collections/community.general/pull/9657). +- lmdb_kv lookup plugin - clean up string conversions (https://github.com/ansible-collections/community.general/pull/9379). +- lmdb_kv lookup plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9324). +- locale_gen - invert the logic to determine ``ubuntu_mode``, making it look first for ``/etc/locale.gen`` (set ``ubuntu_mode`` to ``False``) and only then looking for ``/var/lib/locales/supported.d/`` (set ``ubuntu_mode`` to ``True``) (https://github.com/ansible-collections/community.general/pull/9238, https://github.com/ansible-collections/community.general/issues/9131, https://github.com/ansible-collections/community.general/issues/8487). +- locale_gen - new return value ``mechanism`` to better express the semantics of the ``ubuntu_mode``, with the possible values being either ``glibc`` (``ubuntu_mode=False``) or ``ubuntu_legacy`` (``ubuntu_mode=True``) (https://github.com/ansible-collections/community.general/pull/9238). +- log_plays callback plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). +- log_plays callback plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9321). +- loganalytics callback plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). +- loganalytics callback plugin - instead of trying to extract the ansible-core version from task data, use ansible-core's actual version (https://github.com/ansible-collections/community.general/pull/10193). +- loganalytics callback plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9321). +- logdna callback plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). +- logdna callback plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9321). +- logentries callback plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). +- logentries callback plugin - clean up string conversions (https://github.com/ansible-collections/community.general/pull/9379). +- logentries callback plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9321). +- logstash callback plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). +- lvg - add ``remove_extra_pvs`` parameter to control if ansible should remove physical volumes which are not in the ``pvs`` parameter (https://github.com/ansible-collections/community.general/pull/9698). +- lxc connection plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9584). +- lxc connection plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9322). +- lxd connection plugin - adds ``remote_user`` and ``lxd_become_method`` parameters for allowing a non-root user to connect to an LXD instance (https://github.com/ansible-collections/community.general/pull/9659). +- lxd connection plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9584). +- lxd connection plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9322). +- lxd inventory plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9584). +- lxd inventory plugin - clean up string conversions (https://github.com/ansible-collections/community.general/pull/9379). +- lxd inventory plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9323). +- machinectl become plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). +- machinectl become plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9319). +- mail callback plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). +- mail callback plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9321). +- manageiq_alert_profiles - improve handling of parameter requirements (https://github.com/ansible-collections/community.general/pull/9449). +- manifold lookup plugin - clean up string conversions (https://github.com/ansible-collections/community.general/pull/9379). +- manifold lookup plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9324). +- maven_artifact - removed compatibility code for ansible-core < 2.12 (https://github.com/ansible-collections/community.general/pull/10192). +- memcached cache plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). +- memcached cache plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9320). +- merge_variables lookup plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9324). +- nmap inventory plugin - adds ``dns_servers`` option for specifying DNS servers for name resolution. Accepts hostnames or IP addresses in the same format as the ``exclude`` option (https://github.com/ansible-collections/community.general/pull/9849). +- nmap inventory plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9584). +- nmap inventory plugin - clean up string conversions (https://github.com/ansible-collections/community.general/pull/9379). +- nmap inventory plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9323). +- nmcli - add ``sriov`` parameter that enables support for SR-IOV settings (https://github.com/ansible-collections/community.general/pull/9168). +- nmcli - add a option ``fail_over_mac`` (https://github.com/ansible-collections/community.general/issues/9570, https://github.com/ansible-collections/community.general/pull/9571). +- nmcli - add support for Infiniband MAC setting when ``type`` is ``infiniband`` (https://github.com/ansible-collections/community.general/pull/9962). +- nmcli - adds VRF support with new ``type`` value ``vrf`` and new ``slave_type`` value ``vrf`` as well as new ``table`` parameter (https://github.com/ansible-collections/community.general/pull/9658, https://github.com/ansible-collections/community.general/issues/8014). +- nmcli - adds ``autoconnect_priority`` and ``autoconnect_retries`` options to support autoconnect logic (https://github.com/ansible-collections/community.general/pull/10134). +- nrdp callback plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). +- nrdp callback plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9321). +- null callback plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). +- one_template - adds ``filter`` option for retrieving templates which are not owned by the user (https://github.com/ansible-collections/community.general/pull/9547, https://github.com/ansible-collections/community.general/issues/9278). +- one_vm - update allowed values for ``updateconf`` to include new parameters as per the latest OpenNebula API documentation. + Added parameters: + + * ``OS``: ``FIRMWARE``; + * ``CPU_MODEL``: ``MODEL``, ``FEATURES``; + * ``FEATURES``: ``VIRTIO_BLK_QUEUES``, ``VIRTIO_SCSI_QUEUES``, ``IOTHREADS``; + * ``GRAPHICS``: ``PORT``, ``COMMAND``; + * ``VIDEO``: ``ATS``, ``IOMMU``, ``RESOLUTION``, ``TYPE``, ``VRAM``; + * ``RAW``: ``VALIDATE``; + * ``BACKUP_CONFIG``: ``FS_FREEZE``, ``KEEP_LAST``, ``BACKUP_VOLATILE``, ``MODE``, ``INCREMENT_MODE``. + + (https://github.com/ansible-collections/community.general/pull/9959). +- onepassword lookup plugin - clean up string conversions (https://github.com/ansible-collections/community.general/pull/9379). +- onepassword lookup plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9324). +- onepassword_doc lookup plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9324). +- onepassword_ssh_key - refactor to move code to lookup class (https://github.com/ansible-collections/community.general/pull/9633). +- online inventory plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9584). +- online inventory plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9323). +- opennebula inventory plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9584). +- opennebula inventory plugin - clean up string conversions (https://github.com/ansible-collections/community.general/pull/9379). +- opennebula inventory plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9323). +- opentelemetry callback plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). +- opentelemetry callback plugin - instead of trying to extract the ansible-core version from task data, use ansible-core's actual version (https://github.com/ansible-collections/community.general/pull/10193). +- opentelemetry callback plugin - remove code handling Python versions prior to 3.7 (https://github.com/ansible-collections/community.general/pull/9482). +- opentelemetry callback plugin - remove code handling Python versions prior to 3.7 (https://github.com/ansible-collections/community.general/pull/9503). +- opentelemetry callback plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9321). +- pacemaker_cluster - remove unused code (https://github.com/ansible-collections/community.general/pull/9471). +- pacemaker_cluster - using safer mechanism to run external command (https://github.com/ansible-collections/community.general/pull/9471). +- pacemaker_resource - add maintenance mode support for handling resource creation and deletion (https://github.com/ansible-collections/community.general/issues/10180, https://github.com/ansible-collections/community.general/pull/10194). +- pacman_key - support verifying that keys are trusted and not expired (https://github.com/ansible-collections/community.general/issues/9949, https://github.com/ansible-collections/community.general/pull/9950). +- parted - open file using ``open()`` as a context manager (https://github.com/ansible-collections/community.general/pull/9579). +- passwordstore lookup plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9324). +- pbrun become plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). +- pbrun become plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9319). +- pfexec become plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). +- pfexec become plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9319). +- pickle cache plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). +- pipx - add return value ``version`` (https://github.com/ansible-collections/community.general/pull/9180). +- pipx - parameter ``name`` now accepts Python package specifiers (https://github.com/ansible-collections/community.general/issues/7815, https://github.com/ansible-collections/community.general/pull/10031). +- pipx module_utils - filtering application list by name now happens in the modules (https://github.com/ansible-collections/community.general/pull/10031). +- pipx_info - add return value ``version`` (https://github.com/ansible-collections/community.general/pull/9180). +- pipx_info - filtering application list by name now happens in the module (https://github.com/ansible-collections/community.general/pull/10031). +- pmrun become plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). +- pmrun become plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9319). +- pulp_repo - open file using ``open()`` as a context manager (https://github.com/ansible-collections/community.general/pull/9579). +- puppet - improve parameter formatting, no impact to user (https://github.com/ansible-collections/community.general/pull/10014). +- qubes connection plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9584). +- qubes connection plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9322). +- random_mac filter plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9585). +- random_pet lookup plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9324). +- redfish module utils - add ``REDFISH_COMMON_ARGUMENT_SPEC``, a corresponding ``redfish`` docs fragment, and support for its ``validate_certs``, ``ca_path``, and ``ciphers`` options (https://github.com/ansible-collections/community.general/issues/3686, https://github.com/ansible-collections/community.general/pull/9964). +- redfish module utils - removed compatibility code for ansible-core < 2.14 (https://github.com/ansible-collections/community.general/pull/10160). +- redfish_command - add ``PowerFullPowerCycle`` to power command options (https://github.com/ansible-collections/community.general/pull/9729). +- redfish_command - add ``update_custom_oem_header``, ``update_custom_oem_params``, and ``update_custom_oem_mime_type`` options (https://github.com/ansible-collections/community.general/pull/9123). +- redfish_command, redfish_config, redfish_info - add ``validate_certs`` and ``ca_path`` options to configure TLS/SSL (https://github.com/ansible-collections/community.general/issues/3686, https://github.com/ansible-collections/community.general/pull/9964). +- redfish_config - add command ``SetPowerRestorePolicy`` to set the desired power state of the system when power is restored (https://github.com/ansible-collections/community.general/pull/9837). +- redfish_info - add command ``GetAccountServiceConfig`` to get full information about AccountService configuration (https://github.com/ansible-collections/community.general/pull/9403). +- redfish_info - add command ``GetPowerRestorePolicy`` to get the desired power state of the system when power is restored (https://github.com/ansible-collections/community.general/pull/9824). +- redfish_utils module utils - remove redundant code (https://github.com/ansible-collections/community.general/pull/9190). +- redhat_subscription - open file using ``open()`` as a context manager (https://github.com/ansible-collections/community.general/pull/9579). +- redis cache plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). +- redis cache plugin - clean up string conversions (https://github.com/ansible-collections/community.general/pull/9379). +- redis cache plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9320). +- redis lookup plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9324). +- remove_keys filter plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9585). +- replace_keys filter plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9585). +- revbitspss lookup plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9324). +- reveal_ansible_type filter plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9585). +- rocketchat - fix duplicate JSON conversion for Rocket.Chat < 7.4.0 (https://github.com/ansible-collections/community.general/pull/9965). +- rocketchat - option ``is_pre740`` has been added to control the format of the payload. For Rocket.Chat 7.4.0 or newer, it must be set to ``false`` (https://github.com/ansible-collections/community.general/pull/9882). +- rpm_ostree_pkg - added the options ``apply_live`` (https://github.com/ansible-collections/community.general/pull/9167). +- rpm_ostree_pkg - added the return value ``needs_reboot`` (https://github.com/ansible-collections/community.general/pull/9167). +- run0 become plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). +- saltstack connection plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9584). +- saltstack connection plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9322). +- say callback plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). +- say callback plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9321). +- scaleway inventory plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9584). +- scaleway inventory plugin - clean up string conversions (https://github.com/ansible-collections/community.general/pull/9379). +- scaleway inventory plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9323). +- scaleway_lb - minor simplification in the code (https://github.com/ansible-collections/community.general/pull/9189). +- selective callback plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). +- selective callback plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9321). +- sesu become plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). +- sesu become plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9319). +- shelvefile lookup plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9324). +- shutdown action plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). +- shutdown action plugin - clean up string conversions (https://github.com/ansible-collections/community.general/pull/9379). +- shutdown action plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9318). +- slack callback plugin - add ``http_agent`` option to enable the user to set a custom user agent for slack callback plugin (https://github.com/ansible-collections/community.general/issues/9813, https://github.com/ansible-collections/community.general/pull/9836). +- slack callback plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). +- slack callback plugin - clean up string conversions (https://github.com/ansible-collections/community.general/pull/9379). +- slack callback plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9321). +- snap - add return value ``version`` (https://github.com/ansible-collections/community.general/pull/9598). +- snap_alias - add return value ``version`` (https://github.com/ansible-collections/community.general/pull/9598). +- solaris_zone - open file using ``open()`` as a context manager (https://github.com/ansible-collections/community.general/pull/9579). +- sorcery - open file using ``open()`` as a context manager (https://github.com/ansible-collections/community.general/pull/9579). +- splunk callback plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). +- splunk callback plugin - instead of trying to extract the ansible-core version from task data, use ansible-core's actual version (https://github.com/ansible-collections/community.general/pull/10193). +- splunk callback plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9321). +- ssh_config - add ``dynamicforward`` option (https://github.com/ansible-collections/community.general/pull/9192). +- ssh_config - add ``other_options`` option (https://github.com/ansible-collections/community.general/issues/8053, https://github.com/ansible-collections/community.general/pull/9684). +- stackpath_compute inventory plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9584). +- stackpath_compute inventory plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9323). +- sudosu become plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). +- sudosu become plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9319). +- sumologic callback plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). +- sumologic callback plugin - instead of trying to extract the ansible-core version from task data, use ansible-core's actual version (https://github.com/ansible-collections/community.general/pull/10193). +- syslog_json callback plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). +- systemd_info - add wildcard expression support in ``unitname`` option (https://github.com/ansible-collections/community.general/pull/9821). +- systemd_info - extend support to timer units (https://github.com/ansible-collections/community.general/pull/9891). +- terraform - adds the ``no_color`` parameter, which suppresses or allows color codes in stdout from Terraform commands (https://github.com/ansible-collections/community.general/pull/10154). +- time filter plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9585). +- timestamp callback plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). +- timestamp callback plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9321). +- timezone - open file using ``open()`` as a context manager (https://github.com/ansible-collections/community.general/pull/9579). +- to_ini filter plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9585). +- to_ini filter plugin - clean up string conversions (https://github.com/ansible-collections/community.general/pull/9379). +- tss lookup plugin - clean up string conversions (https://github.com/ansible-collections/community.general/pull/9379). +- tss lookup plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9324). +- ufw - add support for ``vrrp`` protocol (https://github.com/ansible-collections/community.general/issues/9562, https://github.com/ansible-collections/community.general/pull/9582). +- unicode_normalize filter plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9585). +- unixy callback plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). +- unixy callback plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9321). +- version_sort filter plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9585). +- virtualbox inventory plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9584). +- virtualbox inventory plugin - clean up string conversions (https://github.com/ansible-collections/community.general/pull/9379). +- virtualbox inventory plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9323). +- vmadm - add new options ``flexible_disk_size`` and ``owner_uuid`` (https://github.com/ansible-collections/community.general/pull/9892). +- wdc_redfish_command, wdc_redfish_info - add ``validate_certs``, ``ca_path``, and ``ciphers`` options to configure TLS/SSL (https://github.com/ansible-collections/community.general/issues/3686, https://github.com/ansible-collections/community.general/pull/9964). +- xbps - add ``root`` and ``repository`` options to enable bootstrapping new void installations (https://github.com/ansible-collections/community.general/pull/9174). +- xcc_redfish_command - add ``validate_certs``, ``ca_path``, and ``ciphers`` options to configure TLS/SSL (https://github.com/ansible-collections/community.general/issues/3686, https://github.com/ansible-collections/community.general/pull/9964). +- xen_orchestra inventory plugin - add ``use_vm_uuid`` and ``use_host_uuid`` boolean options to allow switching over to using VM/Xen name labels instead of UUIDs as item names (https://github.com/ansible-collections/community.general/pull/9787). +- xen_orchestra inventory plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9584). +- xen_orchestra inventory plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9323). +- xfconf - add return value ``version`` (https://github.com/ansible-collections/community.general/pull/9226). +- xfconf_info - add return value ``version`` (https://github.com/ansible-collections/community.general/pull/9226). +- xml - support adding value of children when creating with subnodes (https://github.com/ansible-collections/community.general/pull/8437). +- yaml cache plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). +- yaml callback plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). +- yaml callback plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9321). +- zone connection plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9584). +- zone connection plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9322). +- zypper - add ``quiet`` option (https://github.com/ansible-collections/community.general/pull/9270). +- zypper - add ``simple_errors`` option (https://github.com/ansible-collections/community.general/pull/9270). +- zypper - adds ``skip_post_errors`` that allows to skip RPM post-install errors (Zypper return code 107) (https://github.com/ansible-collections/community.general/issues/9972). + +Deprecated Features +------------------- + +- MH module utils - attribute ``debug`` definition in subclasses of MH is now deprecated, as that name will become a delegation to ``AnsibleModule`` in community.general 12.0.0, and any such attribute will be overridden by that delegation in that version (https://github.com/ansible-collections/community.general/pull/9577). +- atomic_container - module is deprecated and will be removed in community.general 13.0.0 (https://github.com/ansible-collections/community.general/pull/9487). +- atomic_host - module is deprecated and will be removed in community.general 13.0.0 (https://github.com/ansible-collections/community.general/pull/9487). +- atomic_image - module is deprecated and will be removed in community.general 13.0.0 (https://github.com/ansible-collections/community.general/pull/9487). +- facter - module is deprecated and will be removed in community.general 12.0.0, use ``community.general.facter_facts`` instead (https://github.com/ansible-collections/community.general/pull/9451). +- locale_gen - ``ubuntu_mode=True``, or ``mechanism=ubuntu_legacy`` is deprecated and will be removed in community.general 13.0.0 (https://github.com/ansible-collections/community.general/pull/9238). +- manifold lookup plugin - plugin is deprecated and will be removed in community.general 11.0.0 (https://github.com/ansible-collections/community.general/pull/10028). +- opkg - deprecate value ``""`` for parameter ``force`` (https://github.com/ansible-collections/community.general/pull/9172). +- pipx module_utils - function ``make_process_list()`` is deprecated and will be removed in community.general 13.0.0 (https://github.com/ansible-collections/community.general/pull/10031). +- profitbricks - module is deprecated and will be removed in community.general 11.0.0 (https://github.com/ansible-collections/community.general/pull/9733). +- profitbricks_datacenter - module is deprecated and will be removed in community.general 11.0.0 (https://github.com/ansible-collections/community.general/pull/9733). +- profitbricks_nic - module is deprecated and will be removed in community.general 11.0.0 (https://github.com/ansible-collections/community.general/pull/9733). +- profitbricks_volume - module is deprecated and will be removed in community.general 11.0.0 (https://github.com/ansible-collections/community.general/pull/9733). +- profitbricks_volume_attachments - module is deprecated and will be removed in community.general 11.0.0 (https://github.com/ansible-collections/community.general/pull/9733). +- pure module utils - the module utils is deprecated and will be removed from community.general 12.0.0. The modules using this were removed in community.general 3.0.0 (https://github.com/ansible-collections/community.general/pull/9432). +- purestorage doc fragments - the doc fragment is deprecated and will be removed from community.general 12.0.0. The modules using this were removed in community.general 3.0.0 (https://github.com/ansible-collections/community.general/pull/9432). +- redfish_utils module utils - deprecate method ``RedfishUtils._init_session()`` (https://github.com/ansible-collections/community.general/pull/9190). +- sensu_check - module is deprecated and will be removed in community.general 13.0.0, use collection ``sensu.sensu_go`` instead (https://github.com/ansible-collections/community.general/pull/9483). +- sensu_client - module is deprecated and will be removed in community.general 13.0.0, use collection ``sensu.sensu_go`` instead (https://github.com/ansible-collections/community.general/pull/9483). +- sensu_handler - module is deprecated and will be removed in community.general 13.0.0, use collection ``sensu.sensu_go`` instead (https://github.com/ansible-collections/community.general/pull/9483). +- sensu_silence - module is deprecated and will be removed in community.general 13.0.0, use collection ``sensu.sensu_go`` instead (https://github.com/ansible-collections/community.general/pull/9483). +- sensu_subscription - module is deprecated and will be removed in community.general 13.0.0, use collection ``sensu.sensu_go`` instead (https://github.com/ansible-collections/community.general/pull/9483). +- slack - the default value ``auto`` of the ``prepend_hash`` option is deprecated and will change to ``never`` in community.general 12.0.0 (https://github.com/ansible-collections/community.general/pull/9443). +- stackpath_compute inventory plugin - plugin is deprecated and will be removed in community.general 11.0.0 (https://github.com/ansible-collections/community.general/pull/10026). +- yaml callback plugin - deprecate plugin in favor of ``result_format=yaml`` in plugin ``ansible.bulitin.default`` (https://github.com/ansible-collections/community.general/pull/9456). +- yaml callback plugin - the YAML callback plugin was deprecated for removal in community.general 13.0.0. Since it needs to use ansible-core internals since ansible-core 2.19 that are changing a lot, we will remove this plugin already from community.general 12.0.0 to ease the maintenance burden (https://github.com/ansible-collections/community.general/pull/10213). + +Removed Features (previously deprecated) +---------------------------------------- + +- Dropped support for ansible-core 2.15. The collection now requires ansible-core 2.16 or newer. This means that on the controller, Python 3.10+ is required. On the target side, Python 2.7 and Python 3.6+ are supported (https://github.com/ansible-collections/community.general/pull/10160, https://github.com/ansible-collections/community.general/pull/10192). +- The Proxmox content (modules and plugins) has been moved to the `new collection community.proxmox `__. Since community.general 11.0.0, these modules and plugins have been replaced by deprecated redirections to community.proxmox. You need to explicitly install community.proxmox, for example with ``ansible-galaxy collection install community.proxmox``, or by installing a new enough version of the Ansible community package. We suggest to update your roles and playbooks to use the new FQCNs as soon as possible to avoid getting deprecation messages (https://github.com/ansible-collections/community.general/pull/10110). +- apt_rpm - the ``present`` and ``installed`` states are no longer equivalent to ``latest``, but to ``present_not_latest`` (https://github.com/ansible-collections/community.general/pull/10126). +- clc_* modules and doc fragment - the modules were removed since CenturyLink Cloud services went EOL in September 2023 (https://github.com/ansible-collections/community.general/pull/10126). +- django_manage - the ``ack_venv_creation_deprecation`` option has been removed. It had no effect anymore anyway (https://github.com/ansible-collections/community.general/pull/10126). +- git_config - it is no longer allowed to use ``state=present`` with no value to read the config value. Use the ``community.general.git_config_info`` module instead (https://github.com/ansible-collections/community.general/pull/10126). +- git_config - the ``list_all`` option has been removed. Use the ``community.general.git_config_info`` module instead (https://github.com/ansible-collections/community.general/pull/10126). +- hipchat - the module was removed since the hipchat service has been discontinued and the self-hosted variant has been End of Life since 2020 (https://github.com/ansible-collections/community.general/pull/10126). +- manifold lookup plugin - the plugin was removed since the company was acquired in 2021 and service was ceased afterwards (https://github.com/ansible-collections/community.general/pull/10126). +- mh.mixins.deps module utils - this module utils has been removed. Use the ``deps`` module utils instead (https://github.com/ansible-collections/community.general/pull/10126). +- mh.mixins.vars module utils - this module utils has been removed. Use ``VarDict`` from the ``vardict`` module utils instead (https://github.com/ansible-collections/community.general/pull/10126). +- mh.module_helper module utils - ``AnsibleModule`` and ``VarsMixin`` are no longer provided (https://github.com/ansible-collections/community.general/pull/10126). +- mh.module_helper module utils - ``VarDict`` is now imported from the ``vardict`` module utils and no longer from the removed ``mh.mixins.vars`` module utils (https://github.com/ansible-collections/community.general/pull/10126). +- mh.module_helper module utils - the attributes ``use_old_vardict`` and ``mute_vardict_deprecation`` from ``ModuleHelper`` have been removed. We suggest to remove them from your modules if you no longer support community.general < 11.0.0 (https://github.com/ansible-collections/community.general/pull/10126). +- module_helper module utils - ``StateMixin``, ``DependencyCtxMgr``, ``VarMeta``, ``VarDict``, and ``VarsMixin`` are no longer provided (https://github.com/ansible-collections/community.general/pull/10126). +- pipx - module no longer supports ``pipx`` older than 1.7.0 (https://github.com/ansible-collections/community.general/pull/10137). +- pipx_info - module no longer supports ``pipx`` older than 1.7.0 (https://github.com/ansible-collections/community.general/pull/10137). +- profitbrick* modules - the modules were removed since the supporting library is unsupported since 2021 (https://github.com/ansible-collections/community.general/pull/10126). +- redfish_utils module utils - the ``_init_session`` method has been removed (https://github.com/ansible-collections/community.general/pull/10126). +- stackpath_compute inventory plugin - the plugin was removed since the company and the service were sunset in June 2024 (https://github.com/ansible-collections/community.general/pull/10126). + +Security Fixes +-------------- + +- keycloak_authentication - API calls did not properly set the ``priority`` during update resulting in incorrectly sorted authentication flows. This apparently only affects Keycloak 25 or newer (https://github.com/ansible-collections/community.general/pull/9263). +- keycloak_client - Sanitize ``saml.encryption.private.key`` so it does not show in the logs (https://github.com/ansible-collections/community.general/pull/9621). + +Bugfixes +-------- + +- apache2_mod_proxy - make compatible with Python 3 (https://github.com/ansible-collections/community.general/pull/9762). +- apache2_mod_proxy - passing the cluster's page as referer for the member's pages. This makes the module actually work again for halfway modern Apache versions. According to some comments founds on the net the referer was required since at least 2019 for some versions of Apache 2 (https://github.com/ansible-collections/community.general/pull/9762). +- cloudflare_dns - fix crash when deleting a DNS record or when updating a record with ``solo=true`` (https://github.com/ansible-collections/community.general/issues/9652, https://github.com/ansible-collections/community.general/pull/9649). +- cloudlare_dns - handle exhausted response stream in case of HTTP errors to show nice error message to the user (https://github.com/ansible-collections/community.general/issues/9782, https://github.com/ansible-collections/community.general/pull/9818). +- cobbler_system - fix bug with Cobbler >= 3.4.0 caused by giving more than 2 positional arguments to ``CobblerXMLRPCInterface.get_system_handle()`` (https://github.com/ansible-collections/community.general/issues/8506, https://github.com/ansible-collections/community.general/pull/10145). +- cobbler_system - update minimum version number to avoid wrong comparisons that happen in some cases using LooseVersion class which results in TypeError (https://github.com/ansible-collections/community.general/issues/8506, https://github.com/ansible-collections/community.general/pull/10145, https://github.com/ansible-collections/community.general/pull/10178). +- dependent look plugin - make compatible with ansible-core's Data Tagging feature (https://github.com/ansible-collections/community.general/pull/9833). +- dig lookup plugin - correctly handle ``NoNameserver`` exception (https://github.com/ansible-collections/community.general/pull/9363, https://github.com/ansible-collections/community.general/issues/9362). +- diy callback plugin - make compatible with ansible-core's Data Tagging feature (https://github.com/ansible-collections/community.general/pull/9833). +- dnf_config_manager - fix hanging when prompting to import GPG keys (https://github.com/ansible-collections/community.general/pull/9124, https://github.com/ansible-collections/community.general/issues/8830). +- dnf_config_manager - forces locale to ``C`` before module starts. If the locale was set to non-English, the output of the ``dnf config-manager`` could not be parsed (https://github.com/ansible-collections/community.general/pull/9157, https://github.com/ansible-collections/community.general/issues/9046). +- dnf_versionlock - add support for dnf5 (https://github.com/ansible-collections/community.general/issues/9556). +- elasticsearch_plugin - fix ``ERROR: D is not a recognized option`` issue when configuring proxy settings (https://github.com/ansible-collections/community.general/pull/9774, https://github.com/ansible-collections/community.general/issues/9773). +- flatpak - force the locale language to ``C`` when running the flatpak command (https://github.com/ansible-collections/community.general/pull/9187, https://github.com/ansible-collections/community.general/issues/8883). +- gio_mime - fix command line when determining version of ``gio`` (https://github.com/ansible-collections/community.general/pull/9171, https://github.com/ansible-collections/community.general/issues/9158). +- github_deploy_key - check that key really exists on 422 to avoid masking other errors (https://github.com/ansible-collections/community.general/issues/6718, https://github.com/ansible-collections/community.general/pull/10011). +- github_key - in check mode, a faulty call to ```datetime.strftime(...)``` was being made which generated an exception (https://github.com/ansible-collections/community.general/issues/9185). +- gitlab_group_access_token, gitlab_project_access_token - fix handling of group and project access tokens for changes in GitLab 17.10 (https://github.com/ansible-collections/community.general/pull/10196). +- hashids and unicode_normalize filter plugins - avoid deprecated ``AnsibleFilterTypeError`` on ansible-core 2.19 (https://github.com/ansible-collections/community.general/pull/9992). +- homebrew - emit a useful error message if ``brew info`` reports a package tap is ``null`` (https://github.com/ansible-collections/community.general/pull/10013, https://github.com/ansible-collections/community.general/issues/10012). +- homebrew - fix crash when package names include tap (https://github.com/ansible-collections/community.general/issues/9777, https://github.com/ansible-collections/community.general/pull/9803). +- homebrew - fix incorrect handling of aliased homebrew modules when the alias is requested (https://github.com/ansible-collections/community.general/pull/9255, https://github.com/ansible-collections/community.general/issues/9240). +- homebrew - fix incorrect handling of homebrew modules when a tap is requested (https://github.com/ansible-collections/community.general/pull/9546, https://github.com/ansible-collections/community.general/issues/9533). +- homebrew - make package name parsing more resilient (https://github.com/ansible-collections/community.general/pull/9665, https://github.com/ansible-collections/community.general/issues/9641). +- homebrew_cask - allow ``+`` symbol in Homebrew cask name validation regex (https://github.com/ansible-collections/community.general/pull/9128). +- homebrew_cask - handle unusual brew version strings (https://github.com/ansible-collections/community.general/issues/8432, https://github.com/ansible-collections/community.general/pull/9881). +- htpasswd - report changes when file permissions are adjusted (https://github.com/ansible-collections/community.general/issues/9485, https://github.com/ansible-collections/community.general/pull/9490). +- iocage inventory plugin - the plugin parses the IP4 tab of the jails list and put the elements into the new variable ``iocage_ip4_dict``. In multiple interface format the variable ``iocage_ip4`` keeps the comma-separated list of IP4 (https://github.com/ansible-collections/community.general/issues/9538). +- ipa_host - module revoked existing host certificates even if ``user_certificate`` was not given (https://github.com/ansible-collections/community.general/pull/9694). +- java_cert - the module no longer fails if the optional parameters ``pkcs12_alias`` and ``cert_alias`` are not provided (https://github.com/ansible-collections/community.general/pull/9970). +- kdeconfig - allow option values beginning with a dash (https://github.com/ansible-collections/community.general/issues/10127, https://github.com/ansible-collections/community.general/pull/10128). +- keycloak - update more than 10 sub-groups (https://github.com/ansible-collections/community.general/issues/9690, https://github.com/ansible-collections/community.general/pull/9692). +- keycloak module utils - replaces missing return in get_role_composites method which caused it to return None instead of composite roles (https://github.com/ansible-collections/community.general/issues/9678, https://github.com/ansible-collections/community.general/pull/9691). +- keycloak_authentication - fix authentification config duplication for Keycloak < 26.2.0 (https://github.com/ansible-collections/community.general/pull/9987). +- keycloak_client - fix and improve existing tests. The module showed a diff without actual changes, solved by improving the ``normalise_cr()`` function (https://github.com/ansible-collections/community.general/pull/9644). +- keycloak_client - fix diff by removing code that turns the attributes dict which contains additional settings into a list (https://github.com/ansible-collections/community.general/pull/9077). +- keycloak_client - fix the idempotency regression by normalizing the Keycloak response for ``after_client`` (https://github.com/ansible-collections/community.general/issues/9905, https://github.com/ansible-collections/community.general/pull/9976). +- keycloak_client - in check mode, detect whether the lists in before client (for example redirect URI list) contain items that the lists in the desired client do not contain (https://github.com/ansible-collections/community.general/pull/9739). +- keycloak_clientscope - fix diff and ``end_state`` by removing the code that turns the attributes dict, which contains additional config items, into a list (https://github.com/ansible-collections/community.general/pull/9082). +- keycloak_clientscope_type - sort the default and optional clientscope lists to improve the diff (https://github.com/ansible-collections/community.general/pull/9202). +- keycloak_user_rolemapping - fix ``--diff`` mode (https://github.com/ansible-collections/community.general/issues/10067, https://github.com/ansible-collections/community.general/pull/10075). +- lldp - fix crash caused by certain lldpctl output where an attribute is defined as branch and leaf (https://github.com/ansible-collections/community.general/pull/9657). +- nmcli - enable changing only the order of DNS servers or search suffixes (https://github.com/ansible-collections/community.general/issues/8724, https://github.com/ansible-collections/community.general/pull/9880). +- onepassword_doc lookup plugin - ensure that 1Password Connect support also works for this plugin (https://github.com/ansible-collections/community.general/pull/9625). +- passwordstore lookup plugin - fix subkey creation even when ``create=false`` (https://github.com/ansible-collections/community.general/issues/9105, https://github.com/ansible-collections/community.general/pull/9106). +- pickle cache plugin - avoid extra JSON serialization with ansible-core >= 2.19 (https://github.com/ansible-collections/community.general/pull/10136). +- pipx - honor option ``global`` when ``state=latest`` (https://github.com/ansible-collections/community.general/pull/9623). +- qubes connection plugin - fix the printing of debug information (https://github.com/ansible-collections/community.general/pull/9334). +- redfish_utils module utils - Fix ``VerifyBiosAttributes`` command on multi system resource nodes (https://github.com/ansible-collections/community.general/pull/9234). +- redfish_utils module utils - remove undocumented default applytime (https://github.com/ansible-collections/community.general/pull/9114). +- redhat_subscription - do not try to unsubscribe (i.e. remove subscriptions) + when unregistering a system: newer versions of subscription-manager, as + available in EL 10 and Fedora 41+, do not support entitlements anymore, and + thus unsubscribing will fail + (https://github.com/ansible-collections/community.general/pull/9578). +- redhat_subscription - use the "enable_content" option (when available) when + registering using D-Bus, to ensure that subscription-manager enables the + content on registration; this is particular important on EL 10+ and Fedora + 41+ + (https://github.com/ansible-collections/community.general/pull/9778). +- reveal_ansible_type filter plugin and ansible_type test plugin - make compatible with ansible-core's Data Tagging feature (https://github.com/ansible-collections/community.general/pull/9833). +- rundeck_acl_policy - ensure that project ACLs are sent to the correct endpoint (https://github.com/ansible-collections/community.general/pull/10097). +- slack - fail if Slack API response is not OK with error message (https://github.com/ansible-collections/community.general/pull/9198). +- sudoers - display stdout and stderr raised while failed validation (https://github.com/ansible-collections/community.general/issues/9674, https://github.com/ansible-collections/community.general/pull/9871). +- sysrc - no longer always reporting ``changed=true`` when ``state=absent``. This fixes the method ``exists()`` (https://github.com/ansible-collections/community.general/issues/10004, https://github.com/ansible-collections/community.general/pull/10005). +- sysrc - split the output of ``sysrc -e -a`` on the first ``=`` only (https://github.com/ansible-collections/community.general/issues/10120, https://github.com/ansible-collections/community.general/pull/10121). +- xml - ensure file descriptor is closed (https://github.com/ansible-collections/community.general/pull/9695). +- yaml callback plugin - adjust to latest changes in ansible-core devel (https://github.com/ansible-collections/community.general/pull/10212). +- yaml callback plugin - use ansible-core internals to avoid breakage with Data Tagging (https://github.com/ansible-collections/community.general/pull/9833). +- yaml callback plugin - when using ansible-core 2.19.0b2 or newer, uses a new utility provided by ansible-core. This allows us to remove all hacks and vendored code that was part of the plugin for ansible-core versions with Data Tagging so far (https://github.com/ansible-collections/community.general/pull/10242). +- zfs - fix handling of multi-line values of user-defined ZFS properties (https://github.com/ansible-collections/community.general/pull/6264). +- zfs_facts - parameter ``type`` now accepts multple values as documented (https://github.com/ansible-collections/community.general/issues/5909, https://github.com/ansible-collections/community.general/pull/9697). +- zypper_repository - make compatible with Python 3.12+ (https://github.com/ansible-collections/community.general/issues/10222, https://github.com/ansible-collections/community.general/pull/10223). +- zypper_repository - use ``metalink`` attribute to identify repositories without ```` element (https://github.com/ansible-collections/community.general/issues/10224, https://github.com/ansible-collections/community.general/pull/10225). + +Known Issues +------------ + +- reveal_ansible_type filter plugin and ansible_type test plugin - note that ansible-core's Data Tagging feature implements new aliases, such as ``_AnsibleTaggedStr`` for ``str``, ``_AnsibleTaggedInt`` for ``int``, and ``_AnsibleTaggedFloat`` for ``float`` (https://github.com/ansible-collections/community.general/pull/9833). + +New Plugins +----------- + +Callback +~~~~~~~~ + +- community.general.print_task - Prints playbook task snippet to job output. + +Connection +~~~~~~~~~~ + +- community.general.wsl - Run tasks in WSL distribution using wsl.exe CLI via SSH. + +Filter +~~~~~~ + +- community.general.accumulate - Produce a list of accumulated sums of the input list contents. +- community.general.json_diff - Create a JSON patch by comparing two JSON files. +- community.general.json_patch - Apply a JSON-Patch (RFC 6902) operation to an object. +- community.general.json_patch_recipe - Apply JSON-Patch (RFC 6902) operations to an object. +- community.general.to_prettytable - Format a list of dictionaries as an ASCII table. + +Inventory +~~~~~~~~~ + +- community.general.iocage - iocage inventory source. + +Lookup +~~~~~~ + +- community.general.onepassword_ssh_key - Fetch SSH keys stored in 1Password. + +New Modules +----------- + +- community.general.android_sdk - Manages Android SDK packages. +- community.general.decompress - Decompresses compressed files. +- community.general.ldap_inc - Use the Modify-Increment LDAP V3 feature to increment an attribute value. +- community.general.lvm_pv - Manage LVM Physical Volumes. +- community.general.pacemaker_resource - Manage pacemaker resources. +- community.general.systemd_creds_decrypt - C(systemd)'s C(systemd-creds decrypt) plugin. +- community.general.systemd_creds_encrypt - C(systemd)'s C(systemd-creds encrypt) plugin. +- community.general.systemd_info - Gather C(systemd) unit info. +- community.general.xdg_mime - Set default handler for MIME types, for applications using XDG tools. +- community.general.zpool - Manage ZFS zpools. diff --git a/README.md b/README.md index 0418421908..3c2cb8bb53 100644 --- a/README.md +++ b/README.md @@ -7,9 +7,9 @@ SPDX-License-Identifier: GPL-3.0-or-later # Community General Collection [![Documentation](https://img.shields.io/badge/docs-brightgreen.svg)](https://docs.ansible.com/ansible/devel/collections/community/general/) -[![Build Status](https://dev.azure.com/ansible/community.general/_apis/build/status/CI?branchName=main)](https://dev.azure.com/ansible/community.general/_build?definitionId=31) -[![EOL CI](https://github.com/ansible-collections/community.general/actions/workflows/ansible-test.yml/badge.svg?branch=main)](https://github.com/ansible-collections/community.general/actions) -[![Nox CI](https://github.com/ansible-collections/community.general/actions/workflows/nox.yml/badge.svg?branch=main)](https://github.com/ansible-collections/community.general/actions) +[![Build Status](https://dev.azure.com/ansible/community.general/_apis/build/status/CI?branchName=stable-11)](https://dev.azure.com/ansible/community.general/_build?definitionId=31) +[![EOL CI](https://github.com/ansible-collections/community.general/actions/workflows/ansible-test.yml/badge.svg?branch=stable-11)](https://github.com/ansible-collections/community.general/actions) +[![Nox CI](https://github.com/ansible-collections/community.general/actions/workflows/nox.yml/badge.svg?branch=stable-11)](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) @@ -39,7 +39,7 @@ For more information about communication, see the [Ansible communication guide]( ## Tested with Ansible -Tested with the current ansible-core 2.16, ansible-core 2.17, ansible-core 2.18 releases and the current development version of ansible-core. Ansible-core versions before 2.16.0 are not supported. This includes all ansible-base 2.10 and Ansible 2.9 releases. +Tested with the current ansible-core 2.16, ansible-core 2.17, ansible-core 2.18, ansible-core 2.19 releases and the current development version of ansible-core. Ansible-core versions before 2.16.0 are not supported. This includes all ansible-base 2.10 and Ansible 2.9 releases. ## External requirements @@ -118,7 +118,7 @@ See the [Releasing guidelines](https://github.com/ansible/community-docs/blob/ma ## Release notes -See the [changelog](https://github.com/ansible-collections/community.general/blob/main/CHANGELOG.md). +See the [changelog](https://github.com/ansible-collections/community.general/blob/stable-11/CHANGELOG.md). ## Roadmap @@ -137,8 +137,8 @@ See [this issue](https://github.com/ansible-collections/community.general/issues This collection is primarily licensed and distributed as a whole under the GNU General Public License v3.0 or later. -See [LICENSES/GPL-3.0-or-later.txt](https://github.com/ansible-collections/community.general/blob/main/COPYING) for the full text. +See [LICENSES/GPL-3.0-or-later.txt](https://github.com/ansible-collections/community.general/blob/stable-11/COPYING) for the full text. -Parts of the collection are licensed under the [BSD 2-Clause license](https://github.com/ansible-collections/community.general/blob/main/LICENSES/BSD-2-Clause.txt), the [MIT license](https://github.com/ansible-collections/community.general/blob/main/LICENSES/MIT.txt), and the [PSF 2.0 license](https://github.com/ansible-collections/community.general/blob/main/LICENSES/PSF-2.0.txt). +Parts of the collection are licensed under the [BSD 2-Clause license](https://github.com/ansible-collections/community.general/blob/stable-11/LICENSES/BSD-2-Clause.txt), the [MIT license](https://github.com/ansible-collections/community.general/blob/stable-11/LICENSES/MIT.txt), and the [PSF 2.0 license](https://github.com/ansible-collections/community.general/blob/stable-11/LICENSES/PSF-2.0.txt). All files have a machine readable `SDPX-License-Identifier:` comment denoting its respective license(s) or an equivalent entry in an accompanying `.license` file. Only changelog fragments (which will not be part of a release) are covered by a blanket statement in `REUSE.toml`. This conforms to the [REUSE specification](https://reuse.software/spec/). diff --git a/antsibull-nox.toml b/antsibull-nox.toml index 76e8947a02..c631d3a3af 100644 --- a/antsibull-nox.toml +++ b/antsibull-nox.toml @@ -14,8 +14,33 @@ [sessions] +[sessions.lint] +run_isort = false +run_black = false +run_flake8 = false +run_pylint = false +run_yamllint = true +yamllint_config = ".yamllint" +# yamllint_config_plugins = ".yamllint-docs" +# yamllint_config_plugins_examples = ".yamllint-examples" +run_mypy = false + [sessions.docs_check] validate_collection_refs="all" +codeblocks_restrict_types = [ + "ansible-output", + "console", + "ini", + "json", + "python", + "shell", + "yaml", + "yaml+jinja", + "text", +] +codeblocks_restrict_type_exact_case = true +codeblocks_allow_without_type = false +codeblocks_allow_literal_blocks = false [sessions.license_check] diff --git a/changelogs/changelog.yaml b/changelogs/changelog.yaml index ab0a7be6fd..ab87c61fe8 100644 --- a/changelogs/changelog.yaml +++ b/changelogs/changelog.yaml @@ -1,3 +1,1232 @@ --- ancestor: 10.0.0 -releases: {} +releases: + 11.0.0: + changes: + bugfixes: + - apache2_mod_proxy - make compatible with Python 3 (https://github.com/ansible-collections/community.general/pull/9762). + - apache2_mod_proxy - passing the cluster's page as referer for the member's + pages. This makes the module actually work again for halfway modern Apache + versions. According to some comments founds on the net the referer was required + since at least 2019 for some versions of Apache 2 (https://github.com/ansible-collections/community.general/pull/9762). + - cloudflare_dns - fix crash when deleting a DNS record or when updating a + record with ``solo=true`` (https://github.com/ansible-collections/community.general/issues/9652, + https://github.com/ansible-collections/community.general/pull/9649). + - cloudlare_dns - handle exhausted response stream in case of HTTP errors + to show nice error message to the user (https://github.com/ansible-collections/community.general/issues/9782, + https://github.com/ansible-collections/community.general/pull/9818). + - cobbler_system - fix bug with Cobbler >= 3.4.0 caused by giving more than + 2 positional arguments to ``CobblerXMLRPCInterface.get_system_handle()`` + (https://github.com/ansible-collections/community.general/issues/8506, https://github.com/ansible-collections/community.general/pull/10145). + - cobbler_system - update minimum version number to avoid wrong comparisons + that happen in some cases using LooseVersion class which results in TypeError + (https://github.com/ansible-collections/community.general/issues/8506, https://github.com/ansible-collections/community.general/pull/10145, + https://github.com/ansible-collections/community.general/pull/10178). + - dependent look plugin - make compatible with ansible-core's Data Tagging + feature (https://github.com/ansible-collections/community.general/pull/9833). + - dig lookup plugin - correctly handle ``NoNameserver`` exception (https://github.com/ansible-collections/community.general/pull/9363, + https://github.com/ansible-collections/community.general/issues/9362). + - diy callback plugin - make compatible with ansible-core's Data Tagging feature + (https://github.com/ansible-collections/community.general/pull/9833). + - dnf_config_manager - fix hanging when prompting to import GPG keys (https://github.com/ansible-collections/community.general/pull/9124, + https://github.com/ansible-collections/community.general/issues/8830). + - dnf_config_manager - forces locale to ``C`` before module starts. If the + locale was set to non-English, the output of the ``dnf config-manager`` + could not be parsed (https://github.com/ansible-collections/community.general/pull/9157, + https://github.com/ansible-collections/community.general/issues/9046). + - dnf_versionlock - add support for dnf5 (https://github.com/ansible-collections/community.general/issues/9556). + - 'elasticsearch_plugin - fix ``ERROR: D is not a recognized option`` issue + when configuring proxy settings (https://github.com/ansible-collections/community.general/pull/9774, + https://github.com/ansible-collections/community.general/issues/9773).' + - flatpak - force the locale language to ``C`` when running the flatpak command + (https://github.com/ansible-collections/community.general/pull/9187, https://github.com/ansible-collections/community.general/issues/8883). + - gio_mime - fix command line when determining version of ``gio`` (https://github.com/ansible-collections/community.general/pull/9171, + https://github.com/ansible-collections/community.general/issues/9158). + - "github_deploy_key - check that key really exists on 422\_to avoid masking\ + \ other errors (https://github.com/ansible-collections/community.general/issues/6718,\ + \ https://github.com/ansible-collections/community.general/pull/10011)." + - github_key - in check mode, a faulty call to ```datetime.strftime(...)``` + was being made which generated an exception (https://github.com/ansible-collections/community.general/issues/9185). + - gitlab_group_access_token, gitlab_project_access_token - fix handling of + group and project access tokens for changes in GitLab 17.10 (https://github.com/ansible-collections/community.general/pull/10196). + - hashids and unicode_normalize filter plugins - avoid deprecated ``AnsibleFilterTypeError`` + on ansible-core 2.19 (https://github.com/ansible-collections/community.general/pull/9992). + - homebrew - emit a useful error message if ``brew info`` reports a package + tap is ``null`` (https://github.com/ansible-collections/community.general/pull/10013, + https://github.com/ansible-collections/community.general/issues/10012). + - homebrew - fix crash when package names include tap (https://github.com/ansible-collections/community.general/issues/9777, + https://github.com/ansible-collections/community.general/pull/9803). + - homebrew - fix incorrect handling of aliased homebrew modules when the alias + is requested (https://github.com/ansible-collections/community.general/pull/9255, + https://github.com/ansible-collections/community.general/issues/9240). + - homebrew - fix incorrect handling of homebrew modules when a tap is requested + (https://github.com/ansible-collections/community.general/pull/9546, https://github.com/ansible-collections/community.general/issues/9533). + - homebrew - make package name parsing more resilient (https://github.com/ansible-collections/community.general/pull/9665, + https://github.com/ansible-collections/community.general/issues/9641). + - homebrew_cask - allow ``+`` symbol in Homebrew cask name validation regex + (https://github.com/ansible-collections/community.general/pull/9128). + - homebrew_cask - handle unusual brew version strings (https://github.com/ansible-collections/community.general/issues/8432, + https://github.com/ansible-collections/community.general/pull/9881). + - htpasswd - report changes when file permissions are adjusted (https://github.com/ansible-collections/community.general/issues/9485, + https://github.com/ansible-collections/community.general/pull/9490). + - iocage inventory plugin - the plugin parses the IP4 tab of the jails list + and put the elements into the new variable ``iocage_ip4_dict``. In multiple + interface format the variable ``iocage_ip4`` keeps the comma-separated list + of IP4 (https://github.com/ansible-collections/community.general/issues/9538). + - ipa_host - module revoked existing host certificates even if ``user_certificate`` + was not given (https://github.com/ansible-collections/community.general/pull/9694). + - java_cert - the module no longer fails if the optional parameters ``pkcs12_alias`` + and ``cert_alias`` are not provided (https://github.com/ansible-collections/community.general/pull/9970). + - kdeconfig - allow option values beginning with a dash (https://github.com/ansible-collections/community.general/issues/10127, + https://github.com/ansible-collections/community.general/pull/10128). + - keycloak - update more than 10 sub-groups (https://github.com/ansible-collections/community.general/issues/9690, + https://github.com/ansible-collections/community.general/pull/9692). + - keycloak module utils - replaces missing return in get_role_composites method + which caused it to return None instead of composite roles (https://github.com/ansible-collections/community.general/issues/9678, + https://github.com/ansible-collections/community.general/pull/9691). + - keycloak_authentication - fix authentification config duplication for Keycloak + < 26.2.0 (https://github.com/ansible-collections/community.general/pull/9987). + - keycloak_client - fix and improve existing tests. The module showed a diff + without actual changes, solved by improving the ``normalise_cr()`` function + (https://github.com/ansible-collections/community.general/pull/9644). + - keycloak_client - fix diff by removing code that turns the attributes dict + which contains additional settings into a list (https://github.com/ansible-collections/community.general/pull/9077). + - keycloak_client - fix the idempotency regression by normalizing the Keycloak + response for ``after_client`` (https://github.com/ansible-collections/community.general/issues/9905, + https://github.com/ansible-collections/community.general/pull/9976). + - keycloak_client - in check mode, detect whether the lists in before client + (for example redirect URI list) contain items that the lists in the desired + client do not contain (https://github.com/ansible-collections/community.general/pull/9739). + - keycloak_clientscope - fix diff and ``end_state`` by removing the code that + turns the attributes dict, which contains additional config items, into + a list (https://github.com/ansible-collections/community.general/pull/9082). + - keycloak_clientscope_type - sort the default and optional clientscope lists + to improve the diff (https://github.com/ansible-collections/community.general/pull/9202). + - keycloak_user_rolemapping - fix ``--diff`` mode (https://github.com/ansible-collections/community.general/issues/10067, + https://github.com/ansible-collections/community.general/pull/10075). + - lldp - fix crash caused by certain lldpctl output where an attribute is + defined as branch and leaf (https://github.com/ansible-collections/community.general/pull/9657). + - nmcli - enable changing only the order of DNS servers or search suffixes + (https://github.com/ansible-collections/community.general/issues/8724, https://github.com/ansible-collections/community.general/pull/9880). + - onepassword_doc lookup plugin - ensure that 1Password Connect support also + works for this plugin (https://github.com/ansible-collections/community.general/pull/9625). + - passwordstore lookup plugin - fix subkey creation even when ``create=false`` + (https://github.com/ansible-collections/community.general/issues/9105, https://github.com/ansible-collections/community.general/pull/9106). + - pickle cache plugin - avoid extra JSON serialization with ansible-core >= + 2.19 (https://github.com/ansible-collections/community.general/pull/10136). + - pipx - honor option ``global`` when ``state=latest`` (https://github.com/ansible-collections/community.general/pull/9623). + - qubes connection plugin - fix the printing of debug information (https://github.com/ansible-collections/community.general/pull/9334). + - redfish_utils module utils - Fix ``VerifyBiosAttributes`` command on multi + system resource nodes (https://github.com/ansible-collections/community.general/pull/9234). + - redfish_utils module utils - remove undocumented default applytime (https://github.com/ansible-collections/community.general/pull/9114). + - 'redhat_subscription - do not try to unsubscribe (i.e. remove subscriptions) + + when unregistering a system: newer versions of subscription-manager, as + + available in EL 10 and Fedora 41+, do not support entitlements anymore, + and + + thus unsubscribing will fail + + (https://github.com/ansible-collections/community.general/pull/9578). + + ' + - 'redhat_subscription - use the "enable_content" option (when available) + when + + registering using D-Bus, to ensure that subscription-manager enables the + + content on registration; this is particular important on EL 10+ and Fedora + + 41+ + + (https://github.com/ansible-collections/community.general/pull/9778). + + ' + - reveal_ansible_type filter plugin and ansible_type test plugin - make compatible + with ansible-core's Data Tagging feature (https://github.com/ansible-collections/community.general/pull/9833). + - rundeck_acl_policy - ensure that project ACLs are sent to the correct endpoint + (https://github.com/ansible-collections/community.general/pull/10097). + - slack - fail if Slack API response is not OK with error message (https://github.com/ansible-collections/community.general/pull/9198). + - sudoers - display stdout and stderr raised while failed validation (https://github.com/ansible-collections/community.general/issues/9674, + https://github.com/ansible-collections/community.general/pull/9871). + - sysrc - no longer always reporting ``changed=true`` when ``state=absent``. + This fixes the method ``exists()`` (https://github.com/ansible-collections/community.general/issues/10004, + https://github.com/ansible-collections/community.general/pull/10005). + - sysrc - split the output of ``sysrc -e -a`` on the first ``=`` only (https://github.com/ansible-collections/community.general/issues/10120, + https://github.com/ansible-collections/community.general/pull/10121). + - xml - ensure file descriptor is closed (https://github.com/ansible-collections/community.general/pull/9695). + - yaml callback plugin - adjust to latest changes in ansible-core devel (https://github.com/ansible-collections/community.general/pull/10212). + - yaml callback plugin - use ansible-core internals to avoid breakage with + Data Tagging (https://github.com/ansible-collections/community.general/pull/9833). + - yaml callback plugin - when using ansible-core 2.19.0b2 or newer, uses a + new utility provided by ansible-core. This allows us to remove all hacks + and vendored code that was part of the plugin for ansible-core versions + with Data Tagging so far (https://github.com/ansible-collections/community.general/pull/10242). + - zfs - fix handling of multi-line values of user-defined ZFS properties (https://github.com/ansible-collections/community.general/pull/6264). + - zfs_facts - parameter ``type`` now accepts multple values as documented + (https://github.com/ansible-collections/community.general/issues/5909, https://github.com/ansible-collections/community.general/pull/9697). + - zypper_repository - make compatible with Python 3.12+ (https://github.com/ansible-collections/community.general/issues/10222, + https://github.com/ansible-collections/community.general/pull/10223). + - zypper_repository - use ``metalink`` attribute to identify repositories + without ```` element (https://github.com/ansible-collections/community.general/issues/10224, + https://github.com/ansible-collections/community.general/pull/10225). + deprecated_features: + - 'MH module utils - attribute ``debug`` definition in subclasses of MH is + now deprecated, as that name will become a delegation to ``AnsibleModule`` + in community.general 12.0.0, and any such attribute will be overridden by + that delegation in that version (https://github.com/ansible-collections/community.general/pull/9577). + + ' + - atomic_container - module is deprecated and will be removed in community.general + 13.0.0 (https://github.com/ansible-collections/community.general/pull/9487). + - atomic_host - module is deprecated and will be removed in community.general + 13.0.0 (https://github.com/ansible-collections/community.general/pull/9487). + - atomic_image - module is deprecated and will be removed in community.general + 13.0.0 (https://github.com/ansible-collections/community.general/pull/9487). + - facter - module is deprecated and will be removed in community.general 12.0.0, + use ``community.general.facter_facts`` instead (https://github.com/ansible-collections/community.general/pull/9451). + - 'locale_gen - ``ubuntu_mode=True``, or ``mechanism=ubuntu_legacy`` is deprecated + and will be removed in community.general 13.0.0 (https://github.com/ansible-collections/community.general/pull/9238). + + ' + - manifold lookup plugin - plugin is deprecated and will be removed in community.general + 11.0.0 (https://github.com/ansible-collections/community.general/pull/10028). + - opkg - deprecate value ``""`` for parameter ``force`` (https://github.com/ansible-collections/community.general/pull/9172). + - pipx module_utils - function ``make_process_list()`` is deprecated and will + be removed in community.general 13.0.0 (https://github.com/ansible-collections/community.general/pull/10031). + - profitbricks - module is deprecated and will be removed in community.general + 11.0.0 (https://github.com/ansible-collections/community.general/pull/9733). + - profitbricks_datacenter - module is deprecated and will be removed in community.general + 11.0.0 (https://github.com/ansible-collections/community.general/pull/9733). + - profitbricks_nic - module is deprecated and will be removed in community.general + 11.0.0 (https://github.com/ansible-collections/community.general/pull/9733). + - profitbricks_volume - module is deprecated and will be removed in community.general + 11.0.0 (https://github.com/ansible-collections/community.general/pull/9733). + - profitbricks_volume_attachments - module is deprecated and will be removed + in community.general 11.0.0 (https://github.com/ansible-collections/community.general/pull/9733). + - pure module utils - the module utils is deprecated and will be removed from + community.general 12.0.0. The modules using this were removed in community.general + 3.0.0 (https://github.com/ansible-collections/community.general/pull/9432). + - purestorage doc fragments - the doc fragment is deprecated and will be removed + from community.general 12.0.0. The modules using this were removed in community.general + 3.0.0 (https://github.com/ansible-collections/community.general/pull/9432). + - redfish_utils module utils - deprecate method ``RedfishUtils._init_session()`` + (https://github.com/ansible-collections/community.general/pull/9190). + - sensu_check - module is deprecated and will be removed in community.general + 13.0.0, use collection ``sensu.sensu_go`` instead (https://github.com/ansible-collections/community.general/pull/9483). + - sensu_client - module is deprecated and will be removed in community.general + 13.0.0, use collection ``sensu.sensu_go`` instead (https://github.com/ansible-collections/community.general/pull/9483). + - sensu_handler - module is deprecated and will be removed in community.general + 13.0.0, use collection ``sensu.sensu_go`` instead (https://github.com/ansible-collections/community.general/pull/9483). + - sensu_silence - module is deprecated and will be removed in community.general + 13.0.0, use collection ``sensu.sensu_go`` instead (https://github.com/ansible-collections/community.general/pull/9483). + - sensu_subscription - module is deprecated and will be removed in community.general + 13.0.0, use collection ``sensu.sensu_go`` instead (https://github.com/ansible-collections/community.general/pull/9483). + - slack - the default value ``auto`` of the ``prepend_hash`` option is deprecated + and will change to ``never`` in community.general 12.0.0 (https://github.com/ansible-collections/community.general/pull/9443). + - stackpath_compute inventory plugin - plugin is deprecated and will be removed + in community.general 11.0.0 (https://github.com/ansible-collections/community.general/pull/10026). + - yaml callback plugin - deprecate plugin in favor of ``result_format=yaml`` + in plugin ``ansible.bulitin.default`` (https://github.com/ansible-collections/community.general/pull/9456). + - yaml callback plugin - the YAML callback plugin was deprecated for removal + in community.general 13.0.0. Since it needs to use ansible-core internals + since ansible-core 2.19 that are changing a lot, we will remove this plugin + already from community.general 12.0.0 to ease the maintenance burden (https://github.com/ansible-collections/community.general/pull/10213). + known_issues: + - reveal_ansible_type filter plugin and ansible_type test plugin - note that + ansible-core's Data Tagging feature implements new aliases, such as ``_AnsibleTaggedStr`` + for ``str``, ``_AnsibleTaggedInt`` for ``int``, and ``_AnsibleTaggedFloat`` + for ``float`` (https://github.com/ansible-collections/community.general/pull/9833). + minor_changes: + - CmdRunner module utils - the convenience method ``cmd_runner_fmt.as_fixed()`` + now accepts multiple arguments as a list (https://github.com/ansible-collections/community.general/pull/9893). + - MH module utils - delegate ``debug`` to the underlying ``AnsibleModule`` + instance or issues a warning if an attribute already exists with that name + (https://github.com/ansible-collections/community.general/pull/9577). + - alternatives - add ``family`` parameter that allows to utilize the ``--family`` + option available in RedHat version of update-alternatives (https://github.com/ansible-collections/community.general/issues/5060, + https://github.com/ansible-collections/community.general/pull/9096). + - apache2_mod_proxy - better handling regexp extraction (https://github.com/ansible-collections/community.general/pull/9609). + - apache2_mod_proxy - change type of ``state`` to a list of strings. No change + for the users (https://github.com/ansible-collections/community.general/pull/9600). + - apache2_mod_proxy - code simplification, no change in functionality (https://github.com/ansible-collections/community.general/pull/9457). + - apache2_mod_proxy - improve readability when using results from ``fecth_url()`` + (https://github.com/ansible-collections/community.general/pull/9608). + - apache2_mod_proxy - refactor repeated code into method (https://github.com/ansible-collections/community.general/pull/9599). + - apache2_mod_proxy - remove unused parameter and code from ``Balancer`` constructor + (https://github.com/ansible-collections/community.general/pull/9614). + - apache2_mod_proxy - simplified and improved string manipulation (https://github.com/ansible-collections/community.general/pull/9614). + - apache2_mod_proxy - use ``deps`` to handle dependencies (https://github.com/ansible-collections/community.general/pull/9612). + - apache2_module - added workaround for new PHP module name, from ``php7_module`` + to ``php_module`` (https://github.com/ansible-collections/community.general/pull/9951). + - bitwarden lookup plugin - add new option ``collection_name`` to filter results + by collection name, and new option ``result_count`` to validate number of + results (https://github.com/ansible-collections/community.general/pull/9728). + - bitwarden lookup plugin - use f-strings instead of interpolations or ``format`` + (https://github.com/ansible-collections/community.general/pull/9324). + - cargo - add ``features`` parameter to allow activating specific features + when installing Rust packages (https://github.com/ansible-collections/community.general/pull/10198). + - cartesian lookup plugin - removed compatibility code for ansible-core < + 2.14 (https://github.com/ansible-collections/community.general/pull/10160). + - cgroup_memory_recap callback plugin - adjust standard preamble for Python + 3 (https://github.com/ansible-collections/community.general/pull/9583). + - cgroup_memory_recap callback plugin - use f-strings instead of interpolations + or ``format`` (https://github.com/ansible-collections/community.general/pull/9321). + - chef_databag lookup plugin - use f-strings instead of interpolations or + ``format`` (https://github.com/ansible-collections/community.general/pull/9324). + - chroot connection plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9584). + - chroot connection plugin - clean up string conversions (https://github.com/ansible-collections/community.general/pull/9379). + - chroot connection plugin - use f-strings instead of interpolations or ``format`` + (https://github.com/ansible-collections/community.general/pull/9322). + - cloud_init_data_facts - open file using ``open()`` as a context manager + (https://github.com/ansible-collections/community.general/pull/9579). + - cloudflare_dns - add support for ``comment`` and ``tags`` (https://github.com/ansible-collections/community.general/pull/9132). + - cobbler inventory plugin - add ``connection_timeout`` option to specify + the connection timeout to the cobbler server (https://github.com/ansible-collections/community.general/pull/11063). + - cobbler inventory plugin - add ``facts_level`` option to allow requesting + fully rendered variables for Cobbler systems (https://github.com/ansible-collections/community.general/issues/9419, + https://github.com/ansible-collections/community.general/pull/9975). + - cobbler inventory plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9584). + - cobbler inventory plugin - clean up string conversions (https://github.com/ansible-collections/community.general/pull/9379). + - cobbler inventory plugin - use f-strings instead of interpolations or ``format`` + (https://github.com/ansible-collections/community.general/pull/9323). + - collection_version lookup plugin - use f-strings instead of interpolations + or ``format`` (https://github.com/ansible-collections/community.general/pull/9324). + - consul_kv lookup plugin - use f-strings instead of interpolations or ``format`` + (https://github.com/ansible-collections/community.general/pull/9324). + - consul_token - fix idempotency when ``policies`` or ``roles`` are supplied + by name (https://github.com/ansible-collections/community.general/issues/9841, + https://github.com/ansible-collections/community.general/pull/9845). + - context_demo callback plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). + - context_demo callback plugin - use f-strings instead of interpolations or + ``format`` (https://github.com/ansible-collections/community.general/pull/9321). + - counter filter plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9585). + - counter_enabled callback plugin - adjust standard preamble for Python 3 + (https://github.com/ansible-collections/community.general/pull/9583). + - counter_enabled callback plugin - use f-strings instead of interpolations + or ``format`` (https://github.com/ansible-collections/community.general/pull/9321). + - cpanm - enable usage of option ``--with-recommends`` (https://github.com/ansible-collections/community.general/issues/9554, + https://github.com/ansible-collections/community.general/pull/9555). + - cpanm - enable usage of option ``--with-suggests`` (https://github.com/ansible-collections/community.general/pull/9555). + - crc32 filter plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9585). + - credstash lookup plugin - use f-strings instead of interpolations or ``format`` + (https://github.com/ansible-collections/community.general/pull/9324). + - cronvar - open file using ``open()`` as a context manager (https://github.com/ansible-collections/community.general/pull/9579). + - crypttab - open file using ``open()`` as a context manager (https://github.com/ansible-collections/community.general/pull/9579). + - cyberarkpassword lookup plugin - clean up string conversions (https://github.com/ansible-collections/community.general/pull/9379). + - cyberarkpassword lookup plugin - use f-strings instead of interpolations + or ``format`` (https://github.com/ansible-collections/community.general/pull/9324). + - default_without_diff callback plugin - adjust standard preamble for Python + 3 (https://github.com/ansible-collections/community.general/pull/9583). + - dense callback plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). + - dense callback plugin - use f-strings instead of interpolations or ``format`` + (https://github.com/ansible-collections/community.general/pull/9321). + - dependent lookup plugin - removed compatibility code for ansible-core < + 2.14 (https://github.com/ansible-collections/community.general/pull/10160). + - dependent lookup plugin - use f-strings instead of interpolations or ``format`` + (https://github.com/ansible-collections/community.general/pull/9324). + - deps module utils - add ``deps.clear()`` to clear out previously declared + dependencies (https://github.com/ansible-collections/community.general/pull/9179). + - dict filter plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9585). + - dict_kv filter plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9585). + - dig lookup plugin - clean up string conversions (https://github.com/ansible-collections/community.general/pull/9379). + - dig lookup plugin - use f-strings instead of interpolations or ``format`` + (https://github.com/ansible-collections/community.general/pull/9324). + - diy callback plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). + - diy callback plugin - use f-strings instead of interpolations or ``format`` + (https://github.com/ansible-collections/community.general/pull/9321). + - dnstxt lookup plugin - clean up string conversions (https://github.com/ansible-collections/community.general/pull/9379). + - dnstxt lookup plugin - use f-strings instead of interpolations or ``format`` + (https://github.com/ansible-collections/community.general/pull/9324). + - doas become plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). + - doas become plugin - use f-strings instead of interpolations or ``format`` + (https://github.com/ansible-collections/community.general/pull/9319). + - dsv lookup plugin - use f-strings instead of interpolations or ``format`` + (https://github.com/ansible-collections/community.general/pull/9324). + - dzdo become plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). + - dzdo become plugin - use f-strings instead of interpolations or ``format`` + (https://github.com/ansible-collections/community.general/pull/9319). + - elastic callback plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). + - elastic callback plugin - instead of trying to extract the ansible-core + version from task data, use ansible-core's actual version (https://github.com/ansible-collections/community.general/pull/10193). + - elastic callback plugin - use f-strings instead of interpolations or ``format`` + (https://github.com/ansible-collections/community.general/pull/9321). + - etcd lookup plugin - use f-strings instead of interpolations or ``format`` + (https://github.com/ansible-collections/community.general/pull/9324). + - etcd3 lookup plugin - clean up string conversions (https://github.com/ansible-collections/community.general/pull/9379). + - etcd3 lookup plugin - use f-strings instead of interpolations or ``format`` + (https://github.com/ansible-collections/community.general/pull/9324). + - filetree lookup plugin - use f-strings instead of interpolations or ``format`` + (https://github.com/ansible-collections/community.general/pull/9324). + - flattened lookup plugin - removed compatibility code for ansible-core < + 2.14 (https://github.com/ansible-collections/community.general/pull/10160). + - from_csv filter plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9585). + - from_csv filter plugin - clean up string conversions (https://github.com/ansible-collections/community.general/pull/9379). + - from_ini filter plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9585). + - from_ini filter plugin - clean up string conversions (https://github.com/ansible-collections/community.general/pull/9379). + - funcd connection plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9584). + - funcd connection plugin - use f-strings instead of interpolations or ``format`` + (https://github.com/ansible-collections/community.general/pull/9322). + - git_config - remove redundant ``required=False`` from ``argument_spec`` + (https://github.com/ansible-collections/community.general/pull/10177). + - github_app_access_token lookup plugin - use f-strings instead of interpolations + or ``format`` (https://github.com/ansible-collections/community.general/pull/9324). + - github_key - add ``api_url`` parameter to support GitHub Enterprise Server + installations (https://github.com/ansible-collections/community.general/pull/10191). + - gitlab_instance_variable - add support for ``raw`` variables suboption (https://github.com/ansible-collections/community.general/pull/9425). + - gitlab_project - add option ``build_timeout`` (https://github.com/ansible-collections/community.general/pull/9960). + - gitlab_project_members - extend choices parameter ``access_level`` by missing + upstream valid value ``owner`` (https://github.com/ansible-collections/community.general/pull/9953). + - gitlab_runners inventory plugin - adjust standard preamble for Python 3 + (https://github.com/ansible-collections/community.general/pull/9584). + - gitlab_runners inventory plugin - clean up string conversions (https://github.com/ansible-collections/community.general/pull/9379). + - gitlab_runners inventory plugin - use f-strings instead of interpolations + or ``format`` (https://github.com/ansible-collections/community.general/pull/9323). + - groupby_as_dict filter plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9585). + - hashids filter plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9585). + - hiera lookup plugin - use f-strings instead of interpolations or ``format`` + (https://github.com/ansible-collections/community.general/pull/9324). + - homebrew - greatly speed up module when multiple packages are passed in + the ``name`` option (https://github.com/ansible-collections/community.general/pull/9181). + - homebrew - remove duplicated package name validation (https://github.com/ansible-collections/community.general/pull/9076). + - 'hpilo_boot - add option to get an idempotent behavior while powering on + server, resulting in success instead of failure when using ``state: boot_once`` + option (https://github.com/ansible-collections/community.general/pull/9646).' + - icinga2 inventory plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9584). + - icinga2 inventory plugin - use f-strings instead of interpolations or ``format`` + (https://github.com/ansible-collections/community.general/pull/9323). + - idrac_redfish_command, idrac_redfish_config, idrac_redfish_info - add ``validate_certs``, + ``ca_path``, and ``ciphers`` options to configure TLS/SSL (https://github.com/ansible-collections/community.general/issues/3686, + https://github.com/ansible-collections/community.general/pull/9964). + - ilo_redfish_command, ilo_redfish_config, ilo_redfish_info - add ``validate_certs``, + ``ca_path``, and ``ciphers`` options to configure TLS/SSL (https://github.com/ansible-collections/community.general/issues/3686, + https://github.com/ansible-collections/community.general/pull/9964). + - incus connection plugin - adds ``remote_user`` and ``incus_become_method`` + parameters for allowing a non-root user to connect to an Incus instance + (https://github.com/ansible-collections/community.general/pull/9743). + - incus connection plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9584). + - incus connection plugin - use f-strings instead of interpolations or ``format`` + (https://github.com/ansible-collections/community.general/pull/9322). + - ini_file - modify an inactive option also when there are spaces in front + of the comment symbol (https://github.com/ansible-collections/community.general/pull/10102, + https://github.com/ansible-collections/community.general/issues/8539). + - iocage connection plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9584). + - iocage connection plugin - use f-strings instead of interpolations or ``format`` + (https://github.com/ansible-collections/community.general/pull/9322). + - iocage inventory plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9584). + - iocage inventory plugin - clean up string conversions (https://github.com/ansible-collections/community.general/pull/9379). + - iocage inventory plugin - the new parameter ``hooks_results`` of the plugin + is a list of files inside a jail that provide configuration parameters for + the inventory. The inventory plugin reads the files from the jails and put + the contents into the items of created variable ``iocage_hooks`` (https://github.com/ansible-collections/community.general/issues/9650, + https://github.com/ansible-collections/community.general/pull/9651). + - iocage inventory plugin - the new parameter ``inventory_hostname_tag`` of + the plugin provides the name of the tag in the C(iocage properties notes) + that contains the jails alias. The new parameter ``inventory_hostname_required``, + if enabled, makes the tag mandatory (https://github.com/ansible-collections/community.general/issues/10206, + https://github.com/ansible-collections/community.general/pull/10207). + - iocage inventory plugin - the new parameter ``sudo`` of the plugin lets + the command ``iocage list -l`` to run as root on the iocage host. This is + needed to get the IPv4 of a running DHCP jail (https://github.com/ansible-collections/community.general/issues/9572, + https://github.com/ansible-collections/community.general/pull/9573). + - iptables_state action plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). + - iptables_state action plugin - use f-strings instead of interpolations or + ``format`` (https://github.com/ansible-collections/community.general/pull/9318). + - iso_extract - adds ``password`` parameter that is passed to 7z (https://github.com/ansible-collections/community.general/pull/9159). + - jabber callback plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). + - jabber callback plugin - use f-strings instead of interpolations or ``format`` + (https://github.com/ansible-collections/community.general/pull/9321). + - jail connection plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9584). + - jail connection plugin - use f-strings instead of interpolations or ``format`` + (https://github.com/ansible-collections/community.general/pull/9322). + - jc filter plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9585). + - jira - adds ``client_cert`` and ``client_key`` parameters for supporting + client certificate authentification when connecting to Jira (https://github.com/ansible-collections/community.general/pull/9753). + - jira - transition operation now has ``status_id`` to directly reference + wanted transition (https://github.com/ansible-collections/community.general/pull/9602). + - json_query filter plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9585). + - keep_keys filter plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9585). + - keycloak - add an action group for Keycloak modules to allow ``module_defaults`` + to be set for Keycloak tasks (https://github.com/ansible-collections/community.general/pull/9284). + - keycloak module_utils - user groups can now be referenced by their name, + like ``staff``, or their path, like ``/staff/engineering``. The path syntax + allows users to reference subgroups, which is not possible otherwise (https://github.com/ansible-collections/community.general/pull/9898). + - keycloak_* modules - ``refresh_token`` parameter added. When multiple authentication + parameters are provided (``token``, ``refresh_token``, and ``auth_username``/``auth_password``), + modules will now automatically retry requests upon authentication errors + (401), using in order the token, refresh token, and username/password (https://github.com/ansible-collections/community.general/pull/9494). + - keycloak_realm - remove ID requirement when creating a realm to allow Keycloak + generating its own realm ID (https://github.com/ansible-collections/community.general/pull/9768). + - keycloak_user module - user groups can now be referenced by their name, + like ``staff``, or their path, like ``/staff/engineering``. The path syntax + allows users to reference subgroups, which is not possible otherwise (https://github.com/ansible-collections/community.general/pull/9898). + - keyring lookup plugin - use f-strings instead of interpolations or ``format`` + (https://github.com/ansible-collections/community.general/pull/9324). + - known_hosts - open file using ``open()`` as a context manager (https://github.com/ansible-collections/community.general/pull/9579). + - ksu become plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). + - ksu become plugin - use f-strings instead of interpolations or ``format`` + (https://github.com/ansible-collections/community.general/pull/9319). + - lastpass lookup plugin - use f-strings instead of interpolations or ``format`` + (https://github.com/ansible-collections/community.general/pull/9324). + - launchd - add ``plist`` option for services such as sshd, where the plist + filename doesn't match the service name (https://github.com/ansible-collections/community.general/pull/9102). + - linode inventory plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9584). + - linode inventory plugin - use f-strings instead of interpolations or ``format`` + (https://github.com/ansible-collections/community.general/pull/9323). + - lists filter plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9585). + - lists_mergeby filter plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9585). + - lldp - adds ``multivalues`` parameter to control behavior when lldpctl outputs + an attribute multiple times (https://github.com/ansible-collections/community.general/pull/9657). + - lmdb_kv lookup plugin - clean up string conversions (https://github.com/ansible-collections/community.general/pull/9379). + - lmdb_kv lookup plugin - use f-strings instead of interpolations or ``format`` + (https://github.com/ansible-collections/community.general/pull/9324). + - locale_gen - invert the logic to determine ``ubuntu_mode``, making it look + first for ``/etc/locale.gen`` (set ``ubuntu_mode`` to ``False``) and only + then looking for ``/var/lib/locales/supported.d/`` (set ``ubuntu_mode`` + to ``True``) (https://github.com/ansible-collections/community.general/pull/9238, + https://github.com/ansible-collections/community.general/issues/9131, https://github.com/ansible-collections/community.general/issues/8487). + - 'locale_gen - new return value ``mechanism`` to better express the semantics + of the ``ubuntu_mode``, with the possible values being either ``glibc`` + (``ubuntu_mode=False``) or ``ubuntu_legacy`` (``ubuntu_mode=True``) (https://github.com/ansible-collections/community.general/pull/9238). + + ' + - log_plays callback plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). + - log_plays callback plugin - use f-strings instead of interpolations or ``format`` + (https://github.com/ansible-collections/community.general/pull/9321). + - loganalytics callback plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). + - loganalytics callback plugin - instead of trying to extract the ansible-core + version from task data, use ansible-core's actual version (https://github.com/ansible-collections/community.general/pull/10193). + - loganalytics callback plugin - use f-strings instead of interpolations or + ``format`` (https://github.com/ansible-collections/community.general/pull/9321). + - logdna callback plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). + - logdna callback plugin - use f-strings instead of interpolations or ``format`` + (https://github.com/ansible-collections/community.general/pull/9321). + - logentries callback plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). + - logentries callback plugin - clean up string conversions (https://github.com/ansible-collections/community.general/pull/9379). + - logentries callback plugin - use f-strings instead of interpolations or + ``format`` (https://github.com/ansible-collections/community.general/pull/9321). + - logstash callback plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). + - lvg - add ``remove_extra_pvs`` parameter to control if ansible should remove + physical volumes which are not in the ``pvs`` parameter (https://github.com/ansible-collections/community.general/pull/9698). + - lxc connection plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9584). + - lxc connection plugin - use f-strings instead of interpolations or ``format`` + (https://github.com/ansible-collections/community.general/pull/9322). + - lxd connection plugin - adds ``remote_user`` and ``lxd_become_method`` parameters + for allowing a non-root user to connect to an LXD instance (https://github.com/ansible-collections/community.general/pull/9659). + - lxd connection plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9584). + - lxd connection plugin - use f-strings instead of interpolations or ``format`` + (https://github.com/ansible-collections/community.general/pull/9322). + - lxd inventory plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9584). + - lxd inventory plugin - clean up string conversions (https://github.com/ansible-collections/community.general/pull/9379). + - lxd inventory plugin - use f-strings instead of interpolations or ``format`` + (https://github.com/ansible-collections/community.general/pull/9323). + - machinectl become plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). + - machinectl become plugin - use f-strings instead of interpolations or ``format`` + (https://github.com/ansible-collections/community.general/pull/9319). + - mail callback plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). + - mail callback plugin - use f-strings instead of interpolations or ``format`` + (https://github.com/ansible-collections/community.general/pull/9321). + - manageiq_alert_profiles - improve handling of parameter requirements (https://github.com/ansible-collections/community.general/pull/9449). + - manifold lookup plugin - clean up string conversions (https://github.com/ansible-collections/community.general/pull/9379). + - manifold lookup plugin - use f-strings instead of interpolations or ``format`` + (https://github.com/ansible-collections/community.general/pull/9324). + - maven_artifact - removed compatibility code for ansible-core < 2.12 (https://github.com/ansible-collections/community.general/pull/10192). + - memcached cache plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). + - memcached cache plugin - use f-strings instead of interpolations or ``format`` + (https://github.com/ansible-collections/community.general/pull/9320). + - merge_variables lookup plugin - use f-strings instead of interpolations + or ``format`` (https://github.com/ansible-collections/community.general/pull/9324). + - nmap inventory plugin - adds ``dns_servers`` option for specifying DNS servers + for name resolution. Accepts hostnames or IP addresses in the same format + as the ``exclude`` option (https://github.com/ansible-collections/community.general/pull/9849). + - nmap inventory plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9584). + - nmap inventory plugin - clean up string conversions (https://github.com/ansible-collections/community.general/pull/9379). + - nmap inventory plugin - use f-strings instead of interpolations or ``format`` + (https://github.com/ansible-collections/community.general/pull/9323). + - nmcli - add ``sriov`` parameter that enables support for SR-IOV settings + (https://github.com/ansible-collections/community.general/pull/9168). + - nmcli - add a option ``fail_over_mac`` (https://github.com/ansible-collections/community.general/issues/9570, + https://github.com/ansible-collections/community.general/pull/9571). + - nmcli - add support for Infiniband MAC setting when ``type`` is ``infiniband`` + (https://github.com/ansible-collections/community.general/pull/9962). + - nmcli - adds VRF support with new ``type`` value ``vrf`` and new ``slave_type`` + value ``vrf`` as well as new ``table`` parameter (https://github.com/ansible-collections/community.general/pull/9658, + https://github.com/ansible-collections/community.general/issues/8014). + - nmcli - adds ``autoconnect_priority`` and ``autoconnect_retries`` options + to support autoconnect logic (https://github.com/ansible-collections/community.general/pull/10134). + - nrdp callback plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). + - nrdp callback plugin - use f-strings instead of interpolations or ``format`` + (https://github.com/ansible-collections/community.general/pull/9321). + - null callback plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). + - one_template - adds ``filter`` option for retrieving templates which are + not owned by the user (https://github.com/ansible-collections/community.general/pull/9547, + https://github.com/ansible-collections/community.general/issues/9278). + - 'one_vm - update allowed values for ``updateconf`` to include new parameters + as per the latest OpenNebula API documentation. + + Added parameters: + + + * ``OS``: ``FIRMWARE``; + + * ``CPU_MODEL``: ``MODEL``, ``FEATURES``; + + * ``FEATURES``: ``VIRTIO_BLK_QUEUES``, ``VIRTIO_SCSI_QUEUES``, ``IOTHREADS``; + + * ``GRAPHICS``: ``PORT``, ``COMMAND``; + + * ``VIDEO``: ``ATS``, ``IOMMU``, ``RESOLUTION``, ``TYPE``, ``VRAM``; + + * ``RAW``: ``VALIDATE``; + + * ``BACKUP_CONFIG``: ``FS_FREEZE``, ``KEEP_LAST``, ``BACKUP_VOLATILE``, + ``MODE``, ``INCREMENT_MODE``. + + + (https://github.com/ansible-collections/community.general/pull/9959).' + - onepassword lookup plugin - clean up string conversions (https://github.com/ansible-collections/community.general/pull/9379). + - onepassword lookup plugin - use f-strings instead of interpolations or ``format`` + (https://github.com/ansible-collections/community.general/pull/9324). + - onepassword_doc lookup plugin - use f-strings instead of interpolations + or ``format`` (https://github.com/ansible-collections/community.general/pull/9324). + - onepassword_ssh_key - refactor to move code to lookup class (https://github.com/ansible-collections/community.general/pull/9633). + - online inventory plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9584). + - online inventory plugin - use f-strings instead of interpolations or ``format`` + (https://github.com/ansible-collections/community.general/pull/9323). + - opennebula inventory plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9584). + - opennebula inventory plugin - clean up string conversions (https://github.com/ansible-collections/community.general/pull/9379). + - opennebula inventory plugin - use f-strings instead of interpolations or + ``format`` (https://github.com/ansible-collections/community.general/pull/9323). + - opentelemetry callback plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). + - opentelemetry callback plugin - instead of trying to extract the ansible-core + version from task data, use ansible-core's actual version (https://github.com/ansible-collections/community.general/pull/10193). + - opentelemetry callback plugin - remove code handling Python versions prior + to 3.7 (https://github.com/ansible-collections/community.general/pull/9482). + - opentelemetry callback plugin - remove code handling Python versions prior + to 3.7 (https://github.com/ansible-collections/community.general/pull/9503). + - opentelemetry callback plugin - use f-strings instead of interpolations + or ``format`` (https://github.com/ansible-collections/community.general/pull/9321). + - pacemaker_cluster - remove unused code (https://github.com/ansible-collections/community.general/pull/9471). + - pacemaker_cluster - using safer mechanism to run external command (https://github.com/ansible-collections/community.general/pull/9471). + - pacemaker_resource - add maintenance mode support for handling resource + creation and deletion (https://github.com/ansible-collections/community.general/issues/10180, + https://github.com/ansible-collections/community.general/pull/10194). + - pacman_key - support verifying that keys are trusted and not expired (https://github.com/ansible-collections/community.general/issues/9949, + https://github.com/ansible-collections/community.general/pull/9950). + - parted - open file using ``open()`` as a context manager (https://github.com/ansible-collections/community.general/pull/9579). + - passwordstore lookup plugin - use f-strings instead of interpolations or + ``format`` (https://github.com/ansible-collections/community.general/pull/9324). + - pbrun become plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). + - pbrun become plugin - use f-strings instead of interpolations or ``format`` + (https://github.com/ansible-collections/community.general/pull/9319). + - pfexec become plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). + - pfexec become plugin - use f-strings instead of interpolations or ``format`` + (https://github.com/ansible-collections/community.general/pull/9319). + - pickle cache plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). + - pipx - add return value ``version`` (https://github.com/ansible-collections/community.general/pull/9180). + - 'pipx - parameter ``name`` now accepts Python package specifiers (https://github.com/ansible-collections/community.general/issues/7815, + https://github.com/ansible-collections/community.general/pull/10031). + + ' + - pipx module_utils - filtering application list by name now happens in the + modules (https://github.com/ansible-collections/community.general/pull/10031). + - pipx_info - add return value ``version`` (https://github.com/ansible-collections/community.general/pull/9180). + - pipx_info - filtering application list by name now happens in the module (https://github.com/ansible-collections/community.general/pull/10031). + - pmrun become plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). + - pmrun become plugin - use f-strings instead of interpolations or ``format`` + (https://github.com/ansible-collections/community.general/pull/9319). + - pulp_repo - open file using ``open()`` as a context manager (https://github.com/ansible-collections/community.general/pull/9579). + - puppet - improve parameter formatting, no impact to user (https://github.com/ansible-collections/community.general/pull/10014). + - qubes connection plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9584). + - qubes connection plugin - use f-strings instead of interpolations or ``format`` + (https://github.com/ansible-collections/community.general/pull/9322). + - random_mac filter plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9585). + - random_pet lookup plugin - use f-strings instead of interpolations or ``format`` + (https://github.com/ansible-collections/community.general/pull/9324). + - redfish module utils - add ``REDFISH_COMMON_ARGUMENT_SPEC``, a corresponding + ``redfish`` docs fragment, and support for its ``validate_certs``, ``ca_path``, + and ``ciphers`` options (https://github.com/ansible-collections/community.general/issues/3686, + https://github.com/ansible-collections/community.general/pull/9964). + - redfish module utils - removed compatibility code for ansible-core < 2.14 + (https://github.com/ansible-collections/community.general/pull/10160). + - redfish_command - add ``PowerFullPowerCycle`` to power command options (https://github.com/ansible-collections/community.general/pull/9729). + - redfish_command - add ``update_custom_oem_header``, ``update_custom_oem_params``, + and ``update_custom_oem_mime_type`` options (https://github.com/ansible-collections/community.general/pull/9123). + - redfish_command, redfish_config, redfish_info - add ``validate_certs`` and + ``ca_path`` options to configure TLS/SSL (https://github.com/ansible-collections/community.general/issues/3686, + https://github.com/ansible-collections/community.general/pull/9964). + - redfish_config - add command ``SetPowerRestorePolicy`` to set the desired + power state of the system when power is restored (https://github.com/ansible-collections/community.general/pull/9837). + - redfish_info - add command ``GetAccountServiceConfig`` to get full information + about AccountService configuration (https://github.com/ansible-collections/community.general/pull/9403). + - redfish_info - add command ``GetPowerRestorePolicy`` to get the desired + power state of the system when power is restored (https://github.com/ansible-collections/community.general/pull/9824). + - redfish_utils module utils - remove redundant code (https://github.com/ansible-collections/community.general/pull/9190). + - redhat_subscription - open file using ``open()`` as a context manager (https://github.com/ansible-collections/community.general/pull/9579). + - redis cache plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). + - redis cache plugin - clean up string conversions (https://github.com/ansible-collections/community.general/pull/9379). + - redis cache plugin - use f-strings instead of interpolations or ``format`` + (https://github.com/ansible-collections/community.general/pull/9320). + - redis lookup plugin - use f-strings instead of interpolations or ``format`` + (https://github.com/ansible-collections/community.general/pull/9324). + - remove_keys filter plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9585). + - replace_keys filter plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9585). + - revbitspss lookup plugin - use f-strings instead of interpolations or ``format`` + (https://github.com/ansible-collections/community.general/pull/9324). + - reveal_ansible_type filter plugin - adjust standard preamble for Python + 3 (https://github.com/ansible-collections/community.general/pull/9585). + - rocketchat - fix duplicate JSON conversion for Rocket.Chat < 7.4.0 (https://github.com/ansible-collections/community.general/pull/9965). + - rocketchat - option ``is_pre740`` has been added to control the format of + the payload. For Rocket.Chat 7.4.0 or newer, it must be set to ``false`` + (https://github.com/ansible-collections/community.general/pull/9882). + - rpm_ostree_pkg - added the options ``apply_live`` (https://github.com/ansible-collections/community.general/pull/9167). + - rpm_ostree_pkg - added the return value ``needs_reboot`` (https://github.com/ansible-collections/community.general/pull/9167). + - run0 become plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). + - saltstack connection plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9584). + - saltstack connection plugin - use f-strings instead of interpolations or + ``format`` (https://github.com/ansible-collections/community.general/pull/9322). + - say callback plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). + - say callback plugin - use f-strings instead of interpolations or ``format`` + (https://github.com/ansible-collections/community.general/pull/9321). + - scaleway inventory plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9584). + - scaleway inventory plugin - clean up string conversions (https://github.com/ansible-collections/community.general/pull/9379). + - scaleway inventory plugin - use f-strings instead of interpolations or ``format`` + (https://github.com/ansible-collections/community.general/pull/9323). + - scaleway_lb - minor simplification in the code (https://github.com/ansible-collections/community.general/pull/9189). + - selective callback plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). + - selective callback plugin - use f-strings instead of interpolations or ``format`` + (https://github.com/ansible-collections/community.general/pull/9321). + - sesu become plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). + - sesu become plugin - use f-strings instead of interpolations or ``format`` + (https://github.com/ansible-collections/community.general/pull/9319). + - shelvefile lookup plugin - use f-strings instead of interpolations or ``format`` + (https://github.com/ansible-collections/community.general/pull/9324). + - shutdown action plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). + - shutdown action plugin - clean up string conversions (https://github.com/ansible-collections/community.general/pull/9379). + - shutdown action plugin - use f-strings instead of interpolations or ``format`` + (https://github.com/ansible-collections/community.general/pull/9318). + - slack callback plugin - add ``http_agent`` option to enable the user to + set a custom user agent for slack callback plugin (https://github.com/ansible-collections/community.general/issues/9813, + https://github.com/ansible-collections/community.general/pull/9836). + - slack callback plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). + - slack callback plugin - clean up string conversions (https://github.com/ansible-collections/community.general/pull/9379). + - slack callback plugin - use f-strings instead of interpolations or ``format`` + (https://github.com/ansible-collections/community.general/pull/9321). + - snap - add return value ``version`` (https://github.com/ansible-collections/community.general/pull/9598). + - snap_alias - add return value ``version`` (https://github.com/ansible-collections/community.general/pull/9598). + - solaris_zone - open file using ``open()`` as a context manager (https://github.com/ansible-collections/community.general/pull/9579). + - sorcery - open file using ``open()`` as a context manager (https://github.com/ansible-collections/community.general/pull/9579). + - splunk callback plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). + - splunk callback plugin - instead of trying to extract the ansible-core version + from task data, use ansible-core's actual version (https://github.com/ansible-collections/community.general/pull/10193). + - splunk callback plugin - use f-strings instead of interpolations or ``format`` + (https://github.com/ansible-collections/community.general/pull/9321). + - ssh_config - add ``dynamicforward`` option (https://github.com/ansible-collections/community.general/pull/9192). + - ssh_config - add ``other_options`` option (https://github.com/ansible-collections/community.general/issues/8053, + https://github.com/ansible-collections/community.general/pull/9684). + - stackpath_compute inventory plugin - adjust standard preamble for Python + 3 (https://github.com/ansible-collections/community.general/pull/9584). + - stackpath_compute inventory plugin - use f-strings instead of interpolations + or ``format`` (https://github.com/ansible-collections/community.general/pull/9323). + - sudosu become plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). + - sudosu become plugin - use f-strings instead of interpolations or ``format`` + (https://github.com/ansible-collections/community.general/pull/9319). + - sumologic callback plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). + - sumologic callback plugin - instead of trying to extract the ansible-core + version from task data, use ansible-core's actual version (https://github.com/ansible-collections/community.general/pull/10193). + - syslog_json callback plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). + - systemd_info - add wildcard expression support in ``unitname`` option (https://github.com/ansible-collections/community.general/pull/9821). + - systemd_info - extend support to timer units (https://github.com/ansible-collections/community.general/pull/9891). + - terraform - adds the ``no_color`` parameter, which suppresses or allows + color codes in stdout from Terraform commands (https://github.com/ansible-collections/community.general/pull/10154). + - time filter plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9585). + - timestamp callback plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). + - timestamp callback plugin - use f-strings instead of interpolations or ``format`` + (https://github.com/ansible-collections/community.general/pull/9321). + - timezone - open file using ``open()`` as a context manager (https://github.com/ansible-collections/community.general/pull/9579). + - to_ini filter plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9585). + - to_ini filter plugin - clean up string conversions (https://github.com/ansible-collections/community.general/pull/9379). + - tss lookup plugin - clean up string conversions (https://github.com/ansible-collections/community.general/pull/9379). + - tss lookup plugin - use f-strings instead of interpolations or ``format`` + (https://github.com/ansible-collections/community.general/pull/9324). + - ufw - add support for ``vrrp`` protocol (https://github.com/ansible-collections/community.general/issues/9562, + https://github.com/ansible-collections/community.general/pull/9582). + - unicode_normalize filter plugin - adjust standard preamble for Python 3 + (https://github.com/ansible-collections/community.general/pull/9585). + - unixy callback plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). + - unixy callback plugin - use f-strings instead of interpolations or ``format`` + (https://github.com/ansible-collections/community.general/pull/9321). + - version_sort filter plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9585). + - virtualbox inventory plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9584). + - virtualbox inventory plugin - clean up string conversions (https://github.com/ansible-collections/community.general/pull/9379). + - virtualbox inventory plugin - use f-strings instead of interpolations or + ``format`` (https://github.com/ansible-collections/community.general/pull/9323). + - vmadm - add new options ``flexible_disk_size`` and ``owner_uuid`` (https://github.com/ansible-collections/community.general/pull/9892). + - wdc_redfish_command, wdc_redfish_info - add ``validate_certs``, ``ca_path``, + and ``ciphers`` options to configure TLS/SSL (https://github.com/ansible-collections/community.general/issues/3686, + https://github.com/ansible-collections/community.general/pull/9964). + - xbps - add ``root`` and ``repository`` options to enable bootstrapping new + void installations (https://github.com/ansible-collections/community.general/pull/9174). + - xcc_redfish_command - add ``validate_certs``, ``ca_path``, and ``ciphers`` + options to configure TLS/SSL (https://github.com/ansible-collections/community.general/issues/3686, + https://github.com/ansible-collections/community.general/pull/9964). + - xen_orchestra inventory plugin - add ``use_vm_uuid`` and ``use_host_uuid`` + boolean options to allow switching over to using VM/Xen name labels instead + of UUIDs as item names (https://github.com/ansible-collections/community.general/pull/9787). + - xen_orchestra inventory plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9584). + - xen_orchestra inventory plugin - use f-strings instead of interpolations + or ``format`` (https://github.com/ansible-collections/community.general/pull/9323). + - xfconf - add return value ``version`` (https://github.com/ansible-collections/community.general/pull/9226). + - xfconf_info - add return value ``version`` (https://github.com/ansible-collections/community.general/pull/9226). + - xml - support adding value of children when creating with subnodes (https://github.com/ansible-collections/community.general/pull/8437). + - yaml cache plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). + - yaml callback plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). + - yaml callback plugin - use f-strings instead of interpolations or ``format`` + (https://github.com/ansible-collections/community.general/pull/9321). + - zone connection plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9584). + - zone connection plugin - use f-strings instead of interpolations or ``format`` + (https://github.com/ansible-collections/community.general/pull/9322). + - zypper - add ``quiet`` option (https://github.com/ansible-collections/community.general/pull/9270). + - zypper - add ``simple_errors`` option (https://github.com/ansible-collections/community.general/pull/9270). + - zypper - adds ``skip_post_errors`` that allows to skip RPM post-install + errors (Zypper return code 107) (https://github.com/ansible-collections/community.general/issues/9972). + release_summary: This is release 11.0.0 of ``community.general``, released on + 2025-06-16. + removed_features: + - Dropped support for ansible-core 2.15. The collection now requires ansible-core + 2.16 or newer. This means that on the controller, Python 3.10+ is required. + On the target side, Python 2.7 and Python 3.6+ are supported (https://github.com/ansible-collections/community.general/pull/10160, + https://github.com/ansible-collections/community.general/pull/10192). + - The Proxmox content (modules and plugins) has been moved to the `new collection + community.proxmox `__. + Since community.general 11.0.0, these modules and plugins have been replaced + by deprecated redirections to community.proxmox. You need to explicitly + install community.proxmox, for example with ``ansible-galaxy collection + install community.proxmox``, or by installing a new enough version of the + Ansible community package. We suggest to update your roles and playbooks + to use the new FQCNs as soon as possible to avoid getting deprecation messages + (https://github.com/ansible-collections/community.general/pull/10110). + - apt_rpm - the ``present`` and ``installed`` states are no longer equivalent + to ``latest``, but to ``present_not_latest`` (https://github.com/ansible-collections/community.general/pull/10126). + - clc_* modules and doc fragment - the modules were removed since CenturyLink + Cloud services went EOL in September 2023 (https://github.com/ansible-collections/community.general/pull/10126). + - django_manage - the ``ack_venv_creation_deprecation`` option has been removed. + It had no effect anymore anyway (https://github.com/ansible-collections/community.general/pull/10126). + - git_config - it is no longer allowed to use ``state=present`` with no value + to read the config value. Use the ``community.general.git_config_info`` + module instead (https://github.com/ansible-collections/community.general/pull/10126). + - git_config - the ``list_all`` option has been removed. Use the ``community.general.git_config_info`` + module instead (https://github.com/ansible-collections/community.general/pull/10126). + - hipchat - the module was removed since the hipchat service has been discontinued + and the self-hosted variant has been End of Life since 2020 (https://github.com/ansible-collections/community.general/pull/10126). + - manifold lookup plugin - the plugin was removed since the company was acquired + in 2021 and service was ceased afterwards (https://github.com/ansible-collections/community.general/pull/10126). + - mh.mixins.deps module utils - this module utils has been removed. Use the + ``deps`` module utils instead (https://github.com/ansible-collections/community.general/pull/10126). + - mh.mixins.vars module utils - this module utils has been removed. Use ``VarDict`` + from the ``vardict`` module utils instead (https://github.com/ansible-collections/community.general/pull/10126). + - mh.module_helper module utils - ``AnsibleModule`` and ``VarsMixin`` are + no longer provided (https://github.com/ansible-collections/community.general/pull/10126). + - mh.module_helper module utils - ``VarDict`` is now imported from the ``vardict`` + module utils and no longer from the removed ``mh.mixins.vars`` module utils + (https://github.com/ansible-collections/community.general/pull/10126). + - mh.module_helper module utils - the attributes ``use_old_vardict`` and ``mute_vardict_deprecation`` + from ``ModuleHelper`` have been removed. We suggest to remove them from + your modules if you no longer support community.general < 11.0.0 (https://github.com/ansible-collections/community.general/pull/10126). + - module_helper module utils - ``StateMixin``, ``DependencyCtxMgr``, ``VarMeta``, + ``VarDict``, and ``VarsMixin`` are no longer provided (https://github.com/ansible-collections/community.general/pull/10126). + - pipx - module no longer supports ``pipx`` older than 1.7.0 (https://github.com/ansible-collections/community.general/pull/10137). + - pipx_info - module no longer supports ``pipx`` older than 1.7.0 (https://github.com/ansible-collections/community.general/pull/10137). + - profitbrick* modules - the modules were removed since the supporting library + is unsupported since 2021 (https://github.com/ansible-collections/community.general/pull/10126). + - redfish_utils module utils - the ``_init_session`` method has been removed + (https://github.com/ansible-collections/community.general/pull/10126). + - stackpath_compute inventory plugin - the plugin was removed since the company + and the service were sunset in June 2024 (https://github.com/ansible-collections/community.general/pull/10126). + security_fixes: + - keycloak_authentication - API calls did not properly set the ``priority`` + during update resulting in incorrectly sorted authentication flows. This + apparently only affects Keycloak 25 or newer (https://github.com/ansible-collections/community.general/pull/9263). + - keycloak_client - Sanitize ``saml.encryption.private.key`` so it does not + show in the logs (https://github.com/ansible-collections/community.general/pull/9621). + fragments: + - 10005-fix-method-exists-in-sysrc.yml + - 10011-github_deploy_key-check-key-present.yml + - 10012-improve-error-handling-homebrew-missing-tap.yml + - 10014-puppet-improve-param.yml + - 10026-stackpath-compute-deprecation.yml + - 10028-manifold-deprecation.yml + - 10031-pipx-python-version.yml + - 10063-cobbler-add-connection-timeout.yml + - 10075-keycloak_user_rolemapping-diff.yml + - 10097-fix-rundeck_acl_policy-project-endpoint.yml + - 10102-ini_file-fix-unmatched-whitespace-before-comment.yml + - 10121-sysrc-fix-split-first-separator.yml + - 10128-mark-end-of-options.yml + - 10134-add-autoconnect-options.yml + - 10136-cache-pickle-json.yml + - 10137-pipx-cg11.yml + - 10145-fix-typeerror-cobbler-xmlrpc.yml + - 10154-terraform_no_color_paramater.yml + - 10177-git-config-required.yml + - 10178-update-minimum-version-number-to-avoid-wrong-comparisons-cobbler-xmlrpc.yml + - 10191-github_key-add-api_url-parameter.yml + - 10193-callback-ansible_version.yml + - 10194-add-pcs-resource-maintenace-mode.yml + - 10196-fix-gitlab-access-tokens.yml + - 10198-cargo-features-parameter.yml + - 10207-iocage-inventory-alias.yml + - 10212-yaml.yml + - 10213-yaml-deprecation.yml + - 10222-zypper_repository-readfp.yml + - 10224-zypper_repository-metalink.yml + - 10242-yaml.yml + - 11.0.0.yml + - 5932-launchd-plist.yml + - 6264-zfs-multiline-property-value.yml + - 8437-xml-children-value.yml + - 9076-remove-duplicated-homebrew-package-name-validation.yml + - 9077-keycloak_client-fix-attributes-dict-turned-into-list.yml + - 9082-keycloak_clientscope-fix-attributes-dict-turned-into-list.yml + - 9096-alternatives-add-family-parameter.yml + - 9106-passwordstore-fix-subkey-creation-even-when-create-==-false.yml + - 9114-redfish-utils-update-remove-default-applytime.yml + - 9123-redfish-command-custom-oem-params.yml + - 9124-dnf_config_manager.yml + - 9128-homebrew_cask-name-regex-fix.yml + - 9132-cloudflare_dns-comment-and-tags.yml + - 9157-fix-dnf_config_manager-locale.yml + - 9159-iso-extract_add_password.yml + - 9167-rpm_ostree_pkg-apply_live.yml + - 9168-nmcli-add-sriov-parameter.yml + - 9171-gio-mime-fix-version.yml + - 9172-opkg-deprecate-force-none.yml + - 9174-xbps-support-rootdir-and-repository.yml + - 9179-deps-tests.yml + - 9180-pipx-version.yml + - 9181-improve-homebrew-module-performance.yml + - 9186-fix-broken-check-mode-in-github-key.yml + - 9187-flatpak-lang.yml + - 9189-scalway-lb-simplify-return.yml + - 9190-redfish-utils-unused-code.yml + - 9198-fail-if-slack-api-response-is-not-ok-with-error-message.yml + - 9202-keycloak_clientscope_type-sort-lists.yml + - 9226-xfconf-version.yml + - 9234-fix-verify-bios-attributes-multi-system.yml + - 9238-locale-gen-rewrite.yml + - 9255-fix-handling-of-aliased-homebrew-packages.yml + - 9263-kc_authentication-api-priority.yaml + - 9270-zypper-add-simple_errors.yaml + - 9284-add-keycloak-action-group.yml + - 9318-fstr-actionplugins.yml + - 9319-fstr-become-plugins.yml + - 9320-fstr-cache-plugins.yml + - 9321-fstr-callback-plugins.yml + - 9322-fstr-connection-plugins.yml + - 9323-fstr-inventory-plugins.yml + - 9324-fstr-lookup-plugins.yml + - 9334-qubes-conn.yml + - 9363-dig-nonameservers.yml + - 9379-refactor.yml + - 9387-pacemaker-cluster-cmd.yml + - 9403-redfish-add-get-accountservice.yml + - 9425-gitlab-instance-raw-variable.yml + - 9432-deprecate-pure.yml + - 9443-slack-prepend_hash.yml + - 9449-manageiq-alert-profiles-reqs.yml + - 9451-facter-deprecation.yml + - 9456-yaml-callback-deprecation.yml + - 9457-apache2-mod-proxy-revamp.yml + - 9482-opentelemetry-python-37.yml + - 9483-sensu-deprecation.yml + - 9487-atomic-deprecation.yml + - 9490-htpasswd-permissions.yml + - 9494-keycloak-modules-retry-request-on-authentication-error.yaml + - 9503-opentelemetry-remove-unused-code.yml + - 9539-iocage-inventory-dhcp.yml + - 9546-fix-handling-of-tap-homebrew-packages.yml + - 9547-one_template-filter.yml + - 9554-add-cpanm-option_with-recommends-and-suggests.yml + - 9570-feat-nmcli-add-fail-over-mac-parameter.yml + - 9573-iocage-inventory-sudo.yml + - 9577-mh-delegate-debug.yml + - 9578-redhat_subscription-no-remove-on-unregister.yml + - 9579-with-open.yml + - 9582-add-support-for-vrrp.yml + - 9583-py3-imports-actionbecomecachecallback.yml + - 9584-py3-imports-connectioninventory.yml + - 9585-py3-imports-filter.yml + - 9586-allow-transition-id-jira.yml + - 9598-snap-version.yml + - 9599-apache2-mod-proxy-revamp1.yml + - 9600-apache2-mod-proxy-revamp2.yml + - 9608-apache2-mod-proxy-revamp3.yml + - 9609-apache2-mod-proxy-revamp4.yml + - 9612-apache2-mod-proxy-revamp5.yml + - 9614-apache2-mod-proxy-revamp7.yml + - 9621-keycloak_client-sanitize-saml-encryption-key.yml + - 9623-pipx-global-latest.yml + - 9625-onepassword_doc.yml + - 9633-onepassword_ssh_key.yml + - 9644-kc_client-test-improvement-and-fix.yaml + - 9646-hpilo-fix-idempotency.yml + - 9649-cloudflare_dns-fix-crash-when-deleting-record.yml + - 9651-iocage-inventory-hooks.yml + - 9657-lldp-handling-attributes-defined-multiple-times.yml + - 9658-add-vrf-commands-to-nmcli-module.yml + - 9659-lxd_connection-nonroot-user.yml + - 9665-more-resilient-handling-of-homebrew-packages-names.yml + - 9691-keycloak-module-utils-replace-missing-return-in-get_role_composites.yml + - 9692-update-more-than-10-keycloak-sub-groups.yml + - 9694-ipa-host-certificate-revoked.yml + - 9695-xml-close-file.yml + - 9697-zfs-facts-type.yml + - 9698-lvg-remove-extra-pvs-parameter.yml + - 9728-bitwarden-collection-name-filter.yml + - 9729-redfish-fullpowercycle-command.yml + - 9733-profitbrick-deprecation.yml + - 9739-keycloak_client-compare-before-desired-directly.yml + - 9743-incus_connection-nonroot-user.yml + - 9753-jira-add-client-certificate-auth.yml + - 9762-apache2_mod_proxy.yml + - 9768-keycloak_realm-remove-id-requirement.yaml + - 9774-fix-elasticsearch_plugin-proxy-settings.yml + - 9777-homebrew-fix-crash-when-packages-include-tap.yml + - 9778-redhat_subscription-ensure-to-enable-content.yml + - 9787-xoa_allow_using_names_in_inventory.yml + - 9818-cloudflare-dns-exhausted-response.yml + - 9821-systemd_info-add-wildcards.yml + - 9824-redfish-implement-obtaining-powerrestorepolicy.yml + - 9833-data-tagging.yml + - 9836-option-for-http-agent-for-user-to-callback-slack.yml + - 9837-redfish-implement-setting-powerrestorepolicy.yml + - 9845-consul_token_idempotency.yml + - 9849-nmap_dns_servers.yml + - 9880-nmcli-fix-reorder-same-dns-nameservers-search-suffixes.yml + - 9882-fix-payload-to-match-rocketchat-740-requirement.yml + - 9891-systemd_info-add_timer.yml + - 9892-vmadm-add-new-options.yml + - 9893-cmdrunner-as-fixed-args.yml + - 9898-keycloak_user-supports-subgroups.yaml + - 9950-pacman_key-verify-key-validity.yml + - 9951-mod-php-identifier.yml + - 9953-gitlab-project-members-support-owner-level.yml + - 9959-update-opennebula-onevm-updateconf-params.yml + - 9960-gitlab_project-add-build_timeout-option.yml + - 9962-nmcli-add-infiniband-mac-support.yml + - 9964-redfish-tls.yml + - 9965-fix-duplicate-jsonify-payload-for-rocketchat-pre740.yml + - 9970-pkcs12_alias_cert_alias_optional.yml + - 9972-zypper-skip-post-errors.yml + - 9975-inventory-cobbler-as-rendered.yml + - 9976-keycloak_client-fix-idempotency-regression.yml + - 9987-keycloak-auth-flow-fix-config.yaml + - 9992-filtertypeerror.yml + - ansible-core-support.yml + - deprecations.yml + - dnf_versionlock.yml + - homebrew_cask.yml + - proxmox-removal.yml + - ssh_config_add_dynamicforward_option.yml + - ssh_config_add_other_options.yml + - sudoers.yml + modules: + - description: Manages Android SDK packages. + name: android_sdk + namespace: '' + - description: Decompresses compressed files. + name: decompress + namespace: '' + - description: Use the Modify-Increment LDAP V3 feature to increment an attribute + value. + name: ldap_inc + namespace: '' + - description: Manage LVM Physical Volumes. + name: lvm_pv + namespace: '' + - description: Manage pacemaker resources. + name: pacemaker_resource + namespace: '' + - description: C(systemd)'s C(systemd-creds decrypt) plugin. + name: systemd_creds_decrypt + namespace: '' + - description: C(systemd)'s C(systemd-creds encrypt) plugin. + name: systemd_creds_encrypt + namespace: '' + - description: Gather C(systemd) unit info. + name: systemd_info + namespace: '' + - description: Set default handler for MIME types, for applications using XDG + tools. + name: xdg_mime + namespace: '' + - description: Manage ZFS zpools. + name: zpool + namespace: '' + plugins: + callback: + - description: Prints playbook task snippet to job output. + name: print_task + namespace: null + connection: + - description: Run tasks in WSL distribution using wsl.exe CLI via SSH. + name: wsl + namespace: null + filter: + - description: Produce a list of accumulated sums of the input list contents. + name: accumulate + namespace: null + - description: Create a JSON patch by comparing two JSON files. + name: json_diff + namespace: null + - description: Apply a JSON-Patch (RFC 6902) operation to an object. + name: json_patch + namespace: null + - description: Apply JSON-Patch (RFC 6902) operations to an object. + name: json_patch_recipe + namespace: null + - description: Format a list of dictionaries as an ASCII table. + name: to_prettytable + namespace: null + inventory: + - description: iocage inventory source. + name: iocage + namespace: null + lookup: + - description: Fetch SSH keys stored in 1Password. + name: onepassword_ssh_key + namespace: null + release_date: '2025-06-16' + 11.1.0: + changes: + bugfixes: + - dependent lookup plugin - avoid deprecated ansible-core 2.19 functionality + (https://github.com/ansible-collections/community.general/pull/10359). + - github_release - support multiple types of GitHub tokens; no longer failing + when ``ghs_`` token type is provided (https://github.com/ansible-collections/community.general/issues/10338, + https://github.com/ansible-collections/community.general/pull/10339). + - icinga2 inventory plugin - avoid using deprecated option when templating + options (https://github.com/ansible-collections/community.general/pull/10271). + - incus connection plugin - fix error handling to return more useful Ansible + errors to the user (https://github.com/ansible-collections/community.general/issues/10344, + https://github.com/ansible-collections/community.general/pull/10349). + - linode inventory plugin - avoid using deprecated option when templating + options (https://github.com/ansible-collections/community.general/pull/10271). + - logstash callback plugin - remove reference to Python 2 library (https://github.com/ansible-collections/community.general/pull/10345). + deprecated_features: + - catapult - module is deprecated and will be removed in community.general + 13.0.0 (https://github.com/ansible-collections/community.general/issues/10318, + https://github.com/ansible-collections/community.general/pull/10329). + - pacemaker_cluster - the parameter ``state`` will become a required parameter + in community.general 12.0.0 (https://github.com/ansible-collections/community.general/pull/10227). + minor_changes: + - cloudflare_dns - adds support for PTR records (https://github.com/ansible-collections/community.general/pull/10267). + - cloudflare_dns - remove redundant brackets in conditionals, no functional + changes (https://github.com/ansible-collections/community.general/pull/10328). + - cloudflare_dns - simplify validations and refactor some code, no functional + changes (https://github.com/ansible-collections/community.general/pull/10269). + - crypttab - remove redundant brackets in conditionals, no functional changes + (https://github.com/ansible-collections/community.general/pull/10328). + - datadog_monitor - remove redundant brackets in conditionals, no functional + changes (https://github.com/ansible-collections/community.general/pull/10328). + - dense callback plugin - use f-strings instead of concatenation (https://github.com/ansible-collections/community.general/pull/10285). + - gitlab_deploy_key - remove redundant brackets in conditionals, no functional + changes (https://github.com/ansible-collections/community.general/pull/10328). + - gitlab_group_access_token - remove redundant brackets in conditionals, no + functional changes (https://github.com/ansible-collections/community.general/pull/10328). + - gitlab_hook - remove redundant brackets in conditionals, no functional changes + (https://github.com/ansible-collections/community.general/pull/10328). + - gitlab_project_access_token - remove redundant brackets in conditionals, + no functional changes (https://github.com/ansible-collections/community.general/pull/10328). + - gitlab_runner - remove redundant brackets in conditionals, no functional + changes (https://github.com/ansible-collections/community.general/pull/10328). + - iocage inventory plugin - use f-strings instead of concatenation (https://github.com/ansible-collections/community.general/pull/10285). + - ipa_group - remove redundant brackets in conditionals, no functional changes + (https://github.com/ansible-collections/community.general/pull/10328). + - jc filter plugin - use f-strings instead of concatenation (https://github.com/ansible-collections/community.general/pull/10285). + - jenkins_build - remove redundant brackets in conditionals, no functional + changes (https://github.com/ansible-collections/community.general/pull/10328). + - jenkins_build_info - remove redundant brackets in conditionals, no functional + changes (https://github.com/ansible-collections/community.general/pull/10328). + - keycloak - add support for ``grant_type=client_credentials`` to all keycloak + modules, so that specifying ``auth_client_id`` and ``auth_client_secret`` + is sufficient for authentication (https://github.com/ansible-collections/community.general/pull/10231). + - keycloak module utils - remove redundant brackets in conditionals, no functional + changes (https://github.com/ansible-collections/community.general/pull/10328). + - logstash callback plugin - remove redundant brackets in conditionals, no + functional changes (https://github.com/ansible-collections/community.general/pull/10328). + - mail callback plugin - use f-strings instead of concatenation (https://github.com/ansible-collections/community.general/pull/10285). + - nmcli - remove redundant brackets in conditionals, no functional changes + (https://github.com/ansible-collections/community.general/pull/10328). + - nmcli - simplify validations and refactor some code, no functional changes + (https://github.com/ansible-collections/community.general/pull/10323). + - oneandone_firewall_policy - remove redundant brackets in conditionals, no + functional changes (https://github.com/ansible-collections/community.general/pull/10328). + - oneandone_load_balancer - remove redundant brackets in conditionals, no + functional changes (https://github.com/ansible-collections/community.general/pull/10328). + - oneandone_monitoring_policy - remove redundant brackets in conditionals, + no functional changes (https://github.com/ansible-collections/community.general/pull/10328). + - onepassword_info - remove redundant brackets in conditionals, no functional + changes (https://github.com/ansible-collections/community.general/pull/10328). + - osx_defaults - remove redundant brackets in conditionals, no functional + changes (https://github.com/ansible-collections/community.general/pull/10328). + - ovh_ip_loadbalancing_backend - remove redundant brackets in conditionals, + no functional changes (https://github.com/ansible-collections/community.general/pull/10328). + - pacemaker_cluster - add ``state=maintenance`` for managing pacemaker maintenance + mode (https://github.com/ansible-collections/community.general/issues/10200, + https://github.com/ansible-collections/community.general/pull/10227). + - pacemaker_cluster - rename ``node`` to ``name`` and add ``node`` alias (https://github.com/ansible-collections/community.general/pull/10227). + - pacemaker_resource - enhance module by removing duplicative code (https://github.com/ansible-collections/community.general/pull/10227). + - packet_device - remove redundant brackets in conditionals, no functional + changes (https://github.com/ansible-collections/community.general/pull/10328). + - pagerduty - remove redundant brackets in conditionals, no functional changes + (https://github.com/ansible-collections/community.general/pull/10328). + - pingdom - remove redundant brackets in conditionals, no functional changes + (https://github.com/ansible-collections/community.general/pull/10328). + - python_runner module utils - remove redundant brackets in conditionals, + no functional changes (https://github.com/ansible-collections/community.general/pull/10328). + - rhevm - remove redundant brackets in conditionals, no functional changes + (https://github.com/ansible-collections/community.general/pull/10328). + - rocketchat - remove redundant brackets in conditionals, no functional changes + (https://github.com/ansible-collections/community.general/pull/10328). + - sensu_silence - remove redundant brackets in conditionals, no functional + changes (https://github.com/ansible-collections/community.general/pull/10328). + - sl_vm - remove redundant brackets in conditionals, no functional changes + (https://github.com/ansible-collections/community.general/pull/10328). + - urpmi - remove redundant brackets in conditionals, no functional changes + (https://github.com/ansible-collections/community.general/pull/10328). + - wsl connection plugin - use f-strings instead of concatenation (https://github.com/ansible-collections/community.general/pull/10285). + - xattr - remove redundant brackets in conditionals, no functional changes + (https://github.com/ansible-collections/community.general/pull/10328). + - xen_orchestra inventory plugin - use f-strings instead of concatenation + (https://github.com/ansible-collections/community.general/pull/10285). + - xfconf - minor adjustments the the code (https://github.com/ansible-collections/community.general/pull/10311). + - xml - remove redundant brackets in conditionals, no functional changes (https://github.com/ansible-collections/community.general/pull/10328). + release_summary: Regular bugfix and feature release. + fragments: + - 10227-pacemaker-cluster-and-resource-enhancement.yml + - 10231-keycloak-add-client-credentials-authentication.yml + - 10267-add-cloudflare-ptr-record-support.yml + - 10269-cloudflare-dns-refactor.yml + - 10271--disable_lookups.yml + - 10285-fstr-plugins.yml + - 10311-xfconf-refactor.yml + - 10323-nmcli-improvements.yml + - 10328-redundant-brackets.yml + - 10329-catapult-deprecation.yml + - 10339-github_app_access_token.yml + - 10349-incus_connection-error-handling.yml + - 10359-dependent.yml + - 11.1.0.yml + - logstash.yml + modules: + - description: Manage Jenkins credentials and domains via API. + name: jenkins_credential + namespace: '' + plugins: + callback: + - description: Only show tasks. + name: tasks_only + namespace: null + release_date: '2025-07-14' diff --git a/changelogs/fragments/10005-fix-method-exists-in-sysrc.yml b/changelogs/fragments/10005-fix-method-exists-in-sysrc.yml deleted file mode 100644 index 218a9eca06..0000000000 --- a/changelogs/fragments/10005-fix-method-exists-in-sysrc.yml +++ /dev/null @@ -1,2 +0,0 @@ -bugfixes: - - sysrc - no longer always reporting ``changed=true`` when ``state=absent``. This fixes the method ``exists()`` (https://github.com/ansible-collections/community.general/issues/10004, https://github.com/ansible-collections/community.general/pull/10005). diff --git a/changelogs/fragments/10011-github_deploy_key-check-key-present.yml b/changelogs/fragments/10011-github_deploy_key-check-key-present.yml deleted file mode 100644 index 1f3857794c..0000000000 --- a/changelogs/fragments/10011-github_deploy_key-check-key-present.yml +++ /dev/null @@ -1,2 +0,0 @@ -bugfixes: - - "github_deploy_key - check that key really exists on 422 to avoid masking other errors (https://github.com/ansible-collections/community.general/issues/6718, https://github.com/ansible-collections/community.general/pull/10011)." diff --git a/changelogs/fragments/10012-improve-error-handling-homebrew-missing-tap.yml b/changelogs/fragments/10012-improve-error-handling-homebrew-missing-tap.yml deleted file mode 100644 index 443be8358c..0000000000 --- a/changelogs/fragments/10012-improve-error-handling-homebrew-missing-tap.yml +++ /dev/null @@ -1,2 +0,0 @@ -bugfixes: - - homebrew - emit a useful error message if ``brew info`` reports a package tap is ``null`` (https://github.com/ansible-collections/community.general/pull/10013, https://github.com/ansible-collections/community.general/issues/10012). diff --git a/changelogs/fragments/10014-puppet-improve-param.yml b/changelogs/fragments/10014-puppet-improve-param.yml deleted file mode 100644 index 5d888523b7..0000000000 --- a/changelogs/fragments/10014-puppet-improve-param.yml +++ /dev/null @@ -1,2 +0,0 @@ -minor_changes: - - puppet - improve parameter formatting, no impact to user (https://github.com/ansible-collections/community.general/pull/10014). diff --git a/changelogs/fragments/10026-stackpath-compute-deprecation.yml b/changelogs/fragments/10026-stackpath-compute-deprecation.yml deleted file mode 100644 index dfd3f7e236..0000000000 --- a/changelogs/fragments/10026-stackpath-compute-deprecation.yml +++ /dev/null @@ -1,2 +0,0 @@ -deprecated_features: - - stackpath_compute inventory plugin - plugin is deprecated and will be removed in community.general 11.0.0 (https://github.com/ansible-collections/community.general/pull/10026). diff --git a/changelogs/fragments/10028-manifold-deprecation.yml b/changelogs/fragments/10028-manifold-deprecation.yml deleted file mode 100644 index 1bb1948026..0000000000 --- a/changelogs/fragments/10028-manifold-deprecation.yml +++ /dev/null @@ -1,2 +0,0 @@ -deprecated_features: - - manifold lookup plugin - plugin is deprecated and will be removed in community.general 11.0.0 (https://github.com/ansible-collections/community.general/pull/10028). diff --git a/changelogs/fragments/10031-pipx-python-version.yml b/changelogs/fragments/10031-pipx-python-version.yml deleted file mode 100644 index d18932eb2c..0000000000 --- a/changelogs/fragments/10031-pipx-python-version.yml +++ /dev/null @@ -1,8 +0,0 @@ -minor_changes: - - pipx module_utils - filtering application list by name now happens in the modules (https://github.com/ansible-collections/community.general/pull/10031). - - pipx_info - filtering application list by name now happens in the module (https://github.com/ansible-collections/community.general/pull/10031). - - > - pipx - parameter ``name`` now accepts Python package specifiers - (https://github.com/ansible-collections/community.general/issues/7815, https://github.com/ansible-collections/community.general/pull/10031). -deprecated_features: - - pipx module_utils - function ``make_process_list()`` is deprecated and will be removed in community.general 13.0.0 (https://github.com/ansible-collections/community.general/pull/10031). diff --git a/changelogs/fragments/10063-cobbler-add-connection-timeout.yml b/changelogs/fragments/10063-cobbler-add-connection-timeout.yml deleted file mode 100644 index 4f7912384b..0000000000 --- a/changelogs/fragments/10063-cobbler-add-connection-timeout.yml +++ /dev/null @@ -1,2 +0,0 @@ -minor_changes: - - cobbler inventory plugin - add ``connection_timeout`` option to specify the connection timeout to the cobbler server (https://github.com/ansible-collections/community.general/pull/11063). diff --git a/changelogs/fragments/10075-keycloak_user_rolemapping-diff.yml b/changelogs/fragments/10075-keycloak_user_rolemapping-diff.yml deleted file mode 100644 index 926552ef9d..0000000000 --- a/changelogs/fragments/10075-keycloak_user_rolemapping-diff.yml +++ /dev/null @@ -1,2 +0,0 @@ -bugfixes: - - "keycloak_user_rolemapping - fix ``--diff`` mode (https://github.com/ansible-collections/community.general/issues/10067, https://github.com/ansible-collections/community.general/pull/10075)." diff --git a/changelogs/fragments/10097-fix-rundeck_acl_policy-project-endpoint.yml b/changelogs/fragments/10097-fix-rundeck_acl_policy-project-endpoint.yml deleted file mode 100644 index 0386edc090..0000000000 --- a/changelogs/fragments/10097-fix-rundeck_acl_policy-project-endpoint.yml +++ /dev/null @@ -1,2 +0,0 @@ -bugfixes: - - rundeck_acl_policy - ensure that project ACLs are sent to the correct endpoint (https://github.com/ansible-collections/community.general/pull/10097). diff --git a/changelogs/fragments/10102-ini_file-fix-unmatched-whitespace-before-comment.yml b/changelogs/fragments/10102-ini_file-fix-unmatched-whitespace-before-comment.yml deleted file mode 100644 index 75c7c40299..0000000000 --- a/changelogs/fragments/10102-ini_file-fix-unmatched-whitespace-before-comment.yml +++ /dev/null @@ -1,2 +0,0 @@ -minor_changes: - - ini_file - modify an inactive option also when there are spaces in front of the comment symbol (https://github.com/ansible-collections/community.general/pull/10102, https://github.com/ansible-collections/community.general/issues/8539). diff --git a/changelogs/fragments/10121-sysrc-fix-split-first-separator.yml b/changelogs/fragments/10121-sysrc-fix-split-first-separator.yml deleted file mode 100644 index 9044edff0e..0000000000 --- a/changelogs/fragments/10121-sysrc-fix-split-first-separator.yml +++ /dev/null @@ -1,2 +0,0 @@ -bugfixes: - - "sysrc - split the output of ``sysrc -e -a`` on the first ``=`` only (https://github.com/ansible-collections/community.general/issues/10120, https://github.com/ansible-collections/community.general/pull/10121)." diff --git a/changelogs/fragments/10128-mark-end-of-options.yml b/changelogs/fragments/10128-mark-end-of-options.yml deleted file mode 100644 index 010fdabe8e..0000000000 --- a/changelogs/fragments/10128-mark-end-of-options.yml +++ /dev/null @@ -1,2 +0,0 @@ -bugfixes: - - "kdeconfig - allow option values beginning with a dash (https://github.com/ansible-collections/community.general/issues/10127, https://github.com/ansible-collections/community.general/pull/10128)." diff --git a/changelogs/fragments/10134-add-autoconnect-options.yml b/changelogs/fragments/10134-add-autoconnect-options.yml deleted file mode 100644 index 0ff28c2790..0000000000 --- a/changelogs/fragments/10134-add-autoconnect-options.yml +++ /dev/null @@ -1,2 +0,0 @@ -minor_changes: - - nmcli - adds ``autoconnect_priority`` and ``autoconnect_retries`` options to support autoconnect logic (https://github.com/ansible-collections/community.general/pull/10134). \ No newline at end of file diff --git a/changelogs/fragments/10136-cache-pickle-json.yml b/changelogs/fragments/10136-cache-pickle-json.yml deleted file mode 100644 index a527e5c4b7..0000000000 --- a/changelogs/fragments/10136-cache-pickle-json.yml +++ /dev/null @@ -1,2 +0,0 @@ -bugfixes: - - pickle cache plugin - avoid extra JSON serialization with ansible-core >= 2.19 (https://github.com/ansible-collections/community.general/pull/10136). diff --git a/changelogs/fragments/10137-pipx-cg11.yml b/changelogs/fragments/10137-pipx-cg11.yml deleted file mode 100644 index 2dc641d216..0000000000 --- a/changelogs/fragments/10137-pipx-cg11.yml +++ /dev/null @@ -1,3 +0,0 @@ -removed_features: - - pipx - module no longer supports ``pipx`` older than 1.7.0 (https://github.com/ansible-collections/community.general/pull/10137). - - pipx_info - module no longer supports ``pipx`` older than 1.7.0 (https://github.com/ansible-collections/community.general/pull/10137). diff --git a/changelogs/fragments/10145-fix-typeerror-cobbler-xmlrpc.yml b/changelogs/fragments/10145-fix-typeerror-cobbler-xmlrpc.yml deleted file mode 100644 index e2a9954ea1..0000000000 --- a/changelogs/fragments/10145-fix-typeerror-cobbler-xmlrpc.yml +++ /dev/null @@ -1,2 +0,0 @@ -bugfixes: - - cobbler_system - fix bug with Cobbler >= 3.4.0 caused by giving more than 2 positional arguments to ``CobblerXMLRPCInterface.get_system_handle()`` (https://github.com/ansible-collections/community.general/issues/8506, https://github.com/ansible-collections/community.general/pull/10145). \ No newline at end of file diff --git a/changelogs/fragments/10154-terraform_no_color_paramater.yml b/changelogs/fragments/10154-terraform_no_color_paramater.yml deleted file mode 100644 index 5fa270d5ed..0000000000 --- a/changelogs/fragments/10154-terraform_no_color_paramater.yml +++ /dev/null @@ -1,2 +0,0 @@ -minor_changes: - - terraform - adds the ``no_color`` parameter, which suppresses or allows color codes in stdout from Terraform commands (https://github.com/ansible-collections/community.general/pull/10154). diff --git a/changelogs/fragments/10177-git-config-required.yml b/changelogs/fragments/10177-git-config-required.yml deleted file mode 100644 index a6d7a2f50d..0000000000 --- a/changelogs/fragments/10177-git-config-required.yml +++ /dev/null @@ -1,2 +0,0 @@ -minor_changes: - - git_config - remove redundant ``required=False`` from ``argument_spec`` (https://github.com/ansible-collections/community.general/pull/10177). diff --git a/changelogs/fragments/10178-update-minimum-version-number-to-avoid-wrong-comparisons-cobbler-xmlrpc.yml b/changelogs/fragments/10178-update-minimum-version-number-to-avoid-wrong-comparisons-cobbler-xmlrpc.yml deleted file mode 100644 index a5ffdadfdc..0000000000 --- a/changelogs/fragments/10178-update-minimum-version-number-to-avoid-wrong-comparisons-cobbler-xmlrpc.yml +++ /dev/null @@ -1,2 +0,0 @@ -bugfixes: - - cobbler_system - update minimum version number to avoid wrong comparisons that happen in some cases using LooseVersion class which results in TypeError (https://github.com/ansible-collections/community.general/issues/8506, https://github.com/ansible-collections/community.general/pull/10145, https://github.com/ansible-collections/community.general/pull/10178). diff --git a/changelogs/fragments/10191-github_key-add-api_url-parameter.yml b/changelogs/fragments/10191-github_key-add-api_url-parameter.yml deleted file mode 100644 index de0cd7054a..0000000000 --- a/changelogs/fragments/10191-github_key-add-api_url-parameter.yml +++ /dev/null @@ -1,2 +0,0 @@ -minor_changes: - - github_key - add ``api_url`` parameter to support GitHub Enterprise Server installations (https://github.com/ansible-collections/community.general/pull/10191). diff --git a/changelogs/fragments/10193-callback-ansible_version.yml b/changelogs/fragments/10193-callback-ansible_version.yml deleted file mode 100644 index cad003d644..0000000000 --- a/changelogs/fragments/10193-callback-ansible_version.yml +++ /dev/null @@ -1,6 +0,0 @@ -minor_changes: - - "elastic callback plugin - instead of trying to extract the ansible-core version from task data, use ansible-core's actual version (https://github.com/ansible-collections/community.general/pull/10193)." - - "loganalytics callback plugin - instead of trying to extract the ansible-core version from task data, use ansible-core's actual version (https://github.com/ansible-collections/community.general/pull/10193)." - - "opentelemetry callback plugin - instead of trying to extract the ansible-core version from task data, use ansible-core's actual version (https://github.com/ansible-collections/community.general/pull/10193)." - - "splunk callback plugin - instead of trying to extract the ansible-core version from task data, use ansible-core's actual version (https://github.com/ansible-collections/community.general/pull/10193)." - - "sumologic callback plugin - instead of trying to extract the ansible-core version from task data, use ansible-core's actual version (https://github.com/ansible-collections/community.general/pull/10193)." diff --git a/changelogs/fragments/10194-add-pcs-resource-maintenace-mode.yml b/changelogs/fragments/10194-add-pcs-resource-maintenace-mode.yml deleted file mode 100644 index e6eb218246..0000000000 --- a/changelogs/fragments/10194-add-pcs-resource-maintenace-mode.yml +++ /dev/null @@ -1,2 +0,0 @@ -minor_changes: - - pacemaker_resource - add maintenance mode support for handling resource creation and deletion (https://github.com/ansible-collections/community.general/issues/10180, https://github.com/ansible-collections/community.general/pull/10194). diff --git a/changelogs/fragments/10196-fix-gitlab-access-tokens.yml b/changelogs/fragments/10196-fix-gitlab-access-tokens.yml deleted file mode 100644 index 988f5c78ed..0000000000 --- a/changelogs/fragments/10196-fix-gitlab-access-tokens.yml +++ /dev/null @@ -1,2 +0,0 @@ -bugfixes: - - "gitlab_group_access_token, gitlab_project_access_token - fix handling of group and project access tokens for changes in GitLab 17.10 (https://github.com/ansible-collections/community.general/pull/10196)." diff --git a/changelogs/fragments/10198-cargo-features-parameter.yml b/changelogs/fragments/10198-cargo-features-parameter.yml deleted file mode 100644 index 18cfffd028..0000000000 --- a/changelogs/fragments/10198-cargo-features-parameter.yml +++ /dev/null @@ -1,2 +0,0 @@ -minor_changes: - - cargo - add ``features`` parameter to allow activating specific features when installing Rust packages (https://github.com/ansible-collections/community.general/pull/10198). diff --git a/changelogs/fragments/10207-iocage-inventory-alias.yml b/changelogs/fragments/10207-iocage-inventory-alias.yml deleted file mode 100644 index 8aa02714e8..0000000000 --- a/changelogs/fragments/10207-iocage-inventory-alias.yml +++ /dev/null @@ -1,2 +0,0 @@ -minor_changes: - - iocage inventory plugin - the new parameter ``inventory_hostname_tag`` of the plugin provides the name of the tag in the C(iocage properties notes) that contains the jails alias. The new parameter ``inventory_hostname_required``, if enabled, makes the tag mandatory (https://github.com/ansible-collections/community.general/issues/10206, https://github.com/ansible-collections/community.general/pull/10207). diff --git a/changelogs/fragments/10212-yaml.yml b/changelogs/fragments/10212-yaml.yml deleted file mode 100644 index 7a28339eb7..0000000000 --- a/changelogs/fragments/10212-yaml.yml +++ /dev/null @@ -1,2 +0,0 @@ -bugfixes: - - "yaml callback plugin - adjust to latest changes in ansible-core devel (https://github.com/ansible-collections/community.general/pull/10212)." diff --git a/changelogs/fragments/10213-yaml-deprecation.yml b/changelogs/fragments/10213-yaml-deprecation.yml deleted file mode 100644 index d75d2c1623..0000000000 --- a/changelogs/fragments/10213-yaml-deprecation.yml +++ /dev/null @@ -1,5 +0,0 @@ -deprecated_features: - - "yaml callback plugin - the YAML callback plugin was deprecated for removal in community.general 13.0.0. - Since it needs to use ansible-core internals since ansible-core 2.19 that are changing a lot, - we will remove this plugin already from community.general 12.0.0 to ease the maintenance burden - (https://github.com/ansible-collections/community.general/pull/10213)." diff --git a/changelogs/fragments/10222-zypper_repository-readfp.yml b/changelogs/fragments/10222-zypper_repository-readfp.yml deleted file mode 100644 index 688ceeb7a5..0000000000 --- a/changelogs/fragments/10222-zypper_repository-readfp.yml +++ /dev/null @@ -1,2 +0,0 @@ -bugfixes: - - zypper_repository - make compatible with Python 3.12+ (https://github.com/ansible-collections/community.general/issues/10222, https://github.com/ansible-collections/community.general/pull/10223). diff --git a/changelogs/fragments/10224-zypper_repository-metalink.yml b/changelogs/fragments/10224-zypper_repository-metalink.yml deleted file mode 100644 index 8dd1987a4e..0000000000 --- a/changelogs/fragments/10224-zypper_repository-metalink.yml +++ /dev/null @@ -1,2 +0,0 @@ -bugfixes: - - zypper_repository - use ``metalink`` attribute to identify repositories without ```` element (https://github.com/ansible-collections/community.general/issues/10224, https://github.com/ansible-collections/community.general/pull/10225). diff --git a/changelogs/fragments/10242-yaml.yml b/changelogs/fragments/10242-yaml.yml deleted file mode 100644 index 1596cb0909..0000000000 --- a/changelogs/fragments/10242-yaml.yml +++ /dev/null @@ -1,5 +0,0 @@ -bugfixes: - - "yaml callback plugin - when using ansible-core 2.19.0b2 or newer, uses a new utility provided by ansible-core. - This allows us to remove all hacks and vendored code that was part of the plugin for ansible-core versions with - Data Tagging so far - (https://github.com/ansible-collections/community.general/pull/10242)." diff --git a/changelogs/fragments/5932-launchd-plist.yml b/changelogs/fragments/5932-launchd-plist.yml deleted file mode 100644 index bf2530841a..0000000000 --- a/changelogs/fragments/5932-launchd-plist.yml +++ /dev/null @@ -1,2 +0,0 @@ -minor_changes: - - launchd - add ``plist`` option for services such as sshd, where the plist filename doesn't match the service name (https://github.com/ansible-collections/community.general/pull/9102). diff --git a/changelogs/fragments/6264-zfs-multiline-property-value.yml b/changelogs/fragments/6264-zfs-multiline-property-value.yml deleted file mode 100644 index 30e06f7919..0000000000 --- a/changelogs/fragments/6264-zfs-multiline-property-value.yml +++ /dev/null @@ -1,2 +0,0 @@ -bugfixes: - - zfs - fix handling of multi-line values of user-defined ZFS properties (https://github.com/ansible-collections/community.general/pull/6264). diff --git a/changelogs/fragments/8437-xml-children-value.yml b/changelogs/fragments/8437-xml-children-value.yml deleted file mode 100644 index 1074764871..0000000000 --- a/changelogs/fragments/8437-xml-children-value.yml +++ /dev/null @@ -1,2 +0,0 @@ -minor_changes: - - xml - support adding value of children when creating with subnodes (https://github.com/ansible-collections/community.general/pull/8437). diff --git a/changelogs/fragments/9076-remove-duplicated-homebrew-package-name-validation.yml b/changelogs/fragments/9076-remove-duplicated-homebrew-package-name-validation.yml deleted file mode 100644 index b067625c0c..0000000000 --- a/changelogs/fragments/9076-remove-duplicated-homebrew-package-name-validation.yml +++ /dev/null @@ -1,2 +0,0 @@ -minor_changes: - - homebrew - remove duplicated package name validation (https://github.com/ansible-collections/community.general/pull/9076). diff --git a/changelogs/fragments/9077-keycloak_client-fix-attributes-dict-turned-into-list.yml b/changelogs/fragments/9077-keycloak_client-fix-attributes-dict-turned-into-list.yml deleted file mode 100644 index d693c2e139..0000000000 --- a/changelogs/fragments/9077-keycloak_client-fix-attributes-dict-turned-into-list.yml +++ /dev/null @@ -1,2 +0,0 @@ -bugfixes: - - keycloak_client - fix diff by removing code that turns the attributes dict which contains additional settings into a list (https://github.com/ansible-collections/community.general/pull/9077). \ No newline at end of file diff --git a/changelogs/fragments/9082-keycloak_clientscope-fix-attributes-dict-turned-into-list.yml b/changelogs/fragments/9082-keycloak_clientscope-fix-attributes-dict-turned-into-list.yml deleted file mode 100644 index c9d61780b2..0000000000 --- a/changelogs/fragments/9082-keycloak_clientscope-fix-attributes-dict-turned-into-list.yml +++ /dev/null @@ -1,2 +0,0 @@ -bugfixes: - - keycloak_clientscope - fix diff and ``end_state`` by removing the code that turns the attributes dict, which contains additional config items, into a list (https://github.com/ansible-collections/community.general/pull/9082). \ No newline at end of file diff --git a/changelogs/fragments/9096-alternatives-add-family-parameter.yml b/changelogs/fragments/9096-alternatives-add-family-parameter.yml deleted file mode 100644 index a0b021f892..0000000000 --- a/changelogs/fragments/9096-alternatives-add-family-parameter.yml +++ /dev/null @@ -1,2 +0,0 @@ -minor_changes: - - alternatives - add ``family`` parameter that allows to utilize the ``--family`` option available in RedHat version of update-alternatives (https://github.com/ansible-collections/community.general/issues/5060, https://github.com/ansible-collections/community.general/pull/9096). diff --git a/changelogs/fragments/9106-passwordstore-fix-subkey-creation-even-when-create-==-false.yml b/changelogs/fragments/9106-passwordstore-fix-subkey-creation-even-when-create-==-false.yml deleted file mode 100644 index b804d2eed9..0000000000 --- a/changelogs/fragments/9106-passwordstore-fix-subkey-creation-even-when-create-==-false.yml +++ /dev/null @@ -1,2 +0,0 @@ -bugfixes: - - passwordstore lookup plugin - fix subkey creation even when ``create=false`` (https://github.com/ansible-collections/community.general/issues/9105, https://github.com/ansible-collections/community.general/pull/9106). diff --git a/changelogs/fragments/9114-redfish-utils-update-remove-default-applytime.yml b/changelogs/fragments/9114-redfish-utils-update-remove-default-applytime.yml deleted file mode 100644 index 672545a0a8..0000000000 --- a/changelogs/fragments/9114-redfish-utils-update-remove-default-applytime.yml +++ /dev/null @@ -1,2 +0,0 @@ -bugfixes: - - redfish_utils module utils - remove undocumented default applytime (https://github.com/ansible-collections/community.general/pull/9114). diff --git a/changelogs/fragments/9123-redfish-command-custom-oem-params.yml b/changelogs/fragments/9123-redfish-command-custom-oem-params.yml deleted file mode 100644 index a09219515a..0000000000 --- a/changelogs/fragments/9123-redfish-command-custom-oem-params.yml +++ /dev/null @@ -1,2 +0,0 @@ -minor_changes: - - redfish_command - add ``update_custom_oem_header``, ``update_custom_oem_params``, and ``update_custom_oem_mime_type`` options (https://github.com/ansible-collections/community.general/pull/9123). diff --git a/changelogs/fragments/9124-dnf_config_manager.yml b/changelogs/fragments/9124-dnf_config_manager.yml deleted file mode 100644 index 9c87f02d64..0000000000 --- a/changelogs/fragments/9124-dnf_config_manager.yml +++ /dev/null @@ -1,2 +0,0 @@ -bugfixes: - - dnf_config_manager - fix hanging when prompting to import GPG keys (https://github.com/ansible-collections/community.general/pull/9124, https://github.com/ansible-collections/community.general/issues/8830). diff --git a/changelogs/fragments/9128-homebrew_cask-name-regex-fix.yml b/changelogs/fragments/9128-homebrew_cask-name-regex-fix.yml deleted file mode 100644 index 69765958fb..0000000000 --- a/changelogs/fragments/9128-homebrew_cask-name-regex-fix.yml +++ /dev/null @@ -1,2 +0,0 @@ -bugfixes: - - homebrew_cask - allow ``+`` symbol in Homebrew cask name validation regex (https://github.com/ansible-collections/community.general/pull/9128). diff --git a/changelogs/fragments/9132-cloudflare_dns-comment-and-tags.yml b/changelogs/fragments/9132-cloudflare_dns-comment-and-tags.yml deleted file mode 100644 index b601e39f55..0000000000 --- a/changelogs/fragments/9132-cloudflare_dns-comment-and-tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -minor_changes: - - cloudflare_dns - add support for ``comment`` and ``tags`` (https://github.com/ansible-collections/community.general/pull/9132). diff --git a/changelogs/fragments/9157-fix-dnf_config_manager-locale.yml b/changelogs/fragments/9157-fix-dnf_config_manager-locale.yml deleted file mode 100644 index f2084dfa5f..0000000000 --- a/changelogs/fragments/9157-fix-dnf_config_manager-locale.yml +++ /dev/null @@ -1,2 +0,0 @@ -bugfixes: - - dnf_config_manager - forces locale to ``C`` before module starts. If the locale was set to non-English, the output of the ``dnf config-manager`` could not be parsed (https://github.com/ansible-collections/community.general/pull/9157, https://github.com/ansible-collections/community.general/issues/9046). \ No newline at end of file diff --git a/changelogs/fragments/9159-iso-extract_add_password.yml b/changelogs/fragments/9159-iso-extract_add_password.yml deleted file mode 100644 index f1b2650d4f..0000000000 --- a/changelogs/fragments/9159-iso-extract_add_password.yml +++ /dev/null @@ -1,2 +0,0 @@ -minor_changes: - - iso_extract - adds ``password`` parameter that is passed to 7z (https://github.com/ansible-collections/community.general/pull/9159). diff --git a/changelogs/fragments/9167-rpm_ostree_pkg-apply_live.yml b/changelogs/fragments/9167-rpm_ostree_pkg-apply_live.yml deleted file mode 100644 index e473dedd0b..0000000000 --- a/changelogs/fragments/9167-rpm_ostree_pkg-apply_live.yml +++ /dev/null @@ -1,3 +0,0 @@ -minor_changes: -- rpm_ostree_pkg - added the options ``apply_live`` (https://github.com/ansible-collections/community.general/pull/9167). -- rpm_ostree_pkg - added the return value ``needs_reboot`` (https://github.com/ansible-collections/community.general/pull/9167). diff --git a/changelogs/fragments/9168-nmcli-add-sriov-parameter.yml b/changelogs/fragments/9168-nmcli-add-sriov-parameter.yml deleted file mode 100644 index 77f28e73bf..0000000000 --- a/changelogs/fragments/9168-nmcli-add-sriov-parameter.yml +++ /dev/null @@ -1,2 +0,0 @@ -minor_changes: - - nmcli - add ``sriov`` parameter that enables support for SR-IOV settings (https://github.com/ansible-collections/community.general/pull/9168). diff --git a/changelogs/fragments/9171-gio-mime-fix-version.yml b/changelogs/fragments/9171-gio-mime-fix-version.yml deleted file mode 100644 index ca9dbddd7f..0000000000 --- a/changelogs/fragments/9171-gio-mime-fix-version.yml +++ /dev/null @@ -1,2 +0,0 @@ -bugfixes: - - gio_mime - fix command line when determining version of ``gio`` (https://github.com/ansible-collections/community.general/pull/9171, https://github.com/ansible-collections/community.general/issues/9158). diff --git a/changelogs/fragments/9172-opkg-deprecate-force-none.yml b/changelogs/fragments/9172-opkg-deprecate-force-none.yml deleted file mode 100644 index 1b11419c5a..0000000000 --- a/changelogs/fragments/9172-opkg-deprecate-force-none.yml +++ /dev/null @@ -1,2 +0,0 @@ -deprecated_features: - - opkg - deprecate value ``""`` for parameter ``force`` (https://github.com/ansible-collections/community.general/pull/9172). diff --git a/changelogs/fragments/9174-xbps-support-rootdir-and-repository.yml b/changelogs/fragments/9174-xbps-support-rootdir-and-repository.yml deleted file mode 100644 index 9197607684..0000000000 --- a/changelogs/fragments/9174-xbps-support-rootdir-and-repository.yml +++ /dev/null @@ -1,2 +0,0 @@ -minor_changes: - - xbps - add ``root`` and ``repository`` options to enable bootstrapping new void installations (https://github.com/ansible-collections/community.general/pull/9174). diff --git a/changelogs/fragments/9179-deps-tests.yml b/changelogs/fragments/9179-deps-tests.yml deleted file mode 100644 index 1ddf109033..0000000000 --- a/changelogs/fragments/9179-deps-tests.yml +++ /dev/null @@ -1,2 +0,0 @@ -minor_changes: - - deps module utils - add ``deps.clear()`` to clear out previously declared dependencies (https://github.com/ansible-collections/community.general/pull/9179). diff --git a/changelogs/fragments/9180-pipx-version.yml b/changelogs/fragments/9180-pipx-version.yml deleted file mode 100644 index f07d66c83c..0000000000 --- a/changelogs/fragments/9180-pipx-version.yml +++ /dev/null @@ -1,3 +0,0 @@ -minor_changes: - - pipx - add return value ``version`` (https://github.com/ansible-collections/community.general/pull/9180). - - pipx_info - add return value ``version`` (https://github.com/ansible-collections/community.general/pull/9180). diff --git a/changelogs/fragments/9181-improve-homebrew-module-performance.yml b/changelogs/fragments/9181-improve-homebrew-module-performance.yml deleted file mode 100644 index b3b6ba2ca4..0000000000 --- a/changelogs/fragments/9181-improve-homebrew-module-performance.yml +++ /dev/null @@ -1,2 +0,0 @@ -minor_changes: - - homebrew - greatly speed up module when multiple packages are passed in the ``name`` option (https://github.com/ansible-collections/community.general/pull/9181). \ No newline at end of file diff --git a/changelogs/fragments/9186-fix-broken-check-mode-in-github-key.yml b/changelogs/fragments/9186-fix-broken-check-mode-in-github-key.yml deleted file mode 100644 index dbf1f145d5..0000000000 --- a/changelogs/fragments/9186-fix-broken-check-mode-in-github-key.yml +++ /dev/null @@ -1,2 +0,0 @@ -bugfixes: - - github_key - in check mode, a faulty call to ```datetime.strftime(...)``` was being made which generated an exception (https://github.com/ansible-collections/community.general/issues/9185). \ No newline at end of file diff --git a/changelogs/fragments/9187-flatpak-lang.yml b/changelogs/fragments/9187-flatpak-lang.yml deleted file mode 100644 index 159923cbdc..0000000000 --- a/changelogs/fragments/9187-flatpak-lang.yml +++ /dev/null @@ -1,2 +0,0 @@ -bugfixes: - - flatpak - force the locale language to ``C`` when running the flatpak command (https://github.com/ansible-collections/community.general/pull/9187, https://github.com/ansible-collections/community.general/issues/8883). diff --git a/changelogs/fragments/9189-scalway-lb-simplify-return.yml b/changelogs/fragments/9189-scalway-lb-simplify-return.yml deleted file mode 100644 index 39d161f06b..0000000000 --- a/changelogs/fragments/9189-scalway-lb-simplify-return.yml +++ /dev/null @@ -1,2 +0,0 @@ -minor_changes: - - scaleway_lb - minor simplification in the code (https://github.com/ansible-collections/community.general/pull/9189). diff --git a/changelogs/fragments/9190-redfish-utils-unused-code.yml b/changelogs/fragments/9190-redfish-utils-unused-code.yml deleted file mode 100644 index 47f7588b96..0000000000 --- a/changelogs/fragments/9190-redfish-utils-unused-code.yml +++ /dev/null @@ -1,4 +0,0 @@ -minor_changes: - - redfish_utils module utils - remove redundant code (https://github.com/ansible-collections/community.general/pull/9190). -deprecated_features: - - redfish_utils module utils - deprecate method ``RedfishUtils._init_session()`` (https://github.com/ansible-collections/community.general/pull/9190). diff --git a/changelogs/fragments/9198-fail-if-slack-api-response-is-not-ok-with-error-message.yml b/changelogs/fragments/9198-fail-if-slack-api-response-is-not-ok-with-error-message.yml deleted file mode 100644 index 56ab25f578..0000000000 --- a/changelogs/fragments/9198-fail-if-slack-api-response-is-not-ok-with-error-message.yml +++ /dev/null @@ -1,2 +0,0 @@ -bugfixes: - - slack - fail if Slack API response is not OK with error message (https://github.com/ansible-collections/community.general/pull/9198). diff --git a/changelogs/fragments/9202-keycloak_clientscope_type-sort-lists.yml b/changelogs/fragments/9202-keycloak_clientscope_type-sort-lists.yml deleted file mode 100644 index ef9fc7a6f7..0000000000 --- a/changelogs/fragments/9202-keycloak_clientscope_type-sort-lists.yml +++ /dev/null @@ -1,2 +0,0 @@ -bugfixes: - - keycloak_clientscope_type - sort the default and optional clientscope lists to improve the diff (https://github.com/ansible-collections/community.general/pull/9202). \ No newline at end of file diff --git a/changelogs/fragments/9226-xfconf-version.yml b/changelogs/fragments/9226-xfconf-version.yml deleted file mode 100644 index 517beb9b96..0000000000 --- a/changelogs/fragments/9226-xfconf-version.yml +++ /dev/null @@ -1,3 +0,0 @@ -minor_changes: - - xfconf - add return value ``version`` (https://github.com/ansible-collections/community.general/pull/9226). - - xfconf_info - add return value ``version`` (https://github.com/ansible-collections/community.general/pull/9226). diff --git a/changelogs/fragments/9234-fix-verify-bios-attributes-multi-system.yml b/changelogs/fragments/9234-fix-verify-bios-attributes-multi-system.yml deleted file mode 100644 index 95bafed8d8..0000000000 --- a/changelogs/fragments/9234-fix-verify-bios-attributes-multi-system.yml +++ /dev/null @@ -1,2 +0,0 @@ -bugfixes: - - redfish_utils module utils - Fix ``VerifyBiosAttributes`` command on multi system resource nodes (https://github.com/ansible-collections/community.general/pull/9234). diff --git a/changelogs/fragments/9238-locale-gen-rewrite.yml b/changelogs/fragments/9238-locale-gen-rewrite.yml deleted file mode 100644 index c2c9160bfb..0000000000 --- a/changelogs/fragments/9238-locale-gen-rewrite.yml +++ /dev/null @@ -1,13 +0,0 @@ -minor_changes: - - "locale_gen - invert the logic to determine ``ubuntu_mode``, making it look first for ``/etc/locale.gen`` (set ``ubuntu_mode`` to ``False``) - and only then looking for ``/var/lib/locales/supported.d/`` (set ``ubuntu_mode`` to ``True``) - (https://github.com/ansible-collections/community.general/pull/9238, - https://github.com/ansible-collections/community.general/issues/9131, - https://github.com/ansible-collections/community.general/issues/8487)." - - > - locale_gen - new return value ``mechanism`` to better express the semantics of the ``ubuntu_mode``, with the possible values being either - ``glibc`` (``ubuntu_mode=False``) or ``ubuntu_legacy`` (``ubuntu_mode=True``) (https://github.com/ansible-collections/community.general/pull/9238). -deprecated_features: - - > - locale_gen - ``ubuntu_mode=True``, or ``mechanism=ubuntu_legacy`` is deprecated and will be removed in community.general 13.0.0 - (https://github.com/ansible-collections/community.general/pull/9238). diff --git a/changelogs/fragments/9255-fix-handling-of-aliased-homebrew-packages.yml b/changelogs/fragments/9255-fix-handling-of-aliased-homebrew-packages.yml deleted file mode 100644 index 350e81af8e..0000000000 --- a/changelogs/fragments/9255-fix-handling-of-aliased-homebrew-packages.yml +++ /dev/null @@ -1,2 +0,0 @@ -bugfixes: - - homebrew - fix incorrect handling of aliased homebrew modules when the alias is requested (https://github.com/ansible-collections/community.general/pull/9255, https://github.com/ansible-collections/community.general/issues/9240). \ No newline at end of file diff --git a/changelogs/fragments/9263-kc_authentication-api-priority.yaml b/changelogs/fragments/9263-kc_authentication-api-priority.yaml deleted file mode 100644 index a943e659ad..0000000000 --- a/changelogs/fragments/9263-kc_authentication-api-priority.yaml +++ /dev/null @@ -1,2 +0,0 @@ -security_fixes: - - keycloak_authentication - API calls did not properly set the ``priority`` during update resulting in incorrectly sorted authentication flows. This apparently only affects Keycloak 25 or newer (https://github.com/ansible-collections/community.general/pull/9263). \ No newline at end of file diff --git a/changelogs/fragments/9270-zypper-add-simple_errors.yaml b/changelogs/fragments/9270-zypper-add-simple_errors.yaml deleted file mode 100644 index 9fcdf3403c..0000000000 --- a/changelogs/fragments/9270-zypper-add-simple_errors.yaml +++ /dev/null @@ -1,3 +0,0 @@ -minor_changes: - - zypper - add ``simple_errors`` option (https://github.com/ansible-collections/community.general/pull/9270). - - zypper - add ``quiet`` option (https://github.com/ansible-collections/community.general/pull/9270). \ No newline at end of file diff --git a/changelogs/fragments/9284-add-keycloak-action-group.yml b/changelogs/fragments/9284-add-keycloak-action-group.yml deleted file mode 100644 index b25c370346..0000000000 --- a/changelogs/fragments/9284-add-keycloak-action-group.yml +++ /dev/null @@ -1,2 +0,0 @@ -minor_changes: - - keycloak - add an action group for Keycloak modules to allow ``module_defaults`` to be set for Keycloak tasks (https://github.com/ansible-collections/community.general/pull/9284). diff --git a/changelogs/fragments/9318-fstr-actionplugins.yml b/changelogs/fragments/9318-fstr-actionplugins.yml deleted file mode 100644 index 7df54f3c19..0000000000 --- a/changelogs/fragments/9318-fstr-actionplugins.yml +++ /dev/null @@ -1,3 +0,0 @@ -minor_changes: - - iptables_state action plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9318). - - shutdown action plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9318). diff --git a/changelogs/fragments/9319-fstr-become-plugins.yml b/changelogs/fragments/9319-fstr-become-plugins.yml deleted file mode 100644 index dcdc4b3f52..0000000000 --- a/changelogs/fragments/9319-fstr-become-plugins.yml +++ /dev/null @@ -1,10 +0,0 @@ -minor_changes: - - doas become plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9319). - - dzdo become plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9319). - - ksu become plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9319). - - machinectl become plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9319). - - pbrun become plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9319). - - pfexec become plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9319). - - pmrun become plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9319). - - sesu become plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9319). - - sudosu become plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9319). diff --git a/changelogs/fragments/9320-fstr-cache-plugins.yml b/changelogs/fragments/9320-fstr-cache-plugins.yml deleted file mode 100644 index cc1aa6ea2e..0000000000 --- a/changelogs/fragments/9320-fstr-cache-plugins.yml +++ /dev/null @@ -1,3 +0,0 @@ -minor_changes: - - memcached cache plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9320). - - redis cache plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9320). diff --git a/changelogs/fragments/9321-fstr-callback-plugins.yml b/changelogs/fragments/9321-fstr-callback-plugins.yml deleted file mode 100644 index d79d3cbfa0..0000000000 --- a/changelogs/fragments/9321-fstr-callback-plugins.yml +++ /dev/null @@ -1,22 +0,0 @@ -minor_changes: - - cgroup_memory_recap callback plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9321). - - context_demo callback plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9321). - - counter_enabled callback plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9321). - - dense callback plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9321). - - diy callback plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9321). - - elastic callback plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9321). - - jabber callback plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9321). - - log_plays callback plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9321). - - loganalytics callback plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9321). - - logdna callback plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9321). - - logentries callback plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9321). - - mail callback plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9321). - - nrdp callback plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9321). - - opentelemetry callback plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9321). - - say callback plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9321). - - selective callback plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9321). - - slack callback plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9321). - - splunk callback plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9321). - - timestamp callback plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9321). - - unixy callback plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9321). - - yaml callback plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9321). diff --git a/changelogs/fragments/9322-fstr-connection-plugins.yml b/changelogs/fragments/9322-fstr-connection-plugins.yml deleted file mode 100644 index 4b3e264cfb..0000000000 --- a/changelogs/fragments/9322-fstr-connection-plugins.yml +++ /dev/null @@ -1,11 +0,0 @@ -minor_changes: - - chroot connection plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9322). - - funcd connection plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9322). - - incus connection plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9322). - - iocage connection plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9322). - - jail connection plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9322). - - lxc connection plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9322). - - lxd connection plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9322). - - qubes connection plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9322). - - saltstack connection plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9322). - - zone connection plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9322). diff --git a/changelogs/fragments/9323-fstr-inventory-plugins.yml b/changelogs/fragments/9323-fstr-inventory-plugins.yml deleted file mode 100644 index 26fa87209b..0000000000 --- a/changelogs/fragments/9323-fstr-inventory-plugins.yml +++ /dev/null @@ -1,13 +0,0 @@ -minor_changes: - - cobbler inventory plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9323). - - gitlab_runners inventory plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9323). - - icinga2 inventory plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9323). - - linode inventory plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9323). - - lxd inventory plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9323). - - nmap inventory plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9323). - - online inventory plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9323). - - opennebula inventory plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9323). - - scaleway inventory plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9323). - - stackpath_compute inventory plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9323). - - virtualbox inventory plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9323). - - xen_orchestra inventory plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9323). diff --git a/changelogs/fragments/9324-fstr-lookup-plugins.yml b/changelogs/fragments/9324-fstr-lookup-plugins.yml deleted file mode 100644 index a448ae0d48..0000000000 --- a/changelogs/fragments/9324-fstr-lookup-plugins.yml +++ /dev/null @@ -1,29 +0,0 @@ -minor_changes: - - bitwarden lookup plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9324). - - chef_databag lookup plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9324). - - collection_version lookup plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9324). - - consul_kv lookup plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9324). - - credstash lookup plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9324). - - cyberarkpassword lookup plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9324). - - dependent lookup plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9324). - - dig lookup plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9324). - - dnstxt lookup plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9324). - - dsv lookup plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9324). - - etcd lookup plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9324). - - etcd3 lookup plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9324). - - filetree lookup plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9324). - - github_app_access_token lookup plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9324). - - hiera lookup plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9324). - - keyring lookup plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9324). - - lastpass lookup plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9324). - - lmdb_kv lookup plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9324). - - manifold lookup plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9324). - - merge_variables lookup plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9324). - - onepassword lookup plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9324). - - onepassword_doc lookup plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9324). - - passwordstore lookup plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9324). - - random_pet lookup plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9324). - - redis lookup plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9324). - - revbitspss lookup plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9324). - - shelvefile lookup plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9324). - - tss lookup plugin - use f-strings instead of interpolations or ``format`` (https://github.com/ansible-collections/community.general/pull/9324). diff --git a/changelogs/fragments/9334-qubes-conn.yml b/changelogs/fragments/9334-qubes-conn.yml deleted file mode 100644 index 3faa8d7981..0000000000 --- a/changelogs/fragments/9334-qubes-conn.yml +++ /dev/null @@ -1,2 +0,0 @@ -bugfixes: - - qubes connection plugin - fix the printing of debug information (https://github.com/ansible-collections/community.general/pull/9334). diff --git a/changelogs/fragments/9363-dig-nonameservers.yml b/changelogs/fragments/9363-dig-nonameservers.yml deleted file mode 100644 index daa48febec..0000000000 --- a/changelogs/fragments/9363-dig-nonameservers.yml +++ /dev/null @@ -1,2 +0,0 @@ -bugfixes: - - "dig lookup plugin - correctly handle ``NoNameserver`` exception (https://github.com/ansible-collections/community.general/pull/9363, https://github.com/ansible-collections/community.general/issues/9362)." diff --git a/changelogs/fragments/9379-refactor.yml b/changelogs/fragments/9379-refactor.yml deleted file mode 100644 index b2c68aa8b1..0000000000 --- a/changelogs/fragments/9379-refactor.yml +++ /dev/null @@ -1,25 +0,0 @@ -minor_changes: - - "shutdown action plugin - clean up string conversions (https://github.com/ansible-collections/community.general/pull/9379)." - - "redis cache plugin - clean up string conversions (https://github.com/ansible-collections/community.general/pull/9379)." - - "logentries callback plugin - clean up string conversions (https://github.com/ansible-collections/community.general/pull/9379)." - - "slack callback plugin - clean up string conversions (https://github.com/ansible-collections/community.general/pull/9379)." - - "chroot connection plugin - clean up string conversions (https://github.com/ansible-collections/community.general/pull/9379)." - - "from_csv filter plugin - clean up string conversions (https://github.com/ansible-collections/community.general/pull/9379)." - - "from_ini filter plugin - clean up string conversions (https://github.com/ansible-collections/community.general/pull/9379)." - - "to_ini filter plugin - clean up string conversions (https://github.com/ansible-collections/community.general/pull/9379)." - - "cobbler inventory plugin - clean up string conversions (https://github.com/ansible-collections/community.general/pull/9379)." - - "gitlab_runners inventory plugin - clean up string conversions (https://github.com/ansible-collections/community.general/pull/9379)." - - "iocage inventory plugin - clean up string conversions (https://github.com/ansible-collections/community.general/pull/9379)." - - "lxd inventory plugin - clean up string conversions (https://github.com/ansible-collections/community.general/pull/9379)." - - "nmap inventory plugin - clean up string conversions (https://github.com/ansible-collections/community.general/pull/9379)." - - "opennebula inventory plugin - clean up string conversions (https://github.com/ansible-collections/community.general/pull/9379)." - - "scaleway inventory plugin - clean up string conversions (https://github.com/ansible-collections/community.general/pull/9379)." - - "virtualbox inventory plugin - clean up string conversions (https://github.com/ansible-collections/community.general/pull/9379)." - - "cyberarkpassword lookup plugin - clean up string conversions (https://github.com/ansible-collections/community.general/pull/9379)." - - "dig lookup plugin - clean up string conversions (https://github.com/ansible-collections/community.general/pull/9379)." - - "dnstxt lookup plugin - clean up string conversions (https://github.com/ansible-collections/community.general/pull/9379)." - - "etcd3 lookup plugin - clean up string conversions (https://github.com/ansible-collections/community.general/pull/9379)." - - "lmdb_kv lookup plugin - clean up string conversions (https://github.com/ansible-collections/community.general/pull/9379)." - - "manifold lookup plugin - clean up string conversions (https://github.com/ansible-collections/community.general/pull/9379)." - - "onepassword lookup plugin - clean up string conversions (https://github.com/ansible-collections/community.general/pull/9379)." - - "tss lookup plugin - clean up string conversions (https://github.com/ansible-collections/community.general/pull/9379)." diff --git a/changelogs/fragments/9387-pacemaker-cluster-cmd.yml b/changelogs/fragments/9387-pacemaker-cluster-cmd.yml deleted file mode 100644 index d9cc4c35a4..0000000000 --- a/changelogs/fragments/9387-pacemaker-cluster-cmd.yml +++ /dev/null @@ -1,3 +0,0 @@ -minor_changes: - - pacemaker_cluster - using safer mechanism to run external command (https://github.com/ansible-collections/community.general/pull/9471). - - pacemaker_cluster - remove unused code (https://github.com/ansible-collections/community.general/pull/9471). diff --git a/changelogs/fragments/9403-redfish-add-get-accountservice.yml b/changelogs/fragments/9403-redfish-add-get-accountservice.yml deleted file mode 100644 index a57ecfec61..0000000000 --- a/changelogs/fragments/9403-redfish-add-get-accountservice.yml +++ /dev/null @@ -1,2 +0,0 @@ -minor_changes: - - redfish_info - add command ``GetAccountServiceConfig`` to get full information about AccountService configuration (https://github.com/ansible-collections/community.general/pull/9403). diff --git a/changelogs/fragments/9425-gitlab-instance-raw-variable.yml b/changelogs/fragments/9425-gitlab-instance-raw-variable.yml deleted file mode 100644 index c9d6ec7d4b..0000000000 --- a/changelogs/fragments/9425-gitlab-instance-raw-variable.yml +++ /dev/null @@ -1,2 +0,0 @@ -minor_changes: - - gitlab_instance_variable - add support for ``raw`` variables suboption (https://github.com/ansible-collections/community.general/pull/9425). diff --git a/changelogs/fragments/9432-deprecate-pure.yml b/changelogs/fragments/9432-deprecate-pure.yml deleted file mode 100644 index 21cc8f8633..0000000000 --- a/changelogs/fragments/9432-deprecate-pure.yml +++ /dev/null @@ -1,3 +0,0 @@ -deprecated_features: - - purestorage doc fragments - the doc fragment is deprecated and will be removed from community.general 12.0.0. The modules using this were removed in community.general 3.0.0 (https://github.com/ansible-collections/community.general/pull/9432). - - pure module utils - the module utils is deprecated and will be removed from community.general 12.0.0. The modules using this were removed in community.general 3.0.0 (https://github.com/ansible-collections/community.general/pull/9432). diff --git a/changelogs/fragments/9443-slack-prepend_hash.yml b/changelogs/fragments/9443-slack-prepend_hash.yml deleted file mode 100644 index 98151ba51e..0000000000 --- a/changelogs/fragments/9443-slack-prepend_hash.yml +++ /dev/null @@ -1,3 +0,0 @@ -deprecated_features: - - "slack - the default value ``auto`` of the ``prepend_hash`` option is deprecated and will change to ``never`` in community.general 12.0.0 - (https://github.com/ansible-collections/community.general/pull/9443)." diff --git a/changelogs/fragments/9449-manageiq-alert-profiles-reqs.yml b/changelogs/fragments/9449-manageiq-alert-profiles-reqs.yml deleted file mode 100644 index 710cf672cc..0000000000 --- a/changelogs/fragments/9449-manageiq-alert-profiles-reqs.yml +++ /dev/null @@ -1,2 +0,0 @@ -minor_changes: - - manageiq_alert_profiles - improve handling of parameter requirements (https://github.com/ansible-collections/community.general/pull/9449). diff --git a/changelogs/fragments/9451-facter-deprecation.yml b/changelogs/fragments/9451-facter-deprecation.yml deleted file mode 100644 index 63924e9358..0000000000 --- a/changelogs/fragments/9451-facter-deprecation.yml +++ /dev/null @@ -1,2 +0,0 @@ -deprecated_features: - - facter - module is deprecated and will be removed in community.general 12.0.0, use ``community.general.facter_facts`` instead (https://github.com/ansible-collections/community.general/pull/9451). diff --git a/changelogs/fragments/9456-yaml-callback-deprecation.yml b/changelogs/fragments/9456-yaml-callback-deprecation.yml deleted file mode 100644 index 47c0708c20..0000000000 --- a/changelogs/fragments/9456-yaml-callback-deprecation.yml +++ /dev/null @@ -1,2 +0,0 @@ -deprecated_features: - - yaml callback plugin - deprecate plugin in favor of ``result_format=yaml`` in plugin ``ansible.bulitin.default`` (https://github.com/ansible-collections/community.general/pull/9456). diff --git a/changelogs/fragments/9457-apache2-mod-proxy-revamp.yml b/changelogs/fragments/9457-apache2-mod-proxy-revamp.yml deleted file mode 100644 index e85b4b61da..0000000000 --- a/changelogs/fragments/9457-apache2-mod-proxy-revamp.yml +++ /dev/null @@ -1,2 +0,0 @@ -minor_changes: - - apache2_mod_proxy - code simplification, no change in functionality (https://github.com/ansible-collections/community.general/pull/9457). diff --git a/changelogs/fragments/9482-opentelemetry-python-37.yml b/changelogs/fragments/9482-opentelemetry-python-37.yml deleted file mode 100644 index 3cc291265f..0000000000 --- a/changelogs/fragments/9482-opentelemetry-python-37.yml +++ /dev/null @@ -1,2 +0,0 @@ -minor_changes: - - opentelemetry callback plugin - remove code handling Python versions prior to 3.7 (https://github.com/ansible-collections/community.general/pull/9482). diff --git a/changelogs/fragments/9483-sensu-deprecation.yml b/changelogs/fragments/9483-sensu-deprecation.yml deleted file mode 100644 index daa219202d..0000000000 --- a/changelogs/fragments/9483-sensu-deprecation.yml +++ /dev/null @@ -1,6 +0,0 @@ -deprecated_features: - - sensu_check - module is deprecated and will be removed in community.general 13.0.0, use collection ``sensu.sensu_go`` instead (https://github.com/ansible-collections/community.general/pull/9483). - - sensu_client - module is deprecated and will be removed in community.general 13.0.0, use collection ``sensu.sensu_go`` instead (https://github.com/ansible-collections/community.general/pull/9483). - - sensu_handler - module is deprecated and will be removed in community.general 13.0.0, use collection ``sensu.sensu_go`` instead (https://github.com/ansible-collections/community.general/pull/9483). - - sensu_silence - module is deprecated and will be removed in community.general 13.0.0, use collection ``sensu.sensu_go`` instead (https://github.com/ansible-collections/community.general/pull/9483). - - sensu_subscription - module is deprecated and will be removed in community.general 13.0.0, use collection ``sensu.sensu_go`` instead (https://github.com/ansible-collections/community.general/pull/9483). diff --git a/changelogs/fragments/9487-atomic-deprecation.yml b/changelogs/fragments/9487-atomic-deprecation.yml deleted file mode 100644 index 80897cdccc..0000000000 --- a/changelogs/fragments/9487-atomic-deprecation.yml +++ /dev/null @@ -1,4 +0,0 @@ -deprecated_features: - - atomic_container - module is deprecated and will be removed in community.general 13.0.0 (https://github.com/ansible-collections/community.general/pull/9487). - - atomic_host - module is deprecated and will be removed in community.general 13.0.0 (https://github.com/ansible-collections/community.general/pull/9487). - - atomic_image - module is deprecated and will be removed in community.general 13.0.0 (https://github.com/ansible-collections/community.general/pull/9487). diff --git a/changelogs/fragments/9490-htpasswd-permissions.yml b/changelogs/fragments/9490-htpasswd-permissions.yml deleted file mode 100644 index 71d174814e..0000000000 --- a/changelogs/fragments/9490-htpasswd-permissions.yml +++ /dev/null @@ -1,3 +0,0 @@ -bugfixes: - - "htpasswd - report changes when file permissions are adjusted - (https://github.com/ansible-collections/community.general/issues/9485, https://github.com/ansible-collections/community.general/pull/9490)." diff --git a/changelogs/fragments/9494-keycloak-modules-retry-request-on-authentication-error.yaml b/changelogs/fragments/9494-keycloak-modules-retry-request-on-authentication-error.yaml deleted file mode 100644 index 7e5c71ade1..0000000000 --- a/changelogs/fragments/9494-keycloak-modules-retry-request-on-authentication-error.yaml +++ /dev/null @@ -1,2 +0,0 @@ -minor_changes: - - keycloak_* modules - ``refresh_token`` parameter added. When multiple authentication parameters are provided (``token``, ``refresh_token``, and ``auth_username``/``auth_password``), modules will now automatically retry requests upon authentication errors (401), using in order the token, refresh token, and username/password (https://github.com/ansible-collections/community.general/pull/9494). diff --git a/changelogs/fragments/9503-opentelemetry-remove-unused-code.yml b/changelogs/fragments/9503-opentelemetry-remove-unused-code.yml deleted file mode 100644 index 1381f02554..0000000000 --- a/changelogs/fragments/9503-opentelemetry-remove-unused-code.yml +++ /dev/null @@ -1,2 +0,0 @@ -minor_changes: - - opentelemetry callback plugin - remove code handling Python versions prior to 3.7 (https://github.com/ansible-collections/community.general/pull/9503). diff --git a/changelogs/fragments/9539-iocage-inventory-dhcp.yml b/changelogs/fragments/9539-iocage-inventory-dhcp.yml deleted file mode 100644 index 2432669d25..0000000000 --- a/changelogs/fragments/9539-iocage-inventory-dhcp.yml +++ /dev/null @@ -1,2 +0,0 @@ -bugfixes: - - iocage inventory plugin - the plugin parses the IP4 tab of the jails list and put the elements into the new variable ``iocage_ip4_dict``. In multiple interface format the variable ``iocage_ip4`` keeps the comma-separated list of IP4 (https://github.com/ansible-collections/community.general/issues/9538). diff --git a/changelogs/fragments/9546-fix-handling-of-tap-homebrew-packages.yml b/changelogs/fragments/9546-fix-handling-of-tap-homebrew-packages.yml deleted file mode 100644 index a8e3f33393..0000000000 --- a/changelogs/fragments/9546-fix-handling-of-tap-homebrew-packages.yml +++ /dev/null @@ -1,2 +0,0 @@ -bugfixes: - - homebrew - fix incorrect handling of homebrew modules when a tap is requested (https://github.com/ansible-collections/community.general/pull/9546, https://github.com/ansible-collections/community.general/issues/9533). \ No newline at end of file diff --git a/changelogs/fragments/9547-one_template-filter.yml b/changelogs/fragments/9547-one_template-filter.yml deleted file mode 100644 index f67575d640..0000000000 --- a/changelogs/fragments/9547-one_template-filter.yml +++ /dev/null @@ -1,2 +0,0 @@ -minor_changes: - - one_template - adds ``filter`` option for retrieving templates which are not owned by the user (https://github.com/ansible-collections/community.general/pull/9547, https://github.com/ansible-collections/community.general/issues/9278). diff --git a/changelogs/fragments/9554-add-cpanm-option_with-recommends-and-suggests.yml b/changelogs/fragments/9554-add-cpanm-option_with-recommends-and-suggests.yml deleted file mode 100644 index 5cdaf24e9e..0000000000 --- a/changelogs/fragments/9554-add-cpanm-option_with-recommends-and-suggests.yml +++ /dev/null @@ -1,3 +0,0 @@ -minor_changes: - - cpanm - enable usage of option ``--with-recommends`` (https://github.com/ansible-collections/community.general/issues/9554, https://github.com/ansible-collections/community.general/pull/9555). - - cpanm - enable usage of option ``--with-suggests`` (https://github.com/ansible-collections/community.general/pull/9555). diff --git a/changelogs/fragments/9570-feat-nmcli-add-fail-over-mac-parameter.yml b/changelogs/fragments/9570-feat-nmcli-add-fail-over-mac-parameter.yml deleted file mode 100644 index c46526e2f6..0000000000 --- a/changelogs/fragments/9570-feat-nmcli-add-fail-over-mac-parameter.yml +++ /dev/null @@ -1,2 +0,0 @@ -minor_changes: - - nmcli - add a option ``fail_over_mac`` (https://github.com/ansible-collections/community.general/issues/9570, https://github.com/ansible-collections/community.general/pull/9571). \ No newline at end of file diff --git a/changelogs/fragments/9573-iocage-inventory-sudo.yml b/changelogs/fragments/9573-iocage-inventory-sudo.yml deleted file mode 100644 index f636f34055..0000000000 --- a/changelogs/fragments/9573-iocage-inventory-sudo.yml +++ /dev/null @@ -1,2 +0,0 @@ -minor_changes: - - iocage inventory plugin - the new parameter ``sudo`` of the plugin lets the command ``iocage list -l`` to run as root on the iocage host. This is needed to get the IPv4 of a running DHCP jail (https://github.com/ansible-collections/community.general/issues/9572, https://github.com/ansible-collections/community.general/pull/9573). diff --git a/changelogs/fragments/9577-mh-delegate-debug.yml b/changelogs/fragments/9577-mh-delegate-debug.yml deleted file mode 100644 index 9d50f68806..0000000000 --- a/changelogs/fragments/9577-mh-delegate-debug.yml +++ /dev/null @@ -1,6 +0,0 @@ -minor_changes: - - MH module utils - delegate ``debug`` to the underlying ``AnsibleModule`` instance or issues a warning if an attribute already exists with that name (https://github.com/ansible-collections/community.general/pull/9577). -deprecated_features: - - > - MH module utils - attribute ``debug`` definition in subclasses of MH is now deprecated, as that name will become a delegation to ``AnsibleModule`` in - community.general 12.0.0, and any such attribute will be overridden by that delegation in that version (https://github.com/ansible-collections/community.general/pull/9577). diff --git a/changelogs/fragments/9578-redhat_subscription-no-remove-on-unregister.yml b/changelogs/fragments/9578-redhat_subscription-no-remove-on-unregister.yml deleted file mode 100644 index 1403b2faa1..0000000000 --- a/changelogs/fragments/9578-redhat_subscription-no-remove-on-unregister.yml +++ /dev/null @@ -1,7 +0,0 @@ -bugfixes: - - | - redhat_subscription - do not try to unsubscribe (i.e. remove subscriptions) - when unregistering a system: newer versions of subscription-manager, as - available in EL 10 and Fedora 41+, do not support entitlements anymore, and - thus unsubscribing will fail - (https://github.com/ansible-collections/community.general/pull/9578). diff --git a/changelogs/fragments/9579-with-open.yml b/changelogs/fragments/9579-with-open.yml deleted file mode 100644 index 449ba8b1b1..0000000000 --- a/changelogs/fragments/9579-with-open.yml +++ /dev/null @@ -1,11 +0,0 @@ -minor_changes: - - known_hosts - open file using ``open()`` as a context manager (https://github.com/ansible-collections/community.general/pull/9579). - - cloud_init_data_facts - open file using ``open()`` as a context manager (https://github.com/ansible-collections/community.general/pull/9579). - - cronvar - open file using ``open()`` as a context manager (https://github.com/ansible-collections/community.general/pull/9579). - - crypttab - open file using ``open()`` as a context manager (https://github.com/ansible-collections/community.general/pull/9579). - - parted - open file using ``open()`` as a context manager (https://github.com/ansible-collections/community.general/pull/9579). - - pulp_repo - open file using ``open()`` as a context manager (https://github.com/ansible-collections/community.general/pull/9579). - - redhat_subscription - open file using ``open()`` as a context manager (https://github.com/ansible-collections/community.general/pull/9579). - - solaris_zone - open file using ``open()`` as a context manager (https://github.com/ansible-collections/community.general/pull/9579). - - sorcery - open file using ``open()`` as a context manager (https://github.com/ansible-collections/community.general/pull/9579). - - timezone - open file using ``open()`` as a context manager (https://github.com/ansible-collections/community.general/pull/9579). diff --git a/changelogs/fragments/9582-add-support-for-vrrp.yml b/changelogs/fragments/9582-add-support-for-vrrp.yml deleted file mode 100644 index 473ccbf258..0000000000 --- a/changelogs/fragments/9582-add-support-for-vrrp.yml +++ /dev/null @@ -1,2 +0,0 @@ -minor_changes: - - ufw - add support for ``vrrp`` protocol (https://github.com/ansible-collections/community.general/issues/9562, https://github.com/ansible-collections/community.general/pull/9582). diff --git a/changelogs/fragments/9583-py3-imports-actionbecomecachecallback.yml b/changelogs/fragments/9583-py3-imports-actionbecomecachecallback.yml deleted file mode 100644 index 3838e52ae9..0000000000 --- a/changelogs/fragments/9583-py3-imports-actionbecomecachecallback.yml +++ /dev/null @@ -1,43 +0,0 @@ -minor_changes: - - iptables_state action plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). - - shutdown action plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). - - doas become plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). - - dzdo become plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). - - ksu become plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). - - machinectl become plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). - - pbrun become plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). - - pfexec become plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). - - pmrun become plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). - - run0 become plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). - - sesu become plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). - - sudosu become plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). - - memcached cache plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). - - pickle cache plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). - - redis cache plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). - - yaml cache plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). - - cgroup_memory_recap callback plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). - - context_demo callback plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). - - counter_enabled callback plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). - - default_without_diff callback plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). - - dense callback plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). - - diy callback plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). - - elastic callback plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). - - jabber callback plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). - - log_plays callback plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). - - loganalytics callback plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). - - logdna callback plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). - - logentries callback plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). - - logstash callback plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). - - mail callback plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). - - nrdp callback plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). - - null callback plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). - - opentelemetry callback plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). - - say callback plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). - - selective callback plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). - - slack callback plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). - - splunk callback plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). - - sumologic callback plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). - - syslog_json callback plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). - - timestamp callback plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). - - unixy callback plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). - - yaml callback plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9583). diff --git a/changelogs/fragments/9584-py3-imports-connectioninventory.yml b/changelogs/fragments/9584-py3-imports-connectioninventory.yml deleted file mode 100644 index 4fbd215258..0000000000 --- a/changelogs/fragments/9584-py3-imports-connectioninventory.yml +++ /dev/null @@ -1,24 +0,0 @@ -minor_changes: - - chroot connection plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9584). - - funcd connection plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9584). - - incus connection plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9584). - - iocage connection plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9584). - - jail connection plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9584). - - lxc connection plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9584). - - lxd connection plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9584). - - qubes connection plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9584). - - saltstack connection plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9584). - - zone connection plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9584). - - cobbler inventory plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9584). - - gitlab_runners inventory plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9584). - - icinga2 inventory plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9584). - - iocage inventory plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9584). - - linode inventory plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9584). - - lxd inventory plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9584). - - nmap inventory plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9584). - - online inventory plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9584). - - opennebula inventory plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9584). - - scaleway inventory plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9584). - - stackpath_compute inventory plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9584). - - virtualbox inventory plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9584). - - xen_orchestra inventory plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9584). diff --git a/changelogs/fragments/9585-py3-imports-filter.yml b/changelogs/fragments/9585-py3-imports-filter.yml deleted file mode 100644 index 88644996b2..0000000000 --- a/changelogs/fragments/9585-py3-imports-filter.yml +++ /dev/null @@ -1,22 +0,0 @@ -minor_changes: - - counter filter plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9585). - - crc32 filter plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9585). - - dict filter plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9585). - - dict_kv filter plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9585). - - from_csv filter plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9585). - - from_ini filter plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9585). - - groupby_as_dict filter plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9585). - - hashids filter plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9585). - - jc filter plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9585). - - json_query filter plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9585). - - keep_keys filter plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9585). - - lists filter plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9585). - - lists_mergeby filter plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9585). - - random_mac filter plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9585). - - remove_keys filter plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9585). - - replace_keys filter plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9585). - - reveal_ansible_type filter plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9585). - - time filter plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9585). - - to_ini filter plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9585). - - unicode_normalize filter plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9585). - - version_sort filter plugin - adjust standard preamble for Python 3 (https://github.com/ansible-collections/community.general/pull/9585). diff --git a/changelogs/fragments/9586-allow-transition-id-jira.yml b/changelogs/fragments/9586-allow-transition-id-jira.yml deleted file mode 100644 index 3c10231376..0000000000 --- a/changelogs/fragments/9586-allow-transition-id-jira.yml +++ /dev/null @@ -1,2 +0,0 @@ -minor_changes: - - jira - transition operation now has ``status_id`` to directly reference wanted transition (https://github.com/ansible-collections/community.general/pull/9602). diff --git a/changelogs/fragments/9598-snap-version.yml b/changelogs/fragments/9598-snap-version.yml deleted file mode 100644 index d6b5ebb67c..0000000000 --- a/changelogs/fragments/9598-snap-version.yml +++ /dev/null @@ -1,3 +0,0 @@ -minor_changes: - - snap - add return value ``version`` (https://github.com/ansible-collections/community.general/pull/9598). - - snap_alias - add return value ``version`` (https://github.com/ansible-collections/community.general/pull/9598). diff --git a/changelogs/fragments/9599-apache2-mod-proxy-revamp1.yml b/changelogs/fragments/9599-apache2-mod-proxy-revamp1.yml deleted file mode 100644 index 8f72117d52..0000000000 --- a/changelogs/fragments/9599-apache2-mod-proxy-revamp1.yml +++ /dev/null @@ -1,2 +0,0 @@ -minor_changes: - - apache2_mod_proxy - refactor repeated code into method (https://github.com/ansible-collections/community.general/pull/9599). diff --git a/changelogs/fragments/9600-apache2-mod-proxy-revamp2.yml b/changelogs/fragments/9600-apache2-mod-proxy-revamp2.yml deleted file mode 100644 index c4e5eea2d3..0000000000 --- a/changelogs/fragments/9600-apache2-mod-proxy-revamp2.yml +++ /dev/null @@ -1,2 +0,0 @@ -minor_changes: - - apache2_mod_proxy - change type of ``state`` to a list of strings. No change for the users (https://github.com/ansible-collections/community.general/pull/9600). diff --git a/changelogs/fragments/9608-apache2-mod-proxy-revamp3.yml b/changelogs/fragments/9608-apache2-mod-proxy-revamp3.yml deleted file mode 100644 index 4641ae1d9e..0000000000 --- a/changelogs/fragments/9608-apache2-mod-proxy-revamp3.yml +++ /dev/null @@ -1,2 +0,0 @@ -minor_changes: - - apache2_mod_proxy - improve readability when using results from ``fecth_url()`` (https://github.com/ansible-collections/community.general/pull/9608). diff --git a/changelogs/fragments/9609-apache2-mod-proxy-revamp4.yml b/changelogs/fragments/9609-apache2-mod-proxy-revamp4.yml deleted file mode 100644 index 009a2a582d..0000000000 --- a/changelogs/fragments/9609-apache2-mod-proxy-revamp4.yml +++ /dev/null @@ -1,2 +0,0 @@ -minor_changes: - - apache2_mod_proxy - better handling regexp extraction (https://github.com/ansible-collections/community.general/pull/9609). diff --git a/changelogs/fragments/9612-apache2-mod-proxy-revamp5.yml b/changelogs/fragments/9612-apache2-mod-proxy-revamp5.yml deleted file mode 100644 index 57fdccbf3e..0000000000 --- a/changelogs/fragments/9612-apache2-mod-proxy-revamp5.yml +++ /dev/null @@ -1,2 +0,0 @@ -minor_changes: - - apache2_mod_proxy - use ``deps`` to handle dependencies (https://github.com/ansible-collections/community.general/pull/9612). diff --git a/changelogs/fragments/9614-apache2-mod-proxy-revamp7.yml b/changelogs/fragments/9614-apache2-mod-proxy-revamp7.yml deleted file mode 100644 index e808413318..0000000000 --- a/changelogs/fragments/9614-apache2-mod-proxy-revamp7.yml +++ /dev/null @@ -1,3 +0,0 @@ -minor_changes: - - apache2_mod_proxy - simplified and improved string manipulation (https://github.com/ansible-collections/community.general/pull/9614). - - apache2_mod_proxy - remove unused parameter and code from ``Balancer`` constructor (https://github.com/ansible-collections/community.general/pull/9614). diff --git a/changelogs/fragments/9621-keycloak_client-sanitize-saml-encryption-key.yml b/changelogs/fragments/9621-keycloak_client-sanitize-saml-encryption-key.yml deleted file mode 100644 index 5d3401e430..0000000000 --- a/changelogs/fragments/9621-keycloak_client-sanitize-saml-encryption-key.yml +++ /dev/null @@ -1,2 +0,0 @@ -security_fixes: - - keycloak_client - Sanitize ``saml.encryption.private.key`` so it does not show in the logs (https://github.com/ansible-collections/community.general/pull/9621). \ No newline at end of file diff --git a/changelogs/fragments/9623-pipx-global-latest.yml b/changelogs/fragments/9623-pipx-global-latest.yml deleted file mode 100644 index c939ea5847..0000000000 --- a/changelogs/fragments/9623-pipx-global-latest.yml +++ /dev/null @@ -1,2 +0,0 @@ -bugfixes: - - pipx - honor option ``global`` when ``state=latest`` (https://github.com/ansible-collections/community.general/pull/9623). diff --git a/changelogs/fragments/9625-onepassword_doc.yml b/changelogs/fragments/9625-onepassword_doc.yml deleted file mode 100644 index e4c4cd5b65..0000000000 --- a/changelogs/fragments/9625-onepassword_doc.yml +++ /dev/null @@ -1,2 +0,0 @@ -bugfixes: - - "onepassword_doc lookup plugin - ensure that 1Password Connect support also works for this plugin (https://github.com/ansible-collections/community.general/pull/9625)." diff --git a/changelogs/fragments/9633-onepassword_ssh_key.yml b/changelogs/fragments/9633-onepassword_ssh_key.yml deleted file mode 100644 index bd4676319e..0000000000 --- a/changelogs/fragments/9633-onepassword_ssh_key.yml +++ /dev/null @@ -1,2 +0,0 @@ -minor_changes: - - "onepassword_ssh_key - refactor to move code to lookup class (https://github.com/ansible-collections/community.general/pull/9633)." diff --git a/changelogs/fragments/9644-kc_client-test-improvement-and-fix.yaml b/changelogs/fragments/9644-kc_client-test-improvement-and-fix.yaml deleted file mode 100644 index 63cba99198..0000000000 --- a/changelogs/fragments/9644-kc_client-test-improvement-and-fix.yaml +++ /dev/null @@ -1,2 +0,0 @@ -bugfixes: - - keycloak_client - fix and improve existing tests. The module showed a diff without actual changes, solved by improving the ``normalise_cr()`` function (https://github.com/ansible-collections/community.general/pull/9644). diff --git a/changelogs/fragments/9646-hpilo-fix-idempotency.yml b/changelogs/fragments/9646-hpilo-fix-idempotency.yml deleted file mode 100644 index 074fce62fe..0000000000 --- a/changelogs/fragments/9646-hpilo-fix-idempotency.yml +++ /dev/null @@ -1,2 +0,0 @@ -minor_changes: - - "hpilo_boot - add option to get an idempotent behavior while powering on server, resulting in success instead of failure when using ``state: boot_once`` option (https://github.com/ansible-collections/community.general/pull/9646)." diff --git a/changelogs/fragments/9649-cloudflare_dns-fix-crash-when-deleting-record.yml b/changelogs/fragments/9649-cloudflare_dns-fix-crash-when-deleting-record.yml deleted file mode 100644 index c345947575..0000000000 --- a/changelogs/fragments/9649-cloudflare_dns-fix-crash-when-deleting-record.yml +++ /dev/null @@ -1,2 +0,0 @@ -bugfixes: - - cloudflare_dns - fix crash when deleting a DNS record or when updating a record with ``solo=true`` (https://github.com/ansible-collections/community.general/issues/9652, https://github.com/ansible-collections/community.general/pull/9649). diff --git a/changelogs/fragments/9651-iocage-inventory-hooks.yml b/changelogs/fragments/9651-iocage-inventory-hooks.yml deleted file mode 100644 index 268348ba3c..0000000000 --- a/changelogs/fragments/9651-iocage-inventory-hooks.yml +++ /dev/null @@ -1,2 +0,0 @@ -minor_changes: - - iocage inventory plugin - the new parameter ``hooks_results`` of the plugin is a list of files inside a jail that provide configuration parameters for the inventory. The inventory plugin reads the files from the jails and put the contents into the items of created variable ``iocage_hooks`` (https://github.com/ansible-collections/community.general/issues/9650, https://github.com/ansible-collections/community.general/pull/9651). diff --git a/changelogs/fragments/9657-lldp-handling-attributes-defined-multiple-times.yml b/changelogs/fragments/9657-lldp-handling-attributes-defined-multiple-times.yml deleted file mode 100644 index 364013afc8..0000000000 --- a/changelogs/fragments/9657-lldp-handling-attributes-defined-multiple-times.yml +++ /dev/null @@ -1,4 +0,0 @@ -bugfixes: - - lldp - fix crash caused by certain lldpctl output where an attribute is defined as branch and leaf (https://github.com/ansible-collections/community.general/pull/9657). -minor_changes: - - lldp - adds ``multivalues`` parameter to control behavior when lldpctl outputs an attribute multiple times (https://github.com/ansible-collections/community.general/pull/9657). diff --git a/changelogs/fragments/9658-add-vrf-commands-to-nmcli-module.yml b/changelogs/fragments/9658-add-vrf-commands-to-nmcli-module.yml deleted file mode 100644 index a62fc823c5..0000000000 --- a/changelogs/fragments/9658-add-vrf-commands-to-nmcli-module.yml +++ /dev/null @@ -1,2 +0,0 @@ -minor_changes: - - nmcli - adds VRF support with new ``type`` value ``vrf`` and new ``slave_type`` value ``vrf`` as well as new ``table`` parameter (https://github.com/ansible-collections/community.general/pull/9658, https://github.com/ansible-collections/community.general/issues/8014). diff --git a/changelogs/fragments/9659-lxd_connection-nonroot-user.yml b/changelogs/fragments/9659-lxd_connection-nonroot-user.yml deleted file mode 100644 index 760921f054..0000000000 --- a/changelogs/fragments/9659-lxd_connection-nonroot-user.yml +++ /dev/null @@ -1,2 +0,0 @@ -minor_changes: - - lxd connection plugin - adds ``remote_user`` and ``lxd_become_method`` parameters for allowing a non-root user to connect to an LXD instance (https://github.com/ansible-collections/community.general/pull/9659). diff --git a/changelogs/fragments/9665-more-resilient-handling-of-homebrew-packages-names.yml b/changelogs/fragments/9665-more-resilient-handling-of-homebrew-packages-names.yml deleted file mode 100644 index 4e79dd6ea2..0000000000 --- a/changelogs/fragments/9665-more-resilient-handling-of-homebrew-packages-names.yml +++ /dev/null @@ -1,2 +0,0 @@ -bugfixes: - - homebrew - make package name parsing more resilient (https://github.com/ansible-collections/community.general/pull/9665, https://github.com/ansible-collections/community.general/issues/9641). diff --git a/changelogs/fragments/9691-keycloak-module-utils-replace-missing-return-in-get_role_composites.yml b/changelogs/fragments/9691-keycloak-module-utils-replace-missing-return-in-get_role_composites.yml deleted file mode 100644 index bf48f5f609..0000000000 --- a/changelogs/fragments/9691-keycloak-module-utils-replace-missing-return-in-get_role_composites.yml +++ /dev/null @@ -1,2 +0,0 @@ -bugfixes: - - keycloak module utils - replaces missing return in get_role_composites method which caused it to return None instead of composite roles (https://github.com/ansible-collections/community.general/issues/9678, https://github.com/ansible-collections/community.general/pull/9691). diff --git a/changelogs/fragments/9692-update-more-than-10-keycloak-sub-groups.yml b/changelogs/fragments/9692-update-more-than-10-keycloak-sub-groups.yml deleted file mode 100644 index 6253dd716a..0000000000 --- a/changelogs/fragments/9692-update-more-than-10-keycloak-sub-groups.yml +++ /dev/null @@ -1,2 +0,0 @@ -bugfixes: - - keycloak - update more than 10 sub-groups (https://github.com/ansible-collections/community.general/issues/9690, https://github.com/ansible-collections/community.general/pull/9692). diff --git a/changelogs/fragments/9694-ipa-host-certificate-revoked.yml b/changelogs/fragments/9694-ipa-host-certificate-revoked.yml deleted file mode 100644 index 71dcbb2a17..0000000000 --- a/changelogs/fragments/9694-ipa-host-certificate-revoked.yml +++ /dev/null @@ -1,2 +0,0 @@ -bugfixes: - - ipa_host - module revoked existing host certificates even if ``user_certificate`` was not given (https://github.com/ansible-collections/community.general/pull/9694). diff --git a/changelogs/fragments/9695-xml-close-file.yml b/changelogs/fragments/9695-xml-close-file.yml deleted file mode 100644 index d2a1843278..0000000000 --- a/changelogs/fragments/9695-xml-close-file.yml +++ /dev/null @@ -1,2 +0,0 @@ -bugfixes: - - xml - ensure file descriptor is closed (https://github.com/ansible-collections/community.general/pull/9695). diff --git a/changelogs/fragments/9697-zfs-facts-type.yml b/changelogs/fragments/9697-zfs-facts-type.yml deleted file mode 100644 index b738d3ae9f..0000000000 --- a/changelogs/fragments/9697-zfs-facts-type.yml +++ /dev/null @@ -1,2 +0,0 @@ -bugfixes: - - zfs_facts - parameter ``type`` now accepts multple values as documented (https://github.com/ansible-collections/community.general/issues/5909, https://github.com/ansible-collections/community.general/pull/9697). diff --git a/changelogs/fragments/9698-lvg-remove-extra-pvs-parameter.yml b/changelogs/fragments/9698-lvg-remove-extra-pvs-parameter.yml deleted file mode 100644 index 51c0423e8b..0000000000 --- a/changelogs/fragments/9698-lvg-remove-extra-pvs-parameter.yml +++ /dev/null @@ -1,2 +0,0 @@ -minor_changes: - - lvg - add ``remove_extra_pvs`` parameter to control if ansible should remove physical volumes which are not in the ``pvs`` parameter (https://github.com/ansible-collections/community.general/pull/9698). diff --git a/changelogs/fragments/9728-bitwarden-collection-name-filter.yml b/changelogs/fragments/9728-bitwarden-collection-name-filter.yml deleted file mode 100644 index f96710072f..0000000000 --- a/changelogs/fragments/9728-bitwarden-collection-name-filter.yml +++ /dev/null @@ -1,2 +0,0 @@ -minor_changes: - - bitwarden lookup plugin - add new option ``collection_name`` to filter results by collection name, and new option ``result_count`` to validate number of results (https://github.com/ansible-collections/community.general/pull/9728). \ No newline at end of file diff --git a/changelogs/fragments/9729-redfish-fullpowercycle-command.yml b/changelogs/fragments/9729-redfish-fullpowercycle-command.yml deleted file mode 100644 index 2d9974c3d6..0000000000 --- a/changelogs/fragments/9729-redfish-fullpowercycle-command.yml +++ /dev/null @@ -1,2 +0,0 @@ -minor_changes: - - redfish_command - add ``PowerFullPowerCycle`` to power command options (https://github.com/ansible-collections/community.general/pull/9729). diff --git a/changelogs/fragments/9733-profitbrick-deprecation.yml b/changelogs/fragments/9733-profitbrick-deprecation.yml deleted file mode 100644 index 094f2672a4..0000000000 --- a/changelogs/fragments/9733-profitbrick-deprecation.yml +++ /dev/null @@ -1,6 +0,0 @@ -deprecated_features: - - profitbricks - module is deprecated and will be removed in community.general 11.0.0 (https://github.com/ansible-collections/community.general/pull/9733). - - profitbricks_datacenter - module is deprecated and will be removed in community.general 11.0.0 (https://github.com/ansible-collections/community.general/pull/9733). - - profitbricks_nic - module is deprecated and will be removed in community.general 11.0.0 (https://github.com/ansible-collections/community.general/pull/9733). - - profitbricks_volume - module is deprecated and will be removed in community.general 11.0.0 (https://github.com/ansible-collections/community.general/pull/9733). - - profitbricks_volume_attachments - module is deprecated and will be removed in community.general 11.0.0 (https://github.com/ansible-collections/community.general/pull/9733). diff --git a/changelogs/fragments/9739-keycloak_client-compare-before-desired-directly.yml b/changelogs/fragments/9739-keycloak_client-compare-before-desired-directly.yml deleted file mode 100644 index 1d1a3da737..0000000000 --- a/changelogs/fragments/9739-keycloak_client-compare-before-desired-directly.yml +++ /dev/null @@ -1,2 +0,0 @@ -bugfixes: - - keycloak_client - in check mode, detect whether the lists in before client (for example redirect URI list) contain items that the lists in the desired client do not contain (https://github.com/ansible-collections/community.general/pull/9739). \ No newline at end of file diff --git a/changelogs/fragments/9743-incus_connection-nonroot-user.yml b/changelogs/fragments/9743-incus_connection-nonroot-user.yml deleted file mode 100644 index f1a7aa9b5f..0000000000 --- a/changelogs/fragments/9743-incus_connection-nonroot-user.yml +++ /dev/null @@ -1,2 +0,0 @@ -minor_changes: - - incus connection plugin - adds ``remote_user`` and ``incus_become_method`` parameters for allowing a non-root user to connect to an Incus instance (https://github.com/ansible-collections/community.general/pull/9743). diff --git a/changelogs/fragments/9753-jira-add-client-certificate-auth.yml b/changelogs/fragments/9753-jira-add-client-certificate-auth.yml deleted file mode 100644 index 8eeb5d01d7..0000000000 --- a/changelogs/fragments/9753-jira-add-client-certificate-auth.yml +++ /dev/null @@ -1,2 +0,0 @@ -minor_changes: - - jira - adds ``client_cert`` and ``client_key`` parameters for supporting client certificate authentification when connecting to Jira (https://github.com/ansible-collections/community.general/pull/9753). \ No newline at end of file diff --git a/changelogs/fragments/9762-apache2_mod_proxy.yml b/changelogs/fragments/9762-apache2_mod_proxy.yml deleted file mode 100644 index 423577905e..0000000000 --- a/changelogs/fragments/9762-apache2_mod_proxy.yml +++ /dev/null @@ -1,5 +0,0 @@ -bugfixes: - - "apache2_mod_proxy - make compatible with Python 3 (https://github.com/ansible-collections/community.general/pull/9762)." - - "apache2_mod_proxy - passing the cluster's page as referer for the member's pages. This makes the module actually work again for halfway modern Apache versions. - According to some comments founds on the net the referer was required since at least 2019 for some versions of Apache 2 - (https://github.com/ansible-collections/community.general/pull/9762)." diff --git a/changelogs/fragments/9768-keycloak_realm-remove-id-requirement.yaml b/changelogs/fragments/9768-keycloak_realm-remove-id-requirement.yaml deleted file mode 100644 index 592ac472d9..0000000000 --- a/changelogs/fragments/9768-keycloak_realm-remove-id-requirement.yaml +++ /dev/null @@ -1,2 +0,0 @@ -minor_changes: - - keycloak_realm - remove ID requirement when creating a realm to allow Keycloak generating its own realm ID (https://github.com/ansible-collections/community.general/pull/9768). \ No newline at end of file diff --git a/changelogs/fragments/9774-fix-elasticsearch_plugin-proxy-settings.yml b/changelogs/fragments/9774-fix-elasticsearch_plugin-proxy-settings.yml deleted file mode 100644 index d610032bc4..0000000000 --- a/changelogs/fragments/9774-fix-elasticsearch_plugin-proxy-settings.yml +++ /dev/null @@ -1,2 +0,0 @@ -bugfixes: - - "elasticsearch_plugin - fix ``ERROR: D is not a recognized option`` issue when configuring proxy settings (https://github.com/ansible-collections/community.general/pull/9774, https://github.com/ansible-collections/community.general/issues/9773)." \ No newline at end of file diff --git a/changelogs/fragments/9777-homebrew-fix-crash-when-packages-include-tap.yml b/changelogs/fragments/9777-homebrew-fix-crash-when-packages-include-tap.yml deleted file mode 100644 index a7649988bc..0000000000 --- a/changelogs/fragments/9777-homebrew-fix-crash-when-packages-include-tap.yml +++ /dev/null @@ -1,2 +0,0 @@ -bugfixes: - - homebrew - fix crash when package names include tap (https://github.com/ansible-collections/community.general/issues/9777, https://github.com/ansible-collections/community.general/pull/9803). diff --git a/changelogs/fragments/9778-redhat_subscription-ensure-to-enable-content.yml b/changelogs/fragments/9778-redhat_subscription-ensure-to-enable-content.yml deleted file mode 100644 index 7163865b6e..0000000000 --- a/changelogs/fragments/9778-redhat_subscription-ensure-to-enable-content.yml +++ /dev/null @@ -1,7 +0,0 @@ -bugfixes: - - | - redhat_subscription - use the "enable_content" option (when available) when - registering using D-Bus, to ensure that subscription-manager enables the - content on registration; this is particular important on EL 10+ and Fedora - 41+ - (https://github.com/ansible-collections/community.general/pull/9778). diff --git a/changelogs/fragments/9787-xoa_allow_using_names_in_inventory.yml b/changelogs/fragments/9787-xoa_allow_using_names_in_inventory.yml deleted file mode 100644 index 161e94f148..0000000000 --- a/changelogs/fragments/9787-xoa_allow_using_names_in_inventory.yml +++ /dev/null @@ -1,2 +0,0 @@ -minor_changes: - - xen_orchestra inventory plugin - add ``use_vm_uuid`` and ``use_host_uuid`` boolean options to allow switching over to using VM/Xen name labels instead of UUIDs as item names (https://github.com/ansible-collections/community.general/pull/9787). diff --git a/changelogs/fragments/9818-cloudflare-dns-exhausted-response.yml b/changelogs/fragments/9818-cloudflare-dns-exhausted-response.yml deleted file mode 100644 index a60f3145b4..0000000000 --- a/changelogs/fragments/9818-cloudflare-dns-exhausted-response.yml +++ /dev/null @@ -1,2 +0,0 @@ -bugfixes: - - cloudlare_dns - handle exhausted response stream in case of HTTP errors to show nice error message to the user (https://github.com/ansible-collections/community.general/issues/9782, https://github.com/ansible-collections/community.general/pull/9818). diff --git a/changelogs/fragments/9821-systemd_info-add-wildcards.yml b/changelogs/fragments/9821-systemd_info-add-wildcards.yml deleted file mode 100644 index a1349f8533..0000000000 --- a/changelogs/fragments/9821-systemd_info-add-wildcards.yml +++ /dev/null @@ -1,2 +0,0 @@ -minor_changes: - - systemd_info - add wildcard expression support in ``unitname`` option (https://github.com/ansible-collections/community.general/pull/9821). \ No newline at end of file diff --git a/changelogs/fragments/9824-redfish-implement-obtaining-powerrestorepolicy.yml b/changelogs/fragments/9824-redfish-implement-obtaining-powerrestorepolicy.yml deleted file mode 100644 index da8e391cb7..0000000000 --- a/changelogs/fragments/9824-redfish-implement-obtaining-powerrestorepolicy.yml +++ /dev/null @@ -1,2 +0,0 @@ -minor_changes: - - redfish_info - add command ``GetPowerRestorePolicy`` to get the desired power state of the system when power is restored (https://github.com/ansible-collections/community.general/pull/9824). diff --git a/changelogs/fragments/9833-data-tagging.yml b/changelogs/fragments/9833-data-tagging.yml deleted file mode 100644 index a3f0cb2d25..0000000000 --- a/changelogs/fragments/9833-data-tagging.yml +++ /dev/null @@ -1,9 +0,0 @@ -bugfixes: - - "dependent look plugin - make compatible with ansible-core's Data Tagging feature (https://github.com/ansible-collections/community.general/pull/9833)." - - "reveal_ansible_type filter plugin and ansible_type test plugin - make compatible with ansible-core's Data Tagging feature (https://github.com/ansible-collections/community.general/pull/9833)." - - "diy callback plugin - make compatible with ansible-core's Data Tagging feature (https://github.com/ansible-collections/community.general/pull/9833)." - - "yaml callback plugin - use ansible-core internals to avoid breakage with Data Tagging (https://github.com/ansible-collections/community.general/pull/9833)." -known_issues: - - "reveal_ansible_type filter plugin and ansible_type test plugin - note that ansible-core's Data Tagging feature implements new aliases, - such as ``_AnsibleTaggedStr`` for ``str``, ``_AnsibleTaggedInt`` for ``int``, and ``_AnsibleTaggedFloat`` for ``float`` - (https://github.com/ansible-collections/community.general/pull/9833)." diff --git a/changelogs/fragments/9836-option-for-http-agent-for-user-to-callback-slack.yml b/changelogs/fragments/9836-option-for-http-agent-for-user-to-callback-slack.yml deleted file mode 100644 index 0a1af56fc2..0000000000 --- a/changelogs/fragments/9836-option-for-http-agent-for-user-to-callback-slack.yml +++ /dev/null @@ -1,2 +0,0 @@ -minor_changes: - - slack callback plugin - add ``http_agent`` option to enable the user to set a custom user agent for slack callback plugin (https://github.com/ansible-collections/community.general/issues/9813, https://github.com/ansible-collections/community.general/pull/9836). diff --git a/changelogs/fragments/9837-redfish-implement-setting-powerrestorepolicy.yml b/changelogs/fragments/9837-redfish-implement-setting-powerrestorepolicy.yml deleted file mode 100644 index d4b1f505e1..0000000000 --- a/changelogs/fragments/9837-redfish-implement-setting-powerrestorepolicy.yml +++ /dev/null @@ -1,2 +0,0 @@ -minor_changes: - - redfish_config - add command ``SetPowerRestorePolicy`` to set the desired power state of the system when power is restored (https://github.com/ansible-collections/community.general/pull/9837). diff --git a/changelogs/fragments/9845-consul_token_idempotency.yml b/changelogs/fragments/9845-consul_token_idempotency.yml deleted file mode 100644 index 6fe536bbd0..0000000000 --- a/changelogs/fragments/9845-consul_token_idempotency.yml +++ /dev/null @@ -1,2 +0,0 @@ -minor_changes: - - consul_token - fix idempotency when ``policies`` or ``roles`` are supplied by name (https://github.com/ansible-collections/community.general/issues/9841, https://github.com/ansible-collections/community.general/pull/9845). diff --git a/changelogs/fragments/9849-nmap_dns_servers.yml b/changelogs/fragments/9849-nmap_dns_servers.yml deleted file mode 100644 index d4b0eef27f..0000000000 --- a/changelogs/fragments/9849-nmap_dns_servers.yml +++ /dev/null @@ -1,3 +0,0 @@ ---- -minor_changes: - - nmap inventory plugin - adds ``dns_servers`` option for specifying DNS servers for name resolution. Accepts hostnames or IP addresses in the same format as the ``exclude`` option (https://github.com/ansible-collections/community.general/pull/9849). diff --git a/changelogs/fragments/9880-nmcli-fix-reorder-same-dns-nameservers-search-suffixes.yml b/changelogs/fragments/9880-nmcli-fix-reorder-same-dns-nameservers-search-suffixes.yml deleted file mode 100644 index cefa79f387..0000000000 --- a/changelogs/fragments/9880-nmcli-fix-reorder-same-dns-nameservers-search-suffixes.yml +++ /dev/null @@ -1,2 +0,0 @@ -bugfixes: - - "nmcli - enable changing only the order of DNS servers or search suffixes (https://github.com/ansible-collections/community.general/issues/8724, https://github.com/ansible-collections/community.general/pull/9880)." diff --git a/changelogs/fragments/9882-fix-payload-to-match-rocketchat-740-requirement.yml b/changelogs/fragments/9882-fix-payload-to-match-rocketchat-740-requirement.yml deleted file mode 100644 index 8d3c76d963..0000000000 --- a/changelogs/fragments/9882-fix-payload-to-match-rocketchat-740-requirement.yml +++ /dev/null @@ -1,2 +0,0 @@ -minor_changes: - - rocketchat - option ``is_pre740`` has been added to control the format of the payload. For Rocket.Chat 7.4.0 or newer, it must be set to ``false`` (https://github.com/ansible-collections/community.general/pull/9882). diff --git a/changelogs/fragments/9891-systemd_info-add_timer.yml b/changelogs/fragments/9891-systemd_info-add_timer.yml deleted file mode 100644 index e6239c0dfa..0000000000 --- a/changelogs/fragments/9891-systemd_info-add_timer.yml +++ /dev/null @@ -1,2 +0,0 @@ -minor_changes: - - systemd_info - extend support to timer units (https://github.com/ansible-collections/community.general/pull/9891). \ No newline at end of file diff --git a/changelogs/fragments/9892-vmadm-add-new-options.yml b/changelogs/fragments/9892-vmadm-add-new-options.yml deleted file mode 100644 index 0e2be951d8..0000000000 --- a/changelogs/fragments/9892-vmadm-add-new-options.yml +++ /dev/null @@ -1,2 +0,0 @@ -minor_changes: - - vmadm - add new options ``flexible_disk_size`` and ``owner_uuid`` (https://github.com/ansible-collections/community.general/pull/9892). diff --git a/changelogs/fragments/9893-cmdrunner-as-fixed-args.yml b/changelogs/fragments/9893-cmdrunner-as-fixed-args.yml deleted file mode 100644 index 109b552385..0000000000 --- a/changelogs/fragments/9893-cmdrunner-as-fixed-args.yml +++ /dev/null @@ -1,2 +0,0 @@ -minor_changes: - - CmdRunner module utils - the convenience method ``cmd_runner_fmt.as_fixed()`` now accepts multiple arguments as a list (https://github.com/ansible-collections/community.general/pull/9893). diff --git a/changelogs/fragments/9898-keycloak_user-supports-subgroups.yaml b/changelogs/fragments/9898-keycloak_user-supports-subgroups.yaml deleted file mode 100644 index 092ba686e5..0000000000 --- a/changelogs/fragments/9898-keycloak_user-supports-subgroups.yaml +++ /dev/null @@ -1,9 +0,0 @@ -minor_changes: - - keycloak module_utils - user groups can now be referenced by their name, like ``staff``, or their path, like - ``/staff/engineering``. - The path syntax allows users to reference subgroups, which is not possible otherwise - (https://github.com/ansible-collections/community.general/pull/9898). - - keycloak_user module - user groups can now be referenced by their name, like ``staff``, or their path, like - ``/staff/engineering``. - The path syntax allows users to reference subgroups, which is not possible otherwise - (https://github.com/ansible-collections/community.general/pull/9898). diff --git a/changelogs/fragments/9950-pacman_key-verify-key-validity.yml b/changelogs/fragments/9950-pacman_key-verify-key-validity.yml deleted file mode 100644 index 7a0568c05a..0000000000 --- a/changelogs/fragments/9950-pacman_key-verify-key-validity.yml +++ /dev/null @@ -1,3 +0,0 @@ ---- -minor_changes: - - pacman_key - support verifying that keys are trusted and not expired (https://github.com/ansible-collections/community.general/issues/9949, https://github.com/ansible-collections/community.general/pull/9950). diff --git a/changelogs/fragments/9951-mod-php-identifier.yml b/changelogs/fragments/9951-mod-php-identifier.yml deleted file mode 100644 index 29d88091db..0000000000 --- a/changelogs/fragments/9951-mod-php-identifier.yml +++ /dev/null @@ -1,2 +0,0 @@ -minor_changes: - - apache2_module - added workaround for new PHP module name, from ``php7_module`` to ``php_module`` (https://github.com/ansible-collections/community.general/pull/9951). diff --git a/changelogs/fragments/9953-gitlab-project-members-support-owner-level.yml b/changelogs/fragments/9953-gitlab-project-members-support-owner-level.yml deleted file mode 100644 index 64cde71053..0000000000 --- a/changelogs/fragments/9953-gitlab-project-members-support-owner-level.yml +++ /dev/null @@ -1,2 +0,0 @@ -minor_changes: - - gitlab_project_members - extend choices parameter ``access_level`` by missing upstream valid value ``owner`` (https://github.com/ansible-collections/community.general/pull/9953). diff --git a/changelogs/fragments/9959-update-opennebula-onevm-updateconf-params.yml b/changelogs/fragments/9959-update-opennebula-onevm-updateconf-params.yml deleted file mode 100644 index db3484ef08..0000000000 --- a/changelogs/fragments/9959-update-opennebula-onevm-updateconf-params.yml +++ /dev/null @@ -1,14 +0,0 @@ -minor_changes: - - | - one_vm - update allowed values for ``updateconf`` to include new parameters as per the latest OpenNebula API documentation. - Added parameters: - - * ``OS``: ``FIRMWARE``; - * ``CPU_MODEL``: ``MODEL``, ``FEATURES``; - * ``FEATURES``: ``VIRTIO_BLK_QUEUES``, ``VIRTIO_SCSI_QUEUES``, ``IOTHREADS``; - * ``GRAPHICS``: ``PORT``, ``COMMAND``; - * ``VIDEO``: ``ATS``, ``IOMMU``, ``RESOLUTION``, ``TYPE``, ``VRAM``; - * ``RAW``: ``VALIDATE``; - * ``BACKUP_CONFIG``: ``FS_FREEZE``, ``KEEP_LAST``, ``BACKUP_VOLATILE``, ``MODE``, ``INCREMENT_MODE``. - - (https://github.com/ansible-collections/community.general/pull/9959). \ No newline at end of file diff --git a/changelogs/fragments/9960-gitlab_project-add-build_timeout-option.yml b/changelogs/fragments/9960-gitlab_project-add-build_timeout-option.yml deleted file mode 100644 index 4178484509..0000000000 --- a/changelogs/fragments/9960-gitlab_project-add-build_timeout-option.yml +++ /dev/null @@ -1,2 +0,0 @@ -minor_changes: - - gitlab_project - add option ``build_timeout`` (https://github.com/ansible-collections/community.general/pull/9960). diff --git a/changelogs/fragments/9962-nmcli-add-infiniband-mac-support.yml b/changelogs/fragments/9962-nmcli-add-infiniband-mac-support.yml deleted file mode 100644 index 0942788868..0000000000 --- a/changelogs/fragments/9962-nmcli-add-infiniband-mac-support.yml +++ /dev/null @@ -1,2 +0,0 @@ -minor_changes: - - nmcli - add support for Infiniband MAC setting when ``type`` is ``infiniband`` (https://github.com/ansible-collections/community.general/pull/9962). diff --git a/changelogs/fragments/9964-redfish-tls.yml b/changelogs/fragments/9964-redfish-tls.yml deleted file mode 100644 index edb8e942ff..0000000000 --- a/changelogs/fragments/9964-redfish-tls.yml +++ /dev/null @@ -1,7 +0,0 @@ -minor_changes: - - "redfish module utils - add ``REDFISH_COMMON_ARGUMENT_SPEC``, a corresponding ``redfish`` docs fragment, and support for its ``validate_certs``, ``ca_path``, and ``ciphers`` options (https://github.com/ansible-collections/community.general/issues/3686, https://github.com/ansible-collections/community.general/pull/9964)." - - "idrac_redfish_command, idrac_redfish_config, idrac_redfish_info - add ``validate_certs``, ``ca_path``, and ``ciphers`` options to configure TLS/SSL (https://github.com/ansible-collections/community.general/issues/3686, https://github.com/ansible-collections/community.general/pull/9964)." - - "ilo_redfish_command, ilo_redfish_config, ilo_redfish_info - add ``validate_certs``, ``ca_path``, and ``ciphers`` options to configure TLS/SSL (https://github.com/ansible-collections/community.general/issues/3686, https://github.com/ansible-collections/community.general/pull/9964)." - - "redfish_command, redfish_config, redfish_info - add ``validate_certs`` and ``ca_path`` options to configure TLS/SSL (https://github.com/ansible-collections/community.general/issues/3686, https://github.com/ansible-collections/community.general/pull/9964)." - - "wdc_redfish_command, wdc_redfish_info - add ``validate_certs``, ``ca_path``, and ``ciphers`` options to configure TLS/SSL (https://github.com/ansible-collections/community.general/issues/3686, https://github.com/ansible-collections/community.general/pull/9964)." - - "xcc_redfish_command - add ``validate_certs``, ``ca_path``, and ``ciphers`` options to configure TLS/SSL (https://github.com/ansible-collections/community.general/issues/3686, https://github.com/ansible-collections/community.general/pull/9964)." diff --git a/changelogs/fragments/9965-fix-duplicate-jsonify-payload-for-rocketchat-pre740.yml b/changelogs/fragments/9965-fix-duplicate-jsonify-payload-for-rocketchat-pre740.yml deleted file mode 100644 index 3364b4acc8..0000000000 --- a/changelogs/fragments/9965-fix-duplicate-jsonify-payload-for-rocketchat-pre740.yml +++ /dev/null @@ -1,2 +0,0 @@ -minor_changes: - - rocketchat - fix duplicate JSON conversion for Rocket.Chat < 7.4.0 (https://github.com/ansible-collections/community.general/pull/9965). diff --git a/changelogs/fragments/9970-pkcs12_alias_cert_alias_optional.yml b/changelogs/fragments/9970-pkcs12_alias_cert_alias_optional.yml deleted file mode 100644 index aff7b126c3..0000000000 --- a/changelogs/fragments/9970-pkcs12_alias_cert_alias_optional.yml +++ /dev/null @@ -1,2 +0,0 @@ -bugfixes: - - java_cert - the module no longer fails if the optional parameters ``pkcs12_alias`` and ``cert_alias`` are not provided (https://github.com/ansible-collections/community.general/pull/9970). diff --git a/changelogs/fragments/9972-zypper-skip-post-errors.yml b/changelogs/fragments/9972-zypper-skip-post-errors.yml deleted file mode 100644 index 097ec67df0..0000000000 --- a/changelogs/fragments/9972-zypper-skip-post-errors.yml +++ /dev/null @@ -1,2 +0,0 @@ -minor_changes: - - zypper - adds ``skip_post_errors`` that allows to skip RPM post-install errors (Zypper return code 107) (https://github.com/ansible-collections/community.general/issues/9972). diff --git a/changelogs/fragments/9975-inventory-cobbler-as-rendered.yml b/changelogs/fragments/9975-inventory-cobbler-as-rendered.yml deleted file mode 100644 index d99dd0f27a..0000000000 --- a/changelogs/fragments/9975-inventory-cobbler-as-rendered.yml +++ /dev/null @@ -1,2 +0,0 @@ -minor_changes: - - cobbler inventory plugin - add ``facts_level`` option to allow requesting fully rendered variables for Cobbler systems (https://github.com/ansible-collections/community.general/issues/9419, https://github.com/ansible-collections/community.general/pull/9975). diff --git a/changelogs/fragments/9976-keycloak_client-fix-idempotency-regression.yml b/changelogs/fragments/9976-keycloak_client-fix-idempotency-regression.yml deleted file mode 100644 index 593298d303..0000000000 --- a/changelogs/fragments/9976-keycloak_client-fix-idempotency-regression.yml +++ /dev/null @@ -1,2 +0,0 @@ -bugfixes: - - keycloak_client - fix the idempotency regression by normalizing the Keycloak response for ``after_client`` (https://github.com/ansible-collections/community.general/issues/9905, https://github.com/ansible-collections/community.general/pull/9976). diff --git a/changelogs/fragments/9987-keycloak-auth-flow-fix-config.yaml b/changelogs/fragments/9987-keycloak-auth-flow-fix-config.yaml deleted file mode 100644 index b7df120f4a..0000000000 --- a/changelogs/fragments/9987-keycloak-auth-flow-fix-config.yaml +++ /dev/null @@ -1,2 +0,0 @@ -bugfixes: - - keycloak_authentication - fix authentification config duplication for Keycloak < 26.2.0 (https://github.com/ansible-collections/community.general/pull/9987). \ No newline at end of file diff --git a/changelogs/fragments/9992-filtertypeerror.yml b/changelogs/fragments/9992-filtertypeerror.yml deleted file mode 100644 index ccb2ff8c0c..0000000000 --- a/changelogs/fragments/9992-filtertypeerror.yml +++ /dev/null @@ -1,2 +0,0 @@ -bugfixes: - - "hashids and unicode_normalize filter plugins - avoid deprecated ``AnsibleFilterTypeError`` on ansible-core 2.19 (https://github.com/ansible-collections/community.general/pull/9992)." diff --git a/changelogs/fragments/ansible-core-support.yml b/changelogs/fragments/ansible-core-support.yml deleted file mode 100644 index 295cd6f113..0000000000 --- a/changelogs/fragments/ansible-core-support.yml +++ /dev/null @@ -1,8 +0,0 @@ -removed_features: - - "Dropped support for ansible-core 2.15. The collection now requires ansible-core 2.16 or newer. This means that on the controller, Python 3.10+ is required. On the target side, Python 2.7 and Python 3.6+ are supported (https://github.com/ansible-collections/community.general/pull/10160, https://github.com/ansible-collections/community.general/pull/10192)." -minor_changes: - - "cartesian lookup plugin - removed compatibility code for ansible-core < 2.14 (https://github.com/ansible-collections/community.general/pull/10160)." - - "dependent lookup plugin - removed compatibility code for ansible-core < 2.14 (https://github.com/ansible-collections/community.general/pull/10160)." - - "flattened lookup plugin - removed compatibility code for ansible-core < 2.14 (https://github.com/ansible-collections/community.general/pull/10160)." - - "redfish module utils - removed compatibility code for ansible-core < 2.14 (https://github.com/ansible-collections/community.general/pull/10160)." - - "maven_artifact - removed compatibility code for ansible-core < 2.12 (https://github.com/ansible-collections/community.general/pull/10192)." diff --git a/changelogs/fragments/deprecations.yml b/changelogs/fragments/deprecations.yml deleted file mode 100644 index a848bf1e75..0000000000 --- a/changelogs/fragments/deprecations.yml +++ /dev/null @@ -1,17 +0,0 @@ -removed_features: - - "stackpath_compute inventory plugin - the plugin was removed since the company and the service were sunset in June 2024 (https://github.com/ansible-collections/community.general/pull/10126)." - - "manifold lookup plugin - the plugin was removed since the company was acquired in 2021 and service was ceased afterwards (https://github.com/ansible-collections/community.general/pull/10126)." - - "clc_* modules and doc fragment - the modules were removed since CenturyLink Cloud services went EOL in September 2023 (https://github.com/ansible-collections/community.general/pull/10126)." - - "hipchat - the module was removed since the hipchat service has been discontinued and the self-hosted variant has been End of Life since 2020 (https://github.com/ansible-collections/community.general/pull/10126)." - - "profitbrick* modules - the modules were removed since the supporting library is unsupported since 2021 (https://github.com/ansible-collections/community.general/pull/10126)." - - "redfish_utils module utils - the ``_init_session`` method has been removed (https://github.com/ansible-collections/community.general/pull/10126)." - - "django_manage - the ``ack_venv_creation_deprecation`` option has been removed. It had no effect anymore anyway (https://github.com/ansible-collections/community.general/pull/10126)." - - "apt_rpm - the ``present`` and ``installed`` states are no longer equivalent to ``latest``, but to ``present_not_latest`` (https://github.com/ansible-collections/community.general/pull/10126)." - - "git_config - it is no longer allowed to use ``state=present`` with no value to read the config value. Use the ``community.general.git_config_info`` module instead (https://github.com/ansible-collections/community.general/pull/10126)." - - "git_config - the ``list_all`` option has been removed. Use the ``community.general.git_config_info`` module instead (https://github.com/ansible-collections/community.general/pull/10126)." - - "mh.mixins.deps module utils - this module utils has been removed. Use the ``deps`` module utils instead (https://github.com/ansible-collections/community.general/pull/10126)." - - "mh.mixins.vars module utils - this module utils has been removed. Use ``VarDict`` from the ``vardict`` module utils instead (https://github.com/ansible-collections/community.general/pull/10126)." - - "mh.module_helper module utils - ``VarDict`` is now imported from the ``vardict`` module utils and no longer from the removed ``mh.mixins.vars`` module utils (https://github.com/ansible-collections/community.general/pull/10126)." - - "mh.module_helper module utils - ``AnsibleModule`` and ``VarsMixin`` are no longer provided (https://github.com/ansible-collections/community.general/pull/10126)." - - "mh.module_helper module utils - the attributes ``use_old_vardict`` and ``mute_vardict_deprecation`` from ``ModuleHelper`` have been removed. We suggest to remove them from your modules if you no longer support community.general < 11.0.0 (https://github.com/ansible-collections/community.general/pull/10126)." - - "module_helper module utils - ``StateMixin``, ``DependencyCtxMgr``, ``VarMeta``, ``VarDict``, and ``VarsMixin`` are no longer provided (https://github.com/ansible-collections/community.general/pull/10126)." diff --git a/changelogs/fragments/dnf_versionlock.yml b/changelogs/fragments/dnf_versionlock.yml deleted file mode 100644 index 35a53ff134..0000000000 --- a/changelogs/fragments/dnf_versionlock.yml +++ /dev/null @@ -1,3 +0,0 @@ ---- -bugfixes: - - dnf_versionlock - add support for dnf5 (https://github.com/ansible-collections/community.general/issues/9556). diff --git a/changelogs/fragments/homebrew_cask.yml b/changelogs/fragments/homebrew_cask.yml deleted file mode 100644 index 623a982455..0000000000 --- a/changelogs/fragments/homebrew_cask.yml +++ /dev/null @@ -1,3 +0,0 @@ ---- -bugfixes: - - homebrew_cask - handle unusual brew version strings (https://github.com/ansible-collections/community.general/issues/8432, https://github.com/ansible-collections/community.general/pull/9881). diff --git a/changelogs/fragments/proxmox-removal.yml b/changelogs/fragments/proxmox-removal.yml deleted file mode 100644 index 11affae252..0000000000 --- a/changelogs/fragments/proxmox-removal.yml +++ /dev/null @@ -1,7 +0,0 @@ -removed_features: - - "The Proxmox content (modules and plugins) has been moved to the `new collection community.proxmox `__. - Since community.general 11.0.0, these modules and plugins have been replaced by deprecated redirections to community.proxmox. - You need to explicitly install community.proxmox, for example with ``ansible-galaxy collection install community.proxmox``, - or by installing a new enough version of the Ansible community package. - We suggest to update your roles and playbooks to use the new FQCNs as soon as possible to avoid getting deprecation messages - (https://github.com/ansible-collections/community.general/pull/10110)." diff --git a/changelogs/fragments/ssh_config_add_dynamicforward_option.yml b/changelogs/fragments/ssh_config_add_dynamicforward_option.yml deleted file mode 100644 index 0252c94c46..0000000000 --- a/changelogs/fragments/ssh_config_add_dynamicforward_option.yml +++ /dev/null @@ -1,2 +0,0 @@ -minor_changes: - - ssh_config - add ``dynamicforward`` option (https://github.com/ansible-collections/community.general/pull/9192). \ No newline at end of file diff --git a/changelogs/fragments/ssh_config_add_other_options.yml b/changelogs/fragments/ssh_config_add_other_options.yml deleted file mode 100644 index 032bd2c073..0000000000 --- a/changelogs/fragments/ssh_config_add_other_options.yml +++ /dev/null @@ -1,2 +0,0 @@ -minor_changes: - - ssh_config - add ``other_options`` option (https://github.com/ansible-collections/community.general/issues/8053, https://github.com/ansible-collections/community.general/pull/9684). \ No newline at end of file diff --git a/changelogs/fragments/sudoers.yml b/changelogs/fragments/sudoers.yml deleted file mode 100644 index f16a007de9..0000000000 --- a/changelogs/fragments/sudoers.yml +++ /dev/null @@ -1,3 +0,0 @@ ---- -bugfixes: - - sudoers - display stdout and stderr raised while failed validation (https://github.com/ansible-collections/community.general/issues/9674, https://github.com/ansible-collections/community.general/pull/9871). diff --git a/docs/docsite/extra-docs.yml b/docs/docsite/extra-docs.yml index 156e93309d..4594ab4c2d 100644 --- a/docs/docsite/extra-docs.yml +++ b/docs/docsite/extra-docs.yml @@ -8,9 +8,10 @@ sections: toctree: - filter_guide - test_guide - - title: Cloud Guides + - title: Technology Guides toctree: - guide_alicloud + - guide_iocage - guide_online - guide_packet - guide_scaleway diff --git a/docs/docsite/rst/filter_guide.rst b/docs/docsite/rst/filter_guide.rst index 1c6468ddec..da8a90af3c 100644 --- a/docs/docsite/rst/filter_guide.rst +++ b/docs/docsite/rst/filter_guide.rst @@ -8,7 +8,7 @@ community.general Filter Guide ============================== -The :ref:`community.general collection ` offers several useful filter plugins. +The :anscollection:`community.general collection ` offers several useful filter plugins. .. toctree:: :maxdepth: 2 diff --git a/docs/docsite/rst/guide_iocage.rst b/docs/docsite/rst/guide_iocage.rst new file mode 100644 index 0000000000..67eb0e8a99 --- /dev/null +++ b/docs/docsite/rst/guide_iocage.rst @@ -0,0 +1,15 @@ +.. + Copyright (c) Ansible Project + GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt) + SPDX-License-Identifier: GPL-3.0-or-later + +.. _ansible_collections.community.general.docsite.guide_iocage: + +************ +Iocage Guide +************ + +.. toctree:: + :maxdepth: 1 + + guide_iocage_inventory diff --git a/docs/docsite/rst/guide_iocage_inventory.rst b/docs/docsite/rst/guide_iocage_inventory.rst new file mode 100644 index 0000000000..4a410c35db --- /dev/null +++ b/docs/docsite/rst/guide_iocage_inventory.rst @@ -0,0 +1,31 @@ +.. + Copyright (c) Ansible Project + GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt) + SPDX-License-Identifier: GPL-3.0-or-later + +.. _ansible_collections.community.general.docsite.guide_iocage.guide_iocage_inventory: + +community.general.iocage inventory plugin +========================================= + +The inventory plugin :ansplugin:`community.general.iocage#inventory` gets the inventory hosts from the iocage jail manager. + +See: + +* `iocage - A FreeBSD Jail Manager `_ +* `man iocage `_ +* `Jails and Containers `_ + +.. note:: + The output of the examples is YAML formatted. See the option :ansopt:`ansible.builtin.default#callback:result_format`. + +.. toctree:: + :caption: Table of Contents + :maxdepth: 1 + + guide_iocage_inventory_basics + guide_iocage_inventory_dhcp + guide_iocage_inventory_hooks + guide_iocage_inventory_properties + guide_iocage_inventory_tags + guide_iocage_inventory_aliases diff --git a/docs/docsite/rst/guide_iocage_inventory_aliases.rst b/docs/docsite/rst/guide_iocage_inventory_aliases.rst new file mode 100644 index 0000000000..431403d733 --- /dev/null +++ b/docs/docsite/rst/guide_iocage_inventory_aliases.rst @@ -0,0 +1,200 @@ +.. + Copyright (c) Ansible Project + GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt) + SPDX-License-Identifier: GPL-3.0-or-later + +.. _ansible_collections.community.general.docsite.guide_iocage.guide_iocage_inventory.guide_iocage_inventory_aliases: + +Aliases +------- + +Quoting :ref:`inventory_aliases`: + + The ``inventory_hostname`` is the unique identifier for a host in Ansible, this can be an IP or a hostname, but also just an 'alias' or short name for the host. + +As root at the iocage host, stop and destroy all jails: + +.. code-block:: console + + shell> iocage stop ALL + * Stopping srv_1 + + Executing prestop OK + + Stopping services OK + + Tearing down VNET OK + + Removing devfs_ruleset: 1000 OK + + Removing jail process OK + + Executing poststop OK + * Stopping srv_2 + + Executing prestop OK + + Stopping services OK + + Tearing down VNET OK + + Removing devfs_ruleset: 1001 OK + + Removing jail process OK + + Executing poststop OK + * Stopping srv_3 + + Executing prestop OK + + Stopping services OK + + Tearing down VNET OK + + Removing devfs_ruleset: 1002 OK + + Removing jail process OK + + Executing poststop OK + ansible_client is not running! + + shell> iocage destroy -f srv_1 srv_2 srv_3 + Destroying srv_1 + Destroying srv_2 + Destroying srv_3 + +Create three VNET jails with a DHCP interface from the template *ansible_client*. Use the option ``--count``: + +.. code-block:: console + + shell> iocage create --short --template ansible_client --count 3 bpf=1 dhcp=1 vnet=1 + 1c11de2d successfully created! + 9d94cc9e successfully created! + 052b9557 successfully created! + +The names are random. Start the jails: + +.. code-block:: console + + shell> iocage start ALL + No default gateway found for ipv6. + * Starting 052b9557 + + Started OK + + Using devfs_ruleset: 1000 (iocage generated default) + + Configuring VNET OK + + Using IP options: vnet + + Starting services OK + + Executing poststart OK + + DHCP Address: 10.1.0.137/24 + No default gateway found for ipv6. + * Starting 1c11de2d + + Started OK + + Using devfs_ruleset: 1001 (iocage generated default) + + Configuring VNET OK + + Using IP options: vnet + + Starting services OK + + Executing poststart OK + + DHCP Address: 10.1.0.146/24 + No default gateway found for ipv6. + * Starting 9d94cc9e + + Started OK + + Using devfs_ruleset: 1002 (iocage generated default) + + Configuring VNET OK + + Using IP options: vnet + + Starting services OK + + Executing poststart OK + + DHCP Address: 10.1.0.115/24 + Please convert back to a jail before trying to start ansible_client + +List the jails: + +.. code-block:: console + + shell> iocage list -l + +-----+----------+------+-------+------+-----------------+--------------------+-----+----------------+----------+ + | JID | NAME | BOOT | STATE | TYPE | RELEASE | IP4 | IP6 | TEMPLATE | BASEJAIL | + +=====+==========+======+=======+======+=================+====================+=====+================+==========+ + | 207 | 052b9557 | off | up | jail | 14.2-RELEASE-p3 | epair0b|10.1.0.137 | - | ansible_client | no | + +-----+----------+------+-------+------+-----------------+--------------------+-----+----------------+----------+ + | 208 | 1c11de2d | off | up | jail | 14.2-RELEASE-p3 | epair0b|10.1.0.146 | - | ansible_client | no | + +-----+----------+------+-------+------+-----------------+--------------------+-----+----------------+----------+ + | 209 | 9d94cc9e | off | up | jail | 14.2-RELEASE-p3 | epair0b|10.1.0.115 | - | ansible_client | no | + +-----+----------+------+-------+------+-----------------+--------------------+-----+----------------+----------+ + +Set notes. The tag *alias* will be used to create inventory aliases: + +.. code-block:: console + + shell> iocage set notes="vmm=iocage_02 project=foo alias=srv_1" 052b9557 + notes: none -> vmm=iocage_02 project=foo alias=srv_1 + shell> iocage set notes="vmm=iocage_02 project=foo alias=srv_2" 1c11de2d + notes: none -> vmm=iocage_02 project=foo alias=srv_2 + shell> iocage set notes="vmm=iocage_02 project=bar alias=srv_3" 9d94cc9e + notes: none -> vmm=iocage_02 project=bar alias=srv_3 + +Update the inventory configuration. Set the option +:ansopt:`community.general.iocage#inventory:inventory_hostname_tag` to :ansval:`alias`. This tag keeps the +value of the alias. The option :ansopt:`community.general.iocage#inventory:get_properties` must be +enabled. For example, ``hosts/02_iocage.yml`` contains: + +.. code-block:: yaml + + plugin: community.general.iocage + host: 10.1.0.73 + user: admin + get_properties: true + inventory_hostname_tag: alias + hooks_results: + - /var/db/dhclient-hook.address.epair0b + compose: + ansible_host: (iocage_hooks.0 == '-') | ternary(iocage_ip4, iocage_hooks.0) + iocage_tags: dict(iocage_properties.notes | split | map('split', '=')) + keyed_groups: + - prefix: vmm + key: iocage_tags.vmm + - prefix: project + key: iocage_tags.project + +Display tags and groups. Create a playbook ``pb-test-groups.yml`` with the following content: + +.. code-block:: yaml+jinja + + - hosts: all + remote_user: admin + + vars: + + ansible_python_interpreter: auto_silent + + tasks: + + - debug: + var: iocage_tags + + - debug: + msg: | + {% for group in groups %} + {{ group }}: {{ groups[group] }} + {% endfor %} + run_once: true + +Run the playbook: + +.. code-block:: console + + shell> ansible-playbook -i hosts/02_iocage.yml pb-test-groups.yml + + PLAY [all] ********************************************************************************************************** + + TASK [debug] ******************************************************************************************************** + ok: [srv_1] => + iocage_tags: + alias: srv_1 + project: foo + vmm: iocage_02 + ok: [srv_2] => + iocage_tags: + alias: srv_2 + project: foo + vmm: iocage_02 + ok: [srv_3] => + iocage_tags: + alias: srv_3 + project: bar + vmm: iocage_02 + + TASK [debug] ******************************************************************************************************** + ok: [srv_1] => + msg: |- + all: ['srv_1', 'srv_2', 'srv_3'] + ungrouped: [] + vmm_iocage_02: ['srv_1', 'srv_2', 'srv_3'] + project_foo: ['srv_1', 'srv_2'] + project_bar: ['srv_3'] + + PLAY RECAP ********************************************************************************************************** + srv_1 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 + srv_2 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 + srv_3 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 diff --git a/docs/docsite/rst/guide_iocage_inventory_basics.rst b/docs/docsite/rst/guide_iocage_inventory_basics.rst new file mode 100644 index 0000000000..f198edc4f4 --- /dev/null +++ b/docs/docsite/rst/guide_iocage_inventory_basics.rst @@ -0,0 +1,128 @@ +.. + Copyright (c) Ansible Project + GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt) + SPDX-License-Identifier: GPL-3.0-or-later + +.. _ansible_collections.community.general.docsite.guide_iocage.guide_iocage_inventory.guide_iocage_inventory_basics: + +Basics +------ + +As root at the iocage host, create three VNET jails with a DHCP interface from the template +*ansible_client*: + +.. code-block:: console + + shell> iocage create --template ansible_client --name srv_1 bpf=1 dhcp=1 vnet=1 + srv_1 successfully created! + shell> iocage create --template ansible_client --name srv_2 bpf=1 dhcp=1 vnet=1 + srv_2 successfully created! + shell> iocage create --template ansible_client --name srv_3 bpf=1 dhcp=1 vnet=1 + srv_3 successfully created! + +See: `Configuring a VNET Jail `_. + +As admin at the controller, list the jails: + +.. code-block:: console + + shell> ssh admin@10.1.0.73 iocage list -l + +------+-------+------+-------+------+-----------------+--------------------+-----+----------------+----------+ + | JID | NAME | BOOT | STATE | TYPE | RELEASE | IP4 | IP6 | TEMPLATE | BASEJAIL | + +======+=======+======+=======+======+=================+====================+=====+================+==========+ + | None | srv_1 | off | down | jail | 14.2-RELEASE-p3 | DHCP (not running) | - | ansible_client | no | + +------+-------+------+-------+------+-----------------+--------------------+-----+----------------+----------+ + | None | srv_2 | off | down | jail | 14.2-RELEASE-p3 | DHCP (not running) | - | ansible_client | no | + +------+-------+------+-------+------+-----------------+--------------------+-----+----------------+----------+ + | None | srv_3 | off | down | jail | 14.2-RELEASE-p3 | DHCP (not running) | - | ansible_client | no | + +------+-------+------+-------+------+-----------------+--------------------+-----+----------------+----------+ + +Create the inventory file ``hosts/02_iocage.yml`` + +.. code-block:: yaml + + plugin: community.general.iocage + host: 10.1.0.73 + user: admin + +Display the inventory: + +.. code-block:: console + + shell> ansible-inventory -i hosts/02_iocage.yml --list --yaml + all: + children: + ungrouped: + hosts: + srv_1: + iocage_basejail: 'no' + iocage_boot: 'off' + iocage_ip4: '-' + iocage_ip4_dict: + ip4: [] + msg: DHCP (not running) + iocage_ip6: '-' + iocage_jid: None + iocage_release: 14.2-RELEASE-p3 + iocage_state: down + iocage_template: ansible_client + iocage_type: jail + srv_2: + iocage_basejail: 'no' + iocage_boot: 'off' + iocage_ip4: '-' + iocage_ip4_dict: + ip4: [] + msg: DHCP (not running) + iocage_ip6: '-' + iocage_jid: None + iocage_release: 14.2-RELEASE-p3 + iocage_state: down + iocage_template: ansible_client + iocage_type: jail + srv_3: + iocage_basejail: 'no' + iocage_boot: 'off' + iocage_ip4: '-' + iocage_ip4_dict: + ip4: [] + msg: DHCP (not running) + iocage_ip6: '-' + iocage_jid: None + iocage_release: 14.2-RELEASE-p3 + iocage_state: down + iocage_template: ansible_client + iocage_type: jail + +Optionally, create shared IP jails: + +.. code-block:: console + + shell> iocage create --template ansible_client --name srv_1 ip4_addr="em0|10.1.0.101/24" + srv_1 successfully created! + shell> iocage create --template ansible_client --name srv_2 ip4_addr="em0|10.1.0.102/24" + srv_2 successfully created! + shell> iocage create --template ansible_client --name srv_3 ip4_addr="em0|10.1.0.103/24" + srv_3 successfully created! + shell> iocage list -l + +------+-------+------+-------+------+-----------------+-------------------+-----+----------------+----------+ + | JID | NAME | BOOT | STATE | TYPE | RELEASE | IP4 | IP6 | TEMPLATE | BASEJAIL | + +======+=======+======+=======+======+=================+===================+=====+================+==========+ + | None | srv_1 | off | down | jail | 14.2-RELEASE-p3 | em0|10.1.0.101/24 | - | ansible_client | no | + +------+-------+------+-------+------+-----------------+-------------------+-----+----------------+----------+ + | None | srv_2 | off | down | jail | 14.2-RELEASE-p3 | em0|10.1.0.102/24 | - | ansible_client | no | + +------+-------+------+-------+------+-----------------+-------------------+-----+----------------+----------+ + | None | srv_3 | off | down | jail | 14.2-RELEASE-p3 | em0|10.1.0.103/24 | - | ansible_client | no | + +------+-------+------+-------+------+-----------------+-------------------+-----+----------------+----------+ + +See: `Configuring a Shared IP Jail `_ + +If iocage needs environment variable(s), use the option :ansopt:`community.general.iocage#inventory:env`. For example, + +.. code-block:: yaml + + plugin: community.general.iocage + host: 10.1.0.73 + user: admin + env: + CRYPTOGRAPHY_OPENSSL_NO_LEGACY: 1 diff --git a/docs/docsite/rst/guide_iocage_inventory_dhcp.rst b/docs/docsite/rst/guide_iocage_inventory_dhcp.rst new file mode 100644 index 0000000000..3c37366ca6 --- /dev/null +++ b/docs/docsite/rst/guide_iocage_inventory_dhcp.rst @@ -0,0 +1,175 @@ +.. + Copyright (c) Ansible Project + GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt) + SPDX-License-Identifier: GPL-3.0-or-later + +.. _ansible_collections.community.general.docsite.guide_iocage.guide_iocage_inventory.guide_iocage_inventory_dhcp: + +DHCP +---- + +As root at the iocage host, start the jails: + +.. code-block:: console + + shell> iocage start ALL + No default gateway found for ipv6. + * Starting srv_1 + + Started OK + + Using devfs_ruleset: 1000 (iocage generated default) + + Configuring VNET OK + + Using IP options: vnet + + Starting services OK + + Executing poststart OK + + DHCP Address: 10.1.0.183/24 + No default gateway found for ipv6. + * Starting srv_2 + + Started OK + + Using devfs_ruleset: 1001 (iocage generated default) + + Configuring VNET OK + + Using IP options: vnet + + Starting services OK + + Executing poststart OK + + DHCP Address: 10.1.0.204/24 + No default gateway found for ipv6. + * Starting srv_3 + + Started OK + + Using devfs_ruleset: 1002 (iocage generated default) + + Configuring VNET OK + + Using IP options: vnet + + Starting services OK + + Executing poststart OK + + DHCP Address: 10.1.0.169/24 + Please convert back to a jail before trying to start ansible_client + +List the jails: + +.. code-block:: console + + shell> iocage list -l + +-----+-------+------+-------+------+-----------------+--------------------+-----+----------------+----------+ + | JID | NAME | BOOT | STATE | TYPE | RELEASE | IP4 | IP6 | TEMPLATE | BASEJAIL | + +=====+=======+======+=======+======+=================+====================+=====+================+==========+ + | 204 | srv_1 | off | up | jail | 14.2-RELEASE-p3 | epair0b|10.1.0.183 | - | ansible_client | no | + +-----+-------+------+-------+------+-----------------+--------------------+-----+----------------+----------+ + | 205 | srv_2 | off | up | jail | 14.2-RELEASE-p3 | epair0b|10.1.0.204 | - | ansible_client | no | + +-----+-------+------+-------+------+-----------------+--------------------+-----+----------------+----------+ + | 206 | srv_3 | off | up | jail | 14.2-RELEASE-p3 | epair0b|10.1.0.169 | - | ansible_client | no | + +-----+-------+------+-------+------+-----------------+--------------------+-----+----------------+----------+ + +As admin at the controller, list the jails. The IP4 tab says "... address requires root": + +.. code-block:: console + + shell> ssh admin@10.1.0.73 iocage list -l + +-----+-------+------+-------+------+-----------------+-----------------------------------------+-----+----------------+----------+ + | JID | NAME | BOOT | STATE | TYPE | RELEASE | IP4 | IP6 | TEMPLATE | BASEJAIL | + +=====+=======+======+=======+======+=================+=========================================+=====+================+==========+ + | 204 | srv_1 | off | up | jail | 14.2-RELEASE-p3 | DHCP (running -- address requires root) | - | ansible_client | no | + +-----+-------+------+-------+------+-----------------+-----------------------------------------+-----+----------------+----------+ + | 205 | srv_2 | off | up | jail | 14.2-RELEASE-p3 | DHCP (running -- address requires root) | - | ansible_client | no | + +-----+-------+------+-------+------+-----------------+-----------------------------------------+-----+----------------+----------+ + | 206 | srv_3 | off | up | jail | 14.2-RELEASE-p3 | DHCP (running -- address requires root) | - | ansible_client | no | + +-----+-------+------+-------+------+-----------------+-----------------------------------------+-----+----------------+----------+ + +Use sudo if enabled: + +.. code-block:: console + + shell> ssh admin@10.1.0.73 sudo iocage list -l + +-----+-------+------+-------+------+-----------------+--------------------+-----+----------------+----------+ + | JID | NAME | BOOT | STATE | TYPE | RELEASE | IP4 | IP6 | TEMPLATE | BASEJAIL | + +=====+=======+======+=======+======+=================+====================+=====+================+==========+ + | 204 | srv_1 | off | up | jail | 14.2-RELEASE-p3 | epair0b|10.1.0.183 | - | ansible_client | no | + +-----+-------+------+-------+------+-----------------+--------------------+-----+----------------+----------+ + | 205 | srv_2 | off | up | jail | 14.2-RELEASE-p3 | epair0b|10.1.0.204 | - | ansible_client | no | + +-----+-------+------+-------+------+-----------------+--------------------+-----+----------------+----------+ + | 206 | srv_3 | off | up | jail | 14.2-RELEASE-p3 | epair0b|10.1.0.169 | - | ansible_client | no | + +-----+-------+------+-------+------+-----------------+--------------------+-----+----------------+----------+ + +Create the inventory file ``hosts/02_iocage.yml``. Use the option +:ansopt:`community.general.iocage#inventory:sudo`: + +.. code-block:: yaml + + plugin: community.general.iocage + host: 10.1.0.73 + user: admin + sudo: true + +Display the inventory: + +.. code-block:: console + + shell> ansible-inventory -i hosts/02_iocage.yml --list --yaml + all: + children: + ungrouped: + hosts: + srv_1: + iocage_basejail: 'no' + iocage_boot: 'off' + iocage_ip4: 10.1.0.183 + iocage_ip4_dict: + ip4: + - ifc: epair0b + ip: 10.1.0.183 + mask: '-' + msg: '' + iocage_ip6: '-' + iocage_jid: '204' + iocage_release: 14.2-RELEASE-p3 + iocage_state: up + iocage_template: ansible_client + iocage_type: jail + srv_2: + iocage_basejail: 'no' + iocage_boot: 'off' + iocage_ip4: 10.1.0.204 + iocage_ip4_dict: + ip4: + - ifc: epair0b + ip: 10.1.0.204 + mask: '-' + msg: '' + iocage_ip6: '-' + iocage_jid: '205' + iocage_release: 14.2-RELEASE-p3 + iocage_state: up + iocage_template: ansible_client + iocage_type: jail + srv_3: + iocage_basejail: 'no' + iocage_boot: 'off' + iocage_ip4: 10.1.0.169 + iocage_ip4_dict: + ip4: + - ifc: epair0b + ip: 10.1.0.169 + mask: '-' + msg: '' + iocage_ip6: '-' + iocage_jid: '206' + iocage_release: 14.2-RELEASE-p3 + iocage_state: up + iocage_template: ansible_client + iocage_type: jail + +Note: If the option :ansopt:`community.general.iocage#inventory:env` is used and :ansopt:`community.general.iocage#inventory:sudo` is enabled, enable also :ansopt:`community.general.iocage#inventory:sudo_preserve_env`. For example, + +.. code-block:: yaml + + plugin: community.general.iocage + host: 10.1.0.73 + user: admin + env: + CRYPTOGRAPHY_OPENSSL_NO_LEGACY: 1 + sudo: true + sudo_preserve_env: true + +In this case, make sure the sudo tag ``SETENV`` is used: + +.. code-block:: console + + shell> ssh admin@10.1.0.73 sudo cat /usr/local/etc/sudoers | grep admin + admin ALL=(ALL) NOPASSWD:SETENV: ALL diff --git a/docs/docsite/rst/guide_iocage_inventory_hooks.rst b/docs/docsite/rst/guide_iocage_inventory_hooks.rst new file mode 100644 index 0000000000..45364fc798 --- /dev/null +++ b/docs/docsite/rst/guide_iocage_inventory_hooks.rst @@ -0,0 +1,187 @@ +.. + Copyright (c) Ansible Project + GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt) + SPDX-License-Identifier: GPL-3.0-or-later + +.. _ansible_collections.community.general.docsite.guide_iocage.guide_iocage_inventory.guide_iocage_inventory_hooks: + +Hooks +----- + +The iocage utility internally opens a console to a jail to get the jail's DHCP address. This +requires root. If you run the command ``iocage list -l`` as unprivileged user, you'll see the +message ``DHCP (running -- address requires root)``. If you are not granted the root privilege, use +``/etc/dhclient-exit-hooks``. For example, in the jail *srv_1*, create the file +``/zroot/iocage/jails/srv_1/root/etc/dhclient-exit-hooks`` + +.. code-block:: shell + + case "$reason" in + "BOUND"|"REBIND"|"REBOOT"|"RENEW") + echo $new_ip_address > /var/db/dhclient-hook.address.$interface + ;; + esac + +where ``/zroot/iocage`` is the activated pool. + +.. code-block:: console + + shell> zfs list | grep /zroot/iocage + zroot/iocage 4.69G 446G 5.08M /zroot/iocage + zroot/iocage/download 927M 446G 384K /zroot/iocage/download + zroot/iocage/download/14.1-RELEASE 465M 446G 465M /zroot/iocage/download/14.1-RELEASE + zroot/iocage/download/14.2-RELEASE 462M 446G 462M /zroot/iocage/download/14.2-RELEASE + zroot/iocage/images 384K 446G 384K /zroot/iocage/images + zroot/iocage/jails 189M 446G 480K /zroot/iocage/jails + zroot/iocage/jails/srv_1 62.9M 446G 464K /zroot/iocage/jails/srv_1 + zroot/iocage/jails/srv_1/root 62.4M 446G 3.53G /zroot/iocage/jails/srv_1/root + zroot/iocage/jails/srv_2 62.8M 446G 464K /zroot/iocage/jails/srv_2 + zroot/iocage/jails/srv_2/root 62.3M 446G 3.53G /zroot/iocage/jails/srv_2/root + zroot/iocage/jails/srv_3 62.8M 446G 464K /zroot/iocage/jails/srv_3 + zroot/iocage/jails/srv_3/root 62.3M 446G 3.53G /zroot/iocage/jails/srv_3/root + zroot/iocage/log 688K 446G 688K /zroot/iocage/log + zroot/iocage/releases 2.93G 446G 384K /zroot/iocage/releases + zroot/iocage/releases/14.2-RELEASE 2.93G 446G 384K /zroot/iocage/releases/14.2-RELEASE + zroot/iocage/releases/14.2-RELEASE/root 2.93G 446G 2.88G /zroot/iocage/releases/14.2-RELEASE/root + zroot/iocage/templates 682M 446G 416K /zroot/iocage/templates + zroot/iocage/templates/ansible_client 681M 446G 432K /zroot/iocage/templates/ansible_client + zroot/iocage/templates/ansible_client/root 681M 446G 3.53G /zroot/iocage/templates/ansible_client/root + +See: `man dhclient-script `_ + +Create the inventory configuration. Use the option :ansopt:`community.general.iocage#inventory:hooks_results` instead of :ansopt:`community.general.iocage#inventory:sudo`: + +.. code-block:: console + + shell> cat hosts/02_iocage.yml + +.. code-block:: yaml + + plugin: community.general.iocage + host: 10.1.0.73 + user: admin + hooks_results: + - /var/db/dhclient-hook.address.epair0b + +.. note:: + + The option :ansopt:`community.general.iocage#inventory:hooks_results` expects the poolname to be mounted to ``/poolname``. For example, if you + activate the pool iocage, this plugin expects to find the :ansopt:`community.general.iocage#inventory:hooks_results` items in the path + /iocage/iocage/jails//root. If you mount the poolname to a different path, the easiest + remedy is to create a symlink. + +As admin at the controller, display the inventory: + +.. code-block:: console + + shell> ansible-inventory -i hosts/02_iocage.yml --list --yaml + all: + children: + ungrouped: + hosts: + srv_1: + iocage_basejail: 'no' + iocage_boot: 'off' + iocage_hooks: + - 10.1.0.183 + iocage_ip4: '-' + iocage_ip4_dict: + ip4: [] + msg: DHCP (running -- address requires root) + iocage_ip6: '-' + iocage_jid: '204' + iocage_release: 14.2-RELEASE-p3 + iocage_state: up + iocage_template: ansible_client + iocage_type: jail + srv_2: + iocage_basejail: 'no' + iocage_boot: 'off' + iocage_hooks: + - 10.1.0.204 + iocage_ip4: '-' + iocage_ip4_dict: + ip4: [] + msg: DHCP (running -- address requires root) + iocage_ip6: '-' + iocage_jid: '205' + iocage_release: 14.2-RELEASE-p3 + iocage_state: up + iocage_template: ansible_client + iocage_type: jail + srv_3: + iocage_basejail: 'no' + iocage_boot: 'off' + iocage_hooks: + - 10.1.0.169 + iocage_ip4: '-' + iocage_ip4_dict: + ip4: [] + msg: DHCP (running -- address requires root) + iocage_ip6: '-' + iocage_jid: '206' + iocage_release: 14.2-RELEASE-p3 + iocage_state: up + iocage_template: ansible_client + iocage_type: jail + +Compose the variable ``ansible_host``. For example, ``hosts/02_iocage.yml`` could look like: + +.. code-block:: yaml+jinja + + plugin: community.general.iocage + host: 10.1.0.73 + user: admin + hooks_results: + - /var/db/dhclient-hook.address.epair0b + compose: + ansible_host: (iocage_hooks.0 == '-') | ternary(iocage_ip4, iocage_hooks.0) + +Test the jails. Create a playbook ``pb-test-uname.yml``: + +.. code-block:: yaml + + - hosts: all + remote_user: admin + + vars: + + ansible_python_interpreter: auto_silent + + tasks: + + - command: uname -a + register: out + + - debug: + var: out.stdout + +See: :ref:`working_with_bsd` + +Run the playbook: + +.. code-block:: console + + shell> ansible-playbook -i hosts/02_iocage.yml pb-test-uname.yml + + PLAY [all] ********************************************************************************************************** + + TASK [command] ****************************************************************************************************** + changed: [srv_3] + changed: [srv_1] + changed: [srv_2] + + TASK [debug] ******************************************************************************************************** + ok: [srv_1] => + out.stdout: FreeBSD srv-1 14.2-RELEASE-p1 FreeBSD 14.2-RELEASE-p1 GENERIC amd64 + ok: [srv_3] => + out.stdout: FreeBSD srv-3 14.2-RELEASE-p1 FreeBSD 14.2-RELEASE-p1 GENERIC amd64 + ok: [srv_2] => + out.stdout: FreeBSD srv-2 14.2-RELEASE-p1 FreeBSD 14.2-RELEASE-p1 GENERIC amd64 + + PLAY RECAP ********************************************************************************************************** + srv_1 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 + srv_2 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 + srv_3 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 + +Note: This playbook and the inventory configuration works also for the *Shared IP Jails*. diff --git a/docs/docsite/rst/guide_iocage_inventory_properties.rst b/docs/docsite/rst/guide_iocage_inventory_properties.rst new file mode 100644 index 0000000000..d044f2e7f2 --- /dev/null +++ b/docs/docsite/rst/guide_iocage_inventory_properties.rst @@ -0,0 +1,201 @@ +.. + Copyright (c) Ansible Project + GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt) + SPDX-License-Identifier: GPL-3.0-or-later + +.. _ansible_collections.community.general.docsite.guide_iocage.guide_iocage_inventory.guide_iocage_inventory_properties: + +Properties +---------- + +Optionally, in the inventory file ``hosts/02_iocage.yml``, get the iocage properties. Enable +:ansopt:`community.general.iocage#inventory:get_properties`: + +.. code-block:: yaml+jinja + + plugin: community.general.iocage + host: 10.1.0.73 + user: admin + get_properties: true + hooks_results: + - /var/db/dhclient-hook.address.epair0b + compose: + ansible_host: (iocage_hooks.0 == '-') | ternary(iocage_ip4, iocage_hooks.0) + +Display the properties. Create the playbook ``pb-test-properties.yml``: + +.. code-block:: yaml + + - hosts: all + remote_user: admin + + vars: + + ansible_python_interpreter: auto_silent + + tasks: + + - debug: + var: iocage_properties + +Run the playbook. Limit the inventory to *srv_3*: + +.. code-block:: console + + shell> ansible-playbook -i hosts/02_iocage.yml -l srv_3 pb-test-properties.yml + + PLAY [all] ********************************************************************************************************** + + TASK [debug] ******************************************************************************************************** + ok: [srv_3] => + iocage_properties: + CONFIG_VERSION: '33' + allow_chflags: '0' + allow_mlock: '0' + allow_mount: '1' + allow_mount_devfs: '0' + allow_mount_fdescfs: '0' + allow_mount_fusefs: '0' + allow_mount_linprocfs: '0' + allow_mount_linsysfs: '0' + allow_mount_nullfs: '0' + allow_mount_procfs: '0' + allow_mount_tmpfs: '0' + allow_mount_zfs: '0' + allow_nfsd: '0' + allow_quotas: '0' + allow_raw_sockets: '0' + allow_set_hostname: '1' + allow_socket_af: '0' + allow_sysvipc: '0' + allow_tun: '0' + allow_vmm: '0' + assign_localhost: '0' + available: readonly + basejail: '0' + boot: '0' + bpf: '1' + children_max: '0' + cloned_release: 14.2-RELEASE + comment: none + compression: 'on' + compressratio: readonly + coredumpsize: 'off' + count: '1' + cpuset: 'off' + cputime: 'off' + datasize: 'off' + dedup: 'off' + defaultrouter: auto + defaultrouter6: auto + depends: none + devfs_ruleset: '4' + dhcp: '1' + enforce_statfs: '2' + exec_clean: '1' + exec_created: /usr/bin/true + exec_fib: '0' + exec_jail_user: root + exec_poststart: /usr/bin/true + exec_poststop: /usr/bin/true + exec_prestart: /usr/bin/true + exec_prestop: /usr/bin/true + exec_start: /bin/sh /etc/rc + exec_stop: /bin/sh /etc/rc.shutdown + exec_system_jail_user: '0' + exec_system_user: root + exec_timeout: '60' + host_domainname: none + host_hostname: srv-3 + host_hostuuid: srv_3 + host_time: '1' + hostid: ea2ba7d1-4fcd-f13f-82e4-8b32c0a03403 + hostid_strict_check: '0' + interfaces: vnet0:bridge0 + ip4: new + ip4_addr: none + ip4_saddrsel: '1' + ip6: new + ip6_addr: none + ip6_saddrsel: '1' + ip_hostname: '0' + jail_zfs: '0' + jail_zfs_dataset: iocage/jails/srv_3/data + jail_zfs_mountpoint: none + last_started: '2025-06-11 04:29:23' + localhost_ip: none + login_flags: -f root + mac_prefix: 02a098 + maxproc: 'off' + memorylocked: 'off' + memoryuse: 'off' + min_dyn_devfs_ruleset: '1000' + mount_devfs: '1' + mount_fdescfs: '1' + mount_linprocfs: '0' + mount_procfs: '0' + mountpoint: readonly + msgqqueued: 'off' + msgqsize: 'off' + nat: '0' + nat_backend: ipfw + nat_forwards: none + nat_interface: none + nat_prefix: '172.16' + nmsgq: 'off' + notes: none + nsem: 'off' + nsemop: 'off' + nshm: 'off' + nthr: 'off' + openfiles: 'off' + origin: readonly + owner: root + pcpu: 'off' + plugin_name: none + plugin_repository: none + priority: '99' + pseudoterminals: 'off' + quota: none + readbps: 'off' + readiops: 'off' + release: 14.2-RELEASE-p3 + reservation: none + resolver: /etc/resolv.conf + rlimits: 'off' + rtsold: '0' + securelevel: '2' + shmsize: 'off' + source_template: ansible_client + stacksize: 'off' + state: up + stop_timeout: '30' + swapuse: 'off' + sync_state: none + sync_target: none + sync_tgt_zpool: none + sysvmsg: new + sysvsem: new + sysvshm: new + template: '0' + type: jail + used: readonly + vmemoryuse: 'off' + vnet: '1' + vnet0_mac: 02a0983da05d 02a0983da05e + vnet0_mtu: auto + vnet1_mac: none + vnet1_mtu: auto + vnet2_mac: none + vnet2_mtu: auto + vnet3_mac: none + vnet3_mtu: auto + vnet_default_interface: auto + vnet_default_mtu: '1500' + vnet_interfaces: none + wallclock: 'off' + writebps: 'off' + writeiops: 'off' + + PLAY RECAP ********************************************************************************************************** + srv_3 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 diff --git a/docs/docsite/rst/guide_iocage_inventory_tags.rst b/docs/docsite/rst/guide_iocage_inventory_tags.rst new file mode 100644 index 0000000000..afb645198c --- /dev/null +++ b/docs/docsite/rst/guide_iocage_inventory_tags.rst @@ -0,0 +1,117 @@ +.. + Copyright (c) Ansible Project + GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt) + SPDX-License-Identifier: GPL-3.0-or-later + +.. _ansible_collections.community.general.docsite.guide_iocage.guide_iocage_inventory.guide_iocage_inventory_tags: + +Tags +---- + +Quoting `man iocage `_ + +.. code-block:: text + + PROPERTIES + ... + notes="any string" + Custom notes for miscellaneous tagging. + Default: none + Source: local + +We will use the format `notes="tag1=value1 tag2=value2 ..."`. + +.. note:: + + The iocage tags have nothing to do with the :ref:`tags`. + +As root at the iocage host, set notes. For example, + +.. code-block:: console + + shell> iocage set notes="vmm=iocage_02 project=foo" srv_1 + notes: none -> vmm=iocage_02 project=foo + shell> iocage set notes="vmm=iocage_02 project=foo" srv_2 + notes: none -> vmm=iocage_02 project=foo + shell> iocage set notes="vmm=iocage_02 project=bar" srv_3 + notes: none -> vmm=iocage_02 project=bar + +Update the inventory configuration. Compose a dictionary *iocage_tags* and create groups. The option +:ansopt:`community.general.iocage#inventory:get_properties` must be enabled. +For example, ``hosts/02_iocage.yml`` could look like: + +.. code-block:: yaml + + plugin: community.general.iocage + host: 10.1.0.73 + user: admin + get_properties: true + hooks_results: + - /var/db/dhclient-hook.address.epair0b + compose: + ansible_host: (iocage_hooks.0 == '-') | ternary(iocage_ip4, iocage_hooks.0) + iocage_tags: dict(iocage_properties.notes | split | map('split', '=')) + keyed_groups: + - prefix: vmm + key: iocage_tags.vmm + - prefix: project + key: iocage_tags.project + +Display tags and groups. Create a playbook ``pb-test-groups.yml``: + +.. code-block:: yaml+jinja + + - hosts: all + remote_user: admin + + vars: + + ansible_python_interpreter: auto_silent + + tasks: + + - debug: + var: iocage_tags + + - debug: + msg: | + {% for group in groups %} + {{ group }}: {{ groups[group] }} + {% endfor %} + run_once: true + +Run the playbook: + +.. code-block:: console + + shell> ansible-playbook -i hosts/02_iocage.yml pb-test-groups.yml + + PLAY [all] ********************************************************************************************************** + + TASK [debug] ******************************************************************************************************** + ok: [srv_1] => + iocage_tags: + project: foo + vmm: iocage_02 + ok: [srv_2] => + iocage_tags: + project: foo + vmm: iocage_02 + ok: [srv_3] => + iocage_tags: + project: bar + vmm: iocage_02 + + TASK [debug] ******************************************************************************************************** + ok: [srv_1] => + msg: |- + all: ['srv_1', 'srv_2', 'srv_3'] + ungrouped: [] + vmm_iocage_02: ['srv_1', 'srv_2', 'srv_3'] + project_foo: ['srv_1', 'srv_2'] + project_bar: ['srv_3'] + + PLAY RECAP ********************************************************************************************************** + srv_1 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 + srv_2 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 + srv_3 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 diff --git a/docs/docsite/rst/guide_vardict.rst b/docs/docsite/rst/guide_vardict.rst index f65b09055b..1beef0c57f 100644 --- a/docs/docsite/rst/guide_vardict.rst +++ b/docs/docsite/rst/guide_vardict.rst @@ -51,7 +51,7 @@ And by the time the module is about to exit: That makes the return value of the module: -.. code-block:: javascript +.. code-block:: json { "abc": 123, diff --git a/docs/docsite/rst/test_guide.rst b/docs/docsite/rst/test_guide.rst index 7a261c7552..a1f5723df4 100644 --- a/docs/docsite/rst/test_guide.rst +++ b/docs/docsite/rst/test_guide.rst @@ -8,7 +8,7 @@ community.general Test (Plugin) Guide ===================================== -The :ref:`community.general collection ` offers currently one test plugin. +The :anscollection:`community.general collection ` offers currently one test plugin. .. contents:: Topics diff --git a/galaxy.yml b/galaxy.yml index a51b7f2569..b0b9af7d11 100644 --- a/galaxy.yml +++ b/galaxy.yml @@ -5,7 +5,7 @@ namespace: community name: general -version: 11.0.0 +version: 11.1.0 readme: README.md authors: - Ansible (https://github.com/ansible) diff --git a/meta/runtime.yml b/meta/runtime.yml index 174493bc72..ed7efb80d9 100644 --- a/meta/runtime.yml +++ b/meta/runtime.yml @@ -116,6 +116,10 @@ plugin_routing: deprecation: removal_version: 13.0.0 warning_text: Project Atomic was sunset by the end of 2019. + catapult: + deprecation: + removal_version: 13.0.0 + warning_text: DNS fails to resolve the API endpoint used by the module since Oct 2024. See https://github.com/ansible-collections/community.general/issues/10318 for details. cisco_spark: redirect: community.general.cisco_webex clc_alert_policy: diff --git a/plugins/become/doas.py b/plugins/become/doas.py index 13aef19874..b7b82a0f80 100644 --- a/plugins/become/doas.py +++ b/plugins/become/doas.py @@ -72,7 +72,7 @@ options: prompt_l10n: description: - List of localized strings to match for prompt detection. - - If empty we will use the built in one. + - If empty the plugin uses the built-in one. type: list elements: string default: [] diff --git a/plugins/become/ksu.py b/plugins/become/ksu.py index 1c936e46da..be56fd6128 100644 --- a/plugins/become/ksu.py +++ b/plugins/become/ksu.py @@ -73,7 +73,7 @@ options: prompt_l10n: description: - List of localized strings to match for prompt detection. - - If empty we will use the built in one. + - If empty the plugin uses the built-in one. type: list elements: string default: [] diff --git a/plugins/become/machinectl.py b/plugins/become/machinectl.py index 81a9d06f86..4f608939f1 100644 --- a/plugins/become/machinectl.py +++ b/plugins/become/machinectl.py @@ -71,10 +71,10 @@ options: - section: machinectl_become_plugin key: password notes: - - When not using this plugin with user V(root), it only works correctly with a polkit rule which will alter the behaviour - of machinectl. This rule must alter the prompt behaviour to ask directly for the user credentials, if the user is allowed - to perform the action (take a look at the examples section). If such a rule is not present the plugin only work if it - is used in context with the root user, because then no further prompt will be shown by machinectl. + - When not using this plugin with user V(root), it only works correctly with a polkit rule which alters the behaviour + of C(machinectl). This rule must alter the prompt behaviour to ask directly for the user credentials, if the user is allowed + to perform the action (take a look at the examples section). If such a rule is not present the plugin only works if it + is used in context with the root user, because then no further prompt is shown by C(machinectl). """ EXAMPLES = r""" diff --git a/plugins/become/pfexec.py b/plugins/become/pfexec.py index 65690f359b..9faf1ffc63 100644 --- a/plugins/become/pfexec.py +++ b/plugins/become/pfexec.py @@ -6,7 +6,7 @@ from __future__ import annotations DOCUMENTATION = r""" name: pfexec -short_description: profile based execution +short_description: Profile based execution description: - This become plugins allows your remote/login user to execute commands as another user using the C(pfexec) utility. author: Ansible Core Team diff --git a/plugins/become/run0.py b/plugins/become/run0.py index 39e4667e7a..dce7c22448 100644 --- a/plugins/become/run0.py +++ b/plugins/become/run0.py @@ -61,7 +61,7 @@ options: - name: ANSIBLE_RUN0_FLAGS type: string notes: - - This plugin will only work when a C(polkit) rule is in place. + - This plugin only works when a C(polkit) rule is in place. """ EXAMPLES = r""" diff --git a/plugins/cache/pickle.py b/plugins/cache/pickle.py index 7dae0f2d85..1e9ffcb264 100644 --- a/plugins/cache/pickle.py +++ b/plugins/cache/pickle.py @@ -17,7 +17,7 @@ options: _uri: required: true description: - - Path in which the cache plugin will save the files. + - Path in which the cache plugin saves the files. env: - name: ANSIBLE_CACHE_PLUGIN_CONNECTION ini: diff --git a/plugins/cache/yaml.py b/plugins/cache/yaml.py index 676423d3b6..8bf61f6898 100644 --- a/plugins/cache/yaml.py +++ b/plugins/cache/yaml.py @@ -17,7 +17,7 @@ options: _uri: required: true description: - - Path in which the cache plugin will save the files. + - Path in which the cache plugin saves the files. env: - name: ANSIBLE_CACHE_PLUGIN_CONNECTION ini: diff --git a/plugins/callback/context_demo.py b/plugins/callback/context_demo.py index 28be2882b6..e846aa2786 100644 --- a/plugins/callback/context_demo.py +++ b/plugins/callback/context_demo.py @@ -10,7 +10,7 @@ DOCUMENTATION = r""" author: Unknown (!UNKNOWN) name: context_demo type: aggregate -short_description: demo callback that adds play/task context +short_description: Demo callback that adds play/task context description: - Displays some play and task context along with normal output. - This is mostly for demo purposes. diff --git a/plugins/callback/counter_enabled.py b/plugins/callback/counter_enabled.py index 15fc85a01b..2377d46585 100644 --- a/plugins/callback/counter_enabled.py +++ b/plugins/callback/counter_enabled.py @@ -12,11 +12,11 @@ DOCUMENTATION = r""" author: Unknown (!UNKNOWN) name: counter_enabled type: stdout -short_description: adds counters to the output items (tasks and hosts/task) +short_description: Adds counters to the output items (tasks and hosts/task) description: - Use this callback when you need a kind of progress bar on a large environments. - - You will know how many tasks has the playbook to run, and which one is actually running. - - You will know how many hosts may run a task, and which of them is actually running. + - You can see how many tasks has the playbook to run, and which one is actually running. + - You can see how many hosts may run a task, and which of them is actually running. extends_documentation_fragment: - default_callback requirements: diff --git a/plugins/callback/dense.py b/plugins/callback/dense.py index 67cad4fd8f..1fd68b5d60 100644 --- a/plugins/callback/dense.py +++ b/plugins/callback/dense.py @@ -9,11 +9,11 @@ from __future__ import annotations DOCUMENTATION = r""" name: dense type: stdout -short_description: minimal stdout output +short_description: Minimal stdout output extends_documentation_fragment: - default_callback description: - - When in verbose mode it will act the same as the default callback. + - When in verbose mode it acts the same as the default callback. author: - Dag Wieers (@dagwieers) requirements: @@ -263,12 +263,8 @@ class CallbackModule(CallbackModule_default): sys.stdout.write(colors[self.hosts[name]['state']] + name + vt100.reset) sys.stdout.flush() -# if result._result.get('diff', False): -# sys.stdout.write('\n' + vt100.linewrap) sys.stdout.write(vt100.linewrap) -# self.keep = True - def _display_task_banner(self): if not self.shown_title: self.shown_title = True @@ -312,12 +308,12 @@ class CallbackModule(CallbackModule_default): delegated_vars = result._result.get('_ansible_delegated_vars', None) if delegated_vars: - sys.stdout.write(f"{vt100.reset + result._host.get_name()}>{colors[status]}{delegated_vars['ansible_host']}") + sys.stdout.write(f"{vt100.reset}{result._host.get_name()}>{colors[status]}{delegated_vars['ansible_host']}") else: sys.stdout.write(result._host.get_name()) sys.stdout.write(f": {dump}\n") - sys.stdout.write(vt100.reset + vt100.save + vt100.clearline) + sys.stdout.write(f"{vt100.reset}{vt100.save}{vt100.clearline}") sys.stdout.flush() if status == 'changed': diff --git a/plugins/callback/diy.py b/plugins/callback/diy.py index a4369daadd..f84789d010 100644 --- a/plugins/callback/diy.py +++ b/plugins/callback/diy.py @@ -23,15 +23,15 @@ notes: that is available using the other various execution contexts, such as playbook, play, task, and so on so forth. - Options being set by their respective variable input can only be set using the variable if the variable was set in a context that is available to the respective callback. Use the C(ansible_callback_diy) dictionary to see what is available to a - callback. Additionally, C(ansible_callback_diy.top_level_var_names) will output the top level variable names available + callback. Additionally, C(ansible_callback_diy.top_level_var_names) outputs the top level variable names available to the callback. - Each option value is rendered as a template before being evaluated. This allows for the dynamic usage of an option. For - example, C("{{ 'yellow' if ansible_callback_diy.result.is_changed else 'bright green' }}"). - - 'B(Condition) for all C(msg) options: if value C(is None or omit), then the option is not being used. B(Effect): use - of the C(default) callback plugin for output.' - - 'B(Condition) for all C(msg) options: if value C(is not None and not omit and length is not greater than 0), then the + example, V("{{ 'yellow' if ansible_callback_diy.result.is_changed else 'bright green' }}"). + - 'B(Condition) for all C(msg) options: if value V(is None or omit), then the option is not being used. B(Effect): use of + the C(default) callback plugin for output.' + - 'B(Condition) for all C(msg) options: if value V(is not None and not omit and length is not greater than 0), then the option is being used without output. B(Effect): suppress output.' - - 'B(Condition) for all C(msg) options: if value C(is not None and not omit and length is greater than 0), then the option + - 'B(Condition) for all C(msg) options: if value V(is not None and not omit and length is greater than 0), then the option is being used with output. B(Effect): render value as template and output.' - 'Valid color values: V(black), V(bright gray), V(blue), V(white), V(green), V(bright blue), V(cyan), V(bright green), V(red), V(bright cyan), V(purple), V(bright red), V(yellow), V(bright purple), V(dark gray), V(bright yellow), V(magenta), diff --git a/plugins/callback/jabber.py b/plugins/callback/jabber.py index 10aa866142..c5a0881e14 100644 --- a/plugins/callback/jabber.py +++ b/plugins/callback/jabber.py @@ -10,7 +10,7 @@ DOCUMENTATION = r""" author: Unknown (!UNKNOWN) name: jabber type: notification -short_description: post task events to a Jabber server +short_description: Post task events to a Jabber server description: - The chatty part of ChatOps with a Hipchat server as a target. - This callback plugin sends status updates to a HipChat channel during playbook execution. @@ -36,7 +36,7 @@ options: env: - name: JABBER_PASS to: - description: Chat identifier that will receive the message. + description: Chat identifier that receives the message. type: str required: true env: diff --git a/plugins/callback/log_plays.py b/plugins/callback/log_plays.py index 483976acae..3de6c0bec0 100644 --- a/plugins/callback/log_plays.py +++ b/plugins/callback/log_plays.py @@ -10,7 +10,7 @@ DOCUMENTATION = r""" author: Unknown (!UNKNOWN) name: log_plays type: notification -short_description: write playbook output to log file +short_description: Write playbook output to log file description: - This callback writes playbook output to a file per host in the C(/var/log/ansible/hosts) directory. requirements: @@ -19,7 +19,7 @@ requirements: options: log_folder: default: /var/log/ansible/hosts - description: The folder where log files will be created. + description: The folder where log files are created. type: str env: - name: ANSIBLE_LOG_FOLDER diff --git a/plugins/callback/loganalytics.py b/plugins/callback/loganalytics.py index bd3ca4018d..bd6b89fde1 100644 --- a/plugins/callback/loganalytics.py +++ b/plugins/callback/loganalytics.py @@ -11,7 +11,7 @@ type: notification short_description: Posts task results to Azure Log Analytics author: "Cyrus Li (@zhcli) " description: - - This callback plugin will post task results in JSON formatted to an Azure Log Analytics workspace. + - This callback plugin posts task results in JSON formatted to an Azure Log Analytics workspace. - Credits to authors of splunk callback plugin. version_added: "2.4.0" requirements: diff --git a/plugins/callback/logdna.py b/plugins/callback/logdna.py index 90fe6d4465..9ceb6547b2 100644 --- a/plugins/callback/logdna.py +++ b/plugins/callback/logdna.py @@ -11,7 +11,7 @@ name: logdna type: notification short_description: Sends playbook logs to LogDNA description: - - This callback will report logs from playbook actions, tasks, and events to LogDNA (U(https://app.logdna.com)). + - This callback reports logs from playbook actions, tasks, and events to LogDNA (U(https://app.logdna.com)). requirements: - LogDNA Python Library (U(https://github.com/logdna/python)) - whitelisting in configuration diff --git a/plugins/callback/logentries.py b/plugins/callback/logentries.py index bc5d7e03ce..796398d6b6 100644 --- a/plugins/callback/logentries.py +++ b/plugins/callback/logentries.py @@ -11,7 +11,7 @@ name: logentries type: notification short_description: Sends events to Logentries description: - - This callback plugin will generate JSON objects and send them to Logentries using TCP for auditing/debugging purposes. + - This callback plugin generates JSON objects and send them to Logentries using TCP for auditing/debugging purposes. requirements: - whitelisting in configuration - certifi (Python library) diff --git a/plugins/callback/logstash.py b/plugins/callback/logstash.py index 9d299e50ed..8b5acc6b9f 100644 --- a/plugins/callback/logstash.py +++ b/plugins/callback/logstash.py @@ -12,7 +12,7 @@ name: logstash type: notification short_description: Sends events to Logstash description: - - This callback will report facts and task events to Logstash U(https://www.elastic.co/products/logstash). + - This callback reports facts and task events to Logstash U(https://www.elastic.co/products/logstash). requirements: - whitelisting in configuration - logstash (Python library) @@ -127,9 +127,7 @@ class CallbackModule(CallbackBase): if not HAS_LOGSTASH: self.disabled = True - self._display.warning("The required python-logstash/python3-logstash is not installed. " - "pip install python-logstash for Python 2" - "pip install python3-logstash for Python 3") + self._display.warning("The required python3-logstash is not installed.") self.start_time = now() @@ -182,7 +180,7 @@ class CallbackModule(CallbackBase): data['status'] = "OK" data['ansible_playbook'] = playbook._file_name - if (self.ls_format_version == "v2"): + if self.ls_format_version == "v2": self.logger.info( "START PLAYBOOK | %s", data['ansible_playbook'], extra=data ) @@ -207,7 +205,7 @@ class CallbackModule(CallbackBase): data['ansible_playbook_duration'] = runtime.total_seconds() data['ansible_result'] = json.dumps(summarize_stat) # deprecated field - if (self.ls_format_version == "v2"): + if self.ls_format_version == "v2": self.logger.info( "FINISH PLAYBOOK | %s", json.dumps(summarize_stat), extra=data ) @@ -226,7 +224,7 @@ class CallbackModule(CallbackBase): data['ansible_play_id'] = self.play_id data['ansible_play_name'] = self.play_name - if (self.ls_format_version == "v2"): + if self.ls_format_version == "v2": self.logger.info("START PLAY | %s", self.play_name, extra=data) else: self.logger.info("ansible play", extra=data) @@ -251,7 +249,7 @@ class CallbackModule(CallbackBase): data['ansible_task'] = task_name data['ansible_facts'] = self._dump_results(result._result) - if (self.ls_format_version == "v2"): + if self.ls_format_version == "v2": self.logger.info( "SETUP FACTS | %s", self._dump_results(result._result), extra=data ) @@ -272,7 +270,7 @@ class CallbackModule(CallbackBase): data['ansible_task_id'] = self.task_id data['ansible_result'] = self._dump_results(result._result) - if (self.ls_format_version == "v2"): + if self.ls_format_version == "v2": self.logger.info( "TASK OK | %s | RESULT | %s", task_name, self._dump_results(result._result), extra=data @@ -293,7 +291,7 @@ class CallbackModule(CallbackBase): data['ansible_task_id'] = self.task_id data['ansible_result'] = self._dump_results(result._result) - if (self.ls_format_version == "v2"): + if self.ls_format_version == "v2": self.logger.info("TASK SKIPPED | %s", task_name, extra=data) else: self.logger.info("ansible skipped", extra=data) @@ -307,7 +305,7 @@ class CallbackModule(CallbackBase): data['ansible_play_name'] = self.play_name data['imported_file'] = imported_file - if (self.ls_format_version == "v2"): + if self.ls_format_version == "v2": self.logger.info("IMPORT | %s", imported_file, extra=data) else: self.logger.info("ansible import", extra=data) @@ -321,7 +319,7 @@ class CallbackModule(CallbackBase): data['ansible_play_name'] = self.play_name data['imported_file'] = missing_file - if (self.ls_format_version == "v2"): + if self.ls_format_version == "v2": self.logger.info("NOT IMPORTED | %s", missing_file, extra=data) else: self.logger.info("ansible import", extra=data) @@ -345,7 +343,7 @@ class CallbackModule(CallbackBase): data['ansible_result'] = self._dump_results(result._result) self.errors += 1 - if (self.ls_format_version == "v2"): + if self.ls_format_version == "v2": self.logger.error( "TASK FAILED | %s | HOST | %s | RESULT | %s", task_name, self.hostname, @@ -368,7 +366,7 @@ class CallbackModule(CallbackBase): data['ansible_result'] = self._dump_results(result._result) self.errors += 1 - if (self.ls_format_version == "v2"): + if self.ls_format_version == "v2": self.logger.error( "UNREACHABLE | %s | HOST | %s | RESULT | %s", task_name, self.hostname, @@ -391,7 +389,7 @@ class CallbackModule(CallbackBase): data['ansible_result'] = self._dump_results(result._result) self.errors += 1 - if (self.ls_format_version == "v2"): + if self.ls_format_version == "v2": self.logger.error( "ASYNC FAILED | %s | HOST | %s | RESULT | %s", task_name, self.hostname, diff --git a/plugins/callback/mail.py b/plugins/callback/mail.py index 80bef26044..d05982cd61 100644 --- a/plugins/callback/mail.py +++ b/plugins/callback/mail.py @@ -11,7 +11,7 @@ name: mail type: notification short_description: Sends failure events through email description: - - This callback will report failures through email. + - This callback reports failures through email. author: - Dag Wieers (@dagwieers) requirements: @@ -212,7 +212,8 @@ class CallbackModule(CallbackBase): if self.itembody: body += self.itembody elif result._result.get('failed_when_result') is True: - fail_cond = self.indent('failed_when:\n- ' + '\n- '.join(result._task.failed_when)) + fail_cond_list = '\n- '.join(result._task.failed_when) + fail_cond = self.indent(f"failed_when:\n- {fail_cond_list}") body += f"due to the following condition:\n\n{fail_cond}\n\n" elif result._result.get('msg'): body += self.body_blob(result._result['msg'], 'message') diff --git a/plugins/callback/null.py b/plugins/callback/null.py index b59389e39a..0527c1c467 100644 --- a/plugins/callback/null.py +++ b/plugins/callback/null.py @@ -12,7 +12,7 @@ name: 'null' type: stdout requirements: - set as main display callback -short_description: do not display stuff to screen +short_description: Do not display stuff to screen description: - This callback prevents outputting events to screen. """ diff --git a/plugins/callback/opentelemetry.py b/plugins/callback/opentelemetry.py index c46234b724..80f24924b9 100644 --- a/plugins/callback/opentelemetry.py +++ b/plugins/callback/opentelemetry.py @@ -35,8 +35,8 @@ options: - Whether to enable this callback only if the given environment variable exists and it is set to V(true). - This is handy when you use Configuration as Code and want to send distributed traces if running in the CI rather when running Ansible locally. - - For such, it evaluates the given O(enable_from_environment) value as environment variable and if set to true this - plugin will be enabled. + - For such, it evaluates the given O(enable_from_environment) value as environment variable and if set to V(true) this + plugin is enabled. env: - name: ANSIBLE_OPENTELEMETRY_ENABLE_FROM_ENVIRONMENT ini: diff --git a/plugins/callback/print_task.py b/plugins/callback/print_task.py index 7407b0e803..809baddb95 100644 --- a/plugins/callback/print_task.py +++ b/plugins/callback/print_task.py @@ -6,7 +6,7 @@ from __future__ import (absolute_import, division, print_function) __metaclass__ = type -DOCUMENTATION = r''' +DOCUMENTATION = r""" name: print_task type: aggregate short_description: Prints playbook task snippet to job output @@ -15,14 +15,14 @@ description: version_added: 10.7.0 requirements: - enable in configuration -''' +""" -EXAMPLES = r''' -ansible.cfg: > - # Enable plugin - [defaults] - callbacks_enabled=community.general.print_task -''' +EXAMPLES = r""" +ansible.cfg: |- + # Enable plugin + [defaults] + callbacks_enabled=community.general.print_task +""" from yaml import load, dump diff --git a/plugins/callback/say.py b/plugins/callback/say.py index e6da490ec7..8a4e93f353 100644 --- a/plugins/callback/say.py +++ b/plugins/callback/say.py @@ -14,9 +14,9 @@ type: notification requirements: - whitelisting in configuration - the C(/usr/bin/say) command line program (standard on macOS) or C(espeak) command line program -short_description: notify using software speech synthesizer +short_description: Notify using software speech synthesizer description: - - This plugin will use the C(say) or C(espeak) program to "speak" about play events. + - This plugin uses C(say) or C(espeak) to "speak" about play events. """ import platform diff --git a/plugins/callback/selective.py b/plugins/callback/selective.py index 9cc805d3cd..53d40671bc 100644 --- a/plugins/callback/selective.py +++ b/plugins/callback/selective.py @@ -12,7 +12,7 @@ name: selective type: stdout requirements: - set as main display callback -short_description: only print certain tasks +short_description: Only print certain tasks description: - This callback only prints tasks that have been tagged with C(print_action) or that have failed. This allows operators to focus on the tasks that provide value only. diff --git a/plugins/callback/splunk.py b/plugins/callback/splunk.py index 1870bfc1d0..c385050d67 100644 --- a/plugins/callback/splunk.py +++ b/plugins/callback/splunk.py @@ -11,7 +11,7 @@ type: notification short_description: Sends task result events to Splunk HTTP Event Collector author: "Stuart Hirst (!UNKNOWN) " description: - - This callback plugin will send task results as JSON formatted events to a Splunk HTTP collector. + - This callback plugin sends task results as JSON formatted events to a Splunk HTTP collector. - The companion Splunk Monitoring & Diagnostics App is available here U(https://splunkbase.splunk.com/app/4023/). - Credit to "Ryan Currah (@ryancurrah)" for original source upon which this is based. requirements: diff --git a/plugins/callback/sumologic.py b/plugins/callback/sumologic.py index c12c852db9..7a762c30e8 100644 --- a/plugins/callback/sumologic.py +++ b/plugins/callback/sumologic.py @@ -11,7 +11,7 @@ type: notification short_description: Sends task result events to Sumologic author: "Ryan Currah (@ryancurrah)" description: - - This callback plugin will send task results as JSON formatted events to a Sumologic HTTP collector source. + - This callback plugin sends task results as JSON formatted events to a Sumologic HTTP collector source. requirements: - Whitelisting this callback plugin - 'Create a HTTP collector source in Sumologic and specify a custom timestamp format of V(yyyy-MM-dd HH:mm:ss ZZZZ) and diff --git a/plugins/callback/syslog_json.py b/plugins/callback/syslog_json.py index 9e5c78c90c..cab3973be1 100644 --- a/plugins/callback/syslog_json.py +++ b/plugins/callback/syslog_json.py @@ -12,12 +12,12 @@ name: syslog_json type: notification requirements: - whitelist in configuration -short_description: sends JSON events to syslog +short_description: Sends JSON events to syslog description: - This plugin logs ansible-playbook and ansible runs to a syslog server in JSON format. options: server: - description: Syslog server that will receive the event. + description: Syslog server that receives the event. type: str env: - name: SYSLOG_SERVER diff --git a/plugins/callback/tasks_only.py b/plugins/callback/tasks_only.py new file mode 100644 index 0000000000..f64c4c57db --- /dev/null +++ b/plugins/callback/tasks_only.py @@ -0,0 +1,62 @@ +# -*- coding: utf-8 -*- + +# Copyright (c) 2025, Felix Fontein +# 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 annotations + +DOCUMENTATION = r""" +author: Felix Fontein (@felixfontein) +name: tasks_only +type: stdout +version_added: 11.1.0 +short_description: Only show tasks +description: + - Removes play start and stats marker from P(ansible.builtin.default#callback)'s output. + - Can be used to generate output for documentation examples. + For this, the O(number_of_columns) option should be set to an explicit value. +extends_documentation_fragment: + - default_callback +options: + number_of_columns: + description: + - Sets the number of columns for Ansible's display. + type: int + env: + - name: ANSIBLE_COLLECTIONS_TASKS_ONLY_NUMBER_OF_COLUMNS +""" + +EXAMPLES = r""" +--- +# Enable callback in ansible.cfg: +ansible_config: |- + [defaults] + stdout_callback = community.general.tasks_only + +--- +# Enable callback with environment variables: +environment_variable: |- + ANSIBLE_STDOUT_CALLBACK=community.general.tasks_only +""" + +from ansible.plugins.callback.default import CallbackModule as Default + + +class CallbackModule(Default): + CALLBACK_VERSION = 2.0 + CALLBACK_TYPE = 'stdout' + CALLBACK_NAME = 'community.general.tasks_only' + + def v2_playbook_on_play_start(self, play): + pass + + def v2_playbook_on_stats(self, stats): + pass + + def set_options(self, *args, **kwargs): + result = super(CallbackModule, self).set_options(*args, **kwargs) + self.number_of_columns = self.get_option("number_of_columns") + if self.number_of_columns is not None: + self._display.columns = self.number_of_columns + return result diff --git a/plugins/callback/unixy.py b/plugins/callback/unixy.py index 48f9b2d1f0..8fd8c10c94 100644 --- a/plugins/callback/unixy.py +++ b/plugins/callback/unixy.py @@ -11,7 +11,7 @@ DOCUMENTATION = r""" name: unixy type: stdout author: Al Bowles (@akatch) -short_description: condensed Ansible output +short_description: Condensed Ansible output description: - Consolidated Ansible output in the style of LINUX/UNIX startup logs. extends_documentation_fragment: diff --git a/plugins/callback/yaml.py b/plugins/callback/yaml.py index d11dfd0c0a..f02840c9c6 100644 --- a/plugins/callback/yaml.py +++ b/plugins/callback/yaml.py @@ -119,6 +119,9 @@ except ImportError: def transform_recursively(value, transform): + # Since 2.19.0b7, this should no longer be needed: + # https://github.com/ansible/ansible/issues/85325 + # https://github.com/ansible/ansible/pull/85389 if isinstance(value, Mapping): return {transform(k): transform(v) for k, v in value.items()} if isinstance(value, Sequence) and not isinstance(value, (str, bytes)): diff --git a/plugins/connection/incus.py b/plugins/connection/incus.py index 842ad8f924..4f73d05532 100644 --- a/plugins/connection/incus.py +++ b/plugins/connection/incus.py @@ -52,7 +52,7 @@ options: remote_user: description: - User to login/authenticate as. - - Can be set from the CLI via the C(--user) or C(-u) options. + - Can be set from the CLI with the C(--user) or C(-u) options. type: string default: root vars: @@ -155,11 +155,35 @@ class Connection(ConnectionBase): stdout = to_text(stdout) stderr = to_text(stderr) - if stderr == "Error: Instance is not running.\n": - raise AnsibleConnectionFailure(f"instance not running: {self._instance()}") + if stderr.startswith("Error: ") and stderr.rstrip().endswith( + ": Instance is not running" + ): + raise AnsibleConnectionFailure( + f"instance not running: {self._instance()} (remote={self.get_option('remote')}, project={self.get_option('project')})" + ) - if stderr == "Error: Instance not found\n": - raise AnsibleConnectionFailure(f"instance not found: {self._instance()}") + if stderr.startswith("Error: ") and stderr.rstrip().endswith( + ": Instance not found" + ): + raise AnsibleConnectionFailure( + f"instance not found: {self._instance()} (remote={self.get_option('remote')}, project={self.get_option('project')})" + ) + + if ( + stderr.startswith("Error: ") + and ": User does not have permission " in stderr + ): + raise AnsibleConnectionFailure( + f"instance access denied: {self._instance()} (remote={self.get_option('remote')}, project={self.get_option('project')})" + ) + + if ( + stderr.startswith("Error: ") + and ": User does not have entitlement " in stderr + ): + raise AnsibleConnectionFailure( + f"instance access denied: {self._instance()} (remote={self.get_option('remote')}, project={self.get_option('project')})" + ) return process.returncode, stdout, stderr diff --git a/plugins/connection/lxd.py b/plugins/connection/lxd.py index 2670ed1b5f..2cc774a1d4 100644 --- a/plugins/connection/lxd.py +++ b/plugins/connection/lxd.py @@ -52,7 +52,7 @@ options: remote_user: description: - User to login/authenticate as. - - Can be set from the CLI via the C(--user) or C(-u) options. + - Can be set from the CLI with the C(--user) or C(-u) options. type: string default: root vars: diff --git a/plugins/connection/wsl.py b/plugins/connection/wsl.py index 06c0652312..1d26cefa18 100644 --- a/plugins/connection/wsl.py +++ b/plugins/connection/wsl.py @@ -11,11 +11,11 @@ from __future__ import annotations DOCUMENTATION = r""" author: Rui Lopes (@rgl) name: wsl -short_description: Run tasks in WSL distribution using wsl.exe CLI via SSH +short_description: Run tasks in WSL distribution using wsl.exe CLI using SSH requirements: - paramiko description: - - Run commands or put/fetch files to an existing WSL distribution using wsl.exe CLI via SSH. + - Run commands or put/fetch files to an existing WSL distribution using wsl.exe CLI using SSH. - Uses the Python SSH implementation (Paramiko) to connect to the WSL host. version_added: "10.6.0" options: @@ -50,7 +50,7 @@ options: remote_user: description: - User to login/authenticate as. - - Can be set from the CLI via the C(--user) or C(-u) options. + - Can be set from the CLI with the C(--user) or C(-u) options. type: string vars: - name: ansible_user @@ -69,7 +69,7 @@ options: password: description: - Secret used to either login the SSH server or as a passphrase for SSH keys that require it. - - Can be set from the CLI via the C(--ask-pass) option. + - Can be set from the CLI with the C(--ask-pass) option. type: string vars: - name: ansible_password @@ -109,7 +109,7 @@ options: proxy_command: default: "" description: - - Proxy information for running the connection via a jumphost. + - Proxy information for running the connection through a jumphost. - This option is supported by paramiko version 1.9.0 or newer. type: string env: @@ -128,7 +128,8 @@ options: key: record_host_keys type: boolean host_key_checking: - description: "Set this to V(false) if you want to avoid host key checking by the underlying tools Ansible uses to connect to the host." + description: "Set this to V(false) if you want to avoid host key checking by the underlying tools Ansible uses to connect + to the host." type: boolean default: true env: @@ -157,8 +158,7 @@ options: type: float default: 30 description: - - Configures, in seconds, the amount of time to wait for the SSH - banner to be presented. + - Configures, in seconds, the amount of time to wait for the SSH banner to be presented. - This option is supported by paramiko version 1.15.0 or newer. ini: - section: paramiko_connection @@ -227,20 +227,20 @@ options: - name: ansible_paramiko_user_known_hosts_file wsl_distribution: description: - - WSL distribution name + - WSL distribution name. type: string required: true vars: - name: wsl_distribution wsl_user: description: - - WSL distribution user + - WSL distribution user. type: string vars: - name: wsl_user become_user: description: - - WSL distribution user + - WSL distribution user. type: string default: root vars: @@ -248,7 +248,7 @@ options: - name: ansible_become_user become: description: - - whether to use the user defined by ansible_become_user. + - Whether to use the user defined by O(become_user). type: bool default: false vars: @@ -522,8 +522,10 @@ class Connection(ConnectionBase): if u'PID check failed' in msg: raise AnsibleError('paramiko version issue, please upgrade paramiko on the machine running ansible') elif u'Private key file is encrypted' in msg: - msg = f'ssh {self.get_option("remote_user")}@{self.get_options("remote_addr")}:{port} : ' + \ + msg = ( + f'ssh {self.get_option("remote_user")}@{self.get_options("remote_addr")}:{port} : ' f'{msg}\nTo connect as a different user, use -u .' + ) raise AnsibleConnectionFailure(msg) else: raise AnsibleConnectionFailure(msg) @@ -656,7 +658,7 @@ class Connection(ConnectionBase): chan.shutdown_write() except socket.timeout: - raise AnsibleError('ssh timed out waiting for privilege escalation.\n' + to_text(become_output)) + raise AnsibleError(f'ssh timed out waiting for privilege escalation.\n{to_text(become_output)}') stdout = b''.join(chan.makefile('rb', bufsize)) stderr = b''.join(chan.makefile_stderr('rb', bufsize)) diff --git a/plugins/doc_fragments/alicloud.py b/plugins/doc_fragments/alicloud.py index 3b810852b7..cf7255b465 100644 --- a/plugins/doc_fragments/alicloud.py +++ b/plugins/doc_fragments/alicloud.py @@ -16,31 +16,31 @@ options: alicloud_access_key: description: - Alibaba Cloud access key. If not set then the value of environment variable E(ALICLOUD_ACCESS_KEY), E(ALICLOUD_ACCESS_KEY_ID) - will be used instead. + is used instead. aliases: ['access_key_id', 'access_key'] type: str alicloud_secret_key: description: - Alibaba Cloud secret key. If not set then the value of environment variable E(ALICLOUD_SECRET_KEY), E(ALICLOUD_SECRET_ACCESS_KEY) - will be used instead. + is used instead. aliases: ['secret_access_key', 'secret_key'] type: str alicloud_region: description: - The Alibaba Cloud region to use. If not specified then the value of environment variable E(ALICLOUD_REGION), E(ALICLOUD_REGION_ID) - will be used instead. + is used instead. aliases: ['region', 'region_id'] required: true type: str alicloud_security_token: description: - The Alibaba Cloud security token. If not specified then the value of environment variable E(ALICLOUD_SECURITY_TOKEN) - will be used instead. + is used instead. aliases: ['security_token'] type: str alicloud_assume_role: description: - - If provided with a role ARN, Ansible will attempt to assume this role using the supplied credentials. + - If provided with a role ARN, Ansible attempts to assume this role using the supplied credentials. - The nested assume_role block supports C(alicloud_assume_role_arn), C(alicloud_assume_role_session_name), C(alicloud_assume_role_session_expiration) and C(alicloud_assume_role_policy). type: dict @@ -48,7 +48,7 @@ options: alicloud_assume_role_arn: description: - The Alibaba Cloud C(role_arn). The ARN of the role to assume. If ARN is set to an empty string, it does not perform - role switching. It supports environment variable E(ALICLOUD_ASSUME_ROLE_ARN). ansible will execute with provided credentials. + role switching. It supports environment variable E(ALICLOUD_ASSUME_ROLE_ARN). Ansible executes with provided credentials. aliases: ['assume_role_arn'] type: str alicloud_assume_role_session_name: @@ -68,7 +68,7 @@ options: description: - The RAM Role Name attached on a ECS instance for API operations. You can retrieve this from the 'Access Control' section of the Alibaba Cloud console. - - If you are running Ansible from an ECS instance with RAM Instance using RAM Role, Ansible will just access the metadata + - If you are running Ansible from an ECS instance with RAM Instance using RAM Role, Ansible just accesses the metadata U(http://100.100.100.200/latest/meta-data/ram/security-credentials/) to obtain the STS credential. This is a preferred approach over any other when running in ECS as you can avoid hard coding credentials. Instead these are leased on-the-fly by Ansible which reduces the chance of leakage. @@ -83,7 +83,7 @@ options: description: - This is the path to the shared credentials file. It can also be sourced from the E(ALICLOUD_SHARED_CREDENTIALS_FILE) environment variable. - - If this is not set and a profile is specified, C(~/.aliyun/config.json) will be used. + - If this is not set and a profile is specified, C(~/.aliyun/config.json) is used. type: str author: - "He Guimin (@xiaozhu36)" diff --git a/plugins/doc_fragments/attributes.py b/plugins/doc_fragments/attributes.py index d6cc2b8c25..18b02575c4 100644 --- a/plugins/doc_fragments/attributes.py +++ b/plugins/doc_fragments/attributes.py @@ -17,7 +17,7 @@ attributes: check_mode: description: Can run in C(check_mode) and return changed status prediction without modifying target. diff_mode: - description: Will return details on what has changed (or possibly needs changing in C(check_mode)), when in diff mode. + description: Returns details on what has changed (or possibly needs changing in C(check_mode)), when in diff mode. """ PLATFORM = r""" @@ -57,7 +57,7 @@ attributes: options: {} attributes: facts: - description: Action returns an C(ansible_facts) dictionary that will update existing host facts. + description: Action returns an C(ansible_facts) dictionary that updates existing host facts. """ # Should be used together with the standard fragment and the FACTS fragment diff --git a/plugins/doc_fragments/bitbucket.py b/plugins/doc_fragments/bitbucket.py index e8b9ea4df8..65c4c47b51 100644 --- a/plugins/doc_fragments/bitbucket.py +++ b/plugins/doc_fragments/bitbucket.py @@ -16,17 +16,17 @@ options: client_id: description: - The OAuth consumer key. - - If not set the environment variable E(BITBUCKET_CLIENT_ID) will be used. + - If not set the environment variable E(BITBUCKET_CLIENT_ID) is used. type: str client_secret: description: - The OAuth consumer secret. - - If not set the environment variable E(BITBUCKET_CLIENT_SECRET) will be used. + - If not set the environment variable E(BITBUCKET_CLIENT_SECRET) is used. type: str user: description: - The username. - - If not set the environment variable E(BITBUCKET_USERNAME) will be used. + - If not set the environment variable E(BITBUCKET_USERNAME) is used. - O(ignore:username) is an alias of O(user) since community.general 6.0.0. It was an alias of O(workspace) before. type: str version_added: 4.0.0 @@ -34,7 +34,7 @@ options: password: description: - The App password. - - If not set the environment variable E(BITBUCKET_PASSWORD) will be used. + - If not set the environment variable E(BITBUCKET_PASSWORD) is used. type: str version_added: 4.0.0 notes: diff --git a/plugins/doc_fragments/dimensiondata.py b/plugins/doc_fragments/dimensiondata.py index ece97addf0..890c4d741e 100644 --- a/plugins/doc_fragments/dimensiondata.py +++ b/plugins/doc_fragments/dimensiondata.py @@ -28,12 +28,12 @@ options: mcp_user: description: - The username used to authenticate to the CloudControl API. - - If not specified, will fall back to E(MCP_USER) from environment variable or C(~/.dimensiondata). + - If not specified, falls back to E(MCP_USER) from environment variable or C(~/.dimensiondata). type: str mcp_password: description: - The password used to authenticate to the CloudControl API. - - If not specified, will fall back to E(MCP_PASSWORD) from environment variable or C(~/.dimensiondata). + - If not specified, falls back to E(MCP_PASSWORD) from environment variable or C(~/.dimensiondata). - Required if O(mcp_user) is specified. type: str location: @@ -43,7 +43,7 @@ options: required: true validate_certs: description: - - If V(false), SSL certificates will not be validated. + - If V(false), SSL certificates are not validated. - This should only be used on private instances of the CloudControl API that use self-signed certificates. type: bool default: true diff --git a/plugins/doc_fragments/django.py b/plugins/doc_fragments/django.py index 3dcdb40171..5d01c8323e 100644 --- a/plugins/doc_fragments/django.py +++ b/plugins/doc_fragments/django.py @@ -18,13 +18,13 @@ options: settings: description: - Specifies the settings module to use. - - The value will be passed as is to the C(--settings) argument in C(django-admin). + - The value is passed as is to the C(--settings) argument in C(django-admin). type: str required: true pythonpath: description: - Adds the given filesystem path to the Python import search path. - - The value will be passed as is to the C(--pythonpath) argument in C(django-admin). + - The value is passed as is to the C(--pythonpath) argument in C(django-admin). type: path traceback: description: diff --git a/plugins/doc_fragments/hwc.py b/plugins/doc_fragments/hwc.py index 3d478beb59..ea54c80c09 100644 --- a/plugins/doc_fragments/hwc.py +++ b/plugins/doc_fragments/hwc.py @@ -55,5 +55,5 @@ notes: - For authentication, you can set domain using the E(ANSIBLE_HWC_DOMAIN) environment variable. - For authentication, you can set project using the E(ANSIBLE_HWC_PROJECT) environment variable. - For authentication, you can set region using the E(ANSIBLE_HWC_REGION) environment variable. - - Environment variables values will only be used if the playbook values are not set. + - Environment variables values are only used when the playbook values are not set. """ diff --git a/plugins/doc_fragments/influxdb.py b/plugins/doc_fragments/influxdb.py index 9cf47d340a..5dbebea846 100644 --- a/plugins/doc_fragments/influxdb.py +++ b/plugins/doc_fragments/influxdb.py @@ -20,13 +20,13 @@ options: default: localhost username: description: - - Username that will be used to authenticate against InfluxDB server. + - Username that is used to authenticate against InfluxDB server. type: str default: root aliases: [login_username] password: description: - - Password that will be used to authenticate against InfluxDB server. + - Password that is used to authenticate against InfluxDB server. type: str default: root aliases: [login_password] @@ -44,7 +44,7 @@ options: version_added: '0.2.0' validate_certs: description: - - If set to V(false), the SSL certificates will not be validated. + - If set to V(false), the SSL certificates are not validated. - This should only set to V(false) used on personally controlled sites using self-signed certificates. type: bool default: true @@ -55,11 +55,11 @@ options: default: false timeout: description: - - Number of seconds Requests will wait for client to establish a connection. + - Number of seconds Requests waits for client to establish a connection. type: int retries: description: - - Number of retries client will try before aborting. + - Number of retries client performs before aborting. - V(0) indicates try until success. - Only available when using C(python-influxdb) >= 4.1.0. type: int diff --git a/plugins/doc_fragments/ipa.py b/plugins/doc_fragments/ipa.py index 0edb947aa5..63ea94b465 100644 --- a/plugins/doc_fragments/ipa.py +++ b/plugins/doc_fragments/ipa.py @@ -16,43 +16,43 @@ options: ipa_port: description: - Port of FreeIPA / IPA server. - - If the value is not specified in the task, the value of environment variable E(IPA_PORT) will be used instead. + - If the value is not specified in the task, the value of environment variable E(IPA_PORT) is used instead. - If both the environment variable E(IPA_PORT) and the value are not specified in the task, then default value is set. type: int default: 443 ipa_host: description: - IP or hostname of IPA server. - - If the value is not specified in the task, the value of environment variable E(IPA_HOST) will be used instead. - - If both the environment variable E(IPA_HOST) and the value are not specified in the task, then DNS will be used to - try to discover the FreeIPA server. + - If the value is not specified in the task, the value of environment variable E(IPA_HOST) is used instead. + - If both the environment variable E(IPA_HOST) and the value are not specified in the task, then DNS is used to try + to discover the FreeIPA server. - The relevant entry needed in FreeIPA is the C(ipa-ca) entry. - If neither the DNS entry, nor the environment E(IPA_HOST), nor the value are available in the task, then the default - value will be used. + value is used. type: str default: ipa.example.com ipa_user: description: - Administrative account used on IPA server. - - If the value is not specified in the task, the value of environment variable E(IPA_USER) will be used instead. + - If the value is not specified in the task, the value of environment variable E(IPA_USER) is used instead. - If both the environment variable E(IPA_USER) and the value are not specified in the task, then default value is set. type: str default: admin ipa_pass: description: - Password of administrative user. - - If the value is not specified in the task, the value of environment variable E(IPA_PASS) will be used instead. + - If the value is not specified in the task, the value of environment variable E(IPA_PASS) is used instead. - Note that if the C(urllib_gssapi) library is available, it is possible to use GSSAPI to authenticate to FreeIPA. - - If the environment variable E(KRB5CCNAME) is available, the module will use this kerberos credentials cache to authenticate + - If the environment variable E(KRB5CCNAME) is available, the module uses this Kerberos credentials cache to authenticate to the FreeIPA server. - - If the environment variable E(KRB5_CLIENT_KTNAME) is available, and E(KRB5CCNAME) is not; the module will use this - kerberos keytab to authenticate. + - If the environment variable E(KRB5_CLIENT_KTNAME) is available, and E(KRB5CCNAME) is not; the module uses this Kerberos + keytab to authenticate. - If GSSAPI is not available, the usage of O(ipa_pass) is required. type: str ipa_prot: description: - Protocol used by IPA server. - - If the value is not specified in the task, the value of environment variable E(IPA_PROT) will be used instead. + - If the value is not specified in the task, the value of environment variable E(IPA_PROT) is used instead. - If both the environment variable E(IPA_PROT) and the value are not specified in the task, then default value is set. type: str choices: [http, https] @@ -60,7 +60,7 @@ options: validate_certs: description: - This only applies if O(ipa_prot) is V(https). - - If set to V(false), the SSL certificates will not be validated. + - If set to V(false), the SSL certificates are not validated. - This should only set to V(false) used on personally controlled sites using self-signed certificates. type: bool default: true @@ -68,7 +68,7 @@ options: description: - Specifies idle timeout (in seconds) for the connection. - For bulk operations, you may want to increase this in order to avoid timeout from IPA server. - - If the value is not specified in the task, the value of environment variable E(IPA_TIMEOUT) will be used instead. + - If the value is not specified in the task, the value of environment variable E(IPA_TIMEOUT) is used instead. - If both the environment variable E(IPA_TIMEOUT) and the value are not specified in the task, then default value is set. type: int diff --git a/plugins/doc_fragments/ldap.py b/plugins/doc_fragments/ldap.py index 4dd5fd097f..abdb32adb7 100644 --- a/plugins/doc_fragments/ldap.py +++ b/plugins/doc_fragments/ldap.py @@ -14,9 +14,9 @@ class ModuleDocFragment(object): # Standard LDAP documentation fragment DOCUMENTATION = r""" notes: - - The default authentication settings will attempt to use a SASL EXTERNAL bind over a UNIX domain socket. This works well - with the default Ubuntu install for example, which includes a C(cn=peercred,cn=external,cn=auth) ACL rule allowing root - to modify the server configuration. If you need to use a simple bind to access your server, pass the credentials in O(bind_dn) + - The default authentication settings attempts to use a SASL EXTERNAL bind over a UNIX domain socket. This works well with + the default Ubuntu install for example, which includes a C(cn=peercred,cn=external,cn=auth) ACL rule allowing root to + modify the server configuration. If you need to use a simple bind to access your server, pass the credentials in O(bind_dn) and O(bind_pw). options: bind_dn: @@ -76,7 +76,7 @@ options: default: false validate_certs: description: - - If set to V(false), SSL certificates will not be validated. + - If set to V(false), SSL certificates are not validated. - This should only be used on sites using self-signed certificates. type: bool default: true @@ -90,9 +90,9 @@ options: xorder_discovery: description: - Set the behavior on how to process Xordered DNs. - - V(enable) will perform a C(ONELEVEL) search below the superior RDN to find the matching DN. - - V(disable) will always use the DN unmodified (as passed by the O(dn) parameter). - - V(auto) will only perform a search if the first RDN does not contain an index number (C({x})). + - V(enable) performs a C(ONELEVEL) search below the superior RDN to find the matching DN. + - V(disable) always uses the DN unmodified (as passed by the O(dn) parameter). + - V(auto) only performs a search if the first RDN does not contain an index number (C({x})). type: str choices: ['enable', 'auto', 'disable'] default: auto diff --git a/plugins/doc_fragments/onepassword.py b/plugins/doc_fragments/onepassword.py index a67c9e4dc1..6fb0e252c6 100644 --- a/plugins/doc_fragments/onepassword.py +++ b/plugins/doc_fragments/onepassword.py @@ -18,8 +18,8 @@ options: aliases: ['vault_password'] type: str section: - description: Item section containing the field to retrieve (case-insensitive). If absent will return first match from - any section. + description: Item section containing the field to retrieve (case-insensitive). If absent, returns first match from any + section. domain: description: Domain of 1Password. default: '1password.com' @@ -42,7 +42,7 @@ options: - Only works with 1Password CLI version 2 or later. type: str vault: - description: Vault containing the item to retrieve (case-insensitive). If absent will search all vaults. + description: Vault containing the item to retrieve (case-insensitive). If absent, searches all vaults. type: str connect_host: description: The host for 1Password Connect. Must be used in combination with O(connect_token). @@ -65,10 +65,9 @@ options: - name: OP_SERVICE_ACCOUNT_TOKEN version_added: 8.2.0 notes: - - This lookup will use an existing 1Password session if one exists. If not, and you have already performed an initial sign - in (meaning C(~/.op/config), C(~/.config/op/config) or C(~/.config/.op/config) exists), then only the O(master_password) - is required. You may optionally specify O(subdomain) in this scenario, otherwise the last used subdomain will be used - by C(op). + - This lookup uses an existing 1Password session if one exists. If not, and you have already performed an initial sign in + (meaning C(~/.op/config), C(~/.config/op/config) or C(~/.config/.op/config) exists), then only the O(master_password) + is required. You may optionally specify O(subdomain) in this scenario, otherwise the last used subdomain is used by C(op). - This lookup can perform an initial login by providing O(subdomain), O(username), O(secret_key), and O(master_password). - Can target a specific account by providing the O(account_id). - Due to the B(very) sensitive nature of these credentials, it is B(highly) recommended that you only pass in the minimal diff --git a/plugins/doc_fragments/oneview.py b/plugins/doc_fragments/oneview.py index 3caabe4512..366e3e3e42 100644 --- a/plugins/doc_fragments/oneview.py +++ b/plugins/doc_fragments/oneview.py @@ -17,8 +17,8 @@ options: description: - Path to a JSON configuration file containing the OneView client configuration. The configuration file is optional and when used should be present in the host running the ansible commands. If the file path is not provided, the configuration - will be loaded from environment variables. For links to example configuration files or how to use the environment - variables verify the notes section. + is loaded from environment variables. For links to example configuration files or how to use the environment variables + verify the notes section. type: path api_version: description: @@ -49,16 +49,16 @@ notes: U(https://github.com/HewlettPackard/oneview-ansible/blob/master/examples/oneview_config-rename.json).' - 'Check how to use environment variables for configuration at: U(https://github.com/HewlettPackard/oneview-ansible#environment-variables).' - 'Additional Playbooks for the HPE OneView Ansible modules can be found at: U(https://github.com/HewlettPackard/oneview-ansible/tree/master/examples).' - - 'The OneView API version used will directly affect returned and expected fields in resources. Information on setting the - desired API version and can be found at: U(https://github.com/HewlettPackard/oneview-ansible#setting-your-oneview-version).' + - 'The OneView API version used directly affects returned and expected fields in resources. Information on setting the desired + API version and can be found at: U(https://github.com/HewlettPackard/oneview-ansible#setting-your-oneview-version).' """ VALIDATEETAG = r""" options: validate_etag: description: - - When the ETag Validation is enabled, the request will be conditionally processed only if the current ETag for the - resource matches the ETag provided in the data. + - When the ETag Validation is enabled, the request is conditionally processed only if the current ETag for the resource + matches the ETag provided in the data. type: bool default: true """ diff --git a/plugins/doc_fragments/openswitch.py b/plugins/doc_fragments/openswitch.py index f0e9e87c3d..30b477fbe7 100644 --- a/plugins/doc_fragments/openswitch.py +++ b/plugins/doc_fragments/openswitch.py @@ -21,8 +21,8 @@ options: port: description: - Specifies the port to use when building the connection to the remote device. This value applies to either O(transport=cli) - or O(transport=rest). The port value will default to the appropriate transport common port if none is provided in - the task. (cli=22, http=80, https=443). Note this argument does not affect the SSH transport. + or O(transport=rest). The port value defaults to the appropriate transport common port if none is provided in the + task. (cli=22, http=80, https=443). Note this argument does not affect the SSH transport. type: int default: 0 (use common port) username: @@ -30,25 +30,24 @@ options: - Configures the username to use to authenticate the connection to the remote device. This value is used to authenticate either the CLI login or the eAPI authentication depending on which transport is used. Note this argument does not affect the SSH transport. If the value is not specified in the task, the value of environment variable E(ANSIBLE_NET_USERNAME) - will be used instead. + is used instead. type: str password: description: - Specifies the password to use to authenticate the connection to the remote device. This is a common argument used for either O(transport=cli) or O(transport=rest). Note this argument does not affect the SSH transport. If the value - is not specified in the task, the value of environment variable E(ANSIBLE_NET_PASSWORD) will be used instead. + is not specified in the task, the value of environment variable E(ANSIBLE_NET_PASSWORD) is used instead. type: str timeout: description: - Specifies the timeout in seconds for communicating with the network device for either connecting or sending commands. - If the timeout is exceeded before the operation is completed, the module will error. + If the timeout is exceeded before the operation is completed, the module fails. type: int default: 10 ssh_keyfile: description: - Specifies the SSH key to use to authenticate the connection to the remote device. This argument is only used for O(transport=cli). - If the value is not specified in the task, the value of environment variable E(ANSIBLE_NET_SSH_KEYFILE) will be used - instead. + If the value is not specified in the task, the value of environment variable E(ANSIBLE_NET_SSH_KEYFILE) is used instead. type: path transport: description: diff --git a/plugins/doc_fragments/oracle.py b/plugins/doc_fragments/oracle.py index 702b77f02f..08b2948bf3 100644 --- a/plugins/doc_fragments/oracle.py +++ b/plugins/doc_fragments/oracle.py @@ -54,9 +54,9 @@ options: auth_type: description: - The type of authentication to use for making API requests. By default O(auth_type=api_key) based authentication is - performed and the API key (see O(api_user_key_file)) in your config file will be used. If this 'auth_type' module - option is not specified, the value of the E(OCI_ANSIBLE_AUTH_TYPE), if any, is used. Use O(auth_type=instance_principal) - to use instance principal based authentication when running ansible playbooks within an OCI compute instance. + performed and the API key (see O(api_user_key_file)) in your config file is used. If O(auth_type) is not specified, + the value of the E(OCI_ANSIBLE_AUTH_TYPE), if any, is used. Use O(auth_type=instance_principal) to use instance principal + based authentication when running ansible playbooks within an OCI compute instance. choices: ['api_key', 'instance_principal'] default: 'api_key' type: str diff --git a/plugins/doc_fragments/pipx.py b/plugins/doc_fragments/pipx.py index aff8e90c75..dde13f6dd3 100644 --- a/plugins/doc_fragments/pipx.py +++ b/plugins/doc_fragments/pipx.py @@ -13,13 +13,13 @@ class ModuleDocFragment(object): options: global: description: - - The module will pass the C(--global) argument to C(pipx), to execute actions in global scope. + - The module passes the C(--global) argument to C(pipx), to execute actions in global scope. type: bool default: false executable: description: - Path to the C(pipx) installed in the system. - - If not specified, the module will use C(python -m pipx) to run the tool, using the same Python interpreter as ansible + - If not specified, the module uses C(python -m pipx) to run the tool, using the same Python interpreter as ansible itself. type: path requirements: @@ -27,8 +27,8 @@ requirements: notes: - This module does not install the C(pipx) python package, however that can be easily done with the module M(ansible.builtin.pip). - This module does not require C(pipx) to be in the shell C(PATH), but it must be loadable by Python as a module. - - This module will honor C(pipx) environment variables such as but not limited to E(PIPX_HOME) and E(PIPX_BIN_DIR) passed - using the R(environment Ansible keyword, playbooks_environment). + - This module honors C(pipx) environment variables such as but not limited to E(PIPX_HOME) and E(PIPX_BIN_DIR) passed using + the R(environment Ansible keyword, playbooks_environment). seealso: - name: C(pipx) command manual page description: Manual page for the command. diff --git a/plugins/doc_fragments/redfish.py b/plugins/doc_fragments/redfish.py index f2e6b37485..a20e064988 100644 --- a/plugins/doc_fragments/redfish.py +++ b/plugins/doc_fragments/redfish.py @@ -15,7 +15,7 @@ class ModuleDocFragment(object): options: validate_certs: description: - - If V(false), TLS/SSL certificates will not be validated. + - If V(false), TLS/SSL certificates are not validated. - Set this to V(true) to enable certificate checking. Should be used together with O(ca_path). type: bool default: false diff --git a/plugins/doc_fragments/redis.py b/plugins/doc_fragments/redis.py index 149c018d79..c7bb88b81d 100644 --- a/plugins/doc_fragments/redis.py +++ b/plugins/doc_fragments/redis.py @@ -45,7 +45,7 @@ options: default: true ca_certs: description: - - Path to root certificates file. If not set and O(tls) is set to V(true), certifi ca-certificates will be used. + - Path to root certificates file. If not set and O(tls) is set to V(true), certifi's CA certificates are used. type: str client_cert_file: description: diff --git a/plugins/doc_fragments/utm.py b/plugins/doc_fragments/utm.py index 3b2118485e..32c18e93b8 100644 --- a/plugins/doc_fragments/utm.py +++ b/plugins/doc_fragments/utm.py @@ -49,8 +49,8 @@ options: state: description: - The desired state of the object. - - V(present) will create or update an object. - - V(absent) will delete an object if it was present. + - V(present) creates or updates an object. + - V(absent) deletes an object if present. type: str choices: [absent, present] default: present diff --git a/plugins/doc_fragments/xenserver.py b/plugins/doc_fragments/xenserver.py index d1377e8964..f4e0946219 100644 --- a/plugins/doc_fragments/xenserver.py +++ b/plugins/doc_fragments/xenserver.py @@ -15,28 +15,27 @@ options: hostname: description: - The hostname or IP address of the XenServer host or XenServer pool master. - - If the value is not specified in the task, the value of environment variable E(XENSERVER_HOST) will be used instead. + - If the value is not specified in the task, the value of environment variable E(XENSERVER_HOST) is used instead. type: str default: localhost aliases: [host, pool] username: description: - The username to use for connecting to XenServer. - - If the value is not specified in the task, the value of environment variable E(XENSERVER_USER) will be used instead. + - If the value is not specified in the task, the value of environment variable E(XENSERVER_USER) is used instead. type: str default: root aliases: [admin, user] password: description: - The password to use for connecting to XenServer. - - If the value is not specified in the task, the value of environment variable E(XENSERVER_PASSWORD) will be used instead. + - If the value is not specified in the task, the value of environment variable E(XENSERVER_PASSWORD) is used instead. type: str aliases: [pass, pwd] validate_certs: description: - Allows connection when SSL certificates are not valid. Set to V(false) when certificates are not trusted. - - If the value is not specified in the task, the value of environment variable E(XENSERVER_VALIDATE_CERTS) will be used - instead. + - If the value is not specified in the task, the value of environment variable E(XENSERVER_VALIDATE_CERTS) is used instead. type: bool default: true """ diff --git a/plugins/filter/jc.py b/plugins/filter/jc.py index 48d53bcbd3..6a2feb93f0 100644 --- a/plugins/filter/jc.py +++ b/plugins/filter/jc.py @@ -143,11 +143,11 @@ def jc_filter(data, parser, quiet=True, raw=False): # old API (jc v1.17.7 and lower) else: - jc_parser = importlib.import_module('jc.parsers.' + parser) + jc_parser = importlib.import_module(f'jc.parsers.{parser}') return jc_parser.parse(data, quiet=quiet, raw=raw) except Exception as e: - raise AnsibleFilterError('Error in jc filter plugin: %s' % e) + raise AnsibleFilterError(f'Error in jc filter plugin: {e}') class FilterModule(object): diff --git a/plugins/filter/replace_keys.py b/plugins/filter/replace_keys.py index d47468bd3c..69fe02832b 100644 --- a/plugins/filter/replace_keys.py +++ b/plugins/filter/replace_keys.py @@ -34,7 +34,7 @@ options: description: - A key or key pattern to change. - The interpretation of O(target[].before) depends on O(matching_parameter). - - For a key that matches multiple O(target[].before)s, the B(first) matching O(target[].after) will be used. + - For a key that matches multiple O(target[].before)s, the B(first) matching O(target[].after) is used. type: str after: description: A matching key change to. diff --git a/plugins/filter/to_prettytable.py b/plugins/filter/to_prettytable.py index 249c830230..269ac318ff 100644 --- a/plugins/filter/to_prettytable.py +++ b/plugins/filter/to_prettytable.py @@ -30,17 +30,14 @@ options: elements: string column_alignments: description: - - >- - Dictionary where keys are column names and values are alignment settings. - Valid alignment values are C(left), C(center), C(right), C(l), C(c), or C(r). - - >- - For example, V({'name': 'left', 'id': 'right'}) will align the C(name) column to the left - and the C(id) column to the right. + - Dictionary where keys are column names and values are alignment settings. Valid alignment values are C(left), C(center), + C(right), C(l), C(c), or C(r). + - "For example, V({'name': 'left', 'id': 'right'}) aligns the C(name) column to the left and the C(id) column to the + right." type: dictionary """ EXAMPLES = r""" ---- - name: Set a list of users ansible.builtin.set_fact: users: diff --git a/plugins/inventory/cobbler.py b/plugins/inventory/cobbler.py index 3526093b8c..677e1a3ad5 100644 --- a/plugins/inventory/cobbler.py +++ b/plugins/inventory/cobbler.py @@ -12,14 +12,17 @@ short_description: Cobbler inventory source version_added: 1.0.0 description: - Get inventory hosts from the cobbler service. - - "Uses a configuration file as an inventory source, it must end in C(.cobbler.yml) or C(.cobbler.yaml) and have a C(plugin: cobbler) entry." - - Adds the primary IP addresses to C(cobbler_ipv4_address) and C(cobbler_ipv6_address) host variables if defined in Cobbler. The primary IP address is - defined as the management interface if defined, or the interface who's DNS name matches the hostname of the system, or else the first interface found. + - 'Uses a configuration file as an inventory source, it must end in C(.cobbler.yml) or C(.cobbler.yaml) and have a C(plugin: + cobbler) entry.' + - Adds the primary IP addresses to C(cobbler_ipv4_address) and C(cobbler_ipv6_address) host variables if defined in Cobbler. + The primary IP address is defined as the management interface if defined, or the interface who's DNS name matches the + hostname of the system, or else the first interface found. extends_documentation_fragment: - inventory_cache options: plugin: - description: The name of this plugin, it should always be set to V(community.general.cobbler) for this plugin to recognize it as its own. + description: The name of this plugin, it should always be set to V(community.general.cobbler) for this plugin to recognize + it as its own. type: string required: true choices: ['cobbler', 'community.general.cobbler'] @@ -72,7 +75,7 @@ options: include_profiles: description: - Profiles to include from inventory. - - If specified, all other profiles will be excluded. + - If specified, all other profiles are excluded. - O(exclude_profiles) is ignored if O(include_profiles) is specified. type: list default: [] @@ -81,7 +84,8 @@ options: inventory_hostname: description: - What to use for the ansible inventory hostname. - - By default the networking hostname is used if defined, otherwise the DNS name of the management or first non-static interface. + - By default the networking hostname is used if defined, otherwise the DNS name of the management or first non-static + interface. - If set to V(system), the cobbler system name is used. type: str choices: ['hostname', 'system'] @@ -99,20 +103,20 @@ options: description: Prefix to apply to cobbler groups. default: cobbler_ want_facts: - description: Toggle, if V(true) the plugin will retrieve all host facts from the server. + description: Toggle, if V(true) the plugin retrieves all host facts from the server. type: boolean default: true want_ip_addresses: description: - - Toggle, if V(true) the plugin will add a C(cobbler_ipv4_addresses) and C(cobbler_ipv6_addresses) dictionary to the defined O(group) mapping - interface DNS names to IP addresses. + - Toggle, if V(true) the plugin adds a C(cobbler_ipv4_addresses) and C(cobbler_ipv6_addresses) dictionary to the + defined O(group) mapping interface DNS names to IP addresses. type: boolean default: true version_added: 7.1.0 facts_level: description: - - "Set to V(normal) to gather only system-level variables." - - "Set to V(as_rendered) to gather all variables as rolled up by Cobbler." + - Set to V(normal) to gather only system-level variables. + - Set to V(as_rendered) to gather all variables as rolled up by Cobbler. type: string choices: ['normal', 'as_rendered'] default: normal diff --git a/plugins/inventory/gitlab_runners.py b/plugins/inventory/gitlab_runners.py index 192be319a7..7a10b553a2 100644 --- a/plugins/inventory/gitlab_runners.py +++ b/plugins/inventory/gitlab_runners.py @@ -11,7 +11,7 @@ DOCUMENTATION = r""" name: gitlab_runners author: - Stefan Heitmüller (@morph027) -short_description: Ansible dynamic inventory plugin for GitLab runners. +short_description: Ansible dynamic inventory plugin for GitLab runners requirements: - python-gitlab > 1.8.0 extends_documentation_fragment: @@ -21,7 +21,7 @@ description: - Uses a YAML configuration file gitlab_runners.[yml|yaml]. options: plugin: - description: The name of this plugin, it should always be set to 'gitlab_runners' for this plugin to recognize it as its own. + description: The name of this plugin, it should always be set to V(gitlab_runners) for this plugin to recognize it as its own. type: str required: true choices: @@ -44,14 +44,14 @@ options: - private_token - access_token filter: - description: filter runners from GitLab API + description: Filter runners from GitLab API. env: - name: GITLAB_FILTER version_added: 1.0.0 type: str choices: ['active', 'paused', 'online', 'specific', 'shared'] verbose_output: - description: Toggle to (not) include all available nodes metadata + description: Toggle to (not) include all available nodes metadata. type: bool default: true """ diff --git a/plugins/inventory/icinga2.py b/plugins/inventory/icinga2.py index feb2d10d8a..64d77b437d 100644 --- a/plugins/inventory/icinga2.py +++ b/plugins/inventory/icinga2.py @@ -14,8 +14,7 @@ author: - Cliff Hults (@BongoEADGC6) description: - Get inventory hosts from the Icinga2 API. - - "Uses a configuration file as an inventory source, it must end in - C(.icinga2.yml) or C(.icinga2.yaml)." + - Uses a configuration file as an inventory source, it must end in C(.icinga2.yml) or C(.icinga2.yaml). extends_documentation_fragment: - constructed options: @@ -46,7 +45,7 @@ options: required: true host_filter: description: - - An Icinga2 API valid host filter. Leave blank for no filtering + - An Icinga2 API valid host filter. Leave blank for no filtering. type: string required: false validate_certs: @@ -291,11 +290,11 @@ class InventoryModule(BaseInventoryPlugin, Constructable): self.group_by_hostgroups = self.get_option('group_by_hostgroups') if self.templar.is_template(self.icinga2_url): - self.icinga2_url = self.templar.template(variable=self.icinga2_url, disable_lookups=False) + self.icinga2_url = self.templar.template(variable=self.icinga2_url) if self.templar.is_template(self.icinga2_user): - self.icinga2_user = self.templar.template(variable=self.icinga2_user, disable_lookups=False) + self.icinga2_user = self.templar.template(variable=self.icinga2_user) if self.templar.is_template(self.icinga2_password): - self.icinga2_password = self.templar.template(variable=self.icinga2_password, disable_lookups=False) + self.icinga2_password = self.templar.template(variable=self.icinga2_password) self.icinga2_url = f"{self.icinga2_url.rstrip('/')}/v1" diff --git a/plugins/inventory/iocage.py b/plugins/inventory/iocage.py index 8e296b571a..603003d617 100644 --- a/plugins/inventory/iocage.py +++ b/plugins/inventory/iocage.py @@ -8,29 +8,25 @@ from __future__ import annotations DOCUMENTATION = r""" name: iocage -short_description: iocage inventory source +short_description: C(iocage) inventory source version_added: 10.2.0 author: - Vladimir Botka (@vbotka) requirements: - iocage >= 1.8 description: - - Get inventory hosts from the iocage jail manager running on O(host). - - By default, O(host) is V(localhost). If O(host) is not V(localhost) it - is expected that the user running Ansible on the controller can - connect to the O(host) account O(user) with SSH non-interactively and - execute the command C(iocage list). - - Uses a configuration file as an inventory source, it must end - in C(.iocage.yml) or C(.iocage.yaml). + - Get inventory hosts from the C(iocage) jail manager running on O(host). + - By default, O(host) is V(localhost). If O(host) is not V(localhost) it is expected that the user running Ansible on the + controller can connect to the O(host) account O(user) with SSH non-interactively and execute the command C(iocage list). + - Uses a configuration file as an inventory source, it must end in C(.iocage.yml) or C(.iocage.yaml). extends_documentation_fragment: - ansible.builtin.constructed - ansible.builtin.inventory_cache options: plugin: description: - - The name of this plugin, it should always be set to - V(community.general.iocage) for this plugin to recognize - it as its own. + - The name of this plugin, it should always be set to V(community.general.iocage) for this plugin to recognize it as + its own. required: true choices: ['community.general.iocage'] type: str @@ -40,10 +36,8 @@ options: default: localhost user: description: - - C(iocage) user. - It is expected that the O(user) is able to connect to the - O(host) with SSH and execute the command C(iocage list). - This option is not required if O(host) is V(localhost). + - C(iocage) user. It is expected that the O(user) is able to connect to the O(host) with SSH and execute the command + C(iocage list). This option is not required if O(host=localhost). type: str sudo: description: @@ -61,8 +55,7 @@ options: version_added: 10.3.0 get_properties: description: - - Get jails' properties. - Creates dictionary C(iocage_properties) for each added host. + - Get jails' properties. Creates dictionary C(iocage_properties) for each added host. type: bool default: false env: @@ -84,7 +77,7 @@ options: description: - The name of the tag in the C(iocage properties notes) that contains the jails alias. - By default, the C(iocage list -l) column C(NAME) is used to name the jail. - - This option requires the notes format C("t1=v1 t2=v2 ...") + - This option requires the notes format C("t1=v1 t2=v2 ..."). - The option O(get_properties) must be enabled. type: str version_added: 11.0.0 @@ -95,21 +88,16 @@ options: default: false version_added: 11.0.0 notes: - - You might want to test the command C(ssh user@host iocage list -l) on - the controller before using this inventory plugin with O(user) specified - and with O(host) other than V(localhost). - - If you run this inventory plugin on V(localhost) C(ssh) is not used. - In this case, test the command C(iocage list -l). + - You might want to test the command C(ssh user@host iocage list -l) on the controller before using this inventory plugin + with O(user) specified and with O(host) other than V(localhost). + - If you run this inventory plugin on V(localhost) C(ssh) is not used. In this case, test the command C(iocage list -l). - This inventory plugin creates variables C(iocage_*) for each added host. - - The values of these variables are collected from the output of the - command C(iocage list -l). + - The values of these variables are collected from the output of the command C(iocage list -l). - The names of these variables correspond to the output columns. - The column C(NAME) is used to name the added host. - - The option O(hooks_results) expects the C(poolname) of a jail is mounted to - C(/poolname). For example, if you activate the pool C(iocage) this plugin - expects to find the O(hooks_results) items in the path - C(/iocage/iocage/jails//root). If you mount the C(poolname) to a - different path the easiest remedy is to create a symlink. + - The option O(hooks_results) expects the C(poolname) of a jail is mounted to C(/poolname). For example, if you activate + the pool C(iocage) this plugin expects to find the O(hooks_results) items in the path C(/iocage/iocage/jails//root). + If you mount the C(poolname) to a different path the easiest remedy is to create a symlink. """ EXAMPLES = r""" @@ -350,7 +338,7 @@ class InventoryModule(BaseInventoryPlugin, Constructable, Cacheable): for hostname, host_vars in results['_meta']['hostvars'].items(): iocage_hooks = [] for hook in hooks_results: - path = "/" + iocage_pool + "/iocage/jails/" + hostname + "/root" + hook + path = f"/{iocage_pool}/iocage/jails/{hostname}/root{hook}" cmd_cat_hook = cmd.copy() cmd_cat_hook.append('cat') cmd_cat_hook.append(path) diff --git a/plugins/inventory/linode.py b/plugins/inventory/linode.py index 3e7ddc5a82..bf6faba07a 100644 --- a/plugins/inventory/linode.py +++ b/plugins/inventory/linode.py @@ -9,15 +9,14 @@ DOCUMENTATION = r""" name: linode author: - Luke Murphy (@decentral1se) -short_description: Ansible dynamic inventory plugin for Linode. +short_description: Ansible dynamic inventory plugin for Linode requirements: - linode_api4 >= 2.0.0 description: - Reads inventories from the Linode API v4. - Uses a YAML configuration file that ends with linode.(yml|yaml). - Linode labels are used by default as the hostnames. - - The default inventory groups are built from groups (deprecated by - Linode) and not tags. + - The default inventory groups are built from groups (deprecated by Linode) and not tags. extends_documentation_fragment: - constructed - inventory_cache @@ -150,7 +149,7 @@ class InventoryModule(BaseInventoryPlugin, Constructable, Cacheable): access_token = self.get_option('access_token') if self.templar.is_template(access_token): - access_token = self.templar.template(variable=access_token, disable_lookups=False) + access_token = self.templar.template(variable=access_token) if access_token is None: raise AnsibleError(( diff --git a/plugins/inventory/lxd.py b/plugins/inventory/lxd.py index b1492d663c..efdca6563e 100644 --- a/plugins/inventory/lxd.py +++ b/plugins/inventory/lxd.py @@ -48,20 +48,19 @@ options: version_added: 8.0.0 server_check_hostname: description: - - This option controls if the server's hostname is checked as part of the HTTPS connection verification. - This can be useful to disable, if for example, the server certificate provided (see O(server_cert) option) - does not cover a name matching the one used to communicate with the server. Such mismatch is common as LXD - generates self-signed server certificates by default. + - This option controls if the server's hostname is checked as part of the HTTPS connection verification. This can be + useful to disable, if for example, the server certificate provided (see O(server_cert) option) does not cover a name + matching the one used to communicate with the server. Such mismatch is common as LXD generates self-signed server + certificates by default. type: bool default: true version_added: 8.0.0 trust_password: description: - The client trusted password. - - You need to set this password on the lxd server before - running this module using the following command - C(lxc config set core.trust_password ) - See U(https://documentation.ubuntu.com/lxd/en/latest/authentication/#adding-client-certificates-using-a-trust-password). + - You need to set this password on the lxd server before running this module using the following command C(lxc config + set core.trust_password ) See + U(https://documentation.ubuntu.com/lxd/en/latest/authentication/#adding-client-certificates-using-a-trust-password). - If O(trust_password) is set, this module send a request for authentication before sending any requests. type: str state: @@ -85,7 +84,7 @@ options: prefered_instance_network_interface: description: - If an instance has multiple network interfaces, select which one is the preferred as pattern. - - Combined with the first number that can be found e.g. 'eth' + 0. + - Combined with the first number that can be found, for example C(eth) + C(0). - The option has been renamed from O(prefered_container_network_interface) to O(prefered_instance_network_interface) in community.general 3.8.0. The old name still works as an alias. type: str @@ -101,7 +100,8 @@ options: choices: ['inet', 'inet6'] groupby: description: - - Create groups by the following keywords C(location), C(network_range), C(os), C(pattern), C(profile), C(release), C(type), C(vlanid). + - Create groups by the following keywords C(location), C(network_range), C(os), C(pattern), C(profile), C(release), + C(type), C(vlanid). - See example for syntax. type: dict """ diff --git a/plugins/inventory/nmap.py b/plugins/inventory/nmap.py index f8a792964c..3339d66b46 100644 --- a/plugins/inventory/nmap.py +++ b/plugins/inventory/nmap.py @@ -18,7 +18,7 @@ requirements: - nmap CLI installed options: plugin: - description: token that ensures this is a source file for the 'nmap' plugin. + description: Token that ensures this is a source file for the P(community.general.nmap#inventory) plugin. type: string required: true choices: ['nmap', 'community.general.nmap'] @@ -46,8 +46,8 @@ options: port: description: - Only scan specific port or port range (C(-p)). - - For example, you could pass V(22) for a single port, V(1-65535) for a range of ports, - or V(U:53,137,T:21-25,139,8080,S:9) to check port 53 with UDP, ports 21-25 with TCP, port 9 with SCTP, and ports 137, 139, and 8080 with all. + - For example, you could pass V(22) for a single port, V(1-65535) for a range of ports, or V(U:53,137,T:21-25,139,8080,S:9) + to check port 53 with UDP, ports 21-25 with TCP, port 9 with SCTP, and ports 137, 139, and 8080 with all. type: string version_added: 6.5.0 ports: @@ -55,23 +55,23 @@ options: type: boolean default: true ipv4: - description: use IPv4 type addresses + description: Use IPv4 type addresses. type: boolean default: true ipv6: - description: use IPv6 type addresses + description: Use IPv6 type addresses. type: boolean default: true udp_scan: description: - - Scan via UDP. + - Scan using UDP. - Depending on your system you might need O(sudo=true) for this to work. type: boolean default: false version_added: 6.1.0 icmp_timestamp: description: - - Scan via ICMP Timestamp (C(-PP)). + - Scan using ICMP Timestamp (C(-PP)). - Depending on your system you might need O(sudo=true) for this to work. type: boolean default: false @@ -98,7 +98,7 @@ options: version_added: 7.4.0 notes: - At least one of O(ipv4) or O(ipv6) is required to be V(true); both can be V(true), but they cannot both be V(false). - - 'TODO: add OS fingerprinting' + - 'TODO: add OS fingerprinting.' """ EXAMPLES = r""" --- diff --git a/plugins/inventory/online.py b/plugins/inventory/online.py index e88deb4012..8b4821a009 100644 --- a/plugins/inventory/online.py +++ b/plugins/inventory/online.py @@ -14,7 +14,7 @@ description: - Get inventory hosts from Scaleway (previously Online SAS or Online.net). options: plugin: - description: token that ensures this is a source file for the 'online' plugin. + description: Token that ensures this is a source file for the P(community.general.online#inventory) plugin. type: string required: true choices: ['online', 'community.general.online'] diff --git a/plugins/inventory/opennebula.py b/plugins/inventory/opennebula.py index 7bf6ccf224..8ced301dd1 100644 --- a/plugins/inventory/opennebula.py +++ b/plugins/inventory/opennebula.py @@ -16,8 +16,7 @@ extends_documentation_fragment: - constructed description: - Get inventory hosts from OpenNebula cloud. - - Uses an YAML configuration file ending with either C(opennebula.yml) or C(opennebula.yaml) - to set parameter values. + - Uses an YAML configuration file ending with either C(opennebula.yml) or C(opennebula.yaml) to set parameter values. - Uses O(api_authfile), C(~/.one/one_auth), or E(ONE_AUTH) pointing to a OpenNebula credentials file. options: plugin: @@ -28,8 +27,7 @@ options: api_url: description: - URL of the OpenNebula RPC server. - - It is recommended to use HTTPS so that the username/password are not - transferred over the network unencrypted. + - It is recommended to use HTTPS so that the username/password are not transferred over the network unencrypted. - If not set then the value of the E(ONE_URL) environment variable is used. env: - name: ONE_URL @@ -37,8 +35,8 @@ options: type: string api_username: description: - - Name of the user to login into the OpenNebula RPC server. If not set - then the value of the E(ONE_USERNAME) environment variable is used. + - Name of the user to login into the OpenNebula RPC server. If not set then the value of the E(ONE_USERNAME) environment + variable is used. env: - name: ONE_USERNAME type: string @@ -52,8 +50,8 @@ options: type: string api_authfile: description: - - If both O(api_username) or O(api_password) are not set, then it will try - authenticate with ONE auth file. Default path is C(~/.one/one_auth). + - If both O(api_username) or O(api_password) are not set, then it tries to authenticate with ONE auth file. Default + path is C(~/.one/one_auth). - Set environment variable E(ONE_AUTH) to override this path. env: - name: ONE_AUTH @@ -71,7 +69,7 @@ options: description: Only return servers filtered by this label. type: string group_by_labels: - description: Create host groups by vm labels + description: Create host groups by VM labels. type: bool default: true """ diff --git a/plugins/inventory/scaleway.py b/plugins/inventory/scaleway.py index 488bbbe084..c730049833 100644 --- a/plugins/inventory/scaleway.py +++ b/plugins/inventory/scaleway.py @@ -37,13 +37,14 @@ options: scw_profile: description: - The config profile to use in config file. - - By default uses the one specified as C(active_profile) in the config file, or falls back to V(default) if that is not defined. + - By default uses the one specified as C(active_profile) in the config file, or falls back to V(default) if that is + not defined. type: string version_added: 4.4.0 oauth_token: description: - Scaleway OAuth token. - - If not explicitly defined or in environment variables, it will try to lookup in the scaleway-cli configuration file + - If not explicitly defined or in environment variables, it tries to lookup in the C(scaleway-cli) configuration file (C($SCW_CONFIG_PATH), C($XDG_CONFIG_HOME/scw/config.yaml), or C(~/.config/scw/config.yaml)). - More details on L(how to generate token, https://www.scaleway.com/en/docs/generate-api-keys/). type: string @@ -65,10 +66,8 @@ options: - hostname - id variables: - description: 'Set individual variables: keys are variable names and - values are templates. Any value returned by the - L(Scaleway API, https://developer.scaleway.com/#servers-server-get) - can be used.' + description: 'Set individual variables: keys are variable names and values are templates. Any value returned by the L(Scaleway + API, https://developer.scaleway.com/#servers-server-get) can be used.' type: dict """ diff --git a/plugins/inventory/virtualbox.py b/plugins/inventory/virtualbox.py index d94cd64110..2eb52a617c 100644 --- a/plugins/inventory/virtualbox.py +++ b/plugins/inventory/virtualbox.py @@ -8,47 +8,48 @@ from __future__ import annotations DOCUMENTATION = r""" author: Unknown (!UNKNOWN) name: virtualbox -short_description: virtualbox inventory source +short_description: Virtualbox inventory source description: - Get inventory hosts from the local virtualbox installation. - Uses a YAML configuration file that ends with virtualbox.(yml|yaml) or vbox.(yml|yaml). - The inventory_hostname is always the 'Name' of the virtualbox instance. - Groups can be assigned to the VMs using C(VBoxManage). Multiple groups can be assigned by using V(/) as a delimeter. - - A separate parameter, O(enable_advanced_group_parsing) is exposed to change grouping behaviour. See the parameter documentation for details. + - A separate parameter, O(enable_advanced_group_parsing) is exposed to change grouping behaviour. See the parameter documentation + for details. extends_documentation_fragment: - constructed - inventory_cache options: plugin: - description: token that ensures this is a source file for the 'virtualbox' plugin + description: Token that ensures this is a source file for the P(community.general.virtualbox#inventory) plugin. type: string required: true choices: ['virtualbox', 'community.general.virtualbox'] running_only: - description: toggles showing all vms vs only those currently running + description: Toggles showing all VMs instead of only those currently running. type: boolean default: false settings_password_file: - description: provide a file containing the settings password (equivalent to --settingspwfile) + description: Provide a file containing the settings password (equivalent to C(--settingspwfile)). type: string network_info_path: - description: property path to query for network information (ansible_host) + description: Property path to query for network information (C(ansible_host)). type: string default: "/VirtualBox/GuestInfo/Net/0/V4/IP" query: - description: create vars from virtualbox properties + description: Create vars from virtualbox properties. type: dictionary default: {} enable_advanced_group_parsing: description: - - The default group parsing rule (when this setting is set to V(false)) is to split the VirtualBox VM's group based on the V(/) character and - assign the resulting list elements as an Ansible Group. - - Setting O(enable_advanced_group_parsing=true) changes this behaviour to match VirtualBox's interpretation of groups according to - U(https://www.virtualbox.org/manual/UserManual.html#gui-vmgroups). - Groups are now split using the V(,) character, and the V(/) character indicates nested groups. - - When enabled, a VM that's been configured using V(VBoxManage modifyvm "vm01" --groups "/TestGroup/TestGroup2,/TestGroup3") will result in - the group C(TestGroup2) being a child group of C(TestGroup); and - the VM being a part of C(TestGroup2) and C(TestGroup3). + - The default group parsing rule (when this setting is set to V(false)) is to split the VirtualBox VM's group based + on the V(/) character and assign the resulting list elements as an Ansible Group. + - Setting O(enable_advanced_group_parsing=true) changes this behaviour to match VirtualBox's interpretation of groups + according to U(https://www.virtualbox.org/manual/UserManual.html#gui-vmgroups). Groups are now split using the V(,) + character, and the V(/) character indicates nested groups. + - When enabled, a VM that's been configured using V(VBoxManage modifyvm "vm01" --groups "/TestGroup/TestGroup2,/TestGroup3") + results in the group C(TestGroup2) being a child group of C(TestGroup); and the VM being a part of C(TestGroup2) + and C(TestGroup3). default: false type: bool version_added: 9.2.0 diff --git a/plugins/inventory/xen_orchestra.py b/plugins/inventory/xen_orchestra.py index ce45b161c9..e6d828845a 100644 --- a/plugins/inventory/xen_orchestra.py +++ b/plugins/inventory/xen_orchestra.py @@ -31,7 +31,7 @@ options: description: - API host to XOA API. - If the value is not specified in the inventory configuration, the value of environment variable E(ANSIBLE_XO_HOST) - will be used instead. + is used instead. type: str env: - name: ANSIBLE_XO_HOST @@ -39,7 +39,7 @@ options: description: - Xen Orchestra user. - If the value is not specified in the inventory configuration, the value of environment variable E(ANSIBLE_XO_USER) - will be used instead. + is used instead. required: true type: str env: @@ -48,7 +48,7 @@ options: description: - Xen Orchestra password. - If the value is not specified in the inventory configuration, the value of environment variable E(ANSIBLE_XO_PASSWORD) - will be used instead. + is used instead. required: true type: str env: @@ -224,7 +224,7 @@ class InventoryModule(BaseInventoryPlugin, Constructable, Cacheable): vm_name_list.append(vm['name_label']) else: vm_duplicate_count = vm_name_list.count(vm['name_label']) - entry_name = vm['name_label'] + "_" + str(vm_duplicate_count) + entry_name = f"{vm['name_label']}_{vm_duplicate_count}" vm_name_list.append(vm['name_label']) else: entry_name = uuid @@ -284,7 +284,7 @@ class InventoryModule(BaseInventoryPlugin, Constructable, Cacheable): host_name_list.append(host['name_label']) else: host_duplicate_count = host_name_list.count(host['name_label']) - entry_name = host['name_label'] + "_" + str(host_duplicate_count) + entry_name = f"{host['name_label']}_{host_duplicate_count}" host_name_list.append(host['name_label']) else: entry_name = host['uuid'] diff --git a/plugins/lookup/bitwarden.py b/plugins/lookup/bitwarden.py index 13bf43b0d4..7d65792b7f 100644 --- a/plugins/lookup/bitwarden.py +++ b/plugins/lookup/bitwarden.py @@ -57,7 +57,7 @@ options: version_added: 8.4.0 result_count: description: - - Number of results expected for the lookup query. Task will fail if O(result_count) is set but does not match the number + - Number of results expected for the lookup query. Task fails if O(result_count) is set but does not match the number of query results. Leave empty to skip this check. type: int version_added: 10.4.0 diff --git a/plugins/lookup/cartesian.py b/plugins/lookup/cartesian.py index b41f7d8b5d..f2ad576907 100644 --- a/plugins/lookup/cartesian.py +++ b/plugins/lookup/cartesian.py @@ -9,7 +9,7 @@ __metaclass__ = type DOCUMENTATION = r""" author: Unknown (!UNKNOWN) name: cartesian -short_description: returns the cartesian product of lists +short_description: Returns the cartesian product of lists description: - Takes the input lists and returns a list that represents the product of the input lists. - It is clearer with an example, it turns [1, 2, 3], [a, b] into [1, a], [1, b], [2, a], [2, b], [3, a], [3, b]. diff --git a/plugins/lookup/chef_databag.py b/plugins/lookup/chef_databag.py index f3302c6e31..8fe53744ee 100644 --- a/plugins/lookup/chef_databag.py +++ b/plugins/lookup/chef_databag.py @@ -9,7 +9,7 @@ __metaclass__ = type DOCUMENTATION = r""" author: Unknown (!UNKNOWN) name: chef_databag -short_description: fetches data from a Chef Databag +short_description: Fetches data from a Chef Databag description: - 'This is a lookup plugin to provide access to chef data bags using the pychef package. It interfaces with the chef server API using the same methods to find a knife or chef-client config file to load parameters from, starting from either the diff --git a/plugins/lookup/collection_version.py b/plugins/lookup/collection_version.py index 2ed8a0c466..142c516df5 100644 --- a/plugins/lookup/collection_version.py +++ b/plugins/lookup/collection_version.py @@ -49,8 +49,8 @@ RETURN = r""" _raw: description: - The version number of the collections listed as input. - - If a collection can not be found, it will return the value provided in O(result_not_found). By default, this is V(none). - - If a collection can be found, but the version not identified, it will return the value provided in O(result_no_version). + - If a collection can not be found, it returns the value provided in O(result_not_found). By default, this is V(none). + - If a collection can be found, but the version not identified, it returns the value provided in O(result_no_version). By default, this is V(*). This can happen for collections installed from git which do not have a version number in V(galaxy.yml). type: list elements: str diff --git a/plugins/lookup/consul_kv.py b/plugins/lookup/consul_kv.py index 349b7f3db2..f57b3da891 100644 --- a/plugins/lookup/consul_kv.py +++ b/plugins/lookup/consul_kv.py @@ -24,7 +24,7 @@ options: elements: string recurse: type: boolean - description: If true, will retrieve all the values that have the given key as prefix. + description: If V(true), retrieves all the values that have the given key as prefix. default: false index: description: @@ -42,14 +42,14 @@ options: type: str description: - The target to connect to, must be a resolvable address. - - Will be determined from E(ANSIBLE_CONSUL_URL) if that is set. + - It is determined from E(ANSIBLE_CONSUL_URL) if that is set. ini: - section: lookup_consul key: host port: description: - The port of the target host to connect to. - - If you use E(ANSIBLE_CONSUL_URL) this value will be used from there. + - If you use E(ANSIBLE_CONSUL_URL) this value is used from there. type: int default: 8500 scheme: @@ -57,7 +57,7 @@ options: type: str description: - Whether to use http or https. - - If you use E(ANSIBLE_CONSUL_URL) this value will be used from there. + - If you use E(ANSIBLE_CONSUL_URL) this value is used from there. validate_certs: default: true description: Whether to verify the TLS connection or not. diff --git a/plugins/lookup/credstash.py b/plugins/lookup/credstash.py index 4273aa184a..a170b13d03 100644 --- a/plugins/lookup/credstash.py +++ b/plugins/lookup/credstash.py @@ -9,7 +9,7 @@ __metaclass__ = type DOCUMENTATION = r""" author: Unknown (!UNKNOWN) name: credstash -short_description: retrieve secrets from Credstash on AWS +short_description: Retrieve secrets from Credstash on AWS requirements: - credstash (python library) description: diff --git a/plugins/lookup/cyberarkpassword.py b/plugins/lookup/cyberarkpassword.py index a3a1468049..63834dce9b 100644 --- a/plugins/lookup/cyberarkpassword.py +++ b/plugins/lookup/cyberarkpassword.py @@ -9,7 +9,7 @@ __metaclass__ = type DOCUMENTATION = r""" author: Unknown (!UNKNOWN) name: cyberarkpassword -short_description: get secrets from CyberArk AIM +short_description: Get secrets from CyberArk AIM requirements: - CyberArk AIM tool installed description: @@ -39,8 +39,8 @@ options: description: For extra_params values please check parameters for clipasswordsdk in CyberArk's "Credential Provider and ASCP Implementation Guide". notes: - - For Ansible on Windows, please change the -parameters (C(-p), C(-d), and C(-o)) to /parameters (C(/p), C(/d), and C(/o)) and change the - location of C(CLIPasswordSDK.exe). + - For Ansible on Windows, please change the -parameters (C(-p), C(-d), and C(-o)) to /parameters (C(/p), C(/d), and C(/o)) + and change the location of C(CLIPasswordSDK.exe). """ EXAMPLES = r""" diff --git a/plugins/lookup/dependent.py b/plugins/lookup/dependent.py index b243ee8e1f..18d2a000d9 100644 --- a/plugins/lookup/dependent.py +++ b/plugins/lookup/dependent.py @@ -197,7 +197,10 @@ class LookupModule(LookupBase): result = [] if len(terms) > 0: - templar = Templar(loader=self._templar._loader) + if HAS_DATATAGGING: + templar = self._templar.copy_with_new_env(available_variables={}) + else: + templar = Templar(loader=self._templar._loader) data = [] vars_so_far = set() for index, term in enumerate(terms): diff --git a/plugins/lookup/dig.py b/plugins/lookup/dig.py index d958cf186f..07fc287d71 100644 --- a/plugins/lookup/dig.py +++ b/plugins/lookup/dig.py @@ -9,7 +9,7 @@ __metaclass__ = type DOCUMENTATION = r""" name: dig author: Jan-Piet Mens (@jpmens) -short_description: query DNS using the dnspython library +short_description: Query DNS using the dnspython library requirements: - dnspython (python library, http://www.dnspython.org/) description: @@ -21,10 +21,10 @@ description: - In addition to (default) A record, it is also possible to specify a different record type that should be queried. This can be done by either passing-in additional parameter of format qtype=TYPE to the dig lookup, or by appending /TYPE to the FQDN being queried. - - If multiple values are associated with the requested record, the results will be returned as a comma-separated list. In + - If multiple values are associated with the requested record, the results are returned as a comma-separated list. In such cases you may want to pass option C(wantlist=true) to the lookup call, or alternatively use C(query) instead of C(lookup), - which will result in the record values being returned as a list over which you can iterate later on. - - By default, the lookup will rely on system-wide configured DNS servers for performing the query. It is also possible to + which results in the record values being returned as a list over which you can iterate later on. + - By default, the lookup relies on system-wide configured DNS servers for performing the query. It is also possible to explicitly specify DNS servers to query using the @DNS_SERVER_1,DNS_SERVER_2,...,DNS_SERVER_N notation. This needs to be passed-in as an additional parameter to the lookup. options: @@ -75,16 +75,16 @@ options: fail_on_error: description: - Abort execution on lookup errors. - - The default for this option will likely change to V(true) in the future. The current default, V(false), is used for - backwards compatibility, and will result in empty strings or the string V(NXDOMAIN) in the result in case of errors. + - The default for this option is likely to change to V(true) in the future. The current default, V(false), is used for + backwards compatibility, and results in empty strings or the string V(NXDOMAIN) in the result in case of errors. default: false type: bool version_added: 5.4.0 real_empty: description: - Return empty result without empty strings, and return empty list instead of V(NXDOMAIN). - - The default for this option will likely change to V(true) in the future. - - This option will be forced to V(true) if multiple domains to be queried are specified. + - The default for this option is likely to change to V(true) in the future. + - This option is forced to V(true) if multiple domains to be queried are specified. default: false type: bool version_added: 6.0.0 @@ -104,10 +104,9 @@ options: type: int version_added: 9.5.0 notes: - - V(ALL) is not a record in itself, merely the listed fields are available for any record results you retrieve in the form of - a dictionary. - - While the plugin supports anything which C(dnspython) supports out of the box, only a subset can be converted - into a dictionary. + - V(ALL) is not a record in itself, merely the listed fields are available for any record results you retrieve in the form + of a dictionary. + - While the plugin supports anything which C(dnspython) supports out of the box, only a subset can be converted into a dictionary. - If you need to obtain the AAAA record (IPv6 address), you must specify the record type explicitly. Syntax for specifying the record type is shown in the examples below. - The trailing dot in most of the examples listed is purely optional, but is specified for completeness/correctness sake. diff --git a/plugins/lookup/dnstxt.py b/plugins/lookup/dnstxt.py index eb24a63e99..fb0a5d5138 100644 --- a/plugins/lookup/dnstxt.py +++ b/plugins/lookup/dnstxt.py @@ -9,7 +9,7 @@ __metaclass__ = type DOCUMENTATION = r""" name: dnstxt author: Jan-Piet Mens (@jpmens) -short_description: query a domain(s)'s DNS txt fields +short_description: Query a domain(s)'s DNS txt fields requirements: - dns/dns.resolver (python library) description: @@ -23,7 +23,7 @@ options: real_empty: description: - Return empty result without empty strings, and return empty list instead of V(NXDOMAIN). - - The default for this option will likely change to V(true) in the future. + - The default for this option is likely to change to V(true) in the future. default: false type: bool version_added: 6.0.0 diff --git a/plugins/lookup/etcd.py b/plugins/lookup/etcd.py index d8c708bfc8..d8d992e79f 100644 --- a/plugins/lookup/etcd.py +++ b/plugins/lookup/etcd.py @@ -12,7 +12,7 @@ DOCUMENTATION = r""" author: - Jan-Piet Mens (@jpmens) name: etcd -short_description: get info from an etcd server +short_description: Get info from an etcd server description: - Retrieves data from an etcd server. options: diff --git a/plugins/lookup/filetree.py b/plugins/lookup/filetree.py index fd064cb4e6..24e0c20eea 100644 --- a/plugins/lookup/filetree.py +++ b/plugins/lookup/filetree.py @@ -9,11 +9,11 @@ __metaclass__ = type DOCUMENTATION = r""" name: filetree author: Dag Wieers (@dagwieers) -short_description: recursively match all files in a directory tree +short_description: Recursively match all files in a directory tree description: - This lookup enables you to template a complete tree of files on a target system while retaining permissions and ownership. - Supports directories, files and symlinks, including SELinux and other file properties. - - If you provide more than one path, it will implement a first_found logic, and will not process entries it already processed + - If you provide more than one path, it implements a first_found logic, and does not process entries it already processed in previous paths. This enables merging different trees in order of importance, or add role_vars to specific paths to influence different instances of the same role. options: diff --git a/plugins/lookup/flattened.py b/plugins/lookup/flattened.py index 4b703458cc..de4a21fbdd 100644 --- a/plugins/lookup/flattened.py +++ b/plugins/lookup/flattened.py @@ -9,9 +9,9 @@ __metaclass__ = type DOCUMENTATION = r""" name: flattened author: Serge van Ginderachter (!UNKNOWN) -short_description: return single list completely flattened +short_description: Return single list completely flattened description: - - Given one or more lists, this lookup will flatten any list elements found recursively until only 1 list is left. + - Given one or more lists, this lookup flattens any list elements found recursively until only 1 list is left. options: _terms: description: Lists to flatten. @@ -19,7 +19,7 @@ options: elements: raw required: true notes: - - Unlike the P(ansible.builtin.items#lookup) lookup which only flattens 1 level, this plugin will continue to flatten until + - Unlike the P(ansible.builtin.items#lookup) lookup which only flattens 1 level, this plugin continues to flatten until it cannot find lists anymore. - Aka highlander plugin, there can only be one (list). """ diff --git a/plugins/lookup/hiera.py b/plugins/lookup/hiera.py index 7aacad4e26..27f133d78a 100644 --- a/plugins/lookup/hiera.py +++ b/plugins/lookup/hiera.py @@ -10,7 +10,7 @@ DOCUMENTATION = r""" author: - Juan Manuel Parrilla (@jparrill) name: hiera -short_description: get info from hiera data +short_description: Get info from hiera data requirements: - hiera (command line utility) description: diff --git a/plugins/lookup/keyring.py b/plugins/lookup/keyring.py index 2cbc2ea8c2..75d808e736 100644 --- a/plugins/lookup/keyring.py +++ b/plugins/lookup/keyring.py @@ -13,7 +13,7 @@ author: - Samuel Boucher (!UNKNOWN) requirements: - keyring (python library) -short_description: grab secrets from the OS keyring +short_description: Grab secrets from the OS keyring description: - Allows you to access data stored in the OS provided keyring/keychain. """ diff --git a/plugins/lookup/lastpass.py b/plugins/lookup/lastpass.py index 28b9af3466..2633848937 100644 --- a/plugins/lookup/lastpass.py +++ b/plugins/lookup/lastpass.py @@ -13,7 +13,7 @@ author: requirements: - lpass (command line utility) - must have already logged into LastPass -short_description: fetch data from LastPass +short_description: Fetch data from LastPass description: - Use the lpass command line utility to fetch specific fields from LastPass. options: diff --git a/plugins/lookup/lmdb_kv.py b/plugins/lookup/lmdb_kv.py index d44aac55c3..b3728abb17 100644 --- a/plugins/lookup/lmdb_kv.py +++ b/plugins/lookup/lmdb_kv.py @@ -11,7 +11,7 @@ name: lmdb_kv author: - Jan-Piet Mens (@jpmens) version_added: '0.2.0' -short_description: fetch data from LMDB +short_description: Fetch data from LMDB description: - This lookup returns a list of results from an LMDB DB corresponding to a list of items given to it. requirements: diff --git a/plugins/lookup/merge_variables.py b/plugins/lookup/merge_variables.py index f3f185a164..ffe76c3ea0 100644 --- a/plugins/lookup/merge_variables.py +++ b/plugins/lookup/merge_variables.py @@ -12,7 +12,7 @@ author: - Mark Ettema (@m-a-r-k-e) - Alexander Petrenz (@alpex8) name: merge_variables -short_description: merge variables whose names match a given pattern +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. @@ -20,8 +20,8 @@ version_added: 6.5.0 options: _terms: description: - - Depending on the value of O(pattern_type), this is a list of prefixes, suffixes, or regular expressions that will - be used to match all variables that should be merged. + - Depending on the value of O(pattern_type), this is a list of prefixes, suffixes, or regular expressions that is used + to match all variables that should be merged. required: true type: list elements: str @@ -45,11 +45,11 @@ options: type: raw override: description: - - Return an error, print a warning or ignore it when a key will be overwritten. + - Return an error, print a warning or ignore it when a key is overwritten. - The default behavior V(error) makes the plugin fail when a key would be overwritten. - When V(warn) and V(ignore) are used, note that it is important to know that the variables are sorted by name before - being merged. Keys for later variables in this order will overwrite keys of the same name for variables earlier in - this order. To avoid potential confusion, better use O(override=error) whenever possible. + being merged. Keys for later variables in this order overwrite keys of the same name for variables earlier in this + order. To avoid potential confusion, better use O(override=error) whenever possible. type: str default: 'error' choices: @@ -111,8 +111,7 @@ example_b: "{{ lookup('community.general.merge_variables', '^.+__test_list$', in RETURN = r""" _raw: - description: In case the search matches list items, a list will be returned. In case the search matches dicts, a dict will - be returned. + description: In case the search matches list items, a list is returned. In case the search matches dicts, a dict is returned. type: raw elements: raw """ diff --git a/plugins/lookup/onepassword.py b/plugins/lookup/onepassword.py index d30234f14d..3dc589eaaf 100644 --- a/plugins/lookup/onepassword.py +++ b/plugins/lookup/onepassword.py @@ -41,7 +41,6 @@ extends_documentation_fragment: """ EXAMPLES = r""" ---- # These examples only work when already signed in to 1Password - name: Retrieve password for KITT when already signed in to 1Password ansible.builtin.debug: diff --git a/plugins/lookup/passwordstore.py b/plugins/lookup/passwordstore.py index 54e89d6f8f..8f87e87034 100644 --- a/plugins/lookup/passwordstore.py +++ b/plugins/lookup/passwordstore.py @@ -11,7 +11,7 @@ DOCUMENTATION = r""" name: passwordstore author: - Patrick Deelman (!UNKNOWN) -short_description: manage passwords with passwordstore.org's pass utility +short_description: Manage passwords with passwordstore.org's pass utility description: - Enables Ansible to retrieve, create or update passwords from the passwordstore.org pass utility. It can also retrieve, create or update YAML style keys stored as multilines in the passwordfile. @@ -55,7 +55,7 @@ options: subkey: description: - By default return a specific subkey of the password. When set to V(password), always returns the first line. - - With O(overwrite=true), it will create the subkey and return it. + - With O(overwrite=true), it creates the subkey and returns it. type: str default: password userpass: @@ -77,10 +77,10 @@ options: description: - List of preference about what to do if the password file is missing. - If O(create=true), the value for this option is ignored and assumed to be V(create). - - If set to V(error), the lookup will error out if the passname does not exist. - - If set to V(create), the passname will be created with the provided length O(length) if it does not exist. - - If set to V(empty) or V(warn), will return a V(none) in case the passname does not exist. When using C(lookup) and - not C(query), this will be translated to an empty string. + - If set to V(error), the lookup fails out if the passname does not exist. + - If set to V(create), the passname is created with the provided length O(length) if it does not exist. + - If set to V(empty) or V(warn), it returns a V(none) in case the passname does not exist. When using C(lookup) and + not C(query), this is translated to an empty string. version_added: 3.1.0 type: str default: error @@ -146,8 +146,8 @@ options: missing_subkey: description: - Preference about what to do if the password subkey is missing. - - If set to V(error), the lookup will error out if the subkey does not exist. - - If set to V(empty) or V(warn), will return a V(none) in case the subkey does not exist. + - If set to V(error), the lookup fails out if the subkey does not exist. + - If set to V(empty) or V(warn), it returns a V(none) in case the subkey does not exist. version_added: 8.6.0 type: str default: empty diff --git a/plugins/lookup/random_pet.py b/plugins/lookup/random_pet.py index ff51fc8b31..8f9b3cbd00 100644 --- a/plugins/lookup/random_pet.py +++ b/plugins/lookup/random_pet.py @@ -27,7 +27,7 @@ options: length: description: - The maximal length of every component of the pet name. - - Values below 3 will be set to 3 by petname. + - Values below V(3) are set to V(3) by petname. default: 6 type: int prefix: diff --git a/plugins/lookup/random_string.py b/plugins/lookup/random_string.py index bd72916d92..4b227d3dca 100644 --- a/plugins/lookup/random_string.py +++ b/plugins/lookup/random_string.py @@ -41,9 +41,9 @@ options: special: description: - Include special characters in the string. - - Special characters are taken from Python standard library C(string). - See L(the documentation of string.punctuation,https://docs.python.org/3/library/string.html#string.punctuation) - for which characters will be used. + - Special characters are taken from Python standard library C(string). See L(the documentation of + string.punctuation,https://docs.python.org/3/library/string.html#string.punctuation) + for which characters are used. - The choice of special characters can be changed to setting O(override_special). default: true type: bool diff --git a/plugins/lookup/redis.py b/plugins/lookup/redis.py index 3c8ff07a23..bb5a122da3 100644 --- a/plugins/lookup/redis.py +++ b/plugins/lookup/redis.py @@ -11,7 +11,7 @@ name: redis author: - Jan-Piet Mens (@jpmens) - Ansible Core Team -short_description: fetch data from Redis +short_description: Fetch data from Redis description: - This lookup returns a list of results from a Redis DB corresponding to a list of items given to it. requirements: diff --git a/plugins/lookup/revbitspss.py b/plugins/lookup/revbitspss.py index c40140671d..6b31963f4a 100644 --- a/plugins/lookup/revbitspss.py +++ b/plugins/lookup/revbitspss.py @@ -19,18 +19,18 @@ requirements: options: _terms: description: - - This will be an array of keys for secrets which you want to fetch from RevBits PAM. + - This is an array of keys for secrets which you want to fetch from RevBits PAM. required: true type: list elements: string base_url: description: - - This will be the base URL of the server, for example V(https://server-url-here). + - This is the base URL of the server, for example V(https://server-url-here). required: true type: string api_key: description: - - This will be the API key for authentication. You can get it from the RevBits PAM secret manager module. + - This is the API key for authentication. You can get it from the RevBits PAM secret manager module. required: true type: string """ @@ -39,7 +39,7 @@ RETURN = r""" _list: description: - The JSON responses which you can access with defined keys. - - If you are fetching secrets named as UUID, PASSWORD it will gives you the dict of all secrets. + - If you are fetching secrets named as UUID, PASSWORD it returns the dict of all secrets. type: list elements: dict """ diff --git a/plugins/lookup/shelvefile.py b/plugins/lookup/shelvefile.py index 4921e050a0..f4142f67c6 100644 --- a/plugins/lookup/shelvefile.py +++ b/plugins/lookup/shelvefile.py @@ -9,7 +9,7 @@ __metaclass__ = type DOCUMENTATION = r""" name: shelvefile author: Alejandro Guirao (!UNKNOWN) -short_description: read keys from Python shelve file +short_description: Read keys from Python shelve file description: - Read keys from Python shelve file. options: diff --git a/plugins/lookup/tss.py b/plugins/lookup/tss.py index 6a97d4b29c..3d73fcbe99 100644 --- a/plugins/lookup/tss.py +++ b/plugins/lookup/tss.py @@ -33,14 +33,14 @@ options: fetch_secret_ids_from_folder: description: - Boolean flag which indicates whether secret IDs are in a folder is fetched by folder ID or not. - - V(true) then the terms will be considered as a folder IDs. Otherwise (default), they are considered as secret IDs. + - V(true) then the terms are considered as a folder IDs. Otherwise (default), they are considered as secret IDs. required: false type: bool version_added: 7.1.0 fetch_attachments: description: - - Boolean flag which indicates whether attached files will get downloaded or not. - - The download will only happen if O(file_download_path) has been provided. + - Boolean flag which indicates whether attached files are downloaded or not. + - The download only happens if O(file_download_path) has been provided. required: false type: bool version_added: 7.0.0 diff --git a/plugins/module_utils/identity/keycloak/keycloak.py b/plugins/module_utils/identity/keycloak/keycloak.py index 45216a9302..e053eca305 100644 --- a/plugins/module_utils/identity/keycloak/keycloak.py +++ b/plugins/module_utils/identity/keycloak/keycloak.py @@ -248,6 +248,29 @@ def _request_token_using_refresh_token(module_params): return _token_request(module_params, payload) +def _request_token_using_client_credentials(module_params): + """ Obtains connection header with token for the authentication, + using the provided auth_client_id and auth_client_secret by grant_type + client_credentials. Ensure that the used client uses client authorization + with service account roles enabled and required service roles assigned. + :param module_params: parameters of the module. Must include 'auth_client_id' + and 'auth_client_secret'.. + :return: connection header + """ + client_id = module_params.get('auth_client_id') + client_secret = module_params.get('auth_client_secret') + + temp_payload = { + 'grant_type': 'client_credentials', + 'client_id': client_id, + 'client_secret': client_secret, + } + # Remove empty items, for instance missing client_secret + payload = {k: v for k, v in temp_payload.items() if v is not None} + + return _token_request(module_params, payload) + + def get_token(module_params): """ Obtains connection header with token for the authentication, token already given or obtained from credentials @@ -257,7 +280,13 @@ def get_token(module_params): token = module_params.get('token') if token is None: - token = _request_token_using_credentials(module_params) + auth_client_id = module_params.get('auth_client_id') + auth_client_secret = module_params.get('auth_client_secret') + auth_username = module_params.get('auth_username') + if auth_client_id is not None and auth_client_secret is not None and auth_username is None: + token = _request_token_using_client_credentials(module_params) + else: + token = _request_token_using_credentials(module_params) return { 'Authorization': 'Bearer ' + token, @@ -387,6 +416,21 @@ class KeycloakAPI(object): r = make_request_catching_401() + if isinstance(r, Exception): + # Try to re-auth with client_id and client_secret, if available + auth_client_id = self.module.params.get('auth_client_id') + auth_client_secret = self.module.params.get('auth_client_secret') + if auth_client_id is not None and auth_client_secret is not None: + try: + token = _request_token_using_client_credentials(self.module.params) + self.restheaders['Authorization'] = 'Bearer ' + token + + r = make_request_catching_401() + except KeycloakError as e: + # Token refresh returns 400 if token is expired/invalid, so continue on if we get a 400 + if e.authError is not None and e.authError.code != 400: + raise e + if isinstance(r, Exception): # Either no re-auth options were available, or they all failed raise r @@ -1917,7 +1961,7 @@ class KeycloakAPI(object): and composite["name"] == existing_composite["name"]): composite_found = True break - if (not composite_found and ('state' not in composite or composite['state'] == 'present')): + if not composite_found and ('state' not in composite or composite['state'] == 'present'): if "client_id" in composite and composite['client_id'] is not None: client_roles = self.get_client_roles(clientid=composite['client_id'], realm=realm) for client_role in client_roles: diff --git a/plugins/module_utils/pacemaker.py b/plugins/module_utils/pacemaker.py index df13cfebd1..f0f54cce9d 100644 --- a/plugins/module_utils/pacemaker.py +++ b/plugins/module_utils/pacemaker.py @@ -14,7 +14,12 @@ _state_map = { "absent": "remove", "status": "status", "enabled": "enable", - "disabled": "disable" + "disabled": "disable", + "online": "start", + "offline": "stop", + "maintenance": "set", + "config": "config", + "cleanup": "cleanup", } @@ -38,20 +43,19 @@ def fmt_resource_argument(value): def get_pacemaker_maintenance_mode(runner): - with runner("config") as ctx: - rc, out, err = ctx.run() + with runner("cli_action config") as ctx: + rc, out, err = ctx.run(cli_action="property") maintenance_mode_output = list(filter(lambda string: "maintenance-mode=true" in string.lower(), out.splitlines())) return bool(maintenance_mode_output) -def pacemaker_runner(module, cli_action=None, **kwargs): +def pacemaker_runner(module, **kwargs): runner_command = ['pcs'] - if cli_action: - runner_command.append(cli_action) runner = CmdRunner( module, command=runner_command, arg_formats=dict( + cli_action=cmd_runner_fmt.as_list(), state=cmd_runner_fmt.as_map(_state_map), name=cmd_runner_fmt.as_list(), resource_type=cmd_runner_fmt.as_func(fmt_resource_type), @@ -59,6 +63,7 @@ def pacemaker_runner(module, cli_action=None, **kwargs): resource_operation=cmd_runner_fmt.as_func(fmt_resource_operation), resource_meta=cmd_runner_fmt.stack(cmd_runner_fmt.as_opt_val)("meta"), resource_argument=cmd_runner_fmt.as_func(fmt_resource_argument), + apply_all=cmd_runner_fmt.as_bool("--all"), wait=cmd_runner_fmt.as_opt_eq_val("--wait"), config=cmd_runner_fmt.as_fixed("config"), force=cmd_runner_fmt.as_bool("--force"), diff --git a/plugins/module_utils/python_runner.py b/plugins/module_utils/python_runner.py index b65867c61e..a8e9e651be 100644 --- a/plugins/module_utils/python_runner.py +++ b/plugins/module_utils/python_runner.py @@ -19,7 +19,7 @@ class PythonRunner(CmdRunner): self.venv = venv self.has_venv = venv is not None - if (os.path.isabs(python) or '/' in python): + if os.path.isabs(python) or '/' in python: self.python = python elif self.has_venv: if path_prefix is None: diff --git a/plugins/modules/aerospike_migrations.py b/plugins/modules/aerospike_migrations.py index 9a6084a6a1..12401cb372 100644 --- a/plugins/modules/aerospike_migrations.py +++ b/plugins/modules/aerospike_migrations.py @@ -70,7 +70,7 @@ options: type: bool min_cluster_size: description: - - Check will return bad until cluster size is met or until tries is exhausted. + - Check fails until cluster size is met or until tries is exhausted. required: false type: int default: 1 @@ -94,10 +94,10 @@ options: default: migrate_rx_partitions_remaining target_cluster_size: description: - - When all aerospike builds in the cluster are greater than version 4.3, then the C(cluster-stable) info command will - be used. Inside this command, you can optionally specify what the target cluster size is - but it is not necessary. + - When all aerospike builds in the cluster are greater than version 4.3, then the C(cluster-stable) info command is + used. Inside this command, you can optionally specify what the target cluster size is - but it is not necessary. You can still rely on O(min_cluster_size) if you do not want to use this option. - - If this option is specified on a cluster that has at least one host <4.3 then it will be ignored until the min version + - If this option is specified on a cluster that has at least one host <4.3 then it is ignored until the min version reaches 4.3. required: false type: int diff --git a/plugins/modules/airbrake_deployment.py b/plugins/modules/airbrake_deployment.py index d772062da4..5961154354 100644 --- a/plugins/modules/airbrake_deployment.py +++ b/plugins/modules/airbrake_deployment.py @@ -71,7 +71,7 @@ options: type: str validate_certs: description: - - If V(false), SSL certificates for the target URL will not be validated. This should only be used on personally controlled + - If V(false), SSL certificates for the target URL is not validated. This should only be used on personally controlled sites using self-signed certificates. required: false default: true diff --git a/plugins/modules/aix_filesystem.py b/plugins/modules/aix_filesystem.py index 8934d583ff..d952726310 100644 --- a/plugins/modules/aix_filesystem.py +++ b/plugins/modules/aix_filesystem.py @@ -47,7 +47,7 @@ options: description: - Logical volume (LV) device name or remote export device to create a NFS file system. - It is used to create a file system on an already existing logical volume or the exported NFS file system. - - If not mentioned a new logical volume name will be created following AIX standards (LVM). + - If not mentioned a new logical volume name is created following AIX standards (LVM). type: str fs_type: description: @@ -81,14 +81,14 @@ options: size: description: - Specifies the file system size. - - For already V(present) it will be resized. - - 512-byte blocks, Megabytes or Gigabytes. If the value has M specified it will be in Megabytes. If the value has G - specified it will be in Gigabytes. - - If no M or G the value will be 512-byte blocks. - - If "+" is specified in begin of value, the value will be added. - - If "-" is specified in begin of value, the value will be removed. - - If "+" or "-" is not specified, the total value will be the specified. - - Size will respects the LVM AIX standards. + - For already present it resizes the filesystem. + - 512-byte blocks, megabytes or gigabytes. If the value has M specified it is in megabytes. If the value has G specified + it is in gigabytes. + - If no M or G the value is 512-byte blocks. + - If V(+) is specified in begin of value, the value is added. + - If V(-) is specified in begin of value, the value is removed. + - If neither V(+) nor V(-) is specified, then the total value is the specified. + - Size respects the LVM AIX standards. type: str state: description: diff --git a/plugins/modules/aix_lvg.py b/plugins/modules/aix_lvg.py index 29c0b7d3f9..c41e21124e 100644 --- a/plugins/modules/aix_lvg.py +++ b/plugins/modules/aix_lvg.py @@ -36,7 +36,7 @@ options: description: - List of comma-separated devices to use as physical devices in this volume group. - Required when creating or extending (V(present) state) the volume group. - - If not informed reducing (V(absent) state) the volume group will be removed. + - If not informed reducing (V(absent) state) the volume group is removed. type: list elements: str state: @@ -57,7 +57,7 @@ options: choices: [big, normal, scalable] default: normal notes: - - AIX will permit remove VG only if all LV/Filesystems are not busy. + - AIX allows removing VG only if all LV/Filesystems are not busy. - Module does not modify PP size for already present volume group. """ diff --git a/plugins/modules/ali_instance.py b/plugins/modules/ali_instance.py index 1a66850e14..050794d55c 100644 --- a/plugins/modules/ali_instance.py +++ b/plugins/modules/ali_instance.py @@ -45,8 +45,7 @@ options: type: str availability_zone: description: - - Aliyun availability zone ID in which to launch the instance. If it is not specified, it will be allocated by system - automatically. + - Aliyun availability zone ID in which to launch the instance. If it is not specified, it is allocated by system automatically. aliases: ['alicloud_zone', 'zone_id'] type: str image_id: @@ -109,7 +108,7 @@ options: version_added: '0.2.0' password: description: - - The password to login instance. After rebooting instances, modified password will take effect. + - The password to login instance. After rebooting instances, modified password is effective. type: str system_disk_category: description: @@ -140,7 +139,7 @@ options: description: - O(count) determines how many instances based on a specific tag criteria should be present. This can be expressed in multiple ways and is shown in the EXAMPLES section. The specified count_tag must already exist or be passed in as - the O(tags) option. If it is not specified, it will be replaced by O(instance_name). + the O(tags) option. If it is not specified, it is replaced by O(instance_name). type: str allocate_public_ip: description: @@ -172,8 +171,7 @@ options: type: int instance_ids: description: - - A list of instance IDs. It is required when need to operate existing instances. If it is specified, O(count) will - lose efficacy. + - A list of instance IDs. It is required when need to operate existing instances. If it is specified, O(count) is ignored. type: list elements: str force: @@ -203,7 +201,7 @@ options: user_data: description: - User-defined data to customize the startup behaviors of an ECS instance and to pass data into an ECS instance. It - only will take effect when launching the new ECS instances. + only takes effect when launching the new ECS instances. required: false type: str ram_role_name: @@ -226,7 +224,7 @@ options: version_added: '0.2.0' period_unit: description: - - The duration unit that you will buy the resource. It is valid when O(instance_charge_type=PrePaid). + - The duration unit that you are buying the resource. It is valid when O(instance_charge_type=PrePaid). choices: ['Month', 'Week'] default: 'Month' type: str @@ -424,7 +422,7 @@ instances: type: str sample: 42.10.2.2 expired_time: - description: The time the instance will expire. + description: The time the instance expires. returned: always type: str sample: "2099-12-31T15:59Z" @@ -615,7 +613,7 @@ ids: description: List of ECS instance IDs. returned: always type: list - sample: [i-12345er, i-3245fs] + sample: ["i-12345er", "i-3245fs"] """ import re diff --git a/plugins/modules/ali_instance_info.py b/plugins/modules/ali_instance_info.py index 00e77b1ab2..7be5b8cda6 100644 --- a/plugins/modules/ali_instance_info.py +++ b/plugins/modules/ali_instance_info.py @@ -167,7 +167,7 @@ instances: type: str sample: 42.10.2.2 expired_time: - description: The time the instance will expire. + description: The time the instance expires. returned: always type: str sample: "2099-12-31T15:59Z" @@ -341,7 +341,7 @@ ids: description: List of ECS instance IDs. returned: always type: list - sample: [i-12345er, i-3245fs] + sample: ["i-12345er", "i-3245fs"] """ from ansible.module_utils.basic import AnsibleModule, missing_required_lib diff --git a/plugins/modules/android_sdk.py b/plugins/modules/android_sdk.py index b90da54d69..a9bffa50ea 100644 --- a/plugins/modules/android_sdk.py +++ b/plugins/modules/android_sdk.py @@ -28,8 +28,8 @@ version_added: 10.2.0 options: accept_licenses: description: - - If this is set to V(true), the module will try to accept license prompts generated by C(sdkmanager) during package - installation. Otherwise, every license prompt will be rejected. + - If this is set to V(true), the module attempts to accept license prompts generated by C(sdkmanager) during package + installation. Otherwise, every license prompt is rejected. type: bool default: false name: @@ -64,16 +64,16 @@ requirements: notes: - For some of the packages installed by C(sdkmanager) is it necessary to accept licenses. Usually it is done through command line prompt in a form of a Y/N question when a licensed package is requested to be installed. If there are several packages - requested for installation and at least two of them belong to different licenses, the C(sdkmanager) tool will prompt for - these licenses in a loop. In order to install packages, the module must be able to answer these license prompts. Currently, + requested for installation and at least two of them belong to different licenses, the C(sdkmanager) tool prompts for these + licenses in a loop. In order to install packages, the module must be able to answer these license prompts. Currently, it is only possible to answer one license prompt at a time, meaning that instead of installing multiple packages as a - single invocation of the C(sdkmanager --install) command, it will be done by executing the command independently for each - package. This makes sure that at most only one license prompt will need to be answered. At the time of writing this module, - a C(sdkmanager)'s package may belong to at most one license type that needs to be accepted. However, if this changes in - the future, the module may hang as there might be more prompts generated by the C(sdkmanager) tool which the module will - not be able to answer. If this becomes the case, file an issue and in the meantime, consider accepting all the licenses - in advance, as it is described in the C(sdkmanager) L(documentation,https://developer.android.com/tools/sdkmanager#accept-licenses), - for instance, using the M(ansible.builtin.command) module. + single invocation of the C(sdkmanager --install) command, it is done by executing the command independently for each package. + This makes sure that at most only one license prompt needs to be answered. At the time of writing this module, a C(sdkmanager)'s + package may belong to at most one license type that needs to be accepted. However, if this changes in the future, the + module may hang as there might be more prompts generated by the C(sdkmanager) tool which the module is unable to answer. + If this becomes the case, file an issue and in the meantime, consider accepting all the licenses in advance, as it is + described in the C(sdkmanager) L(documentation,https://developer.android.com/tools/sdkmanager#accept-licenses), for instance, + using the M(ansible.builtin.command) module. seealso: - name: sdkmanager tool documentation description: Detailed information of how to install and use sdkmanager command line tool. @@ -126,13 +126,13 @@ installed: description: A list of packages that have been installed. returned: when packages have changed type: list - sample: ['build-tools;34.0.0', 'platform-tools'] + sample: ["build-tools;34.0.0", "platform-tools"] removed: description: A list of packages that have been removed. returned: when packages have changed type: list - sample: ['build-tools;34.0.0', 'platform-tools'] + sample: ["build-tools;34.0.0", "platform-tools"] """ from ansible_collections.community.general.plugins.module_utils.mh.module_helper import StateModuleHelper diff --git a/plugins/modules/ansible_galaxy_install.py b/plugins/modules/ansible_galaxy_install.py index ec094090a1..4712ca9a3c 100644 --- a/plugins/modules/ansible_galaxy_install.py +++ b/plugins/modules/ansible_galaxy_install.py @@ -18,8 +18,8 @@ description: - This module allows the installation of Ansible collections or roles using C(ansible-galaxy). notes: - Support for B(Ansible 2.9/2.10) was removed in community.general 8.0.0. - - The module will try and run using the C(C.UTF-8) locale. If that fails, it will try C(en_US.UTF-8). If that one also fails, - the module will fail. + - The module tries to run using the C(C.UTF-8) locale. If that fails, it tries C(en_US.UTF-8). If that one also fails, the + module fails. seealso: - name: C(ansible-galaxy) command manual page description: Manual page for the command. @@ -37,10 +37,10 @@ attributes: options: state: description: - - If O(state=present) then the collection or role will be installed. Note that the collections and roles are not updated + - If O(state=present) then the collection or role is installed. Note that the collections and roles are not updated with this option. - - Currently the O(state=latest) is ignored unless O(type=collection), and it will ensure the collection is installed - and updated to the latest available version. + - Currently the O(state=latest) is ignored unless O(type=collection), and it ensures the collection is installed and + updated to the latest available version. - Please note that O(force=true) can be used to perform upgrade regardless of O(type). type: str choices: [present, latest] @@ -71,7 +71,7 @@ options: dest: description: - The path to the directory containing your collections or roles, according to the value of O(type). - - Please notice that C(ansible-galaxy) will not install collections with O(type=both), when O(requirements_file) contains + - Please notice that C(ansible-galaxy) does not install collections with O(type=both), when O(requirements_file) contains both roles and collections and O(dest) is specified. type: path no_deps: @@ -83,7 +83,7 @@ options: force: description: - Force overwriting existing roles and/or collections. - - It can be used for upgrading, but the module output will always report C(changed=true). + - It can be used for upgrading, but the module output always reports C(changed=true). - Using O(force=true) is mandatory when downgrading. type: bool default: false diff --git a/plugins/modules/apk.py b/plugins/modules/apk.py index 7f1f83ce56..dcb70ce72d 100644 --- a/plugins/modules/apk.py +++ b/plugins/modules/apk.py @@ -47,8 +47,8 @@ options: version_added: 1.0.0 repository: description: - - A package repository or multiple repositories. Unlike with the underlying apk command, this list will override the - system repositories rather than supplement them. + - A package repository or multiple repositories. Unlike with the underlying apk command, this list overrides the system + repositories rather than supplement them. type: list elements: str state: @@ -79,7 +79,7 @@ options: version_added: 5.4.0 notes: - O(name) and O(upgrade) are mutually exclusive. - - When used with a C(loop:) each package will be processed individually, it is much more efficient to pass the list directly + - When used with a C(loop:) each package is processed individually, it is much more efficient to pass the list directly to the O(name) option. """ @@ -164,7 +164,7 @@ packages: description: A list of packages that have been changed. returned: when packages have changed type: list - sample: ['package', 'other-package'] + sample: ["package", "other-package"] """ import re diff --git a/plugins/modules/apt_rpm.py b/plugins/modules/apt_rpm.py index c792dc2c57..1dcca5815c 100644 --- a/plugins/modules/apt_rpm.py +++ b/plugins/modules/apt_rpm.py @@ -36,8 +36,8 @@ options: description: - Indicates the desired package state. - The states V(latest) and V(present_not_latest) have been added in community.general 8.6.0. - - Please note before community.general 11.0.0, V(present) and V(installed) were equivalent to V(latest). - This changed in community.general 11.0.0. Now they are equivalent to V(present_not_latest). + - Please note before community.general 11.0.0, V(present) and V(installed) were equivalent to V(latest). This changed + in community.general 11.0.0. Now they are equivalent to V(present_not_latest). choices: - absent - present diff --git a/plugins/modules/archive.py b/plugins/modules/archive.py index 4e4b6368ce..65b397c255 100644 --- a/plugins/modules/archive.py +++ b/plugins/modules/archive.py @@ -43,7 +43,7 @@ options: - The file name of the destination archive. The parent directory must exists on the remote host. - This is required when O(path) refers to multiple files by either specifying a glob, a directory or multiple paths in a list. - - If the destination archive already exists, it will be truncated and overwritten. + - If the destination archive already exists, it is truncated and overwritten. type: path exclude_path: description: diff --git a/plugins/modules/awall.py b/plugins/modules/awall.py index b95f36ea8d..0bc4ca1d79 100644 --- a/plugins/modules/awall.py +++ b/plugins/modules/awall.py @@ -40,7 +40,7 @@ options: description: - Activate the new firewall rules. - Can be run with other steps or on its own. - - Idempotency is affected if O(activate=true), as the module will always report a changed state. + - Idempotency is affected if O(activate=true), as the module always reports a changed state. type: bool default: false notes: diff --git a/plugins/modules/beadm.py b/plugins/modules/beadm.py index 3d9d8ca651..0c200661f1 100644 --- a/plugins/modules/beadm.py +++ b/plugins/modules/beadm.py @@ -32,7 +32,7 @@ options: aliases: ["be"] snapshot: description: - - If specified, the new boot environment will be cloned from the given snapshot or inactive boot environment. + - If specified, the new boot environment is cloned from the given snapshot or inactive boot environment. type: str description: description: diff --git a/plugins/modules/bearychat.py b/plugins/modules/bearychat.py index 1dec1bce68..e738d83d36 100644 --- a/plugins/modules/bearychat.py +++ b/plugins/modules/bearychat.py @@ -33,7 +33,7 @@ options: - Message to send. markdown: description: - - If V(true), text will be parsed as markdown. + - If V(true), text is parsed as markdown. default: true type: bool channel: diff --git a/plugins/modules/bigpanda.py b/plugins/modules/bigpanda.py index aef9c15c92..808e7bb06b 100644 --- a/plugins/modules/bigpanda.py +++ b/plugins/modules/bigpanda.py @@ -75,7 +75,7 @@ options: default: "https://api.bigpanda.io" validate_certs: description: - - If V(false), SSL certificates for the target URL will not be validated. This should only be used on personally controlled + - If V(false), SSL certificates for the target URL are not validated. This should only be used on personally controlled sites using self-signed certificates. required: false default: true diff --git a/plugins/modules/bitbucket_pipeline_known_host.py b/plugins/modules/bitbucket_pipeline_known_host.py index f5594dc8ac..eb8b22b4f0 100644 --- a/plugins/modules/bitbucket_pipeline_known_host.py +++ b/plugins/modules/bitbucket_pipeline_known_host.py @@ -13,8 +13,7 @@ module: bitbucket_pipeline_known_host short_description: Manages Bitbucket pipeline known hosts description: - Manages Bitbucket pipeline known hosts under the "SSH Keys" menu. - - The host fingerprint will be retrieved automatically, but in case of an error, one can use O(key) field to specify it - manually. + - The host fingerprint is retrieved automatically, but in case of an error, one can use O(key) field to specify it manually. author: - Evgeniy Krysanov (@catcombo) extends_documentation_fragment: diff --git a/plugins/modules/bootc_manage.py b/plugins/modules/bootc_manage.py index 44444960df..a0ac5a23d6 100644 --- a/plugins/modules/bootc_manage.py +++ b/plugins/modules/bootc_manage.py @@ -20,7 +20,7 @@ options: state: description: - Control whether to apply the latest image or switch the image. - - B(Note:) This will not reboot the system. + - B(Note:) This does not reboot the system. - Please use M(ansible.builtin.reboot) to reboot the system. required: true type: str diff --git a/plugins/modules/btrfs_info.py b/plugins/modules/btrfs_info.py index 0e432dfaff..9467fb782d 100644 --- a/plugins/modules/btrfs_info.py +++ b/plugins/modules/btrfs_info.py @@ -64,7 +64,7 @@ filesystems: mountpoints: description: Paths where the subvolume is mounted on the targeted host. type: list - sample: ['/home'] + sample: ["/home"] parent: description: The identifier of this subvolume's parent. type: int diff --git a/plugins/modules/btrfs_subvolume.py b/plugins/modules/btrfs_subvolume.py index 7e085d6103..f22a551d8d 100644 --- a/plugins/modules/btrfs_subvolume.py +++ b/plugins/modules/btrfs_subvolume.py @@ -64,9 +64,9 @@ options: no change is required. Warning, this option does not yet verify that the target subvolume was generated from a snapshot of the requested source. - V(clobber) - If a subvolume already exists at the requested location, delete it first. This option is not idempotent - and will result in a new snapshot being generated on every execution. + and results in a new snapshot being generated on every execution. - V(error) - If a subvolume already exists at the requested location, return an error. This option is not idempotent - and will result in an error on replay of the module. + and results in an error on replay of the module. type: str choices: [skip, clobber, error] default: skip @@ -80,8 +80,8 @@ options: notes: - If any or all of the options O(filesystem_device), O(filesystem_label) or O(filesystem_uuid) parameters are provided, there is expected to be a matching btrfs filesystem. If none are provided and only a single btrfs filesystem exists or - only a single btrfs filesystem is mounted, that filesystem will be used; otherwise, the module will take no action and - return an error. + only a single btrfs filesystem is mounted, that filesystem is used; otherwise, the module takes no action and returns an + error. extends_documentation_fragment: - community.general.attributes @@ -180,7 +180,7 @@ filesystem: mountpoints: description: Paths where the subvolume is mounted on the targeted host. type: list - sample: ['/home'] + sample: ["/home"] parent: description: The identifier of this subvolume's parent. type: int diff --git a/plugins/modules/bundler.py b/plugins/modules/bundler.py index bfd7fe7ec1..eee9ee8210 100644 --- a/plugins/modules/bundler.py +++ b/plugins/modules/bundler.py @@ -36,13 +36,13 @@ options: type: path description: - The directory to execute the bundler commands from. This directory needs to contain a valid Gemfile or .bundle/ directory. - - If not specified, it will default to the temporary working directory. + - If not specified, it defaults to the temporary working directory. exclude_groups: type: list elements: str description: - A list of Gemfile groups to exclude during operations. This only applies when O(state=present). Bundler considers - this a 'remembered' property for the Gemfile and will automatically exclude groups in future operations even if O(exclude_groups) + this a 'remembered' property for the Gemfile and automatically excludes groups in future operations even if O(exclude_groups) is not set. clean: description: @@ -53,7 +53,7 @@ options: type: path description: - Only applies if O(state=present). The path to the gemfile to use to install gems. - - If not specified it will default to the Gemfile in current directory. + - If not specified it defaults to the Gemfile in current directory. local: description: - If set only installs gems from the cache on the target host. @@ -61,8 +61,8 @@ options: default: false deployment_mode: description: - - Only applies if O(state=present). If set it will install gems in C(./vendor/bundle) instead of the default location. - Requires a C(Gemfile.lock) file to have been created prior. + - Only applies if O(state=present). If set it installs gems in C(./vendor/bundle) instead of the default location. Requires + a C(Gemfile.lock) file to have been created prior. type: bool default: false user_install: @@ -75,12 +75,12 @@ options: description: - Only applies if O(state=present). Specifies the directory to install the gems into. If O(chdir) is set then this path is relative to O(chdir). - - If not specified the default RubyGems gem paths will be used. + - If not specified the default RubyGems gem paths are used. binstub_directory: type: path description: - Only applies if O(state=present). Specifies the directory to install any gem bins files to. When executed the bin - files will run within the context of the Gemfile and fail if any required gem dependencies are not installed. If O(chdir) + files run within the context of the Gemfile and fail if any required gem dependencies are not installed. If O(chdir) is set then this path is relative to O(chdir). extra_args: type: str diff --git a/plugins/modules/bzr.py b/plugins/modules/bzr.py index 7a4512a5dd..76ae917802 100644 --- a/plugins/modules/bzr.py +++ b/plugins/modules/bzr.py @@ -42,12 +42,12 @@ options: type: str force: description: - - If V(true), any modified files in the working tree will be discarded. + - If V(true), any modified files in the working tree is discarded. type: bool default: false executable: description: - - Path to bzr executable to use. If not supplied, the normal mechanism for resolving binary paths will be used. + - Path to C(bzr) executable to use. If not supplied, the normal mechanism for resolving binary paths is used. type: str """ diff --git a/plugins/modules/campfire.py b/plugins/modules/campfire.py index 6d9d2f5e18..0281647a69 100644 --- a/plugins/modules/campfire.py +++ b/plugins/modules/campfire.py @@ -14,7 +14,7 @@ module: campfire short_description: Send a message to Campfire description: - Send a message to Campfire. - - Messages with newlines will result in a "Paste" message being sent. + - Messages with newlines result in a "Paste" message being sent. extends_documentation_fragment: - community.general.attributes attributes: diff --git a/plugins/modules/capabilities.py b/plugins/modules/capabilities.py index 088c15e4f6..b3143df0a4 100644 --- a/plugins/modules/capabilities.py +++ b/plugins/modules/capabilities.py @@ -40,10 +40,10 @@ options: choices: [absent, present] default: present notes: - - The capabilities system will automatically transform operators and flags into the effective set, so for example, C(cap_foo=ep) - will probably become C(cap_foo+ep). - - This module does not attempt to determine the final operator and flags to compare, so you will want to ensure that your - capabilities argument matches the final capabilities. + - The capabilities system automatically transforms operators and flags into the effective set, so for example, C(cap_foo=ep) + probably becomes C(cap_foo+ep). + - This module does not attempt to determine the final operator and flags to compare, so you want to ensure that your capabilities + argument matches the final capabilities. author: - Nate Coraor (@natefoo) """ diff --git a/plugins/modules/cargo.py b/plugins/modules/cargo.py index 4ad4b84396..7e30a9000a 100644 --- a/plugins/modules/cargo.py +++ b/plugins/modules/cargo.py @@ -28,7 +28,7 @@ options: executable: description: - Path to the C(cargo) installed in the system. - - If not specified, the module will look C(cargo) in E(PATH). + - If not specified, the module looks for C(cargo) in E(PATH). type: path version_added: 7.5.0 name: @@ -39,11 +39,11 @@ options: required: true path: description: The base path where to install the Rust packages. Cargo automatically appends V(/bin). In other words, V(/usr/local) - will become V(/usr/local/bin). + becomes V(/usr/local/bin). type: path version: - description: The version to install. If O(name) contains multiple values, the module will try to install all of them in - this version. + description: The version to install. If O(name) contains multiple values, the module tries to install all of them in this + version. type: str required: false locked: diff --git a/plugins/modules/catapult.py b/plugins/modules/catapult.py index 5329c90f54..c866bed75b 100644 --- a/plugins/modules/catapult.py +++ b/plugins/modules/catapult.py @@ -16,6 +16,12 @@ module: catapult short_description: Send a sms / mms using the catapult bandwidth API description: - Allows notifications to be sent using SMS / MMS using the catapult bandwidth API. +deprecated: + removed_in: 13.0.0 + why: >- + DNS fails to resolve the API endpoint used by the module since Oct 2024. + See L(the associated issue, https://github.com/ansible-collections/community.general/issues/10318) for details. + alternative: There is none. extends_documentation_fragment: - community.general.attributes attributes: diff --git a/plugins/modules/cloud_init_data_facts.py b/plugins/modules/cloud_init_data_facts.py index dd9825858e..544a663e5c 100644 --- a/plugins/modules/cloud_init_data_facts.py +++ b/plugins/modules/cloud_init_data_facts.py @@ -50,38 +50,41 @@ cloud_init_data_facts: description: Facts of result and status. returned: success type: dict - sample: '{ - "status": { + sample: + { + "status": { "v1": { - "datasource": "DataSourceCloudStack", - "errors": [] - }, - "result": { - "v1": { - "datasource": "DataSourceCloudStack", - "init": { - "errors": [], - "finished": 1522066377.0185432, - "start": 1522066375.2648022 - }, - "init-local": { - "errors": [], - "finished": 1522066373.70919, - "start": 1522066373.4726632 - }, - "modules-config": { - "errors": [], - "finished": 1522066380.9097016, - "start": 1522066379.0011985 - }, - "modules-final": { - "errors": [], - "finished": 1522066383.56594, - "start": 1522066382.3449218 - }, - "stage": null + "datasource": "DataSourceCloudStack", + "errors": [] } - }' + }, + "result": { + "v1": { + "datasource": "DataSourceCloudStack", + "init": { + "errors": [], + "finished": 1522066377.0185432, + "start": 1522066375.2648022 + }, + "init-local": { + "errors": [], + "finished": 1522066373.70919, + "start": 1522066373.4726632 + }, + "modules-config": { + "errors": [], + "finished": 1522066380.9097016, + "start": 1522066379.0011985 + }, + "modules-final": { + "errors": [], + "finished": 1522066383.56594, + "start": 1522066382.3449218 + }, + "stage": null + } + } + } """ import os diff --git a/plugins/modules/cloudflare_dns.py b/plugins/modules/cloudflare_dns.py index 0fd0f5ffcc..fafca00b50 100644 --- a/plugins/modules/cloudflare_dns.py +++ b/plugins/modules/cloudflare_dns.py @@ -127,7 +127,7 @@ options: description: - Whether the record should be the only one for that record type and record name. - Only use with O(state=present). - - This will delete all other records with the same record name and type. + - This deletes all other records with the same record name and type. type: bool state: description: @@ -157,8 +157,9 @@ options: - The type of DNS record to create. Required if O(state=present). - Support for V(SPF) has been removed from community.general 9.0.0 since that record type is no longer supported by CloudFlare. + - Support for V(PTR) has been added in community.general 11.1.0. type: str - choices: [A, AAAA, CNAME, DS, MX, NS, SRV, SSHFP, TLSA, CAA, TXT] + choices: [A, AAAA, CNAME, DS, MX, NS, SRV, SSHFP, TLSA, CAA, TXT, PTR] value: description: - The record value. @@ -311,6 +312,14 @@ EXAMPLES = r""" algorithm: 8 hash_type: 2 value: B4EB5AC4467D2DFB3BAF9FB9961DC1B6FED54A58CDFAA3E465081EC86F89BFAB + +- name: Create PTR record "1.2.0.192.in-addr.arpa" with value "test.example.com" + community.general.cloudflare_dns: + zone: 2.0.192.in-addr.arpa + record: 1 + type: PTR + value: test.example.com + state: present """ RETURN = r""" @@ -369,10 +378,7 @@ record: description: Extra Cloudflare-specific information about the record. returned: success type: dict - sample: - { - "auto_added": false - } + sample: {"auto_added": false} modified_on: description: Record modification date. returned: success @@ -403,7 +409,7 @@ record: returned: success type: list elements: str - sample: ['production', 'app'] + sample: ["production", "app"] version_added: 10.1.0 tags_modified_on: description: When the record tags were last modified. Omitted if there are no tags. @@ -442,9 +448,11 @@ from ansible.module_utils.urls import fetch_url def lowercase_string(param): - if not isinstance(param, str): - return param - return param.lower() + return param.lower() if isinstance(param, str) else param + + +def join_str(sep, *args): + return sep.join([str(arg) for arg in args]) class CloudflareAPI(object): @@ -490,29 +498,29 @@ class CloudflareAPI(object): if (self.type == 'AAAA') and (self.value is not None): self.value = self.value.lower() - if (self.type == 'SRV'): + if self.type == 'SRV': if (self.proto is not None) and (not self.proto.startswith('_')): - self.proto = '_' + self.proto + self.proto = '_{0}'.format(self.proto) if (self.service is not None) and (not self.service.startswith('_')): - self.service = '_' + self.service + self.service = '_{0}'.format(self.service) - if (self.type == 'TLSA'): + if self.type == 'TLSA': if (self.proto is not None) and (not self.proto.startswith('_')): - self.proto = '_' + self.proto + self.proto = '_{0}'.format(self.proto) if (self.port is not None): - self.port = '_' + str(self.port) + self.port = '_{0}'.format(self.port) if not self.record.endswith(self.zone): - self.record = self.record + '.' + self.zone + self.record = join_str('.', self.record, self.zone) - if (self.type == 'DS'): + if self.type == 'DS': if self.record == self.zone: self.module.fail_json(msg="DS records only apply to subdomains.") def _cf_simple_api_call(self, api_call, method='GET', payload=None): if self.api_token: headers = { - 'Authorization': 'Bearer ' + self.api_token, + 'Authorization': 'Bearer {0}'.format(self.api_token), 'Content-Type': 'application/json', } else: @@ -612,7 +620,7 @@ class CloudflareAPI(object): else: raw_api_call = api_call while next_page <= pagination['total_pages']: - raw_api_call += '?' + '&'.join(parameters) + raw_api_call += '?{0}'.format('&'.join(parameters)) result, status = self._cf_simple_api_call(raw_api_call, method, payload) data += result['result'] next_page += 1 @@ -637,8 +645,8 @@ class CloudflareAPI(object): name = self.zone param = '' if name: - param = '?' + urlencode({'name': name}) - zones, status = self._cf_api_call('/zones' + param) + param = '?{0}'.format(urlencode({'name': name})) + zones, status = self._cf_api_call('/zones{0}'.format(param)) return zones def get_dns_records(self, zone_name=None, type=None, record=None, value=''): @@ -663,48 +671,40 @@ class CloudflareAPI(object): if value: query['content'] = value if query: - api_call += '?' + urlencode(query) + api_call += '?{0}'.format(urlencode(query)) records, status = self._cf_api_call(api_call) return records - def delete_dns_records(self, **kwargs): - params = {} - for param in ['port', 'proto', 'service', 'solo', 'type', 'record', 'value', 'weight', 'zone', - 'algorithm', 'cert_usage', 'hash_type', 'selector', 'key_tag', 'flag', 'tag']: - if param in kwargs: - params[param] = kwargs[param] - else: - params[param] = getattr(self, param) - + def delete_dns_records(self, solo): records = [] - content = params['value'] - search_record = params['record'] - if params['type'] == 'SRV': - if not (params['value'] is None or params['value'] == ''): - content = str(params['weight']) + '\t' + str(params['port']) + '\t' + params['value'] - search_record = params['service'] + '.' + params['proto'] + '.' + params['record'] - elif params['type'] == 'DS': - if not (params['value'] is None or params['value'] == ''): - content = str(params['key_tag']) + '\t' + str(params['algorithm']) + '\t' + str(params['hash_type']) + '\t' + params['value'] - elif params['type'] == 'SSHFP': - if not (params['value'] is None or params['value'] == ''): - content = str(params['algorithm']) + ' ' + str(params['hash_type']) + ' ' + params['value'].upper() - elif params['type'] == 'TLSA': - if not (params['value'] is None or params['value'] == ''): - content = str(params['cert_usage']) + '\t' + str(params['selector']) + '\t' + str(params['hash_type']) + '\t' + params['value'] - search_record = params['port'] + '.' + params['proto'] + '.' + params['record'] - if params['solo']: + content = self.value + search_record = self.record + if self.type == 'SRV': + if not (self.value is None or self.value == ''): + content = join_str('\t', self.weight, self.port, self.value) + search_record = join_str('.', self.service, self.proto, self.record) + elif self.type == 'DS': + if not (self.value is None or self.value == ''): + content = join_str('\t', self.key_tag, self.algorithm, self.hash_type, self.value) + elif self.type == 'SSHFP': + if not (self.value is None or self.value == ''): + content = join_str(' ', self.algorithm, self.hash_type, self.value.upper()) + elif self.type == 'TLSA': + if not (self.value is None or self.value == ''): + content = join_str('\t', self.cert_usage, self.selector, self.hash_type, self.value) + search_record = join_str('.', self.port, self.proto, self.record) + if solo: search_value = None else: search_value = content - zone_id = self._get_zone_id(params['zone']) - records = self.get_dns_records(params['zone'], params['type'], search_record, search_value) + zone_id = self._get_zone_id(self.zone) + records = self.get_dns_records(self.zone, self.type, search_record, search_value) for rr in records: - if params['solo']: - if not ((rr['type'] == params['type']) and (rr['name'] == search_record) and (rr['content'] == content)): + if solo: + if not ((rr['type'] == self.type) and (rr['name'] == search_record) and (rr['content'] == content)): self.changed = True if not self.module.check_mode: result, info = self._cf_api_call('/zones/{0}/dns_records/{1}'.format(zone_id, rr['id']), 'DELETE') @@ -714,156 +714,146 @@ class CloudflareAPI(object): result, info = self._cf_api_call('/zones/{0}/dns_records/{1}'.format(zone_id, rr['id']), 'DELETE') return self.changed - def ensure_dns_record(self, **kwargs): - params = {} - for param in ['port', 'priority', 'proto', 'proxied', 'service', 'ttl', 'type', 'record', 'value', 'weight', 'zone', - 'algorithm', 'cert_usage', 'hash_type', 'selector', 'key_tag', 'flag', 'tag', 'tags', 'comment']: - if param in kwargs: - params[param] = kwargs[param] - else: - params[param] = getattr(self, param) - - search_value = params['value'] - search_record = params['record'] + def ensure_dns_record(self): + search_value = self.value + search_record = self.record new_record = None - if (params['type'] is None) or (params['record'] is None): - self.module.fail_json(msg="You must provide a type and a record to create a new record") - if (params['type'] in ['A', 'AAAA', 'CNAME', 'TXT', 'MX', 'NS']): - if not params['value']: + if self.type in ['A', 'AAAA', 'CNAME', 'TXT', 'MX', 'NS', 'PTR']: + if not self.value: self.module.fail_json(msg="You must provide a non-empty value to create this record type") # there can only be one CNAME per record # ignoring the value when searching for existing # CNAME records allows us to update the value if it # changes - if params['type'] == 'CNAME': + if self.type == 'CNAME': search_value = None new_record = { - "type": params['type'], - "name": params['record'], - "content": params['value'], - "ttl": params['ttl'] + "type": self.type, + "name": self.record, + "content": self.value, + "ttl": self.ttl } - if (params['type'] in ['A', 'AAAA', 'CNAME']): - new_record["proxied"] = params["proxied"] + if self.type in ['A', 'AAAA', 'CNAME']: + new_record["proxied"] = self.proxied - if params['type'] == 'MX': - for attr in [params['priority'], params['value']]: + if self.type == 'MX': + for attr in [self.priority, self.value]: if (attr is None) or (attr == ''): self.module.fail_json(msg="You must provide priority and a value to create this record type") new_record = { - "type": params['type'], - "name": params['record'], - "content": params['value'], - "priority": params['priority'], - "ttl": params['ttl'] + "type": self.type, + "name": self.record, + "content": self.value, + "priority": self.priority, + "ttl": self.ttl } - if params['type'] == 'SRV': - for attr in [params['port'], params['priority'], params['proto'], params['service'], params['weight'], params['value']]: + if self.type == 'SRV': + for attr in [self.port, self.priority, self.proto, self.service, self.weight, self.value]: if (attr is None) or (attr == ''): self.module.fail_json(msg="You must provide port, priority, proto, service, weight and a value to create this record type") srv_data = { - "target": params['value'], - "port": params['port'], - "weight": params['weight'], - "priority": params['priority'], + "target": self.value, + "port": self.port, + "weight": self.weight, + "priority": self.priority, } new_record = { - "type": params['type'], - "name": params['service'] + '.' + params['proto'] + '.' + params['record'], - "ttl": params['ttl'], + "type": self.type, + "name": join_str('.', self.service, self.proto, self.record), + "ttl": self.ttl, 'data': srv_data, } - search_value = str(params['weight']) + '\t' + str(params['port']) + '\t' + params['value'] - search_record = params['service'] + '.' + params['proto'] + '.' + params['record'] + search_value = join_str('\t', self.weight, self.port, self.value) + search_record = join_str('.', self.service, self.proto, self.record) - if params['type'] == 'DS': - for attr in [params['key_tag'], params['algorithm'], params['hash_type'], params['value']]: + if self.type == 'DS': + for attr in [self.key_tag, self.algorithm, self.hash_type, self.value]: if (attr is None) or (attr == ''): self.module.fail_json(msg="You must provide key_tag, algorithm, hash_type and a value to create this record type") ds_data = { - "key_tag": params['key_tag'], - "algorithm": params['algorithm'], - "digest_type": params['hash_type'], - "digest": params['value'], + "key_tag": self.key_tag, + "algorithm": self.algorithm, + "digest_type": self.hash_type, + "digest": self.value, } new_record = { - "type": params['type'], - "name": params['record'], + "type": self.type, + "name": self.record, 'data': ds_data, - "ttl": params['ttl'], + "ttl": self.ttl, } - search_value = str(params['key_tag']) + '\t' + str(params['algorithm']) + '\t' + str(params['hash_type']) + '\t' + params['value'] + search_value = join_str('\t', self.key_tag, self.algorithm, self.hash_type, self.value) - if params['type'] == 'SSHFP': - for attr in [params['algorithm'], params['hash_type'], params['value']]: + if self.type == 'SSHFP': + for attr in [self.algorithm, self.hash_type, self.value]: if (attr is None) or (attr == ''): self.module.fail_json(msg="You must provide algorithm, hash_type and a value to create this record type") sshfp_data = { - "fingerprint": params['value'].upper(), - "type": params['hash_type'], - "algorithm": params['algorithm'], + "fingerprint": self.value.upper(), + "type": self.hash_type, + "algorithm": self.algorithm, } new_record = { - "type": params['type'], - "name": params['record'], + "type": self.type, + "name": self.record, 'data': sshfp_data, - "ttl": params['ttl'], + "ttl": self.ttl, } - search_value = str(params['algorithm']) + ' ' + str(params['hash_type']) + ' ' + params['value'] + search_value = join_str(' ', self.algorithm, self.hash_type, self.value) - if params['type'] == 'TLSA': - for attr in [params['port'], params['proto'], params['cert_usage'], params['selector'], params['hash_type'], params['value']]: + if self.type == 'TLSA': + for attr in [self.port, self.proto, self.cert_usage, self.selector, self.hash_type, self.value]: if (attr is None) or (attr == ''): self.module.fail_json(msg="You must provide port, proto, cert_usage, selector, hash_type and a value to create this record type") - search_record = params['port'] + '.' + params['proto'] + '.' + params['record'] + search_record = join_str('.', self.port, self.proto, self.record) tlsa_data = { - "usage": params['cert_usage'], - "selector": params['selector'], - "matching_type": params['hash_type'], - "certificate": params['value'], + "usage": self.cert_usage, + "selector": self.selector, + "matching_type": self.hash_type, + "certificate": self.value, } new_record = { - "type": params['type'], + "type": self.type, "name": search_record, 'data': tlsa_data, - "ttl": params['ttl'], + "ttl": self.ttl, } - search_value = str(params['cert_usage']) + '\t' + str(params['selector']) + '\t' + str(params['hash_type']) + '\t' + params['value'] + search_value = join_str('\t', self.cert_usage, self.selector, self.hash_type, self.value) - if params['type'] == 'CAA': - for attr in [params['flag'], params['tag'], params['value']]: - if (attr is None) or (attr == ''): + if self.type == 'CAA': + for attr in [self.flag, self.tag, self.value]: + if attr == '': self.module.fail_json(msg="You must provide flag, tag and a value to create this record type") caa_data = { - "flags": params['flag'], - "tag": params['tag'], - "value": params['value'], + "flags": self.flag, + "tag": self.tag, + "value": self.value, } new_record = { - "type": params['type'], - "name": params['record'], + "type": self.type, + "name": self.record, 'data': caa_data, - "ttl": params['ttl'], + "ttl": self.ttl, } search_value = None - new_record['comment'] = params['comment'] or None - new_record['tags'] = params['tags'] or [] + new_record['comment'] = self.comment or None + new_record['tags'] = self.tags or [] - zone_id = self._get_zone_id(params['zone']) - records = self.get_dns_records(params['zone'], params['type'], search_record, search_value) + zone_id = self._get_zone_id(self.zone) + records = self.get_dns_records(self.zone, self.type, search_record, search_value) # in theory this should be impossible as cloudflare does not allow # the creation of duplicate records but lets cover it anyways if len(records) > 1: # As Cloudflare API cannot filter record containing quotes # CAA records must be compared locally - if params['type'] == 'CAA': + if self.type == 'CAA': for rr in records: if rr['data']['flags'] == caa_data['flags'] and rr['data']['tag'] == caa_data['tag'] and rr['data']['value'] == caa_data['value']: return rr, self.changed @@ -873,16 +863,16 @@ class CloudflareAPI(object): if len(records) == 1: cur_record = records[0] do_update = False - if (params['ttl'] is not None) and (cur_record['ttl'] != params['ttl']): + if (self.ttl is not None) and (cur_record['ttl'] != self.ttl): do_update = True - if (params['priority'] is not None) and ('priority' in cur_record) and (cur_record['priority'] != params['priority']): + if (self.priority is not None) and ('priority' in cur_record) and (cur_record['priority'] != self.priority): do_update = True - if ('proxied' in new_record) and ('proxied' in cur_record) and (cur_record['proxied'] != params['proxied']): + if ('proxied' in new_record) and ('proxied' in cur_record) and (cur_record['proxied'] != self.proxied): do_update = True if ('data' in new_record) and ('data' in cur_record): - if (cur_record['data'] != new_record['data']): + if cur_record['data'] != new_record['data']: do_update = True - if (params['type'] == 'CNAME') and (cur_record['content'] != new_record['content']): + if (self.type == 'CNAME') and (cur_record['content'] != new_record['content']): do_update = True if cur_record['comment'] != new_record['comment']: do_update = True @@ -908,14 +898,9 @@ class CloudflareAPI(object): def main(): module = AnsibleModule( argument_spec=dict( - api_token=dict( - type="str", - required=False, - no_log=True, - fallback=(env_fallback, ["CLOUDFLARE_TOKEN"]), - ), - account_api_key=dict(type='str', required=False, no_log=True, aliases=['account_api_token']), - account_email=dict(type='str', required=False), + api_token=dict(type="str", no_log=True, fallback=(env_fallback, ["CLOUDFLARE_TOKEN"])), + account_api_key=dict(type='str', no_log=True, aliases=['account_api_token']), + account_email=dict(type='str'), algorithm=dict(type='int'), cert_usage=dict(type='int', choices=[0, 1, 2, 3]), comment=dict(type='str'), @@ -935,7 +920,7 @@ def main(): state=dict(type='str', default='present', choices=['absent', 'present']), timeout=dict(type='int', default=30), ttl=dict(type='int', default=1), - type=dict(type='str', choices=['A', 'AAAA', 'CNAME', 'DS', 'MX', 'NS', 'SRV', 'SSHFP', 'TLSA', 'CAA', 'TXT']), + type=dict(type='str', choices=['A', 'AAAA', 'CNAME', 'DS', 'MX', 'NS', 'SRV', 'SSHFP', 'TLSA', 'CAA', 'TXT', 'PTR']), value=dict(type='str', aliases=['content']), weight=dict(type='int', default=1), zone=dict(type='str', required=True, aliases=['domain']), @@ -944,20 +929,21 @@ def main(): required_if=[ ('state', 'present', ['record', 'type', 'value']), ('state', 'absent', ['record']), - ('type', 'SRV', ['proto', 'service']), + ('type', 'SRV', ['proto', 'service', 'value']), ('type', 'TLSA', ['proto', 'port']), - ('type', 'CAA', ['flag', 'tag']), + ('type', 'CAA', ['flag', 'tag', 'value']), + ], + required_together=[ + ('account_api_key', 'account_email'), + ], + required_one_of=[ + ['api_token', 'account_api_key'], ], ) - if not module.params['api_token'] and not (module.params['account_api_key'] and module.params['account_email']): - module.fail_json(msg="Either api_token or account_api_key and account_email params are required.") if module.params['type'] == 'SRV': - if not ((module.params['weight'] is not None and module.params['port'] is not None - and not (module.params['value'] is None or module.params['value'] == '')) - or (module.params['weight'] is None and module.params['port'] is None - and (module.params['value'] is None or module.params['value'] == ''))): - module.fail_json(msg="For SRV records the params weight, port and value all need to be defined, or not at all.") + if not module.params['value'] == '': + module.fail_json(msg="For SRV records the params weight, port and value all need to be defined.") if module.params['type'] == 'SSHFP': if not ((module.params['algorithm'] is not None and module.params['hash_type'] is not None @@ -974,11 +960,8 @@ def main(): module.fail_json(msg="For TLSA records the params cert_usage, selector, hash_type and value all need to be defined, or not at all.") if module.params['type'] == 'CAA': - if not ((module.params['flag'] is not None and module.params['tag'] is not None - and not (module.params['value'] is None or module.params['value'] == '')) - or (module.params['flag'] is None and module.params['tag'] is None - and (module.params['value'] is None or module.params['value'] == ''))): - module.fail_json(msg="For CAA records the params flag, tag and value all need to be defined, or not at all.") + if not module.params['value'] == '': + module.fail_json(msg="For CAA records the params flag, tag and value all need to be defined.") if module.params['type'] == 'DS': if not ((module.params['key_tag'] is not None and module.params['algorithm'] is not None and module.params['hash_type'] is not None diff --git a/plugins/modules/cobbler_sync.py b/plugins/modules/cobbler_sync.py index 95a3241b98..b1c92a1690 100644 --- a/plugins/modules/cobbler_sync.py +++ b/plugins/modules/cobbler_sync.py @@ -42,12 +42,12 @@ options: type: str use_ssl: description: - - If V(false), an HTTP connection will be used instead of the default HTTPS connection. + - If V(false), an HTTP connection is used instead of the default HTTPS connection. type: bool default: true validate_certs: description: - - If V(false), SSL certificates will not be validated. + - If V(false), SSL certificates are not validated. - This should only set to V(false) when used on personally controlled sites using self-signed certificates. type: bool default: true diff --git a/plugins/modules/cobbler_system.py b/plugins/modules/cobbler_system.py index 83714dbc69..a1a400928e 100644 --- a/plugins/modules/cobbler_system.py +++ b/plugins/modules/cobbler_system.py @@ -42,12 +42,12 @@ options: type: str use_ssl: description: - - If V(false), an HTTP connection will be used instead of the default HTTPS connection. + - If V(false), an HTTP connection is used instead of the default HTTPS connection. type: bool default: true validate_certs: description: - - If V(false), SSL certificates will not be validated. + - If V(false), SSL certificates are not validated. - This should only set to V(false) when used on personally controlled sites using self-signed certificates. type: bool default: true diff --git a/plugins/modules/composer.py b/plugins/modules/composer.py index 6c935bfe75..735b4d2d36 100644 --- a/plugins/modules/composer.py +++ b/plugins/modules/composer.py @@ -17,7 +17,7 @@ author: short_description: Dependency Manager for PHP description: - Composer is a tool for dependency management in PHP. It allows you to declare the dependent libraries your project needs - and it will install them in your project for you. + and it installs them in your project for you. extends_documentation_fragment: - community.general.attributes attributes: @@ -45,7 +45,7 @@ options: type: path description: - Directory of your project (see C(--working-dir)). This is required when the command is not run globally. - - Will be ignored if O(global_command=true). + - This is ignored if O(global_command=true). global_command: description: - Runs the specified command globally. diff --git a/plugins/modules/consul.py b/plugins/modules/consul.py index 645ffe5bbd..9c36ba65f2 100644 --- a/plugins/modules/consul.py +++ b/plugins/modules/consul.py @@ -21,8 +21,8 @@ description: name and ID respectively by appending V(service:) Node level checks require a O(check_name) and optionally a O(check_id). - Currently, there is no complete way to retrieve the script, interval or TTL metadata for a registered check. Without this metadata it is not possible to tell if the data supplied with ansible represents a change to a check. As a result this - does not attempt to determine changes and will always report a changed occurred. An API method is planned to supply this - metadata so at that stage change management will be added. + does not attempt to determine changes and it always reports a changed occurred. An API method is planned to supply this + metadata so at that stage change management is to be added. - See U(http://consul.io) for more details. requirements: - python-consul @@ -83,25 +83,25 @@ options: service_address: type: str description: - - The address to advertise that the service will be listening on. This value will be passed as the C(address) parameter - to Consul's C(/v1/agent/service/register) API method, so refer to the Consul API documentation for further details. + - The address to advertise that the service is listening on. This value is passed as the C(address) parameter to Consul's + C(/v1/agent/service/register) API method, so refer to the Consul API documentation for further details. tags: type: list elements: str description: - - Tags that will be attached to the service registration. + - Tags that are attached to the service registration. script: type: str description: - - The script/command that will be run periodically to check the health of the service. + - The script/command that is run periodically to check the health of the service. - Requires O(interval) to be provided. - Mutually exclusive with O(ttl), O(tcp) and O(http). interval: type: str description: - - The interval at which the service check will be run. This is a number with a V(s) or V(m) suffix to signify the units - of seconds or minutes, for example V(15s) or V(1m). If no suffix is supplied V(s) will be used by default, for example - V(10) will be V(10s). + - The interval at which the service check is run. This is a number with a V(s) or V(m) suffix to signify the units of + seconds or minutes, for example V(15s) or V(1m). If no suffix is supplied V(s) is used by default, for example V(10) + is V(10s). - Required if one of the parameters O(script), O(http), or O(tcp) is specified. check_id: type: str @@ -122,25 +122,25 @@ options: ttl: type: str description: - - Checks can be registered with a TTL instead of a O(script) and O(interval) this means that the service will check - in with the agent before the TTL expires. If it does not the check will be considered failed. Required if registering - a check and the script an interval are missing Similar to the interval this is a number with a V(s) or V(m) suffix - to signify the units of seconds or minutes, for example V(15s) or V(1m). If no suffix is supplied V(s) will be used - by default, for example V(10) will be V(10s). + - Checks can be registered with a TTL instead of a O(script) and O(interval) this means that the service checks in with + the agent before the TTL expires. If it does not the check is considered failed. Required if registering a check and + the script an interval are missing Similar to the interval this is a number with a V(s) or V(m) suffix to signify + the units of seconds or minutes, for example V(15s) or V(1m). If no suffix is supplied V(s) is used by default, for + example V(10) is equivalent to V(10s). - Mutually exclusive with O(script), O(tcp) and O(http). tcp: type: str description: - - Checks can be registered with a TCP port. This means that Consul will check if the connection attempt to that port - is successful (that is, the port is currently accepting connections). The format is V(host:port), for example V(localhost:80). + - Checks can be registered with a TCP port. This means that Consul checks if the connection attempt to that port is + successful (that is, the port is currently accepting connections). The format is V(host:port), for example V(localhost:80). - Requires O(interval) to be provided. - Mutually exclusive with O(script), O(ttl) and O(http). version_added: '1.3.0' http: type: str description: - - Checks can be registered with an HTTP endpoint. This means that Consul will check that the http endpoint returns a - successful HTTP status. + - Checks can be registered with an HTTP endpoint. This means that Consul checks that the http endpoint returns a successful + HTTP status. - Requires O(interval) to be provided. - Mutually exclusive with O(script), O(ttl) and O(tcp). timeout: @@ -148,7 +148,7 @@ options: description: - A custom HTTP check timeout. The Consul default is 10 seconds. Similar to the interval this is a number with a V(s) or V(m) suffix to signify the units of seconds or minutes, for example V(15s) or V(1m). If no suffix is supplied V(s) - will be used by default, for example V(10) will be V(10s). + is used by default, for example V(10) is equivalent to V(10s). token: type: str description: diff --git a/plugins/modules/consul_acl_bootstrap.py b/plugins/modules/consul_acl_bootstrap.py index 7002c3d549..ba6adf2dd3 100644 --- a/plugins/modules/consul_acl_bootstrap.py +++ b/plugins/modules/consul_acl_bootstrap.py @@ -50,7 +50,7 @@ RETURN = r""" result: description: - The bootstrap result as returned by the Consul HTTP API. - - B(Note:) If O(bootstrap_secret) has been specified the C(SecretID) and C(ID) will not contain the secret but C(VALUE_SPECIFIED_IN_NO_LOG_PARAMETER). + - B(Note:) If O(bootstrap_secret) has been specified the C(SecretID) and C(ID) do not contain the secret but C(VALUE_SPECIFIED_IN_NO_LOG_PARAMETER). If you pass O(bootstrap_secret), make sure your playbook/role does not depend on this return value! returned: changed type: dict diff --git a/plugins/modules/consul_agent_check.py b/plugins/modules/consul_agent_check.py index ca1639063c..51d9715e88 100644 --- a/plugins/modules/consul_agent_check.py +++ b/plugins/modules/consul_agent_check.py @@ -17,9 +17,9 @@ description: - Allows the addition, modification and deletion of checks in a Consul cluster using the agent. For more details on using and configuring Checks, see U(https://developer.hashicorp.com/consul/api-docs/agent/check). - Currently, there is no complete way to retrieve the script, interval or TTL metadata for a registered check. Without this - metadata it is not possible to tell if the data supplied with ansible represents a change to a check. As a result this - does not attempt to determine changes and will always report a changed occurred. An API method is planned to supply this - metadata so at that stage change management will be added. + metadata it is not possible to tell if the data supplied with ansible represents a change to a check. As a result, the + module does not attempt to determine changes and it always reports a changed occurred. An API method is planned to supply + this metadata so at that stage change management is to be added. author: - Michael Ilg (@Ilgmi) extends_documentation_fragment: @@ -36,8 +36,8 @@ attributes: diff_mode: support: partial details: - - In check mode the diff will show the object as it is defined in the module options and not the object structure of - the Consul API. + - In check mode the diff shows the object as it is defined in the module options and not the object structure of the + Consul API. options: state: description: @@ -52,13 +52,13 @@ options: id: description: - Specifies a unique ID for this check on the node. This defaults to the O(name) parameter, but it may be necessary - to provide an ID for uniqueness. This value will return in the response as "CheckId". + to provide an ID for uniqueness. This value is returned in the response as V(CheckId). type: str interval: description: - - The interval at which the service check will be run. This is a number with a V(s) or V(m) suffix to signify the units - of seconds or minutes, for example V(15s) or V(1m). If no suffix is supplied V(s) will be used by default, for example - V(10) will be V(10s). + - The interval at which the service check is run. This is a number with a V(s) or V(m) suffix to signify the units of + seconds or minutes, for example V(15s) or V(1m). If no suffix is supplied V(s) is used by default, for example V(10) + is equivalent to V(10s). - Required if one of the parameters O(args), O(http), or O(tcp) is specified. type: str notes: @@ -74,11 +74,11 @@ options: elements: str ttl: description: - - Checks can be registered with a TTL instead of a O(args) and O(interval) this means that the service will check in - with the agent before the TTL expires. If it does not the check will be considered failed. Required if registering - a check and the script an interval are missing Similar to the interval this is a number with a V(s) or V(m) suffix - to signify the units of seconds or minutes, for example V(15s) or V(1m). If no suffix is supplied V(s) will be used - by default, for example V(10) will be V(10s). + - Checks can be registered with a TTL instead of a O(args) and O(interval) this means that the service checks in with + the agent before the TTL expires. If it does not the check is considered failed. Required if registering a check and + the script an interval are missing Similar to the interval this is a number with a V(s) or V(m) suffix to signify + the units of seconds or minutes, for example V(15s) or V(1m). If no suffix is supplied V(s) is used by default, for + example V(10) is equivalent to V(10s). - Mutually exclusive with O(args), O(tcp) and O(http). type: str tcp: @@ -91,8 +91,8 @@ options: version_added: '1.3.0' http: description: - - Checks can be registered with an HTTP endpoint. This means that Consul will check that the http endpoint returns a - successful HTTP status. + - Checks can be registered with an HTTP endpoint. This means that Consul checks that the HTTP endpoint returns a successful + HTTP status. - Requires O(interval) to be provided. - Mutually exclusive with O(args), O(ttl) and O(tcp). type: str @@ -100,7 +100,7 @@ options: description: - A custom HTTP check timeout. The Consul default is 10 seconds. Similar to the interval this is a number with a V(s) or V(m) suffix to signify the units of seconds or minutes, for example V(15s) or V(1m). If no suffix is supplied V(s) - will be used by default, for example V(10) will be V(10s). + is used by default, for example V(10) is equivalent to V(10s). type: str service_id: description: diff --git a/plugins/modules/consul_agent_service.py b/plugins/modules/consul_agent_service.py index bd28dfd2c3..882e45dceb 100644 --- a/plugins/modules/consul_agent_service.py +++ b/plugins/modules/consul_agent_service.py @@ -31,7 +31,7 @@ attributes: diff_mode: support: partial details: - - In check mode the diff will miss operational attributes. + - In check mode the diff misses operational attributes. options: state: description: @@ -50,13 +50,13 @@ options: type: str tags: description: - - Tags that will be attached to the service registration. + - Tags that are attached to the service registration. type: list elements: str address: description: - - The address to advertise that the service will be listening on. This value will be passed as the C(address) parameter - to Consul's C(/v1/agent/service/register) API method, so refer to the Consul API documentation for further details. + - The address to advertise that the service listens on. This value is passed as the C(address) parameter to Consul's + C(/v1/agent/service/register) API method, so refer to the Consul API documentation for further details. type: str meta: description: diff --git a/plugins/modules/consul_auth_method.py b/plugins/modules/consul_auth_method.py index a5cfd3b305..4658f906e3 100644 --- a/plugins/modules/consul_auth_method.py +++ b/plugins/modules/consul_auth_method.py @@ -29,7 +29,7 @@ attributes: diff_mode: support: partial details: - - In check mode the diff will miss operational attributes. + - In check mode the diff misses operational attributes. options: state: description: @@ -71,7 +71,7 @@ options: config: description: - The raw configuration to use for the chosen auth method. - - Contents will vary depending upon the type chosen. + - Contents vary depending upon the O(type) chosen. - Required when the auth method is created. type: dict """ diff --git a/plugins/modules/consul_binding_rule.py b/plugins/modules/consul_binding_rule.py index 698ba5913f..0a4531fdf7 100644 --- a/plugins/modules/consul_binding_rule.py +++ b/plugins/modules/consul_binding_rule.py @@ -29,7 +29,7 @@ attributes: diff_mode: support: partial details: - - In check mode the diff will miss operational attributes. + - In check mode the diff misses operational attributes. options: state: description: diff --git a/plugins/modules/consul_kv.py b/plugins/modules/consul_kv.py index 8152dd5c25..9e190d6565 100644 --- a/plugins/modules/consul_kv.py +++ b/plugins/modules/consul_kv.py @@ -36,12 +36,12 @@ options: state: description: - The action to take with the supplied key and value. If the state is V(present) and O(value) is set, the key contents - will be set to the value supplied and C(changed) will be set to V(true) only if the value was different to the current - contents. If the state is V(present) and O(value) is not set, the existing value associated to the key will be returned. - The state V(absent) will remove the key/value pair, again C(changed) will be set to V(true) only if the key actually - existed prior to the removal. An attempt can be made to obtain or free the lock associated with a key/value pair with - the states V(acquire) or V(release) respectively. A valid session must be supplied to make the attempt C(changed) - will be V(true) if the attempt is successful, V(false) otherwise. + is set to the value supplied and C(changed) is set to V(true) only if the value was different to the current contents. + If the state is V(present) and O(value) is not set, the existing value associated to the key is returned. The state + V(absent) is used to remove the key/value pair, again C(changed) is set to V(true) only if the key actually existed + prior to the removal. An attempt can be made to obtain or free the lock associated with a key/value pair with the + states V(acquire) or V(release) respectively. A valid session must be supplied to make the attempt C(changed) is V(true) + if the attempt is successful, V(false) otherwise. type: str choices: [absent, acquire, present, release] default: present @@ -73,9 +73,8 @@ options: type: str cas: description: - - Used when acquiring a lock with a session. If the O(cas) is V(0), then Consul will only put the key if it does not - already exist. If the O(cas) value is non-zero, then the key is only set if the index matches the ModifyIndex of that - key. + - Used when acquiring a lock with a session. If the O(cas) is V(0), then Consul only puts the key if it does not already + exist. If the O(cas) value is non-zero, then the key is only set if the index matches the ModifyIndex of that key. type: str flags: description: @@ -103,8 +102,7 @@ options: default: true datacenter: description: - - The name of the datacenter to query. If unspecified, the query will default to the datacenter of the Consul agent - on O(host). + - The name of the datacenter to query. If unspecified, the query defaults to the datacenter of the Consul agent on O(host). type: str version_added: 10.0.0 """ diff --git a/plugins/modules/consul_policy.py b/plugins/modules/consul_policy.py index c9758780b2..26cb34e100 100644 --- a/plugins/modules/consul_policy.py +++ b/plugins/modules/consul_policy.py @@ -31,7 +31,7 @@ attributes: support: partial version_added: 8.3.0 details: - - In check mode the diff will miss operational attributes. + - In check mode the diff misses operational attributes. action_group: version_added: 8.3.0 options: diff --git a/plugins/modules/consul_role.py b/plugins/modules/consul_role.py index 5e22496660..4efbef699a 100644 --- a/plugins/modules/consul_role.py +++ b/plugins/modules/consul_role.py @@ -29,7 +29,7 @@ attributes: diff_mode: support: partial details: - - In check mode the diff will miss operational attributes. + - In check mode the diff misses operational attributes. version_added: 8.3.0 action_group: version_added: 8.3.0 @@ -48,15 +48,15 @@ options: description: description: - Description of the role. - - If not specified, the assigned description will not be changed. + - If not specified, the assigned description is not changed. type: str policies: type: list elements: dict description: - List of policies to attach to the role. Each policy is a dict. - - If the parameter is left blank, any policies currently assigned will not be changed. - - Any empty array (V([])) will clear any policies previously set. + - If the parameter is left blank, any policies currently assigned are not changed. + - Any empty array (V([])) clears any policies previously set. suboptions: name: description: @@ -90,8 +90,8 @@ options: elements: dict description: - List of service identities to attach to the role. - - If not specified, any service identities currently assigned will not be changed. - - If the parameter is an empty array (V([])), any node identities assigned will be unassigned. + - If not specified, any service identities currently assigned are not changed. + - If the parameter is an empty array (V([])), any node identities assigned are unassigned. suboptions: service_name: description: @@ -106,9 +106,9 @@ options: - name datacenters: description: - - The datacenters the policies will be effective. - - This will result in effective policy only being valid in this datacenter. - - If an empty array (V([])) is specified, the policies will valid in all datacenters. + - The datacenters where the policies are effective. + - This results in effective policy only being valid in this datacenter. + - If an empty array (V([])) is specified, the policies are valid in all datacenters. - Including those which do not yet exist but may in the future. type: list elements: str @@ -117,8 +117,8 @@ options: elements: dict description: - List of node identities to attach to the role. - - If not specified, any node identities currently assigned will not be changed. - - If the parameter is an empty array (V([])), any node identities assigned will be unassigned. + - If not specified, any node identities currently assigned are not changed. + - If the parameter is an empty array (V([])), any node identities assigned are unassigned. suboptions: node_name: description: @@ -134,7 +134,7 @@ options: datacenter: description: - The nodes datacenter. - - This will result in effective policy only being valid in this datacenter. + - This results in effective policy only being valid in this datacenter. type: str required: true """ diff --git a/plugins/modules/consul_session.py b/plugins/modules/consul_session.py index a72136ad66..637b09aff2 100644 --- a/plugins/modules/consul_session.py +++ b/plugins/modules/consul_session.py @@ -57,7 +57,7 @@ options: default: 15 node: description: - - The name of the node that with which the session will be associated. By default this is the name of the agent. + - The name of the node that with which the session is associated. By default this is the name of the agent. type: str datacenter: description: @@ -65,8 +65,8 @@ options: type: str checks: description: - - Checks that will be used to verify the session health. If all the checks fail, the session will be invalidated and - any locks associated with the session will be release and can be acquired once the associated lock delay has expired. + - Checks that are used to verify the session health. If all the checks fail, the session is invalidated and any locks + associated with the session are released and can be acquired once the associated lock delay has expired. type: list elements: str behavior: diff --git a/plugins/modules/consul_token.py b/plugins/modules/consul_token.py index b525b2dc2a..1e5aa19f4c 100644 --- a/plugins/modules/consul_token.py +++ b/plugins/modules/consul_token.py @@ -29,7 +29,7 @@ attributes: diff_mode: support: partial details: - - In check mode the diff will miss operational attributes. + - In check mode the diff misses operational attributes. action_group: version_added: 8.3.0 options: @@ -41,11 +41,11 @@ options: type: str accessor_id: description: - - Specifies a UUID to use as the token's Accessor ID. If not specified a UUID will be generated for this field. + - Specifies a UUID to use as the token's Accessor ID. If not specified a UUID is generated for this field. type: str secret_id: description: - - Specifies a UUID to use as the token's Secret ID. If not specified a UUID will be generated for this field. + - Specifies a UUID to use as the token's Secret ID. If not specified a UUID is generated for this field. type: str description: description: @@ -56,8 +56,8 @@ options: elements: dict description: - List of policies to attach to the token. Each policy is a dict. - - If the parameter is left blank, any policies currently assigned will not be changed. - - Any empty array (V([])) will clear any policies previously set. + - If the parameter is left blank, any policies currently assigned are not changed. + - Any empty array (V([])) clears any policies previously set. suboptions: name: description: @@ -74,8 +74,8 @@ options: elements: dict description: - List of roles to attach to the token. Each role is a dict. - - If the parameter is left blank, any roles currently assigned will not be changed. - - Any empty array (V([])) will clear any roles previously set. + - If the parameter is left blank, any roles currently assigned are not changed. + - Any empty array (V([])) clears any roles previously set. suboptions: name: description: @@ -108,8 +108,8 @@ options: elements: dict description: - List of service identities to attach to the token. - - If not specified, any service identities currently assigned will not be changed. - - If the parameter is an empty array (V([])), any node identities assigned will be unassigned. + - If not specified, any service identities currently assigned are not changed. + - If the parameter is an empty array (V([])), any node identities assigned are unassigned. suboptions: service_name: description: @@ -120,8 +120,8 @@ options: required: true datacenters: description: - - The datacenters the token will be effective. - - If an empty array (V([])) is specified, the token will valid in all datacenters. + - The datacenters where the token is effective. + - If an empty array (V([])) is specified, the token is valid in all datacenters. - Including those which do not yet exist but may in the future. type: list elements: str @@ -130,8 +130,8 @@ options: elements: dict description: - List of node identities to attach to the token. - - If not specified, any node identities currently assigned will not be changed. - - If the parameter is an empty array (V([])), any node identities assigned will be unassigned. + - If not specified, any node identities currently assigned are not changed. + - If the parameter is an empty array (V([])), any node identities assigned are unassigned. suboptions: node_name: description: @@ -143,7 +143,7 @@ options: datacenter: description: - The nodes datacenter. - - This will result in effective token only being valid in this datacenter. + - This results in effective token only being valid in this datacenter. type: str required: true local: @@ -152,7 +152,7 @@ options: type: bool expiration_ttl: description: - - This is a convenience field and if set will initialize the C(expiration_time). Can be specified in the form of V(60s) + - This is a convenience field and if set it initializes the C(expiration_time). Can be specified in the form of V(60s) or V(5m) (that is, 60 seconds or 5 minutes, respectively). Ingored when the token is updated! type: str """ diff --git a/plugins/modules/cpanm.py b/plugins/modules/cpanm.py index 4fa0c25917..482183c0e0 100644 --- a/plugins/modules/cpanm.py +++ b/plugins/modules/cpanm.py @@ -59,16 +59,18 @@ options: install_recommendations: description: - If V(true), installs dependencies declared as recommends per META spec. - - If V(false), it ensures the dependencies declared as recommends are not installed, overriding any decision made earlier in E(PERL_CPANM_OPT). - - If parameter is not set, C(cpanm) will use its existing defaults. + - If V(false), it ensures the dependencies declared as recommends are not installed, overriding any decision made earlier + in E(PERL_CPANM_OPT). + - If parameter is not set, C(cpanm) uses its existing defaults. - When these dependencies fail to install, cpanm continues the installation, since they are just recommendation. type: bool version_added: 10.3.0 install_suggestions: description: - If V(true), installs dependencies declared as suggests per META spec. - - If V(false), it ensures the dependencies declared as suggests are not installed, overriding any decision made earlier in E(PERL_CPANM_OPT). - - If parameter is not set, C(cpanm) will use its existing defaults. + - If V(false), it ensures the dependencies declared as suggests are not installed, overriding any decision made earlier + in E(PERL_CPANM_OPT). + - If parameter is not set, C(cpanm) uses its existing defaults. - When these dependencies fail to install, cpanm continues the installation, since they are just suggestion. type: bool version_added: 10.3.0 @@ -97,14 +99,13 @@ options: notes: - Please note that U(http://search.cpan.org/dist/App-cpanminus/bin/cpanm, cpanm) must be installed on the remote host. - 'This module now comes with a choice of execution O(mode): V(compatibility) or V(new).' - - 'O(mode=compatibility): When using V(compatibility) mode, the module will keep backward compatibility. This was the default + - 'O(mode=compatibility): When using V(compatibility) mode, the module keeps backward compatibility. This was the default mode before community.general 9.0.0. O(name) must be either a module name or a distribution file. If the perl module given - by O(name) is installed (at the exact O(version) when specified), then nothing happens. Otherwise, it will be installed - using the C(cpanm) executable. O(name) cannot be an URL, or a git URL. C(cpanm) version specifiers do not work in this - mode.' - - 'O(mode=new): When using V(new) mode, the module will behave differently. The O(name) parameter may refer to a module - name, a distribution file, a HTTP URL or a git repository URL as described in C(cpanminus) documentation. C(cpanm) version - specifiers are recognized. This is the default mode from community.general 9.0.0 onwards.' + by O(name) is installed (at the exact O(version) when specified), then nothing happens. Otherwise, it is installed using + the C(cpanm) executable. O(name) cannot be an URL, or a git URL. C(cpanm) version specifiers do not work in this mode.' + - 'O(mode=new): When using V(new) mode, the module behaves differently. The O(name) parameter may refer to a module name, + a distribution file, a HTTP URL or a git repository URL as described in C(cpanminus) documentation. C(cpanm) version specifiers + are recognized. This is the default mode from community.general 9.0.0 onwards.' seealso: - name: C(cpanm) command manual page description: Manual page for the command. diff --git a/plugins/modules/cronvar.py b/plugins/modules/cronvar.py index 4f00aef07c..e1acedc81d 100644 --- a/plugins/modules/cronvar.py +++ b/plugins/modules/cronvar.py @@ -43,12 +43,12 @@ options: type: str insertafter: description: - - If specified, the variable will be inserted after the variable specified. + - If specified, the variable is inserted after the variable specified. - Used with O(state=present). type: str insertbefore: description: - - Used with O(state=present). If specified, the variable will be inserted just before the variable specified. + - Used with O(state=present). If specified, the variable is inserted just before the variable specified. type: str state: description: diff --git a/plugins/modules/crypttab.py b/plugins/modules/crypttab.py index 05a5afb082..5749d75cec 100644 --- a/plugins/modules/crypttab.py +++ b/plugins/modules/crypttab.py @@ -24,14 +24,14 @@ options: name: description: - Name of the encrypted block device as it appears in the C(/etc/crypttab) file, or optionally prefixed with V(/dev/mapper/), - as it appears in the filesystem. V(/dev/mapper/) will be stripped from O(name). + as it appears in the filesystem. V(/dev/mapper/) is stripped from O(name). type: str required: true state: description: - Use V(present) to add a line to C(/etc/crypttab) or update its definition if already present. - Use V(absent) to remove a line with matching O(name). - - Use V(opts_present) to add options to those already present; options with different values will be updated. + - Use V(opts_present) to add options to those already present; options with different values are updated. - Use V(opts_absent) to remove options from the existing set. type: str required: true @@ -73,6 +73,14 @@ EXAMPLES = r""" opts: discard loop: '{{ ansible_mounts }}' when: "'/dev/mapper/luks-' in item.device" + +- name: Add entry to /etc/crypttab for luks-home with password file + community.general.crypttab: + name: luks-home + backing_device: UUID=123e4567-e89b-12d3-a456-426614174000 + password: /root/keys/luks-home.key + opts: discard,cipher=aes-cbc-essiv:sha256 + state: present """ import os @@ -116,7 +124,7 @@ def main(): ('backing_device', backing_device), ('password', password), ('opts', opts)): - if (arg is not None and (' ' in arg or '\t' in arg or arg == '')): + if arg is not None and (' ' in arg or '\t' in arg or arg == ''): module.fail_json(msg="invalid '%s': contains white space or is empty" % arg_name, **module.params) diff --git a/plugins/modules/datadog_event.py b/plugins/modules/datadog_event.py index 97be0c9b16..fd75ea81de 100644 --- a/plugins/modules/datadog_event.py +++ b/plugins/modules/datadog_event.py @@ -16,7 +16,7 @@ __metaclass__ = type DOCUMENTATION = r""" module: datadog_event -short_description: Posts events to Datadog service +short_description: Posts events to Datadog service description: - Allows to post events to Datadog (www.datadoghq.com) service. - Uses http://docs.datadoghq.com/api/#events API. @@ -89,8 +89,8 @@ options: - An arbitrary string to use for aggregation. validate_certs: description: - - If V(false), SSL certificates will not be validated. This should only be used on personally controlled sites using - self-signed certificates. + - If V(false), SSL certificates are not validated. This should only be used on personally controlled sites using self-signed + certificates. type: bool default: true """ diff --git a/plugins/modules/datadog_monitor.py b/plugins/modules/datadog_monitor.py index eec0db0d32..3af8cac3d5 100644 --- a/plugins/modules/datadog_monitor.py +++ b/plugins/modules/datadog_monitor.py @@ -92,26 +92,26 @@ options: type: dict description: - Dictionary of scopes to silence, with timestamps or None. - - Each scope will be muted until the given POSIX timestamp or forever if the value is None. + - Each scope is muted until the given POSIX timestamp or forever if the value is V(None). notify_no_data: description: - - Whether this monitor will notify when data stops reporting. + - Whether this monitor notifies when data stops reporting. type: bool default: false no_data_timeframe: description: - - The number of minutes before a monitor will notify when data stops reporting. + - The number of minutes before a monitor notifies when data stops reporting. - Must be at least 2x the monitor timeframe for metric alerts or 2 minutes for service checks. - If not specified, it defaults to 2x timeframe for metric, 2 minutes for service. type: str timeout_h: description: - - The number of hours of the monitor not reporting data before it will automatically resolve from a triggered state. + - The number of hours of the monitor not reporting data before it automatically resolves from a triggered state. type: str renotify_interval: description: - - The number of minutes after the last notification before a monitor will re-notify on the current status. - - It will only re-notify if it is not resolved. + - The number of minutes after the last notification before a monitor re-notifies on the current status. + - It only re-notifies if it is not resolved. type: str escalation_message: description: @@ -120,7 +120,7 @@ options: type: str notify_audit: description: - - Whether tagged users will be notified on changes to this monitor. + - Whether tagged users are notified on changes to this monitor. type: bool default: false thresholds: @@ -138,7 +138,7 @@ options: require_full_window: description: - Whether this monitor needs a full window of data before it gets evaluated. - - We highly recommend you set this to False for sparse metrics, otherwise some evaluations will be skipped. + - We highly recommend you set this to V(false) for sparse metrics, otherwise some evaluations are skipped. type: bool new_host_delay: description: @@ -153,7 +153,7 @@ options: id: description: - The ID of the alert. - - If set, will be used instead of the name to locate the alert. + - If set, it is used instead of O(name) to locate the alert. type: str include_tags: description: @@ -435,7 +435,7 @@ def mute_monitor(module): module.fail_json(msg="Monitor %s not found!" % module.params['name']) elif monitor['options']['silenced']: module.fail_json(msg="Monitor is already muted. Datadog does not allow to modify muted alerts, consider unmuting it first.") - elif (module.params['silenced'] is not None and len(set(monitor['options']['silenced']) ^ set(module.params['silenced'])) == 0): + elif module.params['silenced'] is not None and len(set(monitor['options']['silenced']) ^ set(module.params['silenced'])) == 0: module.exit_json(changed=False) try: if module.params['silenced'] is None or module.params['silenced'] == "": diff --git a/plugins/modules/dconf.py b/plugins/modules/dconf.py index 319d6770f2..8bb9650a87 100644 --- a/plugins/modules/dconf.py +++ b/plugins/modules/dconf.py @@ -17,10 +17,10 @@ short_description: Modify and read dconf database description: - This module allows modifications and reading of C(dconf) database. The module is implemented as a wrapper around C(dconf) tool. Please see the dconf(1) man page for more details. - - Since C(dconf) requires a running D-Bus session to change values, the module will try to detect an existing session and - reuse it, or run the tool using C(dbus-run-session). + - Since C(dconf) requires a running D-Bus session to change values, the module tries to detect an existing session and reuse + it, or run the tool using C(dbus-run-session). requirements: - - Optionally the C(gi.repository) Python library (usually included in the OS on hosts which have C(dconf)); this will become + - Optionally the C(gi.repository) Python library (usually included in the OS on hosts which have C(dconf)); this is to become a non-optional requirement in a future major release of community.general. notes: - This module depends on C(psutil) Python library (version 4.0.0 and upwards), C(dconf), C(dbus-send), and C(dbus-run-session) @@ -28,7 +28,7 @@ notes: - This module uses the C(gi.repository) Python library when available for accurate comparison of values in C(dconf) to values specified in Ansible code. C(gi.repository) is likely to be present on most systems which have C(dconf) but may not be present everywhere. When it is missing, a simple string comparison between values is used, and there may be false positives, - that is, Ansible may think that a value is being changed when it is not. This fallback will be removed in a future version + that is, Ansible may think that a value is being changed when it is not. This fallback is to be removed in a future version of this module, at which point the module will stop working on hosts without C(gi.repository). - Detection of existing, running D-Bus session, required to change settings using C(dconf), is not 100% reliable due to implementation details of D-Bus daemon itself. This might lead to running applications not picking-up changes on-the-fly diff --git a/plugins/modules/decompress.py b/plugins/modules/decompress.py index 50db0355e3..03be61a8e6 100644 --- a/plugins/modules/decompress.py +++ b/plugins/modules/decompress.py @@ -33,13 +33,12 @@ options: required: true dest: description: - - The file name of the destination file where the compressed file will be decompressed. - - If the destination file exists, it will be truncated and overwritten. - - If not specified, the destination filename will be derived from O(src) by removing the compression format extension. - For example, if O(src) is V(/path/to/file.txt.gz) and O(format) is V(gz), O(dest) will be V(/path/to/file.txt). If - the O(src) file does not have an extension for the current O(format), the O(dest) filename will be made by appending - C(_decompressed) to the O(src) filename. For instance, if O(src) is V(/path/to/file.myextension), the (dest) filename - will be V(/path/to/file.myextension_decompressed). + - The file name of the destination file where the compressed file is decompressed. + - If the destination file exists, it is truncated and overwritten. + - If not specified, the destination filename is derived from O(src) by removing the compression format extension. For + example, when O(src) is V(/path/to/file.txt.gz) and O(format) is V(gz), O(dest) is V(/path/to/file.txt). If the O(src) + file does not have an extension for the current O(format), the O(dest) filename is made by appending C(_decompressed) + to the O(src) filename. For instance, when O(src) is V(/path/to/file.myextension), the (dest) filename is V(/path/to/file.myextension_decompressed). type: path format: description: diff --git a/plugins/modules/deploy_helper.py b/plugins/modules/deploy_helper.py index 14a7d4f8c7..b25e68392b 100644 --- a/plugins/modules/deploy_helper.py +++ b/plugins/modules/deploy_helper.py @@ -18,8 +18,8 @@ short_description: Manages some of the steps common in deploying projects description: - The Deploy Helper manages some of the steps common in deploying software. It creates a folder structure, manages a symlink for the current release and cleans up old releases. - - Running it with the O(state=query) or O(state=present) will return the C(deploy_helper) fact. C(project_path), whatever - you set in the O(path) parameter, C(current_path), the path to the symlink that points to the active release, C(releases_path), + - Running it with the O(state=query) or O(state=present) returns the C(deploy_helper) fact. C(project_path), whatever you + set in the O(path) parameter, C(current_path), the path to the symlink that points to the active release, C(releases_path), the path to the folder to keep releases in, C(shared_path), the path to the folder to keep shared resources in, C(unfinished_filename), the file to check for to recognize unfinished builds, C(previous_release), the release the 'current' symlink is pointing to, C(previous_release_path), the full path to the 'current' symlink target, C(new_release), either the O(release) parameter @@ -41,12 +41,12 @@ options: type: str description: - The state of the project. - - V(query) will only gather facts. - - V(present) will create the project C(root) folder, and in it the C(releases) and C(shared) folders. - - V(finalize) will remove the unfinished_filename file, create a symlink to the newly deployed release and optionally - clean old releases. - - V(clean) will remove failed & old releases. - - V(absent) will remove the project folder (synonymous to the M(ansible.builtin.file) module with O(state=absent)). + - V(query) gathers facts. + - V(present) creates the project C(root) folder, and in it the C(releases) and C(shared) folders. + - V(finalize) removes the unfinished_filename file, creates a symlink to the newly deployed release and optionally cleans + old releases. + - V(clean) removes failed & old releases. + - V(absent) removes the project folder (synonymous to the M(ansible.builtin.file) module with O(state=absent)). choices: [present, finalize, absent, clean, query] default: present @@ -59,15 +59,15 @@ options: releases_path: type: str description: - - The name of the folder that will hold the releases. This can be relative to O(path) or absolute. Returned in the C(deploy_helper.releases_path) + - The name of the folder that holds the releases. This can be relative to O(path) or absolute. Returned in the C(deploy_helper.releases_path) fact. default: releases shared_path: type: path description: - - The name of the folder that will hold the shared resources. This can be relative to O(path) or absolute. If this is - set to an empty string, no shared folder will be created. Returned in the C(deploy_helper.shared_path) fact. + - The name of the folder that holds the shared resources. This can be relative to O(path) or absolute. If this is set + to an empty string, no shared folder is created. Returned in the C(deploy_helper.shared_path) fact. default: shared current_path: @@ -81,8 +81,8 @@ options: type: str description: - The name of the file that indicates a deploy has not finished. All folders in the O(releases_path) that contain this - file will be deleted on O(state=finalize) with O(clean=true), or O(state=clean). This file is automatically deleted - from the C(new_release_path) during O(state=finalize). + file are deleted on O(state=finalize) with O(clean=true), or O(state=clean). This file is automatically deleted from + the C(new_release_path) during O(state=finalize). default: DEPLOY_UNFINISHED clean: @@ -95,16 +95,16 @@ options: type: int description: - The number of old releases to keep when cleaning. Used in O(state=finalize) and O(state=clean). Any unfinished builds - will be deleted first, so only correct releases will count. The current version will not count. + are deleted first, so only correct releases count. The current version does not count. default: 5 notes: - Facts are only returned for O(state=query) and O(state=present). If you use both, you should pass any overridden parameters - to both calls, otherwise the second call will overwrite the facts of the first one. + to both calls, otherwise the second call overwrites the facts of the first one. - When using O(state=clean), the releases are ordered by I(creation date). You should be able to switch to a new naming strategy without problems. - - Because of the default behaviour of generating the C(new_release) fact, this module will not be idempotent unless you - pass your own release name with O(release). Due to the nature of deploying software, this should not be much of a problem. + - Because of the default behaviour of generating the C(new_release) fact, this module is not idempotent unless you pass + your own release name with O(release). Due to the nature of deploying software, this should not be much of a problem. extends_documentation_fragment: - ansible.builtin.files - community.general.attributes diff --git a/plugins/modules/dimensiondata_vlan.py b/plugins/modules/dimensiondata_vlan.py index 2389d34333..4e8f090b32 100644 --- a/plugins/modules/dimensiondata_vlan.py +++ b/plugins/modules/dimensiondata_vlan.py @@ -56,8 +56,7 @@ options: state: description: - The desired state for the target VLAN. - - V(readonly) ensures that the state is only ever read, not modified (the module will fail if the resource does not - exist). + - V(readonly) ensures that the state is only ever read, not modified (the module fails if the resource does not exist). choices: [present, absent, readonly] default: present type: str @@ -65,7 +64,7 @@ options: description: - Permit expansion of the target VLAN's network if the module parameters specify a larger network than the VLAN currently possesses. - - If V(false), the module will fail under these conditions. + - If V(false), the module fails under these conditions. - This is intended to prevent accidental expansion of a VLAN's network (since this operation is not reversible). type: bool default: false diff --git a/plugins/modules/django_check.py b/plugins/modules/django_check.py index 9699428b9c..e6e03c8276 100644 --- a/plugins/modules/django_check.py +++ b/plugins/modules/django_check.py @@ -22,7 +22,7 @@ options: database: description: - Specify databases to run checks against. - - If not specified, Django will not run database tests. + - If not specified, Django does not run database tests. type: list elements: str deploy: @@ -32,7 +32,7 @@ options: default: false fail_level: description: - - Message level that will trigger failure. + - Message level that triggers failure. - Default is the Django default value. Check the documentation for the version being used. type: str choices: [CRITICAL, ERROR, WARNING, INFO, DEBUG] @@ -49,7 +49,7 @@ options: elements: str notes: - The outcome of the module is found in the common return values RV(ignore:stdout), RV(ignore:stderr), RV(ignore:rc). - - The module will fail if RV(ignore:rc) is not zero. + - The module fails if RV(ignore:rc) is not zero. attributes: check_mode: support: full diff --git a/plugins/modules/django_manage.py b/plugins/modules/django_manage.py index ded4f436e3..0fe07890f8 100644 --- a/plugins/modules/django_manage.py +++ b/plugins/modules/django_manage.py @@ -15,7 +15,7 @@ module: django_manage short_description: Manages a Django application description: - Manages a Django application using the C(manage.py) application frontend to C(django-admin). With the O(virtualenv) parameter, - all management commands will be executed by the given C(virtualenv) installation. + all management commands are executed by the given C(virtualenv) installation. extends_documentation_fragment: - community.general.attributes attributes: @@ -34,8 +34,8 @@ options: - V(loaddata) - Searches for and loads the contents of the named O(fixtures) into the database. - V(migrate) - Synchronizes the database state with models and migrations. - V(test) - Runs tests for all installed apps. - - Other commands can be entered, but will fail if they are unknown to Django. Other commands that may prompt for user - input should be run with the C(--noinput) flag. + - Custom commands can be entered, but they fail unless they are known to Django. Custom commands that may prompt for + user input should be run with the C(--noinput) flag. - Support for the values V(cleanup), V(syncdb), V(validate) was removed in community.general 9.0.0. See note about supported versions of Django. type: str @@ -62,7 +62,7 @@ options: virtualenv: description: - An optional path to a C(virtualenv) installation to use while running the manage application. - - The virtual environment must exist, otherwise the module will fail. + - The virtual environment must exist, otherwise the module fails. type: path aliases: [virtual_env] apps: @@ -78,7 +78,7 @@ options: clear: description: - Clear the existing files before trying to copy or link the original file. - - Used only with the V(collectstatic) command. The C(--noinput) argument will be added automatically. + - Used only with the V(collectstatic) command. The C(--noinput) argument is added automatically. required: false default: false type: bool @@ -101,18 +101,18 @@ options: required: false skip: description: - - Will skip over out-of-order missing migrations, you can only use this parameter with V(migrate) command. + - Skips over out-of-order missing migrations, you can only use this parameter with V(migrate) command. required: false type: bool merge: description: - - Will run out-of-order or missing migrations as they are not rollback migrations, you can only use this parameter with + - Runs out-of-order or missing migrations as they are not rollback migrations, you can only use this parameter with V(migrate) command. required: false type: bool link: description: - - Will create links to the files instead of copying them, you can only use this parameter with V(collectstatic) command. + - Creates links to the files instead of copying them, you can only use this parameter with V(collectstatic) command. required: false type: bool testrunner: @@ -128,7 +128,7 @@ notes: module allows for free-form commands, not verifying the version of Django being used, it is B(strongly recommended) to use a more recent version of the framework.' - Please notice that Django 4.1 requires Python 3.8 or greater. - - This module will not create a virtualenv if the O(virtualenv) parameter is specified and a virtual environment does not + - This module does not create a virtualenv if the O(virtualenv) parameter is specified and a virtual environment does not already exist at the given location. This behavior changed in community.general version 9.0.0. - The recommended way to create a virtual environment in Ansible is by using M(ansible.builtin.pip). - This module assumes English error messages for the V(createcachetable) command to detect table existence, unfortunately. diff --git a/plugins/modules/dnf_config_manager.py b/plugins/modules/dnf_config_manager.py index 69ac2c7085..c3c0d95c24 100644 --- a/plugins/modules/dnf_config_manager.py +++ b/plugins/modules/dnf_config_manager.py @@ -120,7 +120,7 @@ changed_repos: returned: success type: list elements: str - sample: ['crb'] + sample: ["crb"] """ from ansible.module_utils.basic import AnsibleModule diff --git a/plugins/modules/dnf_versionlock.py b/plugins/modules/dnf_versionlock.py index d3eaf832a5..adfb636634 100644 --- a/plugins/modules/dnf_versionlock.py +++ b/plugins/modules/dnf_versionlock.py @@ -22,9 +22,9 @@ attributes: support: partial details: - The logics of the C(versionlock) plugin for corner cases could be confusing, so please take in account that this module - will do its best to give a C(check_mode) prediction on what is going to happen. In case of doubt, check the documentation + does its best to give a C(check_mode) prediction on what is going to happen. In case of doubt, check the documentation of the plugin. - - Sometimes the module could predict changes in C(check_mode) that will not be such because C(versionlock) concludes + - Sometimes the module could predict changes in C(check_mode) that are not fulfilled because C(versionlock) concludes that there is already a entry in C(locklist) that already matches. diff_mode: support: none @@ -47,12 +47,12 @@ options: state: description: - Whether to add (V(present) or V(excluded)) to or remove (V(absent) or V(clean)) from the C(locklist). - - V(present) will add a package name spec to the C(locklist). If there is a installed package that matches, then only - that version will be added. Otherwise, all available package versions will be added. - - V(excluded) will add a package name spec as excluded to the C(locklist). It means that packages represented by the - package name spec will be excluded from transaction operations. All available package versions will be added. - - V(absent) will delete entries in the C(locklist) that match the package name spec. - - V(clean) will delete all entries in the C(locklist). This option is mutually exclusive with O(name). + - V(present) adds a package name spec to the C(locklist). If there is a installed package that matches, then only that + version is added. Otherwise, all available package versions are added. + - V(excluded) adds a package name spec as excluded to the C(locklist). It means that packages represented by the package + name spec are excluded from transaction operations. All available package versions are added. + - V(absent) deletes entries in the C(locklist) that match the package name spec. + - V(clean) deletes all entries in the C(locklist). This option is mutually exclusive with O(name). choices: ['absent', 'clean', 'excluded', 'present'] type: str default: present @@ -108,25 +108,25 @@ locklist_pre: returned: success type: list elements: str - sample: ['bash-0:4.4.20-1.el8_4.*', '!bind-32:9.11.26-4.el8_4.*'] + sample: ["bash-0:4.4.20-1.el8_4.*", "!bind-32:9.11.26-4.el8_4.*"] locklist_post: description: Locklist after module execution. returned: success and (not check mode or state is clean) type: list elements: str - sample: ['bash-0:4.4.20-1.el8_4.*'] + sample: ["bash-0:4.4.20-1.el8_4.*"] specs_toadd: description: Package name specs meant to be added by versionlock. returned: success type: list elements: str - sample: ['bash'] + sample: ["bash"] specs_todelete: description: Package name specs meant to be deleted by versionlock. returned: success type: list elements: str - sample: ['bind'] + sample: ["bind"] """ from ansible.module_utils.basic import AnsibleModule diff --git a/plugins/modules/dnsimple.py b/plugins/modules/dnsimple.py index 979aca5797..729c876841 100644 --- a/plugins/modules/dnsimple.py +++ b/plugins/modules/dnsimple.py @@ -25,8 +25,8 @@ attributes: options: account_email: description: - - Account email. If omitted, the environment variables E(DNSIMPLE_EMAIL) and E(DNSIMPLE_API_TOKEN) will be looked for. - - 'If those variables are not found, a C(.dnsimple) file will be looked for, see: U(https://github.com/mikemaccana/dnsimple-python#getting-started).' + - Account email. If omitted, the environment variables E(DNSIMPLE_EMAIL) and E(DNSIMPLE_API_TOKEN) are looked for. + - 'If those variables are not found, a C(.dnsimple) file is looked for, see: U(https://github.com/mikemaccana/dnsimple-python#getting-started).' - C(.dnsimple) config files are only supported in dnsimple-python<2.0.0. type: str account_api_token: @@ -36,12 +36,12 @@ options: domain: description: - Domain to work with. Can be the domain name (for example V(mydomain.com)) or the numeric ID of the domain in DNSimple. - - If omitted, a list of domains will be returned. - - If domain is present but the domain does not exist, it will be created. + - If omitted, a list of domains is returned. + - If domain is present but the domain does not exist, it is created. type: str record: description: - - Record to add, if blank a record for the domain will be created, supports the wildcard (*). + - Record to add, if blank a record for the domain is created, supports the wildcard (*). type: str record_ids: description: diff --git a/plugins/modules/dnsimple_info.py b/plugins/modules/dnsimple_info.py index c508525fac..78b4ceae25 100644 --- a/plugins/modules/dnsimple_info.py +++ b/plugins/modules/dnsimple_info.py @@ -26,8 +26,8 @@ options: name: description: - The domain name to retrieve info from. - - Will return all associated records for this domain if specified. - - If not specified, will return all domains associated with the account ID. + - Returns all associated records for this domain if specified. + - If not specified, returns all domains associated with the account ID. type: str account_id: @@ -43,7 +43,7 @@ options: record: description: - The record to find. - - If specified, only this record will be returned instead of all records. + - If specified, only this record is returned instead of all records. required: false type: str diff --git a/plugins/modules/dnsmadeeasy.py b/plugins/modules/dnsmadeeasy.py index 83268af379..3e3fa9dce5 100644 --- a/plugins/modules/dnsmadeeasy.py +++ b/plugins/modules/dnsmadeeasy.py @@ -50,7 +50,7 @@ options: record_name: description: - - Record name to get/create/delete/update. If record_name is not specified; all records for the domain will be returned + - Record name to get/create/delete/update. If O(record_name) is not specified; all records for the domain are returned in "result" regardless of the state argument. type: str @@ -64,8 +64,8 @@ options: description: - 'Record value. HTTPRED: , MX: , NS: , PTR: , SRV: , TXT: ".' - - If record_value is not specified; no changes will be made and the record will be returned in 'result' (in other words, - this module can be used to fetch a record's current ID, type, and ttl). + - If O(record_value) is not specified; no changes are made and the record is returned in RV(ignore:result) (in other + words, this module can be used to fetch a record's current ID, type, and TTL). type: str record_ttl: @@ -83,8 +83,8 @@ options: validate_certs: description: - - If V(false), SSL certificates will not be validated. This should only be used on personally controlled sites using - self-signed certificates. + - If V(false), SSL certificates are not validated. This should only be used on personally controlled sites using self-signed + certificates. type: bool default: true @@ -128,7 +128,7 @@ options: contactList: description: - - Name or ID of the contact list that the monitor will notify. + - Name or ID of the contact list that the monitor notifies. - The default V('') means the Account Owner. type: str @@ -195,7 +195,7 @@ notes: - Only A records can have a O(monitor) or O(failover). - To add failover, the O(failover), O(autoFailover), O(port), O(protocol), O(ip1), and O(ip2) options are required. - To add monitor, the O(monitor), O(port), O(protocol), O(maxEmails), O(systemDescription), and O(ip1) options are required. - - The monitor and the failover will share O(port), O(protocol), and O(ip1) options. + - The options O(monitor) and O(failover) share O(port), O(protocol), and O(ip1) options. requirements: [hashlib, hmac] author: "Brice Burgess (@briceburg)" """ diff --git a/plugins/modules/dpkg_divert.py b/plugins/modules/dpkg_divert.py index 83a22bd632..df09927ee9 100644 --- a/plugins/modules/dpkg_divert.py +++ b/plugins/modules/dpkg_divert.py @@ -17,8 +17,8 @@ author: - quidame (@quidame) description: - A diversion is for C(dpkg) the knowledge that only a given package (or the local administrator) is allowed to install - a file at a given location. Other packages shipping their own version of this file will be forced to O(divert) it, that - is to install it at another location. It allows one to keep changes in a file provided by a debian package by preventing + a file at a given location. Other packages shipping their own version of this file are forced to O(divert) it, that is + to install it at another location. It allows one to keep changes in a file provided by a debian package by preventing it being overwritten on package upgrade. - This module manages diversions of debian packages files using the C(dpkg-divert) commandline tool. It can either create or remove a diversion for a given file, but also update an existing diversion to modify its O(holder) and/or its O(divert) @@ -54,7 +54,7 @@ options: type: str divert: description: - - The location where the versions of file will be diverted. + - The location where the versions of file are diverted. - Default is to add suffix C(.distrib) to the file path. - This parameter is ignored when O(state=absent). type: path @@ -70,7 +70,7 @@ options: force: description: - When O(rename=true) and O(force=true), renaming is performed even if the target of the renaming exists, in other words - the existing contents of the file at this location will be lost. + the existing contents of the file at this location are lost. - This parameter is ignored when O(rename=false). type: bool default: false diff --git a/plugins/modules/easy_install.py b/plugins/modules/easy_install.py index 734f0dc4df..f73800350c 100644 --- a/plugins/modules/easy_install.py +++ b/plugins/modules/easy_install.py @@ -33,8 +33,8 @@ options: - An optional O(virtualenv) directory path to install into. If the O(virtualenv) does not exist, it is created automatically. virtualenv_site_packages: description: - - Whether the virtual environment will inherit packages from the global site-packages directory. Note that if this setting - is changed on an already existing virtual environment it will not have any effect, the environment must be deleted + - Whether the virtual environment inherits packages from the global site-packages directory. Note that this setting + has no effect on an already existing virtual environment, so if you want to change it, the environment must be deleted and newly created. type: bool default: false @@ -74,6 +74,12 @@ EXAMPLES = r""" community.general.easy_install: name: bottle virtualenv: /webapps/myapp/venv + +- name: Install a python package using pyvenv as the virtualenv tool + community.general.easy_install: + name: package_name + virtualenv: /opt/myenv + virtualenv_command: pyvenv """ import os diff --git a/plugins/modules/elasticsearch_plugin.py b/plugins/modules/elasticsearch_plugin.py index 3455691cd0..c90f8dbde8 100644 --- a/plugins/modules/elasticsearch_plugin.py +++ b/plugins/modules/elasticsearch_plugin.py @@ -66,7 +66,7 @@ options: type: bool plugin_bin: description: - - Location of the plugin binary. If this file is not found, the default plugin binaries will be used. + - Location of the plugin binary. If this file is not found, the default plugin binaries are used. type: path plugin_dir: description: @@ -83,7 +83,7 @@ options: type: str version: description: - - Version of the plugin to be installed. If plugin exists with previous version, it will NOT be updated. + - Version of the plugin to be installed. If plugin exists with previous version, it is NOT updated. type: str """ diff --git a/plugins/modules/emc_vnx_sg_member.py b/plugins/modules/emc_vnx_sg_member.py index bdb86625d1..a0b1e920e2 100644 --- a/plugins/modules/emc_vnx_sg_member.py +++ b/plugins/modules/emc_vnx_sg_member.py @@ -77,7 +77,7 @@ EXAMPLES = r""" RETURN = r""" hluid: - description: LUNID that hosts attached to the storage group will see. + description: LUNID visible to hosts attached to the storage group. type: int returned: success """ diff --git a/plugins/modules/filesystem.py b/plugins/modules/filesystem.py index 2edc8be5ab..f23d8d27a7 100644 --- a/plugins/modules/filesystem.py +++ b/plugins/modules/filesystem.py @@ -64,10 +64,10 @@ options: description: - If V(true), if the block device and filesystem size differ, grow the filesystem into the space. - Supported for C(bcachefs), C(btrfs), C(ext2), C(ext3), C(ext4), C(ext4dev), C(f2fs), C(lvm), C(xfs), C(ufs) and C(vfat) - filesystems. Attempts to resize other filesystem types will fail. - - XFS Will only grow if mounted. Currently, the module is based on commands from C(util-linux) package to perform operations, + filesystems. Attempts to resize other filesystem types fail. + - XFS only grows if mounted. Currently, the module is based on commands from C(util-linux) package to perform operations, so resizing of XFS is not supported on FreeBSD systems. - - VFAT will likely fail if C(fatresize < 1.04). + - VFAT is likely to fail if C(fatresize < 1.04). - Mutually exclusive with O(uuid). type: bool default: false @@ -82,7 +82,7 @@ options: - See xfs_admin(8) (C(xfs)), tune2fs(8) (C(ext2), C(ext3), C(ext4), C(ext4dev)) for possible values. - For O(fstype=lvm) the value is ignored, it resets the PV UUID if set. - Supported for O(fstype) being one of C(bcachefs), C(ext2), C(ext3), C(ext4), C(ext4dev), C(lvm), or C(xfs). - - This is B(not idempotent). Specifying this option will always result in a change. + - This is B(not idempotent). Specifying this option always results in a change. - Mutually exclusive with O(resizefs). type: str version_added: 7.1.0 diff --git a/plugins/modules/flatpak.py b/plugins/modules/flatpak.py index 13898c3349..98de9de3ed 100644 --- a/plugins/modules/flatpak.py +++ b/plugins/modules/flatpak.py @@ -27,7 +27,7 @@ attributes: check_mode: support: partial details: - - If O(state=latest), the module will always return C(changed=true). + - If O(state=latest), the module always returns RV(ignore:changed=true). diff_mode: support: none options: @@ -53,7 +53,7 @@ options: - When supplying a reverse DNS name, you can use the O(remote) option to specify on what remote to look for the flatpak. An example for a reverse DNS name is C(org.gnome.gedit). - When used with O(state=absent) or O(state=latest), it is recommended to specify the name in the reverse DNS format. - - When supplying a URL with O(state=absent) or O(state=latest), the module will try to match the installed flatpak based + - When supplying a URL with O(state=absent) or O(state=latest), the module tries to match the installed flatpak based on the name of the flatpakref to remove or update it. However, there is no guarantee that the names of the flatpakref file and the reverse DNS name of the installed flatpak do match. type: list @@ -107,6 +107,12 @@ EXAMPLES = r""" state: present remote: gnome +- name: Install GIMP using custom flatpak binary path + community.general.flatpak: + name: org.gimp.GIMP + state: present + executable: /usr/local/bin/flatpak-dev + - name: Install multiple packages community.general.flatpak: name: @@ -165,26 +171,6 @@ command: returned: When a flatpak command has been executed type: str sample: "/usr/bin/flatpak install --user --nontinteractive flathub org.gnome.Calculator" -msg: - description: Module error message. - returned: failure - type: str - sample: "Executable '/usr/local/bin/flatpak' was not found on the system." -rc: - description: Return code from flatpak binary. - returned: When a flatpak command has been executed - type: int - sample: 0 -stderr: - description: Error output from flatpak binary. - returned: When a flatpak command has been executed - type: str - sample: "error: Error searching remote flathub: Can't find ref org.gnome.KDE" -stdout: - description: Output from flatpak binary. - returned: When a flatpak command has been executed - type: str - sample: "org.gnome.Calendar/x86_64/stable\tcurrent\norg.gnome.gitg/x86_64/stable\tcurrent\n" """ from ansible.module_utils.six.moves.urllib.parse import urlparse diff --git a/plugins/modules/flatpak_remote.py b/plugins/modules/flatpak_remote.py index ba202d3033..bf30f6f85f 100644 --- a/plugins/modules/flatpak_remote.py +++ b/plugins/modules/flatpak_remote.py @@ -17,7 +17,7 @@ description: - Allows users to add or remove flatpak remotes. - The flatpak remotes concept is comparable to what is called repositories in other packaging formats. - Currently, remote addition is only supported using C(flatpakrepo) file URLs. - - Existing remotes will not be updated. + - Existing remotes are not updated. - See the M(community.general.flatpak) module for managing flatpaks. author: - John Kwiatkoski (@JayKayy) @@ -56,8 +56,8 @@ options: name: description: - The desired name for the flatpak remote to be registered under on the managed host. - - When used with O(state=present), the remote will be added to the managed host under the specified O(name). - - When used with O(state=absent) the remote with that name will be removed. + - When used with O(state=present), the remote is added to the managed host under the specified O(name). + - When used with O(state=absent) the remote with that name is removed. type: str required: true state: diff --git a/plugins/modules/gem.py b/plugins/modules/gem.py index c01433cb90..c364785f3e 100644 --- a/plugins/modules/gem.py +++ b/plugins/modules/gem.py @@ -48,7 +48,7 @@ options: repository: type: str description: - - The repository from which the gem will be installed. + - The repository from which the gem is installed. required: false aliases: [source] user_install: @@ -65,7 +65,7 @@ options: install_dir: type: path description: - - Install the gems into a specific directory. These gems will be independent from the global installed ones. Specifying + - Install the gems into a specific directory. These gems are independent from the global installed ones. Specifying this requires user_install to be false. required: false bindir: diff --git a/plugins/modules/gio_mime.py b/plugins/modules/gio_mime.py index 77ee653d85..f81e065612 100644 --- a/plugins/modules/gio_mime.py +++ b/plugins/modules/gio_mime.py @@ -26,12 +26,12 @@ attributes: options: mime_type: description: - - MIME type for which a default handler will be set. + - MIME type for which a default handler is set. type: str required: true handler: description: - - Default handler will be set for the MIME type. + - Default handler set for the MIME type. type: str required: true notes: diff --git a/plugins/modules/git_config_info.py b/plugins/modules/git_config_info.py index c8152cfa42..acedaf718a 100644 --- a/plugins/modules/git_config_info.py +++ b/plugins/modules/git_config_info.py @@ -26,7 +26,7 @@ options: name: description: - The name of the setting to read. - - If not provided, all settings will be returned as RV(config_values). + - If not provided, all settings are returned as RV(config_values). type: str path: description: @@ -94,8 +94,8 @@ config_values: description: - This is a dictionary mapping a git configuration setting to a list of its values. - When O(name) is not set, all configuration settings are returned here. - - When O(name) is set, only the setting specified in O(name) is returned here. If that setting is not set, the key will - still be present, and its value will be an empty list. + - When O(name) is set, only the setting specified in O(name) is returned here. If that setting is not set, the key is + still present, and its value is an empty list. returned: success type: dict sample: diff --git a/plugins/modules/github_deploy_key.py b/plugins/modules/github_deploy_key.py index 2e5f9125ad..bbf6e711f3 100644 --- a/plugins/modules/github_deploy_key.py +++ b/plugins/modules/github_deploy_key.py @@ -57,8 +57,8 @@ options: type: str read_only: description: - - If V(true), the deploy key will only be able to read repository contents. Otherwise, the deploy key will be able to - read and write. + - If V(true), the deploy key is only able to read repository contents. Otherwise, the deploy key is able to read and + write. type: bool default: true state: diff --git a/plugins/modules/github_key.py b/plugins/modules/github_key.py index f9754398cc..80b0a6bf70 100644 --- a/plugins/modules/github_key.py +++ b/plugins/modules/github_key.py @@ -45,8 +45,8 @@ options: type: str force: description: - - The default is V(true), which will replace the existing remote key if it is different than O(pubkey). If V(false), - the key will only be set if no key with the given O(name) exists. + - The default is V(true), which replaces the existing remote key if it is different than O(pubkey). If V(false), the + key is only set if no key with the given O(name) exists. type: bool default: true api_url: diff --git a/plugins/modules/github_release.py b/plugins/modules/github_release.py index 1376bf4f3d..eae2081701 100644 --- a/plugins/modules/github_release.py +++ b/plugins/modules/github_release.py @@ -182,13 +182,29 @@ def main(): else: gh_obj = github3.GitHub() - # test if we're actually logged in - if password or login_token: + # GitHub's token formats: + # - ghp_ - Personal access token (classic) + # - github_pat_ - Fine-grained personal access token + # - gho_ - OAuth access token + # - ghu_ - User access token for a GitHub App + # - ghs_ - Installation access token for a GitHub App + # - ghr_ - Refresh token for a GitHub App + # + # References: + # https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/about-authentication-to-github#githubs-token-formats + # + # Test if we're actually logged in, but skip this check for some token prefixes + SKIPPED_TOKEN_PREFIXES = ['ghs_'] + if password or (login_token and not any(login_token.startswith(prefix) for prefix in SKIPPED_TOKEN_PREFIXES)): gh_obj.me() except github3.exceptions.AuthenticationFailed as e: module.fail_json(msg='Failed to connect to GitHub: %s' % to_native(e), details="Please check username and password or token " "for repository %s" % repo) + except github3.exceptions.GitHubError as e: + module.fail_json(msg='GitHub API error: %s' % to_native(e), + details="Please check username and password or token " + "for repository %s" % repo) repository = gh_obj.repository(user, repo) diff --git a/plugins/modules/github_repo.py b/plugins/modules/github_repo.py index 2d2c6f8588..d5091cde3d 100644 --- a/plugins/modules/github_repo.py +++ b/plugins/modules/github_repo.py @@ -72,7 +72,7 @@ options: organization: description: - Organization for the repository. - - When O(state=present), the repository will be created in the current user profile. + - When O(state=present), the repository is created in the current user profile. type: str required: false api_url: diff --git a/plugins/modules/github_webhook.py b/plugins/modules/github_webhook.py index 8608c90bc9..0a6272c7b5 100644 --- a/plugins/modules/github_webhook.py +++ b/plugins/modules/github_webhook.py @@ -32,7 +32,7 @@ options: - repo url: description: - - URL to which payloads will be delivered. + - URL to which payloads are delivered. type: str required: true content_type: diff --git a/plugins/modules/gitlab_deploy_key.py b/plugins/modules/gitlab_deploy_key.py index f5ae130324..d116df0714 100644 --- a/plugins/modules/gitlab_deploy_key.py +++ b/plugins/modules/gitlab_deploy_key.py @@ -55,8 +55,8 @@ options: default: false state: description: - - When V(present) the deploy key added to the project if it does not exist. - - When V(absent) it will be removed from the project if it exists. + - When V(present) the deploy key is added to the project if it does not exist. + - When V(absent) it is removed from the project if it exists. default: present type: str choices: ["present", "absent"] @@ -208,7 +208,7 @@ class GitLabDeployKey(object): ''' def find_deploy_key(self, project, key_title): for deploy_key in project.keys.list(**list_all_kwargs): - if (deploy_key.title == key_title): + if deploy_key.title == key_title: return deploy_key ''' diff --git a/plugins/modules/gitlab_group.py b/plugins/modules/gitlab_group.py index 6d03476092..d6105642b8 100644 --- a/plugins/modules/gitlab_group.py +++ b/plugins/modules/gitlab_group.py @@ -13,8 +13,8 @@ DOCUMENTATION = r""" module: gitlab_group short_description: Creates/updates/deletes GitLab Groups description: - - When the group does not exist in GitLab, it will be created. - - When the group does exist and state=absent, the group will be deleted. + - When the group does not exist in GitLab, it is created. + - When the group does exist and O(state=absent), the group is deleted. author: - Werner Dijkerman (@dj-wasabi) - Guillaume Martinez (@Lunik) @@ -101,8 +101,8 @@ options: type: str path: description: - - The path of the group you want to create, this will be api_url/group_path. - - If not supplied, the group_name will be used. + - The path of the group you want to create, this is O(api_url)/O(path). + - If not supplied, O(name) is used. type: str prevent_forking_outside_group: description: @@ -129,7 +129,7 @@ options: service_access_tokens_expiration_enforced: description: - Service account token expiration. - - Changes will not affect existing token expiration dates. + - Changes do not affect existing token expiration dates. - Only available for top level groups. type: bool version_added: 9.5.0 diff --git a/plugins/modules/gitlab_group_access_token.py b/plugins/modules/gitlab_group_access_token.py index 3da3e42114..ad3a528ba5 100644 --- a/plugins/modules/gitlab_group_access_token.py +++ b/plugins/modules/gitlab_group_access_token.py @@ -28,7 +28,7 @@ extends_documentation_fragment: - community.general.attributes notes: - Access tokens can not be changed. If a parameter needs to be changed, an acceess token has to be recreated. Whether tokens - will be recreated is controlled by the O(recreate) option, which defaults to V(never). + are recreated or not is controlled by the O(recreate) option, which defaults to V(never). - Token string is contained in the result only when access token is created or recreated. It can not be fetched afterwards. - Token matching is done by comparing O(name) option. attributes: @@ -79,17 +79,17 @@ options: required: true recreate: description: - - Whether the access token will be recreated if it already exists. - - When V(never) the token will never be recreated. - - When V(always) the token will always be recreated. - - When V(state_change) the token will be recreated if there is a difference between desired state and actual state. + - Whether the access token is recreated if it already exists. + - When V(never) the token is never recreated. + - When V(always) the token is always recreated. + - When V(state_change) the token is recreated if there is a difference between desired state and actual state. type: str choices: ["never", "always", "state_change"] default: never state: description: - - When V(present) the access token will be added to the group if it does not exist. - - When V(absent) it will be removed from the group if it exists. + - When V(present) the access token is added to the group if it does not exist. + - When V(absent) it is removed from the group if it exists. default: present type: str choices: ["present", "absent"] @@ -195,7 +195,7 @@ class GitLabGroupAccessToken(object): def find_access_token(self, group, name): access_tokens = [x for x in group.access_tokens.list(all=True) if not getattr(x, 'revoked', False)] for access_token in access_tokens: - if (access_token.name == name): + if access_token.name == name: self.access_token_object = access_token return False return False diff --git a/plugins/modules/gitlab_group_variable.py b/plugins/modules/gitlab_group_variable.py index 926f4fe20a..3bda53ee94 100644 --- a/plugins/modules/gitlab_group_variable.py +++ b/plugins/modules/gitlab_group_variable.py @@ -15,9 +15,9 @@ short_description: Creates, updates, or deletes GitLab groups variables version_added: 1.2.0 description: - Creates a group variable if it does not exist. - - When a group variable does exist, its value will be updated when the values are different. + - When a group variable does exist, its value is updated when the values are different. - Variables which are untouched in the playbook, but are not untouched in the GitLab group, they stay untouched (O(purge=false)) - or will be deleted (O(purge=true)). + or are deleted (O(purge=true)). author: - Florent Madiot (@scodeman) requirements: @@ -52,7 +52,7 @@ options: type: bool vars: description: - - When the list element is a simple key-value pair, masked, raw and protected will be set to false. + - When the list element is a simple key-value pair, masked, raw and protected are set to V(false). - When the list element is a dict with the keys C(value), C(masked), C(raw) and C(protected), the user can have full control about whether a value should be masked, raw, protected or both. - Support for group variables requires GitLab >= 9.5. @@ -185,22 +185,22 @@ group_variable: description: A list of variables which were created. returned: always type: list - sample: ['ACCESS_KEY_ID', 'SECRET_ACCESS_KEY'] + sample: ["ACCESS_KEY_ID", "SECRET_ACCESS_KEY"] untouched: description: A list of variables which exist. returned: always type: list - sample: ['ACCESS_KEY_ID', 'SECRET_ACCESS_KEY'] + sample: ["ACCESS_KEY_ID", "SECRET_ACCESS_KEY"] removed: description: A list of variables which were deleted. returned: always type: list - sample: ['ACCESS_KEY_ID', 'SECRET_ACCESS_KEY'] + sample: ["ACCESS_KEY_ID", "SECRET_ACCESS_KEY"] updated: description: A list of variables whose values were changed. returned: always type: list - sample: ['ACCESS_KEY_ID', 'SECRET_ACCESS_KEY'] + sample: ["ACCESS_KEY_ID", "SECRET_ACCESS_KEY"] """ from ansible.module_utils.basic import AnsibleModule diff --git a/plugins/modules/gitlab_hook.py b/plugins/modules/gitlab_hook.py index cb132c8aaa..d6a188146d 100644 --- a/plugins/modules/gitlab_hook.py +++ b/plugins/modules/gitlab_hook.py @@ -45,8 +45,8 @@ options: type: str state: description: - - When V(present) the hook will be updated to match the input or created if it does not exist. - - When V(absent) hook will be deleted if it exists. + - When V(present) the hook is updated to match the input or created if it does not exist. + - When V(absent) hook is deleted if it exists. default: present type: str choices: ["present", "absent"] @@ -103,15 +103,15 @@ options: version_added: '8.4.0' hook_validate_certs: description: - - Whether GitLab will do SSL verification when triggering the hook. + - Whether GitLab performs SSL verification when triggering the hook. type: bool default: false aliases: [enable_ssl_verification] token: description: - Secret token to validate hook messages at the receiver. - - If this is present it will always result in a change as it cannot be retrieved from GitLab. - - Will show up in the X-GitLab-Token HTTP request header. + - If this is present it always results in a change as it cannot be retrieved from GitLab. + - It shows up in the C(X-GitLab-Token) HTTP request header. required: false type: str """ @@ -271,7 +271,7 @@ class GitLabHook(object): ''' def find_hook(self, project, hook_url): for hook in project.hooks.list(**list_all_kwargs): - if (hook.url == hook_url): + if hook.url == hook_url: return hook ''' diff --git a/plugins/modules/gitlab_instance_variable.py b/plugins/modules/gitlab_instance_variable.py index 2023b0ad7d..e167b60fc7 100644 --- a/plugins/modules/gitlab_instance_variable.py +++ b/plugins/modules/gitlab_instance_variable.py @@ -16,10 +16,10 @@ short_description: Creates, updates, or deletes GitLab instance variables version_added: 7.1.0 description: - Creates a instance variable if it does not exist. - - When a instance variable does exist, its value will be updated if the values are different. + - When a instance variable does exist, its value is updated if the values are different. - Support for instance variables requires GitLab >= 13.0. - - Variables which are not mentioned in the modules options, but are present on the GitLab instance, will either stay (O(purge=false)) - or will be deleted (O(purge=true)). + - Variables which are not mentioned in the modules options, but are present on the GitLab instance, either stay (O(purge=false)) + or are deleted (O(purge=true)). author: - Benedikt Braunger (@benibr) requirements: @@ -124,22 +124,22 @@ instance_variable: description: A list of variables which were created. returned: always type: list - sample: ['ACCESS_KEY_ID', 'SECRET_ACCESS_KEY'] + sample: ["ACCESS_KEY_ID", "SECRET_ACCESS_KEY"] untouched: description: A list of variables which exist. returned: always type: list - sample: ['ACCESS_KEY_ID', 'SECRET_ACCESS_KEY'] + sample: ["ACCESS_KEY_ID", "SECRET_ACCESS_KEY"] removed: description: A list of variables which were deleted. returned: always type: list - sample: ['ACCESS_KEY_ID', 'SECRET_ACCESS_KEY'] + sample: ["ACCESS_KEY_ID", "SECRET_ACCESS_KEY"] updated: description: A list pre-existing variables whose values have been set. returned: always type: list - sample: ['ACCESS_KEY_ID', 'SECRET_ACCESS_KEY'] + sample: ["ACCESS_KEY_ID", "SECRET_ACCESS_KEY"] """ from ansible.module_utils.basic import AnsibleModule diff --git a/plugins/modules/gitlab_issue.py b/plugins/modules/gitlab_issue.py index 47b6f072e8..b76c633226 100644 --- a/plugins/modules/gitlab_issue.py +++ b/plugins/modules/gitlab_issue.py @@ -18,8 +18,8 @@ short_description: Create, update, or delete GitLab issues version_added: '8.1.0' description: - Creates an issue if it does not exist. - - When an issue does exist, it will be updated if the provided parameters are different. - - When an issue does exist and O(state=absent), the issue will be deleted. + - When an issue does exist, it is updated if the provided parameters are different. + - When an issue does exist and O(state=absent), the issue is deleted. - When multiple issues are detected, the task fails. - Existing issues are matched based on O(title) and O(state_filter) filters. author: diff --git a/plugins/modules/gitlab_label.py b/plugins/modules/gitlab_label.py index 8b9503e325..2fe8d8d567 100644 --- a/plugins/modules/gitlab_label.py +++ b/plugins/modules/gitlab_label.py @@ -12,8 +12,8 @@ module: gitlab_label short_description: Creates/updates/deletes GitLab Labels belonging to project or group version_added: 8.3.0 description: - - When a label does not exist, it will be created. - - When a label does exist, its value will be updated when the values are different. + - When a label does not exist, it is created. + - When a label does exist, its value is updated when the values are different. - Labels can be purged. author: - "Gabriele Pongelli (@gpongelli)" @@ -197,22 +197,22 @@ labels: description: A list of labels which were created. returned: always type: list - sample: ['abcd', 'label-one'] + sample: ["abcd", "label-one"] untouched: description: A list of labels which exist. returned: always type: list - sample: ['defg', 'new-label'] + sample: ["defg", "new-label"] removed: description: A list of labels which were deleted. returned: always type: list - sample: ['defg', 'new-label'] + sample: ["defg", "new-label"] updated: description: A list pre-existing labels whose values have been set. returned: always type: list - sample: ['defg', 'new-label'] + sample: ["defg", "new-label"] labels_obj: description: API object. returned: success diff --git a/plugins/modules/gitlab_merge_request.py b/plugins/modules/gitlab_merge_request.py index fd6068980a..126c0e66f3 100644 --- a/plugins/modules/gitlab_merge_request.py +++ b/plugins/modules/gitlab_merge_request.py @@ -18,8 +18,8 @@ short_description: Create, update, or delete GitLab merge requests version_added: 7.1.0 description: - Creates a merge request if it does not exist. - - When a single merge request does exist, it will be updated if the provided parameters are different. - - When a single merge request does exist and O(state=absent), the merge request will be deleted. + - When a single merge request does exist, it is updated if the provided parameters are different. + - When a single merge request does exist and O(state=absent), the merge request is deleted. - When multiple merge requests are detected, the task fails. - Existing merge requests are matched based on O(title), O(source_branch), O(target_branch), and O(state_filter) filters. author: diff --git a/plugins/modules/gitlab_milestone.py b/plugins/modules/gitlab_milestone.py index 99b922c4dd..2e3ac23e75 100644 --- a/plugins/modules/gitlab_milestone.py +++ b/plugins/modules/gitlab_milestone.py @@ -12,8 +12,8 @@ module: gitlab_milestone short_description: Creates/updates/deletes GitLab Milestones belonging to project or group version_added: 8.3.0 description: - - When a milestone does not exist, it will be created. - - When a milestone does exist, its value will be updated when the values are different. + - When a milestone does not exist, it is created. + - When a milestone does exist, its value is updated when the values are different. - Milestones can be purged. author: - "Gabriele Pongelli (@gpongelli)" @@ -181,22 +181,22 @@ milestones: description: A list of milestones which were created. returned: always type: list - sample: ['abcd', 'milestone-one'] + sample: ["abcd", "milestone-one"] untouched: description: A list of milestones which exist. returned: always type: list - sample: ['defg', 'new-milestone'] + sample: ["defg", "new-milestone"] removed: description: A list of milestones which were deleted. returned: always type: list - sample: ['defg', 'new-milestone'] + sample: ["defg", "new-milestone"] updated: description: A list pre-existing milestones whose values have been set. returned: always type: list - sample: ['defg', 'new-milestone'] + sample: ["defg", "new-milestone"] milestones_obj: description: API object. returned: success diff --git a/plugins/modules/gitlab_project.py b/plugins/modules/gitlab_project.py index eec2b0fa7a..16efadc738 100644 --- a/plugins/modules/gitlab_project.py +++ b/plugins/modules/gitlab_project.py @@ -13,9 +13,9 @@ DOCUMENTATION = r""" module: gitlab_project short_description: Creates/updates/deletes GitLab Projects description: - - When the project does not exist in GitLab, it will be created. - - When the project does exist and O(state=absent), the project will be deleted. - - When changes are made to the project, the project will be updated. + - When the project does not exist in GitLab, it is created. + - When the project does exist and O(state=absent), the project is deleted. + - When changes are made to the project, the project is updated. author: - Werner Dijkerman (@dj-wasabi) - Guillaume Martinez (@Lunik) @@ -47,7 +47,7 @@ options: build_timeout: description: - Maximum number of seconds a CI job can run. - - If not specified on creation, GitLab will impose a default value. + - If not specified on creation, GitLab imposes a default value. type: int version_added: "10.6.0" builds_access_level: @@ -148,7 +148,7 @@ options: type: str import_url: description: - - Git repository which will be imported into gitlab. + - Git repository which is imported into gitlab. - GitLab server needs read access to this git repository. required: false type: str @@ -162,7 +162,7 @@ options: version_added: "6.4.0" initialize_with_readme: description: - - Will initialize the project with a default C(README.md). + - Initializes the project with a default C(README.md). - Is only used when the project is created, and ignored otherwise. type: bool default: false @@ -248,8 +248,8 @@ options: version_added: "9.3.0" path: description: - - The path of the project you want to create, this will be server_url//path. - - If not supplied, name will be used. + - The path of the project you want to create, this is server_url/O(group)/O(path). + - If not supplied, O(name) is used. type: str releases_access_level: description: diff --git a/plugins/modules/gitlab_project_access_token.py b/plugins/modules/gitlab_project_access_token.py index 07d3985633..82e9e0733f 100644 --- a/plugins/modules/gitlab_project_access_token.py +++ b/plugins/modules/gitlab_project_access_token.py @@ -28,7 +28,7 @@ extends_documentation_fragment: - community.general.attributes notes: - Access tokens can not be changed. If a parameter needs to be changed, an acceess token has to be recreated. Whether tokens - will be recreated is controlled by the O(recreate) option, which defaults to V(never). + are recreated or not is controlled by the O(recreate) option, which defaults to V(never). - Token string is contained in the result only when access token is created or recreated. It can not be fetched afterwards. - Token matching is done by comparing O(name) option. attributes: @@ -79,17 +79,17 @@ options: required: true recreate: description: - - Whether the access token will be recreated if it already exists. - - When V(never) the token will never be recreated. - - When V(always) the token will always be recreated. - - When V(state_change) the token will be recreated if there is a difference between desired state and actual state. + - Whether the access token is recreated if it already exists. + - When V(never) the token is never recreated. + - When V(always) the token is always recreated. + - When V(state_change) the token is recreated if there is a difference between desired state and actual state. type: str choices: ["never", "always", "state_change"] default: never state: description: - - When V(present) the access token will be added to the project if it does not exist. - - When V(absent) it will be removed from the project if it exists. + - When V(present) the access token is added to the project if it does not exist. + - When V(absent) it is removed from the project if it exists. default: present type: str choices: ["present", "absent"] @@ -193,7 +193,7 @@ class GitLabProjectAccessToken(object): def find_access_token(self, project, name): access_tokens = [x for x in project.access_tokens.list(all=True) if not getattr(x, 'revoked', False)] for access_token in access_tokens: - if (access_token.name == name): + if access_token.name == name: self.access_token_object = access_token return False return False diff --git a/plugins/modules/gitlab_project_variable.py b/plugins/modules/gitlab_project_variable.py index 5903c9b5c4..21cec19217 100644 --- a/plugins/modules/gitlab_project_variable.py +++ b/plugins/modules/gitlab_project_variable.py @@ -11,10 +11,10 @@ DOCUMENTATION = r""" module: gitlab_project_variable short_description: Creates/updates/deletes GitLab Projects Variables description: - - When a project variable does not exist, it will be created. - - When a project variable does exist, its value will be updated when the values are different. + - When a project variable does not exist, it is created. + - When a project variable does exist, its value is updated when the values are different. - Variables which are untouched in the playbook, but are not untouched in the GitLab project, they stay untouched (O(purge=false)) - or will be deleted (O(purge=true)). + or are deleted (O(purge=true)). author: - "Markus Bergholz (@markuman)" requirements: @@ -45,12 +45,12 @@ options: type: str purge: description: - - When set to true, all variables which are not untouched in the task will be deleted. + - When set to V(true), all variables which are not untouched in the task are deleted. default: false type: bool vars: description: - - When the list element is a simple key-value pair, masked, raw and protected will be set to false. + - When the list element is a simple key-value pair, masked, raw and protected are set to V(false). - When the list element is a dict with the keys C(value), C(masked), C(raw) and C(protected), the user can have full control about whether a value should be masked, raw, protected or both. - Support for protected values requires GitLab >= 9.3. @@ -202,22 +202,22 @@ project_variable: description: A list of variables which were created. returned: always type: list - sample: ['ACCESS_KEY_ID', 'SECRET_ACCESS_KEY'] + sample: ["ACCESS_KEY_ID", "SECRET_ACCESS_KEY"] untouched: description: A list of variables which exist. returned: always type: list - sample: ['ACCESS_KEY_ID', 'SECRET_ACCESS_KEY'] + sample: ["ACCESS_KEY_ID", "SECRET_ACCESS_KEY"] removed: description: A list of variables which were deleted. returned: always type: list - sample: ['ACCESS_KEY_ID', 'SECRET_ACCESS_KEY'] + sample: ["ACCESS_KEY_ID", "SECRET_ACCESS_KEY"] updated: description: A list of variables whose values were changed. returned: always type: list - sample: ['ACCESS_KEY_ID', 'SECRET_ACCESS_KEY'] + sample: ["ACCESS_KEY_ID", "SECRET_ACCESS_KEY"] """ from ansible.module_utils.basic import AnsibleModule diff --git a/plugins/modules/gitlab_runner.py b/plugins/modules/gitlab_runner.py index 62875c552a..87ba152ffa 100644 --- a/plugins/modules/gitlab_runner.py +++ b/plugins/modules/gitlab_runner.py @@ -81,8 +81,8 @@ options: description: - The registration token is used to register new runners before GitLab 16.0. - Required if O(state=present) for GitLab < 16.0. - - If set, the runner will be created using the old runner creation workflow. - - If not set, the runner will be created using the new runner creation workflow, introduced in GitLab 16.0. + - If set, the runner is created using the old runner creation workflow. + - If not set, the runner is created using the new runner creation workflow, introduced in GitLab 16.0. - If not set, requires python-gitlab >= 4.0.0. type: str owned: @@ -122,8 +122,8 @@ options: - If set to V(not_protected), runner can pick up jobs from both protected and unprotected branches. - If set to V(ref_protected), runner can pick up jobs only from protected branches. - Before community.general 8.0.0 the default was V(ref_protected). This was changed to no default in community.general - 8.0.0. If this option is not specified explicitly, GitLab will use V(not_protected) on creation, and the value set - will not be changed on any updates. + 8.0.0. If this option is not specified explicitly, GitLab uses V(not_protected) on creation, and the value set is + not changed on any updates. required: false choices: ["not_protected", "ref_protected"] type: str @@ -393,10 +393,10 @@ class GitLabRunner(object): # python-gitlab 2.2 through at least 2.5 returns a list of dicts for list() instead of a Runner # object, so we need to handle both if hasattr(runner, "description"): - if (runner.description == description): + if runner.description == description: return self._gitlab.runners.get(runner.id) else: - if (runner['description'] == description): + if runner['description'] == description: return self._gitlab.runners.get(runner['id']) ''' diff --git a/plugins/modules/gitlab_user.py b/plugins/modules/gitlab_user.py index 3be684b1e9..4d7bd506f6 100644 --- a/plugins/modules/gitlab_user.py +++ b/plugins/modules/gitlab_user.py @@ -14,10 +14,10 @@ DOCUMENTATION = r""" module: gitlab_user short_description: Creates/updates/deletes/blocks/unblocks GitLab Users description: - - When the user does not exist in GitLab, it will be created. - - When the user exists and state=absent, the user will be deleted. - - When the user exists and state=blocked, the user will be blocked. - - When changes are made to user, the user will be updated. + - When the user does not exist in GitLab, it is created. + - When the user exists and state=absent, the user is deleted. + - When the user exists and state=blocked, the user is blocked. + - When changes are made to user, the user is updated. notes: - From community.general 0.2.0 and onwards, name, email and password are optional while deleting the user. author: diff --git a/plugins/modules/grove.py b/plugins/modules/grove.py index abdc303f90..7d9b5c8213 100644 --- a/plugins/modules/grove.py +++ b/plugins/modules/grove.py @@ -51,8 +51,8 @@ options: required: false validate_certs: description: - - If V(false), SSL certificates will not be validated. This should only be used on personally controlled sites using - self-signed certificates. + - If V(false), SSL certificates are not validated. This should only be used on personally controlled sites using self-signed + certificates. default: true type: bool author: "Jonas Pfenniger (@zimbatm)" diff --git a/plugins/modules/gunicorn.py b/plugins/modules/gunicorn.py index 8118e0f60d..b524165c90 100644 --- a/plugins/modules/gunicorn.py +++ b/plugins/modules/gunicorn.py @@ -50,8 +50,8 @@ options: pid: type: path description: - - A filename to use for the PID file. If not set and not found on the configuration file a tmp pid file will be created - to check a successful run of gunicorn. + - A filename to use for the PID file. If not set and not found on the configuration file a tmp pid file is created to + check a successful run of gunicorn. worker: type: str choices: ['sync', 'eventlet', 'gevent', 'tornado ', 'gthread', 'gaiohttp'] @@ -62,8 +62,8 @@ options: description: - Switch worker processes to run as this user. notes: - - If not specified on config file, a temporary error log will be created on /tmp dir. Please make sure you have write access - in /tmp dir. Not needed but will help you to identify any problem with configuration. + - If not specified on config file, a temporary error log is created on C(/tmp) directory. Please make sure you have write + access in C(/tmp) directory. Not needed but it is helpful to identify any problem with configuration. """ EXAMPLES = r""" diff --git a/plugins/modules/haproxy.py b/plugins/modules/haproxy.py index 9c60e59040..b0e56de061 100644 --- a/plugins/modules/haproxy.py +++ b/plugins/modules/haproxy.py @@ -32,7 +32,7 @@ options: backend: description: - Name of the HAProxy backend pool. - - If this parameter is unset, it will be auto-detected. + - If this parameter is unset, it is auto-detected. type: str drain: description: @@ -62,8 +62,7 @@ options: state: description: - Desired state of the provided backend host. - - Note that V(drain) state is supported only by HAProxy version 1.5 or later. When used on versions < 1.5, it will be - ignored. + - Note that V(drain) state is supported only by HAProxy version 1.5 or later. When used on versions < 1.5, it is ignored. type: str required: true choices: [disabled, drain, enabled] @@ -103,7 +102,7 @@ options: weight: description: - The value passed in argument. - - If the value ends with the V(%) sign, then the new weight will be relative to the initially configured weight. + - If the value ends with the V(%) sign, then the new weight is relative to the initially configured weight. - Relative weights are only permitted between 0 and 100% and absolute weights are permitted between 0 and 256. type: str """ diff --git a/plugins/modules/hg.py b/plugins/modules/hg.py index f269628abb..9d51b3f198 100644 --- a/plugins/modules/hg.py +++ b/plugins/modules/hg.py @@ -61,15 +61,15 @@ options: default: true executable: description: - - Path to hg executable to use. If not supplied, the normal mechanism for resolving binary paths will be used. + - Path to C(hg) executable to use. If not supplied, the normal mechanism for resolving binary paths is used. type: str notes: - This module does not support push capability. See U(https://github.com/ansible/ansible/issues/31156). - - 'If the task seems to be hanging, first verify remote host is in C(known_hosts). SSH will prompt user to authorize the - first contact with a remote host. To avoid this prompt, one solution is to add the remote host public key in C(/etc/ssh/ssh_known_hosts) + - 'If the task seems to be hanging, first verify remote host is in C(known_hosts). SSH prompts user to authorize the first + contact with a remote host. To avoid this prompt, one solution is to add the remote host public key in C(/etc/ssh/ssh_known_hosts) before calling the hg module, with the following command: C(ssh-keyscan remote_host.com >> /etc/ssh/ssh_known_hosts).' - As per 01 Dec 2018, Bitbucket has dropped support for TLSv1 and TLSv1.1 connections. As such, if the underlying system - still uses a Python version below 2.7.9, you will have issues checking out bitbucket repositories. See + still uses a Python version below 2.7.9, you are bound to have issues checking out bitbucket repositories. See U(https://bitbucket.org/blog/deprecating-tlsv1-tlsv1-1-2018-12-01). """ diff --git a/plugins/modules/homebrew.py b/plugins/modules/homebrew.py index 25d4fc37e2..cf00619180 100644 --- a/plugins/modules/homebrew.py +++ b/plugins/modules/homebrew.py @@ -83,7 +83,7 @@ options: default: false version_added: 9.0.0 notes: - - When used with a C(loop:) each package will be processed individually, it is much more efficient to pass the list directly + - When used with a C(loop:) each package is processed individually, it is much more efficient to pass the list directly to the O(name) option. """ @@ -173,7 +173,7 @@ changed_pkgs: - List of package names which are changed after module run. returned: success type: list - sample: ['git', 'git-cola'] + sample: ["git", "git-cola"] version_added: '0.2.0' """ diff --git a/plugins/modules/homectl.py b/plugins/modules/homectl.py index 6e4366960d..f93867d03b 100644 --- a/plugins/modules/homectl.py +++ b/plugins/modules/homectl.py @@ -65,7 +65,7 @@ options: type: str resize: description: - - When used with O(disksize) this will attempt to resize the home directory immediately. + - When used with O(disksize) this attempts to resize the home directory immediately. default: false type: bool realname: diff --git a/plugins/modules/honeybadger_deployment.py b/plugins/modules/honeybadger_deployment.py index d4bf92b583..cc8147371f 100644 --- a/plugins/modules/honeybadger_deployment.py +++ b/plugins/modules/honeybadger_deployment.py @@ -51,7 +51,7 @@ options: default: "https://api.honeybadger.io/v1/deploys" validate_certs: description: - - If V(false), SSL certificates for the target URL will not be validated. This should only be used on personally controlled + - If V(false), SSL certificates for the target URL are not validated. This should only be used on personally controlled sites using self-signed certificates. type: bool default: true diff --git a/plugins/modules/hpilo_boot.py b/plugins/modules/hpilo_boot.py index c3d14564d6..f04aaaed20 100644 --- a/plugins/modules/hpilo_boot.py +++ b/plugins/modules/hpilo_boot.py @@ -67,7 +67,7 @@ options: force: description: - Whether to force a reboot (even when the system is already booted). - - As a safeguard, without force, hpilo_boot will refuse to reboot a server that is already running. + - As a safeguard, without force, M(community.general.hpilo_boot) refuses to reboot a server that is already running. default: false type: bool ssl_version: @@ -78,7 +78,7 @@ options: choices: ["SSLv3", "SSLv23", "TLSv1", "TLSv1_1", "TLSv1_2"] idempotent_boot_once: description: - - "This option makes O(state=boot_once) succeed instead of failing when the server is already powered on." + - This option makes O(state=boot_once) succeed instead of failing when the server is already powered on. type: bool default: false version_added: 10.6.0 diff --git a/plugins/modules/hpilo_info.py b/plugins/modules/hpilo_info.py index 70eecb8b0e..90680603e8 100644 --- a/plugins/modules/hpilo_info.py +++ b/plugins/modules/hpilo_info.py @@ -121,7 +121,7 @@ hw_uuid: host_power_status: description: - Power status of host. - - Will be one of V(ON), V(OFF) and V(UNKNOWN). + - It is one of V(ON), V(OFF) and V(UNKNOWN). returned: always type: str sample: "ON" diff --git a/plugins/modules/htpasswd.py b/plugins/modules/htpasswd.py index f13cd5a610..514e7bac56 100644 --- a/plugins/modules/htpasswd.py +++ b/plugins/modules/htpasswd.py @@ -46,10 +46,13 @@ options: description: - Hashing scheme to be used. As well as the four choices listed here, you can also use any other hash supported by passlib, such as V(portable_apache22) and V(host_apache24); or V(md5_crypt) and V(sha256_crypt), which are Linux passwd hashes. - Only some schemes in addition to the four choices below will be compatible with Apache or Nginx, and supported schemes - depend on passlib version and its dependencies. + Only some schemes in addition to the four choices below are compatible with Apache or Nginx, and supported schemes + depend on C(passlib) version and its dependencies. - See U(https://passlib.readthedocs.io/en/stable/lib/passlib.apache.html#passlib.apache.HtpasswdFile) parameter C(default_scheme). - 'Some of the available choices might be: V(apr_md5_crypt), V(des_crypt), V(ldap_sha1), V(plaintext).' + - 'B(WARNING): The module has no mechanism to determine the O(hash_scheme) of an existing entry, therefore, it does + not detect whether the O(hash_scheme) has changed. If you want to change the scheme, you must remove the existing + entry and then create a new one using the new scheme.' aliases: [crypt_scheme] state: type: str @@ -63,8 +66,8 @@ options: type: bool default: true description: - - Used with O(state=present). If V(true), the file will be created if it does not exist. Conversely, if set to V(false) - and the file does not exist it will fail. + - Used with O(state=present). If V(true), the file is created if it does not exist. Conversely, if set to V(false) and + the file does not exist, it fails. notes: - This module depends on the C(passlib) Python library, which needs to be installed on all target systems. - 'On Debian < 11, Ubuntu <= 20.04, or Fedora: install C(python-passlib).' diff --git a/plugins/modules/hwc_ecs_instance.py b/plugins/modules/hwc_ecs_instance.py index f01b7c48fd..13becdf07f 100644 --- a/plugins/modules/hwc_ecs_instance.py +++ b/plugins/modules/hwc_ecs_instance.py @@ -442,7 +442,7 @@ created: disk_config_type: description: - Specifies the disk configuration type. MANUAL is The image space is not expanded. AUTO is the image space of the system - disk will be expanded to be as same as the flavor. + disk is expanded to be as same as the flavor. type: str returned: success host_name: diff --git a/plugins/modules/hwc_evs_disk.py b/plugins/modules/hwc_evs_disk.py index 0763c07b01..0d57caf6cb 100644 --- a/plugins/modules/hwc_evs_disk.py +++ b/plugins/modules/hwc_evs_disk.py @@ -70,8 +70,8 @@ options: - SSD specifies the ultra-high I/O disk type. - SAS specifies the high I/O disk type. - SATA specifies the common I/O disk type. - - If the specified disk type is not available in the AZ, the disk will fail to create. If the EVS disk is created from - a snapshot, the volume_type field must be the same as that of the snapshot's source disk. + - If the specified disk type is not available in the AZ, the disk creation fails. If the EVS disk is created from a + snapshot, the volume_type field must be the same as that of the snapshot's source disk. type: str required: true backup_id: @@ -92,9 +92,9 @@ options: required: false enable_scsi: description: - - If this parameter is set to True, the disk device type will be SCSI, which allows ECS OSs to directly access underlying - storage media. SCSI reservation command is supported. If this parameter is set to False, the disk device type will - be VBD, which supports only simple SCSI read/write commands. + - If this parameter is set to V(true), the disk device type is SCSI, which allows ECS OSs to directly access underlying + storage media. SCSI reservation command is supported. If this parameter is set to V(false), the disk device type is + VBD, which supports only simple SCSI read/write commands. - If parameter enable_share is set to True and this parameter is not specified, shared SCSI disks are created. SCSI EVS disks cannot be created from backups, which means that this parameter cannot be True if backup_id has been specified. type: bool @@ -167,8 +167,8 @@ volume_type: - SSD specifies the ultra-high I/O disk type. - SAS specifies the high I/O disk type. - SATA specifies the common I/O disk type. - - If the specified disk type is not available in the AZ, the disk will fail to create. If the EVS disk is created from - a snapshot, the volume_type field must be the same as that of the snapshot's source disk. + - If the specified disk type is not available in the AZ, the disk creation fails. If the EVS disk is created from a snapshot, + the volume_type field must be the same as that of the snapshot's source disk. type: str returned: success backup_id: @@ -189,8 +189,8 @@ enable_full_clone: returned: success enable_scsi: description: - - If this parameter is set to True, the disk device type will be SCSI, which allows ECS OSs to directly access underlying - storage media. SCSI reservation command is supported. If this parameter is set to False, the disk device type will be + - If this parameter is set to V(true), the disk device type is SCSI, which allows ECS OSs to directly access underlying + storage media. SCSI reservation command is supported. If this parameter is set to V(false), the disk device type is VBD, which supports only simple SCSI read/write commands. - If parameter enable_share is set to True and this parameter is not specified, shared SCSI disks are created. SCSI EVS disks cannot be created from backups, which means that this parameter cannot be True if backup_id has been specified. diff --git a/plugins/modules/hwc_network_vpc.py b/plugins/modules/hwc_network_vpc.py index 3342280061..d34e428d6a 100644 --- a/plugins/modules/hwc_network_vpc.py +++ b/plugins/modules/hwc_network_vpc.py @@ -117,7 +117,7 @@ routes: returned: success next_hop: description: - - The next hop of a route. If the route type is peering, it will provide VPC peering connection ID. + - The next hop of a route. If the route type is peering, it provides VPC peering connection ID. type: str returned: success enable_shared_snat: diff --git a/plugins/modules/hwc_vpc_eip.py b/plugins/modules/hwc_vpc_eip.py index b818fe0d86..e830c2b14b 100644 --- a/plugins/modules/hwc_vpc_eip.py +++ b/plugins/modules/hwc_vpc_eip.py @@ -92,7 +92,7 @@ options: required: false ip_version: description: - - The value can be 4 (IPv4 address) or 6 (IPv6 address). If this parameter is left blank, an IPv4 address will be assigned. + - The value can be 4 (IPv4 address) or 6 (IPv6 address). If this parameter is left blank, an IPv4 address is assigned. type: int required: false ipv4_address: @@ -193,7 +193,7 @@ enterprise_project_id: returned: success ip_version: description: - - The value can be 4 (IPv4 address) or 6 (IPv6 address). If this parameter is left blank, an IPv4 address will be assigned. + - The value can be 4 (IPv4 address) or 6 (IPv6 address). If this parameter is left blank, an IPv4 address is assigned. type: int returned: success ipv4_address: diff --git a/plugins/modules/hwc_vpc_private_ip.py b/plugins/modules/hwc_vpc_private_ip.py index 695c644cb9..e665568774 100644 --- a/plugins/modules/hwc_vpc_private_ip.py +++ b/plugins/modules/hwc_vpc_private_ip.py @@ -21,7 +21,7 @@ notes: - If O(id) option is provided, it takes precedence over O(subnet_id), O(ip_address) for private IP selection. - O(subnet_id), O(ip_address) are used for private IP selection. If more than one private IP with this options exists, execution is aborted. - - No parameter support updating. If one of option is changed, the module will create a new resource. + - No parameter support updating. If one of option is changed, the module creates a new resource. version_added: '0.2.0' author: Huawei Inc. (@huaweicloud) requirements: diff --git a/plugins/modules/hwc_vpc_route.py b/plugins/modules/hwc_vpc_route.py index 85224fd4c8..20bbba6cd8 100644 --- a/plugins/modules/hwc_vpc_route.py +++ b/plugins/modules/hwc_vpc_route.py @@ -21,7 +21,7 @@ notes: - If O(id) option is provided, it takes precedence over O(destination), O(vpc_id), O(type), and O(next_hop) for route selection. - O(destination), O(vpc_id), O(type) and O(next_hop) are used for route selection. If more than one route with this options exists, execution is aborted. - - No parameter support updating. If one of option is changed, the module will create a new resource. + - No parameter support updating. If one of option is changed, the module creates a new resource. version_added: '0.2.0' author: Huawei Inc. (@huaweicloud) requirements: diff --git a/plugins/modules/hwc_vpc_security_group.py b/plugins/modules/hwc_vpc_security_group.py index 9f53b49c0d..e1b2b41ae4 100644 --- a/plugins/modules/hwc_vpc_security_group.py +++ b/plugins/modules/hwc_vpc_security_group.py @@ -22,7 +22,7 @@ notes: selection. - O(name), O(enterprise_project_id) and O(vpc_id) are used for security group selection. If more than one security group with this options exists, execution is aborted. - - No parameter support updating. If one of option is changed, the module will create a new resource. + - No parameter support updating. If one of option is changed, the module creates a new resource. version_added: '0.2.0' author: Huawei Inc. (@huaweicloud) requirements: diff --git a/plugins/modules/hwc_vpc_security_group_rule.py b/plugins/modules/hwc_vpc_security_group_rule.py index 0848901cd5..42f854a029 100644 --- a/plugins/modules/hwc_vpc_security_group_rule.py +++ b/plugins/modules/hwc_vpc_security_group_rule.py @@ -21,7 +21,7 @@ notes: - If O(id) option is provided, it takes precedence over O(security_group_id) for security group rule selection. - O(security_group_id) is used for security group rule selection. If more than one security group rule with this options exists, execution is aborted. - - No parameter support updating. If one of option is changed, the module will create a new resource. + - No parameter support updating. If one of option is changed, the module creates a new resource. version_added: '0.2.0' author: Huawei Inc. (@huaweicloud) requirements: diff --git a/plugins/modules/hwc_vpc_subnet.py b/plugins/modules/hwc_vpc_subnet.py index 84a9219370..b9af890688 100644 --- a/plugins/modules/hwc_vpc_subnet.py +++ b/plugins/modules/hwc_vpc_subnet.py @@ -86,7 +86,7 @@ options: required: false dns_address: description: - - Specifies the DNS server addresses for subnet. The address in the head will be used first. + - Specifies the DNS server addresses for subnet. The address in the head is used first. type: list elements: str required: false @@ -148,7 +148,7 @@ dhcp_enable: returned: success dns_address: description: - - Specifies the DNS server addresses for subnet. The address in the head will be used first. + - Specifies the DNS server addresses for subnet. The address in the head is used first. type: list returned: success """ diff --git a/plugins/modules/ibm_sa_host.py b/plugins/modules/ibm_sa_host.py index f6613b3b29..b3d80a6b62 100644 --- a/plugins/modules/ibm_sa_host.py +++ b/plugins/modules/ibm_sa_host.py @@ -41,8 +41,8 @@ options: type: str domain: description: - - The domains the cluster will be attached to. To include more than one domain, separate domain names with commas. To - include all existing domains, use an asterisk (V(*)). + - The domains the cluster is attached to. To include more than one domain, separate domain names with commas. To include + all existing domains, use an asterisk (V(*)). required: false type: str iscsi_chap_name: diff --git a/plugins/modules/icinga2_host.py b/plugins/modules/icinga2_host.py index 8d0a3b554b..83ef73c8c7 100644 --- a/plugins/modules/icinga2_host.py +++ b/plugins/modules/icinga2_host.py @@ -30,13 +30,13 @@ options: - HTTP, HTTPS, or FTP URL in the form V((http|https|ftp\)://[user[:pass]]@host.domain[:port]/path). use_proxy: description: - - If V(false), it will not use a proxy, even if one is defined in an environment variable on the target hosts. + - If V(false), it does not use a proxy, even if one is defined in an environment variable on the target hosts. type: bool default: true validate_certs: description: - - If V(false), SSL certificates will not be validated. This should only be used on personally controlled sites using - self-signed certificates. + - If V(false), SSL certificates are not validated. This should only be used on personally controlled sites using self-signed + certificates. type: bool default: true url_username: @@ -48,12 +48,12 @@ options: type: str description: - The password for use in HTTP basic authentication. - - If the O(url_username) parameter is not specified, the O(url_password) parameter will not be used. + - If the O(url_username) parameter is not specified, the O(url_password) parameter is not used. force_basic_auth: description: - - C(httplib2), the library used by Ansible's HTTP request code only sends authentication information when a webservice responds to - an initial request with a 401 status. Since some basic auth services do not properly send a 401, logins will fail. - This option forces the sending of the Basic authentication header upon initial request. + - C(httplib2), the library used by Ansible's HTTP request code only sends authentication information when a webservice + responds to an initial request with a 401 status. Since some basic auth services do not properly send a 401, logins + may fail. This option forces the sending of the Basic authentication header upon initial request. type: bool default: false client_cert: diff --git a/plugins/modules/imc_rest.py b/plugins/modules/imc_rest.py index 8a0b63cd78..674ba0d2b3 100644 --- a/plugins/modules/imc_rest.py +++ b/plugins/modules/imc_rest.py @@ -57,8 +57,8 @@ options: description: - When used instead of O(path), sets the content of the API requests directly. - This may be convenient to template simple requests, for anything complex use the M(ansible.builtin.template) module. - - You can collate multiple IMC XML fragments and they will be processed sequentially in a single stream, the Cisco IMC - output is subsequently merged. + - You can collate multiple IMC XML fragments and they are processed sequentially in a single stream, the Cisco IMC output + is subsequently merged. - Parameter O(content) is mutual exclusive with parameter O(path). type: str protocol: @@ -71,12 +71,12 @@ options: description: - The socket level timeout in seconds. - This is the time that every single connection (every fragment) can spend. If this O(timeout) is reached, the module - will fail with a C(Connection failure) indicating that C(The read operation timed out). + fails with a C(Connection failure) indicating that C(The read operation timed out). default: 60 type: int validate_certs: description: - - If V(false), SSL certificates will not be validated. + - If V(false), SSL certificates are not validated. - This should only set to V(false) used on personally controlled sites using self-signed certificates. type: bool default: true @@ -84,8 +84,8 @@ notes: - The XML fragments do not need an authentication cookie, this is injected by the module automatically. - The Cisco IMC XML output is being translated to JSON using the Cobra convention. - Any configConfMo change requested has a return status of C(modified), even if there was no actual change from the previous - configuration. As a result, this module will always report a change on subsequent runs. In case this behaviour is fixed - in a future update to Cisco IMC, this module will automatically adapt. + configuration. As a result, this module always reports a change on subsequent runs. In case this behaviour is fixed in + a future update to Cisco IMC, this module is meant to automatically adapt. - If you get a C(Connection failure) related to C(The read operation timed out) increase the O(timeout) parameter. Some XML fragments can take longer than the default timeout. - More information about the IMC REST API is available from diff --git a/plugins/modules/imgadm.py b/plugins/modules/imgadm.py index 344bf9cc56..1c29e8a94b 100644 --- a/plugins/modules/imgadm.py +++ b/plugins/modules/imgadm.py @@ -44,7 +44,7 @@ options: choices: [present, absent, deleted, imported, updated, vacuumed] description: - State the object operated on should be in. V(imported) is an alias for for V(present) and V(deleted) for V(absent). - When set to V(vacuumed) and O(uuid=*), it will remove all unused images. + When set to V(vacuumed) and O(uuid=*), it removes all unused images. type: str type: diff --git a/plugins/modules/influxdb_user.py b/plugins/modules/influxdb_user.py index 5ec6cd010d..234bdafab6 100644 --- a/plugins/modules/influxdb_user.py +++ b/plugins/modules/influxdb_user.py @@ -37,7 +37,7 @@ options: admin: description: - Whether the user should be in the admin role or not. - - Since version 2.8, the role will also be updated. + - Since version 2.8, the role is also updated. default: false type: bool state: @@ -50,8 +50,8 @@ options: description: - Privileges to grant to this user. - Takes a list of dicts containing the "database" and "privilege" keys. - - If this argument is not provided, the current grants will be left alone. - - If an empty list is provided, all grants for the user will be removed. + - If this argument is not provided, the current grants are left alone. + - If an empty list is provided, all grants for the user are removed. type: list elements: dict extends_documentation_fragment: diff --git a/plugins/modules/ini_file.py b/plugins/modules/ini_file.py index bf8534bf39..e8b5916667 100644 --- a/plugins/modules/ini_file.py +++ b/plugins/modules/ini_file.py @@ -39,7 +39,7 @@ options: section: description: - Section name in INI file. This is added if O(state=present) automatically when a single value is being set. - - If being omitted, the O(option) will be placed before the first O(section). + - If being omitted, the O(option) is placed before the first O(section). - Omitting O(section) is also required if the config format does not support sections. type: str section_has_values: @@ -63,7 +63,7 @@ options: elements: str description: - Among possibly multiple sections of the same name, select the first one that contains matching options and values. - - With O(state=present), if a suitable section is not found, a new section will be added, including the required options. + - With O(state=present), if a suitable section is not found, a new section is added, including the required options. - With O(state=absent), at most one O(section) is removed if it contains the values. version_added: 8.6.0 option: @@ -100,8 +100,8 @@ options: O(option)s with the same name are not touched. - If set to V(present) and O(exclusive) set to V(false) the specified O(option=values) lines are added, but the other O(option)s with the same name are not touched. - - If set to V(present) and O(exclusive) set to V(true) all given O(option=values) lines will be added and the other - O(option)s with the same name are removed. + - If set to V(present) and O(exclusive) set to V(true) all given O(option=values) lines are added and the other O(option)s + with the same name are removed. type: str choices: [absent, present] default: present @@ -126,8 +126,8 @@ options: version_added: 7.5.0 create: description: - - If set to V(false), the module will fail if the file does not already exist. - - By default it will create the file if it is missing. + - If set to V(false), the module fails if the file does not already exist. + - By default it creates the file if it is missing. type: bool default: true allow_no_value: diff --git a/plugins/modules/installp.py b/plugins/modules/installp.py index e54a56949f..da88a7e7c2 100644 --- a/plugins/modules/installp.py +++ b/plugins/modules/installp.py @@ -47,7 +47,7 @@ options: choices: [absent, present] default: present notes: - - If the package is already installed, even the package/fileset is new, the module will not install it. + - If the package is already installed, even the package/fileset is new, the module does not install it. """ EXAMPLES = r""" diff --git a/plugins/modules/interfaces_file.py b/plugins/modules/interfaces_file.py index 23bfd78790..8e315d7b69 100644 --- a/plugins/modules/interfaces_file.py +++ b/plugins/modules/interfaces_file.py @@ -45,10 +45,10 @@ options: value: type: str description: - - If O(option) is not presented for the O(iface) and O(state) is V(present) option will be added. If O(option) already - exists and is not V(pre-up), V(up), V(post-up) or V(down), its value will be updated. V(pre-up), V(up), V(post-up) - and V(down) options cannot be updated, only adding new options, removing existing ones or cleaning the whole option - set are supported. + - If O(option) is not presented for the O(iface) and O(state) is V(present), then O(option) is added. If O(option) already + exists and is not V(pre-up), V(up), V(post-up) or V(down), its value is updated. V(pre-up), V(up), V(post-up) and + V(down) options cannot be updated, only adding new options, removing existing ones or cleaning the whole option set + are supported. backup: description: - Create a backup file including the timestamp information so you can get the original file back if you somehow clobbered @@ -58,12 +58,12 @@ options: state: type: str description: - - If set to V(absent) the option or section will be removed if present instead of created. + - If set to V(absent) the option or section is removed if present instead of created. default: "present" choices: ["present", "absent"] notes: - - If option is defined multiple times last one will be updated but all will be deleted in case of an absent state. + - If option is defined multiple times last one is updated but all others are deleted in case of an O(state=absent). requirements: [] author: "Roman Belyakovsky (@hryamzik)" """ diff --git a/plugins/modules/ipa_dnsrecord.py b/plugins/modules/ipa_dnsrecord.py index d92e2c4f66..f4051b66ac 100644 --- a/plugins/modules/ipa_dnsrecord.py +++ b/plugins/modules/ipa_dnsrecord.py @@ -45,33 +45,31 @@ options: - Manage DNS record name with this value. - Mutually exclusive with O(record_values), and exactly one of O(record_value) and O(record_values) has to be specified. - Use O(record_values) if you need to specify multiple values. - - In the case of V(A) or V(AAAA) record types, this will be the IP address. - - In the case of V(A6) record type, this will be the A6 Record data. - - In the case of V(CNAME) record type, this will be the hostname. - - In the case of V(DNAME) record type, this will be the DNAME target. - - In the case of V(NS) record type, this will be the name server hostname. Hostname must already have a valid A or AAAA - record. - - In the case of V(PTR) record type, this will be the hostname. - - In the case of V(TXT) record type, this will be a text. - - In the case of V(SRV) record type, this will be a service record. - - In the case of V(MX) record type, this will be a mail exchanger record. - - In the case of V(SSHFP) record type, this will be an SSH fingerprint record. + - In the case of V(A) or V(AAAA) record types, this is the IP address. + - In the case of V(A6) record type, this is the A6 Record data. + - In the case of V(CNAME) record type, this is the hostname. + - In the case of V(DNAME) record type, this is the DNAME target. + - In the case of V(NS) record type, this is the name server hostname. Hostname must already have a valid A or AAAA record. + - In the case of V(PTR) record type, this is the hostname. + - In the case of V(TXT) record type, this is a text. + - In the case of V(SRV) record type, this is a service record. + - In the case of V(MX) record type, this is a mail exchanger record. + - In the case of V(SSHFP) record type, this is an SSH fingerprint record. type: str record_values: description: - Manage DNS record name with this value. - Mutually exclusive with O(record_value), and exactly one of O(record_value) and O(record_values) has to be specified. - - In the case of V(A) or V(AAAA) record types, this will be the IP address. - - In the case of V(A6) record type, this will be the A6 Record data. - - In the case of V(CNAME) record type, this will be the hostname. - - In the case of V(DNAME) record type, this will be the DNAME target. - - In the case of V(NS) record type, this will be the name server hostname. Hostname must already have a valid A or AAAA - record. - - In the case of V(PTR) record type, this will be the hostname. - - In the case of V(TXT) record type, this will be a text. - - In the case of V(SRV) record type, this will be a service record. - - In the case of V(MX) record type, this will be a mail exchanger record. - - In the case of V(SSHFP) record type, this will be an SSH fingerprint record. + - In the case of V(A) or V(AAAA) record types, this is the IP address. + - In the case of V(A6) record type, this is the A6 Record data. + - In the case of V(CNAME) record type, this is the hostname. + - In the case of V(DNAME) record type, this is the DNAME target. + - In the case of V(NS) record type, this is the name server hostname. Hostname must already have a valid A or AAAA record. + - In the case of V(PTR) record type, this is the hostname. + - In the case of V(TXT) record type, this is a text. + - In the case of V(SRV) record type, this is a service record. + - In the case of V(MX) record type, this is a mail exchanger record. + - In the case of V(SSHFP) record type, this is an SSH fingerprint record. type: list elements: str record_ttl: @@ -167,7 +165,7 @@ EXAMPLES = r""" state: absent - name: Ensure an NS record for a subdomain is present - community,general.ipa_dnsrecord: + community.general.ipa_dnsrecord: name: subdomain zone_name: example.com record_type: 'NS' diff --git a/plugins/modules/ipa_getkeytab.py b/plugins/modules/ipa_getkeytab.py index dfd612564b..7c533fb729 100644 --- a/plugins/modules/ipa_getkeytab.py +++ b/plugins/modules/ipa_getkeytab.py @@ -67,15 +67,15 @@ options: retrieve_mode: description: - Retrieve an existing key from the server instead of generating a new one. - - This is incompatible with the O(password), and will work only against a IPA server more recent than version 3.3. + - This is incompatible with the O(password), and works only against a IPA server more recent than version 3.3. - The user requesting the keytab must have access to the keys for this operation to succeed. - - Be aware that if set V(true), a new keytab will be generated. + - Be aware that if set V(true), a new keytab is generated. - This invalidates all previously retrieved keytabs for this service principal. type: bool encryption_types: description: - The list of encryption types to use to generate keys. - - It will use local client defaults if not provided. + - It uses local client defaults if not provided. - Valid values depend on the Kerberos library version and configuration. type: str state: diff --git a/plugins/modules/ipa_group.py b/plugins/modules/ipa_group.py index 60077a2c6a..934e533dff 100644 --- a/plugins/modules/ipa_group.py +++ b/plugins/modules/ipa_group.py @@ -22,7 +22,7 @@ options: append: description: - If V(true), add the listed O(user) and O(group) to the group members. - - If V(false), only the listed O(user) and O(group) will be group members, removing any other members. + - If V(false), only the listed O(user) and O(group) are set as group members, removing any other members. default: false type: bool version_added: 4.0.0 @@ -49,10 +49,10 @@ options: group: description: - List of group names assigned to this group. - - If O(append=false) and an empty list is passed all groups will be removed from this group. - - Groups that are already assigned but not passed will be removed. - - If O(append=true) the listed groups will be assigned without removing other groups. - - If option is omitted assigned groups will not be checked or changed. + - If O(append=false) and an empty list is passed all groups are removed from this group. + - Groups that are already assigned but not passed are removed. + - If O(append=true) the listed groups are assigned without removing other groups. + - If option is omitted assigned groups are not checked or changed. type: list elements: str nonposix: @@ -62,10 +62,10 @@ options: user: description: - List of user names assigned to this group. - - If O(append=false) and an empty list is passed all users will be removed from this group. - - Users that are already assigned but not passed will be removed. - - If O(append=true) the listed users will be assigned without removing other users. - - If option is omitted assigned users will not be checked or changed. + - If O(append=false) and an empty list is passed all users are removed from this group. + - Users that are already assigned but not passed are removed. + - If O(append=true) the listed users are assigned without removing other users. + - If option is omitted assigned users are not checked or changed. type: list elements: str external_user: @@ -73,7 +73,7 @@ options: - List of external users assigned to this group. - Behaves identically to O(user) with respect to O(append) attribute. - List entries can be in V(DOMAIN\\\\username) or SID format. - - Unless SIDs are provided, the module will always attempt to make changes even if the group already has all the users. + - Unless SIDs are provided, the module always attempts to make changes even if the group already has all the users. This is because only SIDs are returned by IPA query. - O(external=true) is needed for this option to work. type: list @@ -261,7 +261,7 @@ def ensure(module, client): nonposix=module.params['nonposix']) ipa_group = client.group_find(name=name) - if (not (external or external_user is None)): + if not (external or external_user is None): module.fail_json("external_user can only be set if external = True") changed = False diff --git a/plugins/modules/ipa_hbacrule.py b/plugins/modules/ipa_hbacrule.py index d168a3a7e0..cb828f68e9 100644 --- a/plugins/modules/ipa_hbacrule.py +++ b/plugins/modules/ipa_hbacrule.py @@ -32,8 +32,8 @@ options: host: description: - List of host names to assign. - - If an empty list is passed all hosts will be removed from the rule. - - If option is omitted hosts will not be checked or changed. + - If an empty list is passed all hosts are removed from the rule. + - If option is omitted hosts are not checked or changed. required: false type: list elements: str @@ -44,15 +44,15 @@ options: hostgroup: description: - List of hostgroup names to assign. - - If an empty list is passed all hostgroups will be removed from the rule. - - If option is omitted hostgroups will not be checked or changed. + - If an empty list is passed all hostgroups are removed from the rule. + - If option is omitted hostgroups are not checked or changed. type: list elements: str service: description: - List of service names to assign. - - If an empty list is passed all services will be removed from the rule. - - If option is omitted services will not be checked or changed. + - If an empty list is passed all services are removed from the rule. + - If option is omitted services are not checked or changed. type: list elements: str servicecategory: @@ -62,15 +62,15 @@ options: servicegroup: description: - List of service group names to assign. - - If an empty list is passed all assigned service groups will be removed from the rule. - - If option is omitted service groups will not be checked or changed. + - If an empty list is passed all assigned service groups are removed from the rule. + - If option is omitted service groups are not checked or changed. type: list elements: str sourcehost: description: - List of source host names to assign. - - If an empty list if passed all assigned source hosts will be removed from the rule. - - If option is omitted source hosts will not be checked or changed. + - If an empty list if passed all assigned source hosts are removed from the rule. + - If option is omitted source hosts are not checked or changed. type: list elements: str sourcehostcategory: @@ -80,8 +80,8 @@ options: sourcehostgroup: description: - List of source host group names to assign. - - If an empty list if passed all assigned source host groups will be removed from the rule. - - If option is omitted source host groups will not be checked or changed. + - If an empty list if passed all assigned source host groups are removed from the rule. + - If option is omitted source host groups are not checked or changed. type: list elements: str state: @@ -92,8 +92,8 @@ options: user: description: - List of user names to assign. - - If an empty list if passed all assigned users will be removed from the rule. - - If option is omitted users will not be checked or changed. + - If an empty list if passed all assigned users are removed from the rule. + - If option is omitted users are not checked or changed. type: list elements: str usercategory: @@ -103,8 +103,8 @@ options: usergroup: description: - List of user group names to assign. - - If an empty list if passed all assigned user groups will be removed from the rule. - - If option is omitted user groups will not be checked or changed. + - If an empty list if passed all assigned user groups are removed from the rule. + - If option is omitted user groups are not checked or changed. type: list elements: str extends_documentation_fragment: diff --git a/plugins/modules/ipa_host.py b/plugins/modules/ipa_host.py index a78ea6223e..c88f3c0adb 100644 --- a/plugins/modules/ipa_host.py +++ b/plugins/modules/ipa_host.py @@ -42,9 +42,9 @@ options: mac_address: description: - List of Hardware MAC address(es) off this host. - - If option is omitted MAC addresses will not be checked or changed. - - If an empty list is passed all assigned MAC addresses will be removed. - - MAC addresses that are already assigned but not passed will be removed. + - If option is omitted MAC addresses are not checked nor changed. + - If an empty list is passed all assigned MAC addresses are removed. + - MAC addresses that are already assigned but not passed are removed. aliases: ["macaddress"] type: list elements: str @@ -66,9 +66,9 @@ options: user_certificate: description: - List of Base-64 encoded server certificates. - - If option is omitted certificates will not be checked or changed. - - If an empty list is passed all assigned certificates will be removed. - - Certificates already assigned but not passed will be removed. + - If option is omitted certificates are not checked nor changed. + - If an empty list is passed all assigned certificates are removed. + - Certificates already assigned but not passed are removed. aliases: ["usercertificate"] type: list elements: str diff --git a/plugins/modules/ipa_hostgroup.py b/plugins/modules/ipa_hostgroup.py index c1e7d3ad56..ffe87fca4c 100644 --- a/plugins/modules/ipa_hostgroup.py +++ b/plugins/modules/ipa_hostgroup.py @@ -22,7 +22,7 @@ options: append: description: - If V(true), add the listed O(host) to the O(hostgroup). - - If V(false), only the listed O(host) will be in O(hostgroup), removing any other hosts. + - If V(false), only the listed O(host) is set in O(hostgroup), removing any other hosts. default: false type: bool version_added: 6.6.0 @@ -40,17 +40,17 @@ options: host: description: - List of hosts that belong to the host-group. - - If an empty list is passed all hosts will be removed from the group. - - If option is omitted hosts will not be checked or changed. - - If option is passed all assigned hosts that are not passed will be unassigned from the group. + - If an empty list is passed all hosts are removed from the group. + - If option is omitted hosts are not checked nor changed. + - If option is passed all assigned hosts that are not passed are unassigned from the group. type: list elements: str hostgroup: description: - List of host-groups than belong to that host-group. - - If an empty list is passed all host-groups will be removed from the group. - - If option is omitted host-groups will not be checked or changed. - - If option is passed all assigned hostgroups that are not passed will be unassigned from the group. + - If an empty list is passed all host-groups are removed from the group. + - If option is omitted host-groups are not checked nor changed. + - If option is passed all assigned hostgroups that are not passed are unassigned from the group. type: list elements: str state: diff --git a/plugins/modules/ipa_otptoken.py b/plugins/modules/ipa_otptoken.py index 5f5c8dd612..e8c99bd302 100644 --- a/plugins/modules/ipa_otptoken.py +++ b/plugins/modules/ipa_otptoken.py @@ -26,7 +26,7 @@ options: aliases: ["name"] type: str newuniqueid: - description: If specified, the unique ID specified will be changed to this. + description: If specified, the unique ID specified is changed to this. type: str otptype: description: @@ -37,7 +37,7 @@ options: secretkey: description: - Token secret (Base64). - - If OTP is created and this is not specified, a random secret will be generated by IPA. + - If OTP is created and this is not specified, a random secret is generated by IPA. - B(Note:) Cannot be modified after OTP is created. type: str description: @@ -54,13 +54,13 @@ options: description: - First date/time the token can be used. - In the format C(YYYYMMddHHmmss). - - For example, V(20180121182022) will allow the token to be used starting on 21 January 2018 at 18:20:22. + - For example, V(20180121182022) allows the token to be used starting on 21 January 2018 at 18:20:22. type: str notafter: description: - Last date/time the token can be used. - In the format C(YYYYMMddHHmmss). - - For example, V(20200121182022) will allow the token to be used until 21 January 2020 at 18:20:22. + - For example, V(20200121182022) allows the token to be used until 21 January 2020 at 18:20:22. type: str vendor: description: Token vendor name (informational only). @@ -84,7 +84,7 @@ options: type: str digits: description: - - Number of digits each token code will have. + - Number of digits each token code has. - B(Note:) Cannot be modified after OTP is created. choices: [6, 8] type: int diff --git a/plugins/modules/ipa_role.py b/plugins/modules/ipa_role.py index e77b732cb2..6057deec7b 100644 --- a/plugins/modules/ipa_role.py +++ b/plugins/modules/ipa_role.py @@ -33,41 +33,41 @@ options: group: description: - List of group names assign to this role. - - If an empty list is passed all assigned groups will be unassigned from the role. - - If option is omitted groups will not be checked or changed. - - If option is passed all assigned groups that are not passed will be unassigned from the role. + - If an empty list is passed all assigned groups are unassigned from the role. + - If option is omitted groups are not checked nor changed. + - If option is passed all assigned groups that are not passed are unassigned from the role. type: list elements: str host: description: - List of host names to assign. - - If an empty list is passed all assigned hosts will be unassigned from the role. - - If option is omitted hosts will not be checked or changed. - - If option is passed all assigned hosts that are not passed will be unassigned from the role. + - If an empty list is passed all assigned hosts are unassigned from the role. + - If option is omitted hosts are not checked nor changed. + - If option is passed all assigned hosts that are not passed are unassigned from the role. type: list elements: str hostgroup: description: - List of host group names to assign. - - If an empty list is passed all assigned host groups will be removed from the role. - - If option is omitted host groups will not be checked or changed. - - If option is passed all assigned hostgroups that are not passed will be unassigned from the role. + - If an empty list is passed all assigned host groups are removed from the role. + - If option is omitted host groups are not checked nor changed. + - If option is passed all assigned hostgroups that are not passed are unassigned from the role. type: list elements: str privilege: description: - List of privileges granted to the role. - - If an empty list is passed all assigned privileges will be removed. - - If option is omitted privileges will not be checked or changed. - - If option is passed all assigned privileges that are not passed will be removed. + - If an empty list is passed all assigned privileges are removed. + - If option is omitted privileges are not checked nor changed. + - If option is passed all assigned privileges that are not passed are removed. type: list elements: str service: description: - List of service names to assign. - - If an empty list is passed all assigned services will be removed from the role. - - If option is omitted services will not be checked or changed. - - If option is passed all assigned services that are not passed will be removed from the role. + - If an empty list is passed all assigned services are removed from the role. + - If option is omitted services are not checked nor changed. + - If option is passed all assigned services that are not passed are removed from the role. type: list elements: str state: @@ -78,8 +78,8 @@ options: user: description: - List of user names to assign. - - If an empty list is passed all assigned users will be removed from the role. - - If option is omitted users will not be checked or changed. + - If an empty list is passed all assigned users are removed from the role. + - If option is omitted users are not checked nor changed. type: list elements: str extends_documentation_fragment: diff --git a/plugins/modules/ipa_sudocmdgroup.py b/plugins/modules/ipa_sudocmdgroup.py index c7ab798f4c..4298032121 100644 --- a/plugins/modules/ipa_sudocmdgroup.py +++ b/plugins/modules/ipa_sudocmdgroup.py @@ -37,8 +37,8 @@ options: sudocmd: description: - List of sudo commands to assign to the group. - - If an empty list is passed all assigned commands will be removed from the group. - - If option is omitted sudo commands will not be checked or changed. + - If an empty list is passed all assigned commands are removed from the group. + - If option is omitted sudo commands are not checked nor changed. type: list elements: str extends_documentation_fragment: diff --git a/plugins/modules/ipa_sudorule.py b/plugins/modules/ipa_sudorule.py index 1670a52035..ae3730da62 100644 --- a/plugins/modules/ipa_sudorule.py +++ b/plugins/modules/ipa_sudorule.py @@ -34,31 +34,31 @@ options: cmd: description: - List of commands assigned to the rule. - - If an empty list is passed all commands will be removed from the rule. - - If option is omitted commands will not be checked or changed. + - If an empty list is passed all commands are removed from the rule. + - If option is omitted commands are not checked nor changed. type: list elements: str cmdgroup: description: - List of command groups assigned to the rule. - - If an empty list is passed all command groups will be removed from the rule. - - If option is omitted command groups will not be checked or changed. + - If an empty list is passed all command groups are removed from the rule. + - If option is omitted command groups are not checked nor changed. type: list elements: str version_added: 2.0.0 deny_cmd: description: - List of denied commands assigned to the rule. - - If an empty list is passed all commands will be removed from the rule. - - If option is omitted commands will not be checked or changed. + - If an empty list is passed all commands are removed from the rule. + - If option is omitted commands are not checked nor changed. type: list elements: str version_added: 8.1.0 deny_cmdgroup: description: - List of denied command groups assigned to the rule. - - If an empty list is passed all command groups will be removed from the rule. - - If option is omitted command groups will not be checked or changed. + - If an empty list is passed all command groups are removed from the rule. + - If option is omitted command groups are not checked nor changed. type: list elements: str version_added: 8.1.0 @@ -69,8 +69,8 @@ options: host: description: - List of hosts assigned to the rule. - - If an empty list is passed all hosts will be removed from the rule. - - If option is omitted hosts will not be checked or changed. + - If an empty list is passed all hosts are removed from the rule. + - If option is omitted hosts are not checked nor changed. - Option O(hostcategory) must be omitted to assign hosts. type: list elements: str @@ -84,8 +84,8 @@ options: hostgroup: description: - List of host groups assigned to the rule. - - If an empty list is passed all host groups will be removed from the rule. - - If option is omitted host groups will not be checked or changed. + - If an empty list is passed all host groups are removed from the rule. + - If option is omitted host groups are not checked nor changed. - Option O(hostcategory) must be omitted to assign host groups. type: list elements: str @@ -113,8 +113,8 @@ options: user: description: - List of users assigned to the rule. - - If an empty list is passed all users will be removed from the rule. - - If option is omitted users will not be checked or changed. + - If an empty list is passed all users are removed from the rule. + - If option is omitted users are not checked nor changed. type: list elements: str usercategory: @@ -125,8 +125,8 @@ options: usergroup: description: - List of user groups assigned to the rule. - - If an empty list is passed all user groups will be removed from the rule. - - If option is omitted user groups will not be checked or changed. + - If an empty list is passed all user groups are removed from the rule. + - If option is omitted user groups are not checked nor changed. type: list elements: str state: diff --git a/plugins/modules/ipa_user.py b/plugins/modules/ipa_user.py index 47d50972bd..6e61f89600 100644 --- a/plugins/modules/ipa_user.py +++ b/plugins/modules/ipa_user.py @@ -35,9 +35,9 @@ options: type: str krbpasswordexpiration: description: - - Date at which the user password will expire. + - Date at which the user password expires. - In the format YYYYMMddHHmmss. - - For example V(20180121182022) will expire on 21 January 2018 at 18:20:22. + - For example V(20180121182022) expires on 21 January 2018 at 18:20:22. type: str loginshell: description: Login shell. @@ -45,14 +45,14 @@ options: mail: description: - List of mail addresses assigned to the user. - - If an empty list is passed all assigned email addresses will be deleted. - - If None is passed email addresses will not be checked or changed. + - If an empty list is passed all assigned email addresses are deleted. + - If None is passed email addresses are not checked nor changed. type: list elements: str password: description: - Password for a user. - - Will not be set for an existing user unless O(update_password=always), which is the default. + - It is not set for an existing user unless O(update_password=always), which is the default. type: str sn: description: @@ -62,8 +62,8 @@ options: sshpubkey: description: - List of public SSH key. - - If an empty list is passed all assigned public keys will be deleted. - - If None is passed SSH public keys will not be checked or changed. + - If an empty list is passed all assigned public keys are deleted. + - If None is passed SSH public keys are not checked nor changed. type: list elements: str state: @@ -74,8 +74,8 @@ options: telephonenumber: description: - List of telephone numbers assigned to the user. - - If an empty list is passed all assigned telephone numbers will be deleted. - - If None is passed telephone numbers will not be checked or changed. + - If an empty list is passed all assigned telephone numbers are deleted. + - If None is passed telephone numbers are not checked nor changed. type: list elements: str title: diff --git a/plugins/modules/ipbase_info.py b/plugins/modules/ipbase_info.py index 3c7d3d26c1..6bbd6df1e9 100644 --- a/plugins/modules/ipbase_info.py +++ b/plugins/modules/ipbase_info.py @@ -21,7 +21,7 @@ extends_documentation_fragment: options: ip: description: - - The IP you want to get the info for. If not specified the API will detect the IP automatically. + - The IP you want to get the info for. If not specified the API detects the IP automatically. required: false type: str apikey: @@ -31,7 +31,7 @@ options: type: str hostname: description: - - If the O(hostname) parameter is set to V(true), the API response will contain the hostname of the IP. + - If the O(hostname) parameter is set to V(true), the API response contains the hostname of the IP. required: false type: bool default: false @@ -71,147 +71,148 @@ data: of the response." returned: success type: dict - sample: { - "ip": "1.1.1.1", - "hostname": "one.one.one.one", - "type": "v4", - "range_type": { - "type": "PUBLIC", - "description": "Public address" - }, - "connection": { - "asn": 13335, - "organization": "Cloudflare, Inc.", - "isp": "APNIC Research and Development", - "range": "1.1.1.1/32" - }, - "location": { - "geonames_id": 5332870, - "latitude": 34.053611755371094, - "longitude": -118.24549865722656, - "zip": "90012", - "continent": { - "code": "NA", - "name": "North America", - "name_translated": "North America" + sample: + { + "ip": "1.1.1.1", + "hostname": "one.one.one.one", + "type": "v4", + "range_type": { + "type": "PUBLIC", + "description": "Public address" }, - "country": { - "alpha2": "US", - "alpha3": "USA", - "calling_codes": [ - "+1" - ], - "currencies": [ - { - "symbol": "$", - "name": "US Dollar", - "symbol_native": "$", - "decimal_digits": 2, - "rounding": 0, - "code": "USD", - "name_plural": "US dollars" - } - ], - "emoji": "...", - "ioc": "USA", - "languages": [ - { - "name": "English", - "name_native": "English" - } - ], - "name": "United States", - "name_translated": "United States", - "timezones": [ - "America/New_York", - "America/Detroit", - "America/Kentucky/Louisville", - "America/Kentucky/Monticello", - "America/Indiana/Indianapolis", - "America/Indiana/Vincennes", - "America/Indiana/Winamac", - "America/Indiana/Marengo", - "America/Indiana/Petersburg", - "America/Indiana/Vevay", - "America/Chicago", - "America/Indiana/Tell_City", - "America/Indiana/Knox", - "America/Menominee", - "America/North_Dakota/Center", - "America/North_Dakota/New_Salem", - "America/North_Dakota/Beulah", - "America/Denver", - "America/Boise", - "America/Phoenix", - "America/Los_Angeles", - "America/Anchorage", - "America/Juneau", - "America/Sitka", - "America/Metlakatla", - "America/Yakutat", - "America/Nome", - "America/Adak", - "Pacific/Honolulu" - ], - "is_in_european_union": false, - "fips": "US", - "geonames_id": 6252001, - "hasc_id": "US", - "wikidata_id": "Q30" + "connection": { + "asn": 13335, + "organization": "Cloudflare, Inc.", + "isp": "APNIC Research and Development", + "range": "1.1.1.1/32" }, - "city": { - "fips": "644000", - "alpha2": null, - "geonames_id": 5368753, - "hasc_id": null, - "wikidata_id": "Q65", - "name": "Los Angeles", - "name_translated": "Los Angeles" + "location": { + "geonames_id": 5332870, + "latitude": 34.053611755371094, + "longitude": -118.24549865722656, + "zip": "90012", + "continent": { + "code": "NA", + "name": "North America", + "name_translated": "North America" + }, + "country": { + "alpha2": "US", + "alpha3": "USA", + "calling_codes": [ + "+1" + ], + "currencies": [ + { + "symbol": "$", + "name": "US Dollar", + "symbol_native": "$", + "decimal_digits": 2, + "rounding": 0, + "code": "USD", + "name_plural": "US dollars" + } + ], + "emoji": "...", + "ioc": "USA", + "languages": [ + { + "name": "English", + "name_native": "English" + } + ], + "name": "United States", + "name_translated": "United States", + "timezones": [ + "America/New_York", + "America/Detroit", + "America/Kentucky/Louisville", + "America/Kentucky/Monticello", + "America/Indiana/Indianapolis", + "America/Indiana/Vincennes", + "America/Indiana/Winamac", + "America/Indiana/Marengo", + "America/Indiana/Petersburg", + "America/Indiana/Vevay", + "America/Chicago", + "America/Indiana/Tell_City", + "America/Indiana/Knox", + "America/Menominee", + "America/North_Dakota/Center", + "America/North_Dakota/New_Salem", + "America/North_Dakota/Beulah", + "America/Denver", + "America/Boise", + "America/Phoenix", + "America/Los_Angeles", + "America/Anchorage", + "America/Juneau", + "America/Sitka", + "America/Metlakatla", + "America/Yakutat", + "America/Nome", + "America/Adak", + "Pacific/Honolulu" + ], + "is_in_european_union": false, + "fips": "US", + "geonames_id": 6252001, + "hasc_id": "US", + "wikidata_id": "Q30" + }, + "city": { + "fips": "644000", + "alpha2": null, + "geonames_id": 5368753, + "hasc_id": null, + "wikidata_id": "Q65", + "name": "Los Angeles", + "name_translated": "Los Angeles" + }, + "region": { + "fips": "US06", + "alpha2": "US-CA", + "geonames_id": 5332921, + "hasc_id": "US.CA", + "wikidata_id": "Q99", + "name": "California", + "name_translated": "California" + } }, - "region": { - "fips": "US06", - "alpha2": "US-CA", - "geonames_id": 5332921, - "hasc_id": "US.CA", - "wikidata_id": "Q99", - "name": "California", - "name_translated": "California" + "tlds": [ + ".us" + ], + "timezone": { + "id": "America/Los_Angeles", + "current_time": "2023-05-04T04:30:28-07:00", + "code": "PDT", + "is_daylight_saving": true, + "gmt_offset": -25200 + }, + "security": { + "is_anonymous": false, + "is_datacenter": false, + "is_vpn": false, + "is_bot": false, + "is_abuser": true, + "is_known_attacker": true, + "is_proxy": false, + "is_spam": false, + "is_tor": false, + "is_icloud_relay": false, + "threat_score": 100 + }, + "domains": { + "count": 10943, + "domains": [ + "eliwise.academy", + "accountingprose.academy", + "pistola.academy", + "1and1-test-ntlds-fr.accountant", + "omnergy.africa" + ] } - }, - "tlds": [ - ".us" - ], - "timezone": { - "id": "America/Los_Angeles", - "current_time": "2023-05-04T04:30:28-07:00", - "code": "PDT", - "is_daylight_saving": true, - "gmt_offset": -25200 - }, - "security": { - "is_anonymous": false, - "is_datacenter": false, - "is_vpn": false, - "is_bot": false, - "is_abuser": true, - "is_known_attacker": true, - "is_proxy": false, - "is_spam": false, - "is_tor": false, - "is_icloud_relay": false, - "threat_score": 100 - }, - "domains": { - "count": 10943, - "domains": [ - "eliwise.academy", - "accountingprose.academy", - "pistola.academy", - "1and1-test-ntlds-fr.accountant", - "omnergy.africa" - ] } - } """ from ansible.module_utils.basic import AnsibleModule diff --git a/plugins/modules/ipify_facts.py b/plugins/modules/ipify_facts.py index 7767c8d0ff..b7cd2b7447 100644 --- a/plugins/modules/ipify_facts.py +++ b/plugins/modules/ipify_facts.py @@ -24,7 +24,7 @@ options: api_url: description: - URL of the ipify.org API service. - - C(?format=json) will be appended per default. + - C(?format=json) is appended by default. type: str default: https://api.ipify.org/ timeout: @@ -34,7 +34,7 @@ options: default: 10 validate_certs: description: - - When set to V(false), SSL certificates will not be validated. + - When set to V(false), SSL certificates are not validated. type: bool default: true notes: diff --git a/plugins/modules/ipmi_boot.py b/plugins/modules/ipmi_boot.py index bd96b35a51..69131732c6 100644 --- a/plugins/modules/ipmi_boot.py +++ b/plugins/modules/ipmi_boot.py @@ -95,17 +95,17 @@ author: "Bulat Gaifullin (@bgaifullin) " RETURN = r""" bootdev: - description: The boot device name which will be used beyond next boot. + description: The boot device name which is used beyond next boot. returned: success type: str sample: default persistent: - description: If True, system firmware will use this device beyond next boot. + description: If V(true), system firmware uses this device beyond next boot. returned: success type: bool sample: false uefimode: - description: If True, system firmware will use UEFI boot explicitly beyond next boot. + description: If V(true), system firmware uses UEFI boot explicitly beyond next boot. returned: success type: bool sample: false diff --git a/plugins/modules/iptables_state.py b/plugins/modules/iptables_state.py index 568577c82f..21fe75ce02 100644 --- a/plugins/modules/iptables_state.py +++ b/plugins/modules/iptables_state.py @@ -27,8 +27,8 @@ description: notes: - The rollback feature is not a module option and depends on task's attributes. To enable it, the module must be played asynchronously, in other words by setting task attributes C(poll) to V(0), and C(async) to a value less or equal to C(ANSIBLE_TIMEOUT). - If C(async) is greater, the rollback will still happen if it shall happen, but you will experience a connection timeout - instead of more relevant info returned by the module after its failure. + If C(async) is greater, the rollback still happens when needed, but you experience a connection timeout instead of more + relevant info returned by the module after its failure. attributes: check_mode: support: full diff --git a/plugins/modules/ipwcli_dns.py b/plugins/modules/ipwcli_dns.py index 118f59e8d9..58ff5fef28 100644 --- a/plugins/modules/ipwcli_dns.py +++ b/plugins/modules/ipwcli_dns.py @@ -16,7 +16,7 @@ short_description: Manage DNS Records for Ericsson IPWorks using C(ipwcli) version_added: '0.2.0' description: - - Manage DNS records for the Ericsson IPWorks DNS server. The module will use the C(ipwcli) to deploy the DNS records. + - Manage DNS records for the Ericsson IPWorks DNS server. The module uses the C(ipwcli) to deploy the DNS records. requirements: - ipwcli (installed on Ericsson IPWorks) diff --git a/plugins/modules/irc.py b/plugins/modules/irc.py index 2cd99341b6..1318804fcd 100644 --- a/plugins/modules/irc.py +++ b/plugins/modules/irc.py @@ -73,13 +73,13 @@ options: channel: type: str description: - - Channel name. One of nick_to or channel needs to be set. When both are set, the message will be sent to both of them. + - Channel name. One of nick_to or channel needs to be set. When both are set, the message is sent to both of them. nick_to: type: list elements: str description: - A list of nicknames to send the message to. One of nick_to or channel needs to be set. When both are defined, the - message will be sent to both of them. + message is sent to both of them. key: type: str description: @@ -118,7 +118,7 @@ options: default: none validate_certs: description: - - If set to V(false), the SSL certificates will not be validated. + - If set to V(false), the SSL certificates are not validated. - This should always be set to V(true). Using V(false) is unsafe and should only be done if the network between between Ansible and the IRC server is known to be safe. - B(Note:) for security reasons, you should always set O(use_tls=true) and O(validate_certs=true) whenever possible. diff --git a/plugins/modules/iso_create.py b/plugins/modules/iso_create.py index 008cb271bb..70f76558e6 100644 --- a/plugins/modules/iso_create.py +++ b/plugins/modules/iso_create.py @@ -32,8 +32,8 @@ attributes: options: src_files: description: - - This is a list of absolute paths of source files or folders which will be contained in the new generated ISO file. - - Will fail if specified file or folder in O(src_files) does not exist on local machine. + - This is a list of absolute paths of source files or folders to be contained in the new generated ISO file. + - The module fails if specified file or folder in O(src_files) does not exist on local machine. - 'Note: With all ISO9660 levels from 1 to 3, all file names are restricted to uppercase letters, numbers and underscores (_). File names are limited to 31 characters, directory nesting is limited to 8 levels, and path names are limited to 255 characters.' @@ -43,7 +43,7 @@ options: dest_iso: description: - The absolute path with file name of the new generated ISO file on local machine. - - Will create intermediate folders when they does not exist. + - It creates intermediate folders when they do not exist. type: path required: true interchange_level: diff --git a/plugins/modules/iso_customize.py b/plugins/modules/iso_customize.py index feac8417b8..5ee5b22c2c 100644 --- a/plugins/modules/iso_customize.py +++ b/plugins/modules/iso_customize.py @@ -14,7 +14,7 @@ module: iso_customize short_description: Add/remove/change files in ISO file description: - This module is used to add/remove/change files in ISO file. - - The file inside ISO will be overwritten if it exists by option O(add_files). + - The file inside ISO is overwritten if it exists by option O(add_files). author: - Yuhua Zou (@ZouYuhua) requirements: @@ -51,7 +51,7 @@ options: add_files: description: - Allows to add and replace files in the ISO file. - - Will create intermediate folders inside the ISO file when they do not exist. + - It creates intermediate folders inside the ISO file when they do not exist. type: list required: false elements: dict @@ -69,9 +69,9 @@ options: required: true notes: - The C(pycdlib) library states it supports Python 2.7 and 3.4+. - - The function C(add_file) in pycdlib will overwrite the existing file in ISO with type ISO9660 / Rock Ridge 1.12 / Joliet - / UDF. But it will not overwrite the existing file in ISO with Rock Ridge 1.09 / 1.10. So we take workaround "delete the - existing file and then add file for ISO with Rock Ridge". + - The function C(add_file) in pycdlib is designed to overwrite the existing file in ISO with type ISO9660 / Rock Ridge 1.12 + / Joliet / UDF. But it does not overwrite the existing file in ISO with Rock Ridge 1.09 / 1.10. So we take workaround + "delete the existing file and then add file for ISO with Rock Ridge". """ EXAMPLES = r""" diff --git a/plugins/modules/iso_extract.py b/plugins/modules/iso_extract.py index 8cda967b64..88644a6eb6 100644 --- a/plugins/modules/iso_extract.py +++ b/plugins/modules/iso_extract.py @@ -55,19 +55,19 @@ options: required: true force: description: - - If V(true), which will replace the remote file when contents are different than the source. - - If V(false), the file will only be extracted and copied if the destination does not already exist. + - If V(true), it replaces the remote file when contents are different than the source. + - If V(false), the file is only extracted and copied if the destination does not already exist. type: bool default: true executable: description: - The path to the C(7z) executable to use for extracting files from the ISO. - - If not provided, it will assume the value V(7z). + - If not provided, it assumes the value V(7z). type: path password: description: - Password used to decrypt files from the ISO. - - Will only be used if 7z is used. + - It is only used if C(7z) is used. - The password is used as a command line argument to 7z. This is a B(potential security risk) that allows passwords to be revealed if someone else can list running processes on the same machine in the right moment. type: str diff --git a/plugins/modules/jenkins_build.py b/plugins/modules/jenkins_build.py index cec8fcc490..4e11dd3642 100644 --- a/plugins/modules/jenkins_build.py +++ b/plugins/modules/jenkins_build.py @@ -99,6 +99,16 @@ EXAMPLES = r""" state: stopped url: http://localhost:8080 +- name: Trigger Jenkins build in detached mode + community.general.jenkins_build: + name: "detached-build" + state: present + user: admin + token: abcdefghijklmnopqrstuvwxyz123456 + url: http://localhost:8080 + detach: true + time_between_checks: 20 + - name: Delete a jenkins build using token authentication community.general.jenkins_build: name: "delete-experiment" @@ -180,11 +190,11 @@ class JenkinsBuild: def get_jenkins_connection(self): try: - if (self.user and self.password): + if self.user and self.password: return jenkins.Jenkins(self.jenkins_url, self.user, self.password) - elif (self.user and self.token): + elif self.user and self.token: return jenkins.Jenkins(self.jenkins_url, self.user, self.token) - elif (self.user and not (self.password or self.token)): + elif self.user and not (self.password or self.token): return jenkins.Jenkins(self.jenkins_url, self.user) else: return jenkins.Jenkins(self.jenkins_url) diff --git a/plugins/modules/jenkins_build_info.py b/plugins/modules/jenkins_build_info.py index f252eb504a..7d08ec91ce 100644 --- a/plugins/modules/jenkins_build_info.py +++ b/plugins/modules/jenkins_build_info.py @@ -138,11 +138,11 @@ class JenkinsBuildInfo: def get_jenkins_connection(self): try: - if (self.user and self.password): + if self.user and self.password: return jenkins.Jenkins(self.jenkins_url, self.user, self.password) - elif (self.user and self.token): + elif self.user and self.token: return jenkins.Jenkins(self.jenkins_url, self.user, self.token) - elif (self.user and not (self.password or self.token)): + elif self.user and not (self.password or self.token): return jenkins.Jenkins(self.jenkins_url, self.user) else: return jenkins.Jenkins(self.jenkins_url) diff --git a/plugins/modules/jenkins_credential.py b/plugins/modules/jenkins_credential.py new file mode 100644 index 0000000000..3aff19c96d --- /dev/null +++ b/plugins/modules/jenkins_credential.py @@ -0,0 +1,863 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# +# Copyright (c) Ansible Project +# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt) +# SPDX-License-Identifier: GPL-3.0-or-later + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type + +DOCUMENTATION = r""" +--- +module: jenkins_credential +short_description: Manage Jenkins credentials and domains via API +version_added: 11.1.0 +description: + - This module allows managing Jenkins credentials and domain scopes via the Jenkins HTTP API. + - Create, update, and delete different credential types such as C(username/password), C(secret text), C(SSH key), C(certificates), C(GitHub App), and domains. + - For scoped domains (O(type=scope)), it supports restrictions based on V(hostname), V(hostname:port), V(path), and V(scheme). +requirements: + - urllib3 >= 1.26.0 +author: + - Youssef Ali (@YoussefKhalidAli) +extends_documentation_fragment: + - community.general.attributes +attributes: + check_mode: + support: full + diff_mode: + support: none +options: + id: + description: + - The ID of the Jenkins credential or domain. + type: str + type: + description: + - Type of the credential or action. + choices: + - user_and_pass + - file + - text + - github_app + - ssh_key + - certificate + - scope + - token + type: str + state: + description: + - The state of the credential. + choices: + - present + - absent + default: present + type: str + scope: + description: + - Jenkins credential domain scope. + - Deleting a domain scope deletes all credentials within it. + type: str + default: '_' + force: + description: + - Force update if the credential already exists, used with O(state=present). + - If set to V(true), it deletes the existing credential before creating a new one. + - Always returns RV(ignore:changed=true). + type: bool + default: false + url: + description: + - Jenkins server URL. + type: str + default: http://localhost:8080 + jenkins_user: + description: + - Jenkins user for authentication. + required: true + type: str + jenkins_password: + description: + - Jenkins password for token creation. Required if O(type=token). + type: str + token: + description: + - Jenkins API token. Required unless O(type=token). + type: str + description: + description: + - Description of the credential or domain. + default: '' + type: str + location: + description: + - Location of the credential. Either V(system) or V(folder). + - If O(location=folder) then O(url) must be set to V(/job/). + choices: + - system + - folder + default: 'system' + type: str + name: + description: + - Name of the token to generate. Required if O(type=token). + - When generating a new token, do not pass O(id). It is generated automatically. + - Creating two tokens with the same name generates two distinct tokens with different RV(token_uuid) values. + - Replacing a token with another one of the same name requires deleting the original first using O(force=True). + type: str + username: + description: + - Username for credentials types that require it (for example O(type=ssh_key) or O(type=user_and_pass)). + type: str + password: + description: + - Password for credentials types that require it (for example O(type=user_and_passs) or O(type=certificate)). + type: str + secret: + description: + - Secret text (used when O(type=text)). + type: str + appID: + description: + - GitHub App ID. + type: str + api_uri: + description: + - Link to Github API. + default: 'https://api.github.com' + type: str + owner: + description: + - GitHub App owner. + type: str + file_path: + description: + - File path to secret file (for example O(type=file) or O(type=certificate)). + - For O(type=certificate), this can be a V(.p12) or V(.pem) file. + type: path + private_key_path: + description: + - Path to private key file for PEM certificates or GitHub Apps. + type: path + passphrase: + description: + - SSH passphrase if needed. + type: str + inc_hostname: + description: + - List of hostnames to include in scope. + type: list + elements: str + exc_hostname: + description: + - List of hostnames to exclude from scope. + - If a hostname appears in both this list and O(inc_hostname), the hostname is excluded. + type: list + elements: str + inc_hostname_port: + description: + - List of V(host:port) to include in scope. + type: list + elements: str + exc_hostname_port: + description: + - List of host:port to exclude from scope. + - If a hostname and port appears in both this list and O(inc_hostname_port), it is excluded. + type: list + elements: str + inc_path: + description: + - List of URL paths to include when matching credentials to domains. + - "B(Matching is hierarchical): subpaths of excluded paths are also excluded, even if explicitly included." + type: list + elements: str + exc_path: + description: + - List of URL paths to exclude. + - If a path is also matched by O(exc_path), it is excluded. + - If you exclude a subpath of a path previously included, that subpath alone is excluded. + type: list + elements: str + schemes: + description: + - List of schemes (for example V(http) or V(https)) to match. + type: list + elements: str +""" + +EXAMPLES = r""" +- name: Generate token + community.general.jenkins_credential: + id: "test-token" + jenkins_user: "admin" + jenkins_password: "password" + type: "token" + register: token_result + +- name: Add CUSTOM scope credential + community.general.jenkins_credential: + id: "CUSTOM" + type: "scope" + jenkins_user: "admin" + token: "{{ token }}" + description: "Custom scope credential" + inc_path: + - "include/path" + - "include/path2" + exc_path: + - "exclude/path" + - "exclude/path2" + inc_hostname: + - "included-hostname" + - "included-hostname2" + exc_hostname: + - "excluded-hostname" + - "excluded-hostname2" + schemes: + - "http" + - "https" + inc_hostname_port: + - "included-hostname:7000" + - "included-hostname2:7000" + exc_hostname_port: + - "excluded-hostname:7000" + - "excluded-hostname2:7000" + +- name: Add user_and_pass credential + community.general.jenkins_credential: + id: "userpass-id" + type: "user_and_pass" + jenkins_user: "admin" + token: "{{ token }}" + description: "User and password credential" + username: "user1" + password: "pass1" + +- name: Add file credential to custom scope + community.general.jenkins_credential: + id: "file-id" + type: "file" + jenkins_user: "admin" + token: "{{ token }}" + scope: "CUSTOM" + description: "File credential" + file_path: "../vars/my-secret.pem" + +- name: Add text credential to folder + community.general.jenkins_credential: + id: "text-id" + type: "text" + jenkins_user: "admin" + token: "{{ token }}" + description: "Text credential" + secret: "mysecrettext" + location: "folder" + url: "http://localhost:8080/job/test" + +- name: Add githubApp credential + community.general.jenkins_credential: + id: "githubapp-id" + type: "github_app" + jenkins_user: "admin" + token: "{{ token }}" + description: "GitHub app credential" + appID: "12345" + file_path: "../vars/github.pem" + owner: "github_owner" + +- name: Add sshKey credential + community.general.jenkins_credential: + id: "sshkey-id" + type: "ssh_key" + jenkins_user: "admin" + token: "{{ token }}" + description: "SSH key credential" + username: "sshuser" + file_path: "../vars/ssh_key" + passphrase: 1234 + +- name: Add certificate credential (p12) + community.general.jenkins_credential: + id: "certificate-id" + type: "certificate" + jenkins_user: "admin" + token: "{{ token }}" + description: "Certificate credential" + password: "12345678901234" + file_path: "../vars/certificate.p12" + +- name: Add certificate credential (pem) + community.general.jenkins_credential: + id: "certificate-id-pem" + type: "certificate" + jenkins_user: "admin" + token: "{{ token }}" + description: "Certificate credential (pem)" + file_path: "../vars/cert.pem" + private_key_path: "../vars/private.key" +""" +RETURN = r""" +details: + description: Return more details in case of errors. + type: str + returned: failed +token: + description: + - The generated API token if O(type=token). + - This is needed to authenticate API calls later. + - This should be stored securely, as it is the only time it is returned. + type: str + returned: success +token_uuid: + description: + - The generated ID of the token. + - You pass this value back to the module as O(id) to edit or revoke the token later. + - This should be stored securely, as it is the only time it is returned. + type: str + returned: success +""" + +from ansible.module_utils.basic import AnsibleModule +from ansible.module_utils.urls import fetch_url, basic_auth_header +from ansible.module_utils.six.moves.urllib.parse import urlencode +from ansible_collections.community.general.plugins.module_utils import deps + +import json +import os +import base64 + +with deps.declare("urllib3", reason="urllib3 is required to embed files into requests"): + import urllib3 + + +# Function to validate file paths exist on disk +def validate_file_exist(module, path): + + if path and not os.path.exists(path): + module.fail_json(msg="File not found: {}".format(path)) + + +# Gets the Jenkins crumb for CSRF protection which is required for API calls +def get_jenkins_crumb(module, headers): + type = module.params["type"] + url = module.params["url"] + + if "/job" in url: + url = url.split("/job")[0] + + crumb_url = "{}/crumbIssuer/api/json".format(url) + + response, info = fetch_url(module, crumb_url, headers=headers) + + if info["status"] != 200: + module.fail_json(msg="Failed to fetch Jenkins crumb. Confirm token is real.") + + # Cookie is needed to generate API token + cookie = info.get("set-cookie", "") + session_cookie = cookie.split(";")[0] if cookie else None + + try: + data = response.read() + json_data = json.loads(data) + crumb_request_field = json_data["crumbRequestField"] + crumb = json_data["crumb"] + headers[crumb_request_field] = crumb # Set the crumb in headers + headers["Content-Type"] = ( + "application/x-www-form-urlencoded" # Set Content-Type for form data + ) + if type == "token": + headers["Cookie"] = ( + session_cookie # Set session cookie for token operations + ) + return crumb_request_field, crumb, session_cookie # Return for test purposes + + except Exception: + return None + + +# Function to clean the data sent via API by removing unwanted keys and None values +def clean_data(data): + # Keys to remove (including those with None values) + keys_to_remove = { + "url", + "token", + "jenkins_user", + "jenkins_password", + "file_path", + "private_key_path", + "type", + "state", + "force", + "name", + "scope", + "location", + "api_uri", + } + + # Filter out None values and unwanted keys + cleaned_data = { + key: value + for key, value in data.items() + if value is not None and key not in keys_to_remove + } + + return cleaned_data + + +# Function to check if credentials/domain exists +def target_exists(module, check_domain=False): + url = module.params["url"] + location = module.params["location"] + scope = module.params["scope"] + name = module.params["id"] + user = module.params["jenkins_user"] + token = module.params["token"] + + headers = {"Authorization": basic_auth_header(user, token)} + + if module.params["type"] == "scope" or check_domain: + target_url = "{}/credentials/store/{}/domain/{}/api/json".format( + url, location, scope if check_domain else name + ) + elif module.params["type"] == "token": + return False # Can't check token + else: + target_url = "{}/credentials/store/{}/domain/{}/credential/{}/api/json".format( + url, location, scope, name + ) + + response, info = fetch_url(module, target_url, headers=headers) + status = info.get("status", 0) + + if status == 200: + return True + elif status == 404: + return False + else: + module.fail_json( + msg="Unexpected status code {} when checking {} existence.".format( + status, name + ) + ) + + +# Function to delete the scope or credential provided +def delete_target(module, headers): + user = module.params["jenkins_user"] + type = module.params["type"] + url = module.params["url"] + location = module.params["location"] + id = module.params["id"] + scope = module.params["scope"] + + body = False + + try: + + if type == "token": + delete_url = "{}/user/{}/descriptorByName/jenkins.security.ApiTokenProperty/revoke".format( + url, user + ) + body = urlencode({"tokenUuid": id}) + + elif type == "scope": + delete_url = "{}/credentials/store/{}/domain/{}/doDelete".format( + url, location, id + ) + + else: + delete_url = ( + "{}/credentials/store/{}/domain/{}/credential/{}/doDelete".format( + url, location, scope, id + ) + ) + + response, info = fetch_url( + module, + delete_url, + headers=headers, + data=body if body else None, + method="POST", + ) + + status = info.get("status", 0) + if not status == 200: + module.fail_json( + msg="Failed to delete: HTTP {}, {}, {}".format( + status, response, headers + ) + ) + + except Exception as e: + module.fail_json(msg="Exception during delete: {}".format(str(e))) + + +# Function to read the private key for types texts and ssh_key +def read_privateKey(module): + try: + with open(module.params["private_key_path"], "r") as f: + private_key = f.read().strip() + return private_key + except Exception as e: + module.fail_json(msg="Failed to read private key file: {}".format(str(e))) + + +# Function to builds multipart form-data body and content-type header for file credential upload. +# Returns: +# body (bytes): Encoded multipart data +# content_type (str): Content-Type header including boundary +def embed_file_into_body(module, file_path, credentials): + + filename = os.path.basename(file_path) + + try: + with open(file_path, "rb") as f: + file_bytes = f.read() + except Exception as e: + module.fail_json(msg="Failed to read file: {}".format(str(e))) + return "", "" # Return for test purposes + + credentials.update( + { + "file": "file0", + "fileName": filename, + } + ) + + payload = {"credentials": credentials} + + fields = {"file0": (filename, file_bytes), "json": json.dumps(payload)} + + body, content_type = urllib3.encode_multipart_formdata(fields) + return body, content_type + + +# Main function to run the Ansible module +def run_module(): + + module = AnsibleModule( + argument_spec=dict( + id=dict(type="str"), + type=dict( + type="str", + choices=[ + "user_and_pass", + "file", + "text", + "github_app", + "ssh_key", + "certificate", + "scope", + "token", + ], + ), + state=dict(type="str", default="present", choices=["present", "absent"]), + force=dict(type="bool", default=False), + scope=dict(type="str", default="_"), + url=dict(type="str", default="http://localhost:8080"), + jenkins_user=dict(type="str", required=True), + jenkins_password=dict(type="str", no_log=True), + token=dict(type="str", no_log=True), + description=dict(type="str", default=""), + location=dict(type="str", default="system", choices=["system", "folder"]), + name=dict(type="str"), + username=dict(type="str"), + password=dict(type="str", no_log=True), + file_path=dict(type="path", default=None), + secret=dict(type="str", no_log=True), + appID=dict(type="str"), + api_uri=dict(type="str", default="https://api.github.com"), + owner=dict(type="str"), + passphrase=dict(type="str", no_log=True), + private_key_path=dict(type="path", no_log=True), + # Scope specifications parameters + inc_hostname=dict(type="list", elements="str"), + exc_hostname=dict(type="list", elements="str"), + inc_hostname_port=dict(type="list", elements="str"), + exc_hostname_port=dict(type="list", elements="str"), + inc_path=dict(type="list", elements="str"), + exc_path=dict(type="list", elements="str"), + schemes=dict(type="list", elements="str"), + ), + supports_check_mode=True, + required_if=[ + ("state", "present", ["type"]), + ("state", "absent", ["id"]), + ("type", "token", ["name", "jenkins_password"]), + ("type", "user_and_pass", ["username", "password", "id", "token"]), + ("type", "file", ["file_path", "id", "token"]), + ("type", "text", ["secret", "id", "token"]), + ("type", "github_app", ["appID", "private_key_path", "id", "token"]), + ("type", "ssh_key", ["username", "private_key_path", "id", "token"]), + ("type", "certificate", ["file_path", "id", "token"]), + ("type", "scope", ["id", "token"]), + ], + ) + + # Parameters + id = module.params["id"] + type = module.params["type"] + state = module.params["state"] + force = module.params["force"] + scope = module.params["scope"] + url = module.params["url"] + jenkins_user = module.params["jenkins_user"] + jenkins_password = module.params["jenkins_password"] + name = module.params["name"] + token = module.params["token"] + description = module.params["description"] + location = module.params["location"] + filePath = module.params["file_path"] + private_key_path = module.params["private_key_path"] + api_uri = module.params["api_uri"] + inc_hostname = module.params["inc_hostname"] + exc_hostname = module.params["exc_hostname"] + inc_hostname_port = module.params["inc_hostname_port"] + exc_hostname_port = module.params["exc_hostname_port"] + inc_path = module.params["inc_path"] + exc_path = module.params["exc_path"] + schemes = module.params["schemes"] + + deps.validate(module) + + headers = { + "Authorization": basic_auth_header(jenkins_user, token or jenkins_password), + } + + # Get the crumb for CSRF protection + get_jenkins_crumb(module, headers) + + result = dict( + changed=False, + msg="", + ) + + credentials = clean_data(module.params) + + does_exist = target_exists(module) + + # Check if the credential/domain doesn't exist and the user wants to delete + if not does_exist and state == "absent" and not type == "token": + result["changed"] = False + result["msg"] = "{} does not exist.".format(id) + module.exit_json(**result) + + if state == "present": + + # If updating, we need to delete the existing credential/domain first based on force parameter + if force and (does_exist or type == "token"): + delete_target(module, headers) + elif does_exist and not force: + result["changed"] = False + result["msg"] = "{} already exists. Use force=True to update.".format(id) + module.exit_json(**result) + + if type == "token": + + post_url = "{}/user/{}/descriptorByName/jenkins.security.ApiTokenProperty/generateNewToken".format( + url, jenkins_user + ) + + body = "newTokenName={}".format(name) + + elif type == "scope": + + post_url = "{}/credentials/store/{}/createDomain".format(url, location) + + specifications = [] + + # Create a domain in Jenkins + if inc_hostname or exc_hostname: + specifications.append( + { + "stapler-class": "com.cloudbees.plugins.credentials.domains.HostnameSpecification", + "includes": ",".join(inc_hostname), + "excludes": ",".join(exc_hostname), + } + ) + + if inc_hostname_port or exc_hostname_port: + specifications.append( + { + "stapler-class": "com.cloudbees.plugins.credentials.domains.HostnamePortSpecification", + "includes": ",".join(inc_hostname_port), + "excludes": ",".join(exc_hostname_port), + } + ) + + if schemes: + specifications.append( + { + "stapler-class": "com.cloudbees.plugins.credentials.domains.SchemeSpecification", + "schemes": ",".join(schemes), + }, + ) + + if inc_path or exc_path: + specifications.append( + { + "stapler-class": "com.cloudbees.plugins.credentials.domains.PathSpecification", + "includes": ",".join(inc_path), + "excludes": ",".join(exc_path), + } + ) + + payload = { + "name": id, + "description": description, + "specifications": specifications, + } + + else: + if filePath: + validate_file_exist(module, filePath) + elif private_key_path: + validate_file_exist(module, private_key_path) + + post_url = "{}/credentials/store/{}/domain/{}/createCredentials".format( + url, location, scope + ) + + cred_class = { + "user_and_pass": "com.cloudbees.plugins.credentials.impl.UsernamePasswordCredentialsImpl", + "file": "org.jenkinsci.plugins.plaincredentials.impl.FileCredentialsImpl", + "text": "org.jenkinsci.plugins.plaincredentials.impl.StringCredentialsImpl", + "github_app": "org.jenkinsci.plugins.github_branch_source.GitHubAppCredentials", + "ssh_key": "com.cloudbees.jenkins.plugins.sshcredentials.impl.BasicSSHUserPrivateKey", + "certificate": "com.cloudbees.plugins.credentials.impl.CertificateCredentialsImpl", + } + credentials.update({"$class": cred_class[type]}) + + if type == "file": + + # Build multipart body and content-type + body, content_type = embed_file_into_body(module, filePath, credentials) + headers["Content-Type"] = content_type + + elif type == "github_app": + + private_key = read_privateKey(module) + + credentials.update( + { + "privateKey": private_key, + "apiUri": api_uri, + } + ) + + elif type == "ssh_key": + + private_key = read_privateKey(module) + + credentials.update( + { + "privateKeySource": { + "stapler-class": "com.cloudbees.jenkins.plugins.sshcredentials.impl.BasicSSHUserPrivateKey$DirectEntryPrivateKeySource", + "privateKey": private_key, + }, + } + ) + + elif type == "certificate": + + name, ext = os.path.splitext(filePath) + + if ext.lower() in [".p12", ".pfx"]: + try: + with open(filePath, "rb") as f: + file_content = f.read() + uploaded_keystore = base64.b64encode(file_content).decode( + "utf-8" + ) + except Exception as e: + module.fail_json( + msg="Failed to read or encode keystore file: {}".format( + str(e) + ) + ) + + credentials.update( + { + "keyStoreSource": { + "$class": "com.cloudbees.plugins.credentials.impl.CertificateCredentialsImpl$UploadedKeyStoreSource", + "uploadedKeystore": uploaded_keystore, + }, + } + ) + + elif ext.lower() in [".pem", ".crt"]: # PEM mode + try: + with open(filePath, "r") as f: + cert_chain = f.read() + with open(private_key_path, "r") as f: + private_key = f.read() + except Exception as e: + module.fail_json( + msg="Failed to read PEM files: {}".format(str(e)) + ) + + credentials.update( + { + "keyStoreSource": { + "$class": "com.cloudbees.plugins.credentials.impl.CertificateCredentialsImpl$PEMEntryKeyStoreSource", + "certChain": cert_chain, + "privateKey": private_key, + }, + } + ) + + else: + module.fail_json( + msg="Unsupported certificate file type. Only .p12, .pfx, .pem or .crt are supported." + ) + + payload = {"credentials": credentials} + + if not type == "file" and not type == "token": + body = urlencode({"json": json.dumps(payload)}) + + else: # Delete + + delete_target(module, headers) + + module.exit_json(changed=True, msg="{} deleted successfully.".format(id)) + + if ( + not type == "scope" and not scope == "_" + ): # Check if custom scope exists if adding to a custom scope + if not target_exists(module, True): + module.fail_json(msg="Domain {} doesn't exists".format(scope)) + + try: + response, info = fetch_url( + module, post_url, headers=headers, data=body, method="POST" + ) + except Exception as e: + module.fail_json(msg="Request to {} failed: {}".format(post_url, str(e))) + + status = info.get("status", 0) + + if not status == 200: + body = response.read() if response else b"" + module.fail_json( + msg="Failed to {} credential".format( + "add/update" if state == "present" else "delete" + ), + details=body.decode("utf-8", errors="ignore"), + ) + + if type == "token": + response_data = json.loads(response.read()) + result["token"] = response_data["data"]["tokenValue"] + result["token_uuid"] = response_data["data"]["tokenUuid"] + + result["changed"] = True + result["msg"] = response.read().decode("utf-8") + + module.exit_json(**result) + + +if __name__ == "__main__": + run_module() diff --git a/plugins/modules/keycloak_authentication.py b/plugins/modules/keycloak_authentication.py index fddff7a324..ae6d24958c 100644 --- a/plugins/modules/keycloak_authentication.py +++ b/plugins/modules/keycloak_authentication.py @@ -367,8 +367,8 @@ def main(): module = AnsibleModule(argument_spec=argument_spec, supports_check_mode=True, - required_one_of=([['token', 'auth_realm', 'auth_username', 'auth_password']]), - required_together=([['auth_realm', 'auth_username', 'auth_password']]), + required_one_of=([['token', 'auth_realm', 'auth_username', 'auth_password', 'auth_client_id', 'auth_client_secret']]), + required_together=([['auth_username', 'auth_password']]), required_by={'refresh_token': 'auth_realm'}, ) diff --git a/plugins/modules/keycloak_authentication_required_actions.py b/plugins/modules/keycloak_authentication_required_actions.py index 147acf9a1e..246963202f 100644 --- a/plugins/modules/keycloak_authentication_required_actions.py +++ b/plugins/modules/keycloak_authentication_required_actions.py @@ -237,8 +237,8 @@ def main(): module = AnsibleModule( argument_spec=argument_spec, supports_check_mode=True, - required_one_of=([['token', 'auth_realm', 'auth_username', 'auth_password']]), - required_together=([['auth_realm', 'auth_username', 'auth_password']]), + required_one_of=([['token', 'auth_realm', 'auth_username', 'auth_password', 'auth_client_id', 'auth_client_secret']]), + required_together=([['auth_username', 'auth_password']]), required_by={'refresh_token': 'auth_realm'}, ) diff --git a/plugins/modules/keycloak_authz_authorization_scope.py b/plugins/modules/keycloak_authz_authorization_scope.py index 6b2e3c30f6..ef094830f5 100644 --- a/plugins/modules/keycloak_authz_authorization_scope.py +++ b/plugins/modules/keycloak_authz_authorization_scope.py @@ -153,8 +153,8 @@ def main(): module = AnsibleModule(argument_spec=argument_spec, supports_check_mode=True, required_one_of=( - [['token', 'auth_realm', 'auth_username', 'auth_password']]), - required_together=([['auth_realm', 'auth_username', 'auth_password']]), + [['token', 'auth_realm', 'auth_username', 'auth_password', 'auth_client_id', 'auth_client_secret']]), + required_together=([['auth_username', 'auth_password']]), required_by={'refresh_token': 'auth_realm'}, ) diff --git a/plugins/modules/keycloak_authz_custom_policy.py b/plugins/modules/keycloak_authz_custom_policy.py index 5e1a2a6a2d..132119f53f 100644 --- a/plugins/modules/keycloak_authz_custom_policy.py +++ b/plugins/modules/keycloak_authz_custom_policy.py @@ -139,8 +139,8 @@ def main(): module = AnsibleModule(argument_spec=argument_spec, supports_check_mode=True, required_one_of=( - [['token', 'auth_realm', 'auth_username', 'auth_password']]), - required_together=([['auth_realm', 'auth_username', 'auth_password']]), + [['token', 'auth_realm', 'auth_username', 'auth_password', 'auth_client_id', 'auth_client_secret']]), + required_together=([['auth_username', 'auth_password']]), required_by={'refresh_token': 'auth_realm'}, ) diff --git a/plugins/modules/keycloak_authz_permission.py b/plugins/modules/keycloak_authz_permission.py index 683b5f8c18..e931fd72f9 100644 --- a/plugins/modules/keycloak_authz_permission.py +++ b/plugins/modules/keycloak_authz_permission.py @@ -253,8 +253,8 @@ def main(): module = AnsibleModule(argument_spec=argument_spec, supports_check_mode=True, required_one_of=( - [['token', 'auth_realm', 'auth_username', 'auth_password']]), - required_together=([['auth_realm', 'auth_username', 'auth_password']]), + [['token', 'auth_realm', 'auth_username', 'auth_password', 'auth_client_id', 'auth_client_secret']]), + required_together=([['auth_username', 'auth_password']]), required_by={'refresh_token': 'auth_realm'}, ) diff --git a/plugins/modules/keycloak_authz_permission_info.py b/plugins/modules/keycloak_authz_permission_info.py index 0271dfd4c4..af7318315f 100644 --- a/plugins/modules/keycloak_authz_permission_info.py +++ b/plugins/modules/keycloak_authz_permission_info.py @@ -134,8 +134,8 @@ def main(): module = AnsibleModule(argument_spec=argument_spec, supports_check_mode=True, required_one_of=( - [['token', 'auth_realm', 'auth_username', 'auth_password']]), - required_together=([['auth_realm', 'auth_username', 'auth_password']]), + [['token', 'auth_realm', 'auth_username', 'auth_password', 'auth_client_id', 'auth_client_secret']]), + required_together=([['auth_username', 'auth_password']]), required_by={'refresh_token': 'auth_realm'}, ) diff --git a/plugins/modules/keycloak_client.py b/plugins/modules/keycloak_client.py index e7a2de7c85..0a7f3fe73f 100644 --- a/plugins/modules/keycloak_client.py +++ b/plugins/modules/keycloak_client.py @@ -941,8 +941,8 @@ def main(): module = AnsibleModule(argument_spec=argument_spec, supports_check_mode=True, required_one_of=([['client_id', 'id'], - ['token', 'auth_realm', 'auth_username', 'auth_password']]), - required_together=([['auth_realm', 'auth_username', 'auth_password']]), + ['token', 'auth_realm', 'auth_username', 'auth_password', 'auth_client_id', 'auth_client_secret']]), + required_together=([['auth_username', 'auth_password']]), required_by={'refresh_token': 'auth_realm'}, ) diff --git a/plugins/modules/keycloak_client_rolemapping.py b/plugins/modules/keycloak_client_rolemapping.py index cb1cad8291..ff41486873 100644 --- a/plugins/modules/keycloak_client_rolemapping.py +++ b/plugins/modules/keycloak_client_rolemapping.py @@ -268,8 +268,8 @@ def main(): module = AnsibleModule(argument_spec=argument_spec, supports_check_mode=True, - required_one_of=([['token', 'auth_realm', 'auth_username', 'auth_password']]), - required_together=([['auth_realm', 'auth_username', 'auth_password']]), + required_one_of=([['token', 'auth_realm', 'auth_username', 'auth_password', 'auth_client_id', 'auth_client_secret']]), + required_together=([['auth_username', 'auth_password']]), required_by={'refresh_token': 'auth_realm'}, ) diff --git a/plugins/modules/keycloak_clientscope.py b/plugins/modules/keycloak_clientscope.py index 4c452d4f2e..ed9fe97043 100644 --- a/plugins/modules/keycloak_clientscope.py +++ b/plugins/modules/keycloak_clientscope.py @@ -354,8 +354,8 @@ def main(): module = AnsibleModule(argument_spec=argument_spec, supports_check_mode=True, required_one_of=([['id', 'name'], - ['token', 'auth_realm', 'auth_username', 'auth_password']]), - required_together=([['auth_realm', 'auth_username', 'auth_password']]), + ['token', 'auth_realm', 'auth_username', 'auth_password', 'auth_client_id', 'auth_client_secret']]), + required_together=([['auth_username', 'auth_password']]), required_by={'refresh_token': 'auth_realm'}, ) diff --git a/plugins/modules/keycloak_clientscope_type.py b/plugins/modules/keycloak_clientscope_type.py index 0e742f676c..493363f391 100644 --- a/plugins/modules/keycloak_clientscope_type.py +++ b/plugins/modules/keycloak_clientscope_type.py @@ -145,10 +145,10 @@ def keycloak_clientscope_type_module(): argument_spec=argument_spec, supports_check_mode=True, required_one_of=([ - ['token', 'auth_realm', 'auth_username', 'auth_password'], + ['token', 'auth_realm', 'auth_username', 'auth_password', 'auth_client_id', 'auth_client_secret'], ['default_clientscopes', 'optional_clientscopes'] ]), - required_together=([['auth_realm', 'auth_username', 'auth_password']]), + required_together=([['auth_username', 'auth_password']]), required_by={'refresh_token': 'auth_realm'}, mutually_exclusive=[ ['token', 'auth_realm'], diff --git a/plugins/modules/keycloak_clienttemplate.py b/plugins/modules/keycloak_clienttemplate.py index a6af59b5ac..53b1266c7c 100644 --- a/plugins/modules/keycloak_clienttemplate.py +++ b/plugins/modules/keycloak_clienttemplate.py @@ -311,8 +311,8 @@ def main(): module = AnsibleModule(argument_spec=argument_spec, supports_check_mode=True, required_one_of=([['id', 'name'], - ['token', 'auth_realm', 'auth_username', 'auth_password']]), - required_together=([['auth_realm', 'auth_username', 'auth_password']]), + ['token', 'auth_realm', 'auth_username', 'auth_password', 'auth_client_id', 'auth_client_secret']]), + required_together=([['auth_username', 'auth_password']]), required_by={'refresh_token': 'auth_realm'}, ) diff --git a/plugins/modules/keycloak_component.py b/plugins/modules/keycloak_component.py index d5a3be2a8e..15c3c8e731 100644 --- a/plugins/modules/keycloak_component.py +++ b/plugins/modules/keycloak_component.py @@ -155,8 +155,8 @@ def main(): module = AnsibleModule(argument_spec=argument_spec, supports_check_mode=True, - required_one_of=([['token', 'auth_realm', 'auth_username', 'auth_password']]), - required_together=([['auth_realm', 'auth_username', 'auth_password']]), + required_one_of=([['token', 'auth_realm', 'auth_username', 'auth_password', 'auth_client_id', 'auth_client_secret']]), + required_together=([['auth_username', 'auth_password']]), required_by={'refresh_token': 'auth_realm'}, ) diff --git a/plugins/modules/keycloak_group.py b/plugins/modules/keycloak_group.py index 08d2555745..865b52213a 100644 --- a/plugins/modules/keycloak_group.py +++ b/plugins/modules/keycloak_group.py @@ -334,8 +334,8 @@ def main(): module = AnsibleModule(argument_spec=argument_spec, supports_check_mode=True, required_one_of=([['id', 'name'], - ['token', 'auth_realm', 'auth_username', 'auth_password']]), - required_together=([['auth_realm', 'auth_username', 'auth_password']]), + ['token', 'auth_realm', 'auth_username', 'auth_password', 'auth_client_id', 'auth_client_secret']]), + required_together=([['auth_username', 'auth_password']]), required_by={'refresh_token': 'auth_realm'}, ) diff --git a/plugins/modules/keycloak_identity_provider.py b/plugins/modules/keycloak_identity_provider.py index 2107e273a8..eea168a14b 100644 --- a/plugins/modules/keycloak_identity_provider.py +++ b/plugins/modules/keycloak_identity_provider.py @@ -500,8 +500,8 @@ def main(): module = AnsibleModule(argument_spec=argument_spec, supports_check_mode=True, - required_one_of=([['token', 'auth_realm', 'auth_username', 'auth_password']]), - required_together=([['auth_realm', 'auth_username', 'auth_password']]), + required_one_of=([['token', 'auth_realm', 'auth_username', 'auth_password', 'auth_client_id', 'auth_client_secret']]), + required_together=([['auth_username', 'auth_password']]), required_by={'refresh_token': 'auth_realm'}, ) diff --git a/plugins/modules/keycloak_realm.py b/plugins/modules/keycloak_realm.py index 6d896d4141..c2d4dceb21 100644 --- a/plugins/modules/keycloak_realm.py +++ b/plugins/modules/keycloak_realm.py @@ -705,8 +705,8 @@ def main(): module = AnsibleModule(argument_spec=argument_spec, supports_check_mode=True, required_one_of=([['id', 'realm', 'enabled'], - ['token', 'auth_realm', 'auth_username', 'auth_password']]), - required_together=([['auth_realm', 'auth_username', 'auth_password']]), + ['token', 'auth_realm', 'auth_username', 'auth_password', 'auth_client_id', 'auth_client_secret']]), + required_together=([['auth_username', 'auth_password']]), required_by={'refresh_token': 'auth_realm'}, ) diff --git a/plugins/modules/keycloak_realm_key.py b/plugins/modules/keycloak_realm_key.py index 97e0af6da5..4f6caa4464 100644 --- a/plugins/modules/keycloak_realm_key.py +++ b/plugins/modules/keycloak_realm_key.py @@ -263,8 +263,8 @@ def main(): module = AnsibleModule(argument_spec=argument_spec, supports_check_mode=True, - required_one_of=([['token', 'auth_realm', 'auth_username', 'auth_password']]), - required_together=([['auth_realm', 'auth_username', 'auth_password']]), + required_one_of=([['token', 'auth_realm', 'auth_username', 'auth_password', 'auth_client_id', 'auth_client_secret']]), + required_together=([['auth_username', 'auth_password']]), required_by={'refresh_token': 'auth_realm'}, ) diff --git a/plugins/modules/keycloak_realm_keys_metadata_info.py b/plugins/modules/keycloak_realm_keys_metadata_info.py index 9946bd88ba..8340c8f2a5 100644 --- a/plugins/modules/keycloak_realm_keys_metadata_info.py +++ b/plugins/modules/keycloak_realm_keys_metadata_info.py @@ -104,8 +104,8 @@ def main(): module = AnsibleModule( argument_spec=argument_spec, supports_check_mode=True, - required_one_of=([["token", "auth_realm", "auth_username", "auth_password"]]), - required_together=([['auth_realm', 'auth_username', 'auth_password']]), + required_one_of=([['token', 'auth_realm', 'auth_username', 'auth_password', 'auth_client_id', 'auth_client_secret']]), + required_together=([['auth_username', 'auth_password']]), required_by={'refresh_token': 'auth_realm'}, ) diff --git a/plugins/modules/keycloak_realm_rolemapping.py b/plugins/modules/keycloak_realm_rolemapping.py index 2937ed0ec0..2e3366d422 100644 --- a/plugins/modules/keycloak_realm_rolemapping.py +++ b/plugins/modules/keycloak_realm_rolemapping.py @@ -252,8 +252,8 @@ def main(): module = AnsibleModule(argument_spec=argument_spec, supports_check_mode=True, - required_one_of=([['token', 'auth_realm', 'auth_username', 'auth_password']]), - required_together=([['auth_realm', 'auth_username', 'auth_password']]), + required_one_of=([['token', 'auth_realm', 'auth_username', 'auth_password', 'auth_client_id', 'auth_client_secret']]), + required_together=([['auth_username', 'auth_password']]), required_by={'refresh_token': 'auth_realm'}, ) diff --git a/plugins/modules/keycloak_role.py b/plugins/modules/keycloak_role.py index 9444140f06..c9979653c5 100644 --- a/plugins/modules/keycloak_role.py +++ b/plugins/modules/keycloak_role.py @@ -266,8 +266,8 @@ def main(): module = AnsibleModule(argument_spec=argument_spec, supports_check_mode=True, - required_one_of=([['token', 'auth_realm', 'auth_username', 'auth_password']]), - required_together=([['auth_realm', 'auth_username', 'auth_password']]), + required_one_of=([['token', 'auth_realm', 'auth_username', 'auth_password', 'auth_client_id', 'auth_client_secret']]), + required_together=([['auth_username', 'auth_password']]), required_by={'refresh_token': 'auth_realm'}, ) diff --git a/plugins/modules/keycloak_user.py b/plugins/modules/keycloak_user.py index 71e793ae21..83bf8f5d02 100644 --- a/plugins/modules/keycloak_user.py +++ b/plugins/modules/keycloak_user.py @@ -410,8 +410,8 @@ def main(): module = AnsibleModule(argument_spec=argument_spec, supports_check_mode=True, - required_one_of=([['token', 'auth_realm', 'auth_username', 'auth_password']]), - required_together=([['auth_realm', 'auth_username', 'auth_password']]), + required_one_of=([['token', 'auth_realm', 'auth_username', 'auth_password', 'auth_client_id', 'auth_client_secret']]), + required_together=([['auth_username', 'auth_password']]), required_by={'refresh_token': 'auth_realm'}, ) diff --git a/plugins/modules/keycloak_user_federation.py b/plugins/modules/keycloak_user_federation.py index 13428ddeb3..b3b86111c0 100644 --- a/plugins/modules/keycloak_user_federation.py +++ b/plugins/modules/keycloak_user_federation.py @@ -841,8 +841,8 @@ def main(): module = AnsibleModule(argument_spec=argument_spec, supports_check_mode=True, required_one_of=([['id', 'name'], - ['token', 'auth_realm', 'auth_username', 'auth_password']]), - required_together=([['auth_realm', 'auth_username', 'auth_password']]), + ['token', 'auth_realm', 'auth_username', 'auth_password', 'auth_client_id', 'auth_client_secret']]), + required_together=([['auth_username', 'auth_password']]), required_by={'refresh_token': 'auth_realm'}, ) diff --git a/plugins/modules/keycloak_user_rolemapping.py b/plugins/modules/keycloak_user_rolemapping.py index c15bf09410..794ea369d7 100644 --- a/plugins/modules/keycloak_user_rolemapping.py +++ b/plugins/modules/keycloak_user_rolemapping.py @@ -242,9 +242,9 @@ def main(): module = AnsibleModule(argument_spec=argument_spec, supports_check_mode=True, - required_one_of=([['token', 'auth_realm', 'auth_username', 'auth_password'], + required_one_of=([['token', 'auth_realm', 'auth_username', 'auth_password', 'auth_client_id', 'auth_client_secret'], ['uid', 'target_username', 'service_account_user_client_id']]), - required_together=([['auth_realm', 'auth_username', 'auth_password']]), + required_together=([['auth_username', 'auth_password']]), required_by={'refresh_token': 'auth_realm'}, ) diff --git a/plugins/modules/keycloak_userprofile.py b/plugins/modules/keycloak_userprofile.py index f637271497..a79ca93890 100644 --- a/plugins/modules/keycloak_userprofile.py +++ b/plugins/modules/keycloak_userprofile.py @@ -533,8 +533,8 @@ def main(): module = AnsibleModule(argument_spec=argument_spec, supports_check_mode=True, - required_one_of=([['token', 'auth_realm', 'auth_username', 'auth_password']]), - required_together=([['auth_realm', 'auth_username', 'auth_password']]), + required_one_of=([['token', 'auth_realm', 'auth_username', 'auth_password', 'auth_client_id', 'auth_client_secret']]), + required_together=([['auth_username', 'auth_password']]), required_by={'refresh_token': 'auth_realm'}, ) diff --git a/plugins/modules/lvg.py b/plugins/modules/lvg.py index b16cdd87a2..1051664dd3 100644 --- a/plugins/modules/lvg.py +++ b/plugins/modules/lvg.py @@ -123,7 +123,9 @@ EXAMPLES = r""" - name: Create or resize a volume group on top of /dev/sdb1 and /dev/sdc5. community.general.lvg: vg: vg.services - pvs: /dev/sdb1,/dev/sdc5 + pvs: + - /dev/sdb1 + - /dev/sdc5 - name: Remove a volume group with name vg.services community.general.lvg: @@ -146,6 +148,13 @@ EXAMPLES = r""" state: active vg: vg.services +- name: Add new PVs to volume group without removing existing ones + community.general.lvg: + vg: vg.services + pvs: /dev/sdb1,/dev/sdc1 + remove_extra_pvs: false + state: present + - name: Reset a volume group UUID community.general.lvg: state: inactive @@ -156,7 +165,9 @@ EXAMPLES = r""" community.general.lvg: state: inactive vg: vg.services - pvs: /dev/sdb1,/dev/sdc5 + pvs: + - /dev/sdb1 + - /dev/sdc5 reset_vg_uuid: true reset_pv_uuid: true """ diff --git a/plugins/modules/manageiq_provider.py b/plugins/modules/manageiq_provider.py index 98677c7beb..7f7049fa65 100644 --- a/plugins/modules/manageiq_provider.py +++ b/plugins/modules/manageiq_provider.py @@ -63,7 +63,7 @@ options: description: Google Compute Engine Project ID. azure_tenant_id: type: str - description: Tenant ID. defaults to None. + description: Tenant ID. Defaults to V(null). aliases: [keystone_v3_domain_id] tenant_mapping_enabled: type: bool @@ -190,25 +190,25 @@ options: description: The provider's API port. userid: type: str - description: Provider's API endpoint authentication userid. defaults to None. + description: Provider's API endpoint authentication userid. Defaults to V(null). password: type: str - description: Provider's API endpoint authentication password. defaults to None. + description: Provider's API endpoint authentication password. Defaults to V(null). auth_key: type: str - description: Provider's API endpoint authentication bearer token. defaults to None. + description: Provider's API endpoint authentication bearer token. Defaults to V(null). validate_certs: type: bool - description: Whether SSL certificates should be verified for HTTPS requests (deprecated). defaults to True. + description: Whether SSL certificates should be verified for HTTPS requests (deprecated). Defaults to V(true). default: true aliases: [verify_ssl] security_protocol: type: str choices: ['ssl-with-validation', 'ssl-with-validation-custom-ca', 'ssl-without-validation', 'non-ssl'] - description: How SSL certificates should be used for HTTPS requests. defaults to None. + description: How SSL certificates should be used for HTTPS requests. Defaults to V(null). certificate_authority: type: str - description: The CA bundle string with custom certificates. defaults to None. + description: The CA bundle string with custom certificates. Defaults to V(null). path: type: str description: diff --git a/plugins/modules/nmcli.py b/plugins/modules/nmcli.py index 0af9f64ee9..049273130d 100644 --- a/plugins/modules/nmcli.py +++ b/plugins/modules/nmcli.py @@ -1839,10 +1839,7 @@ class Nmcli(object): self.module.fail_json(msg="'master' option is required when 'slave_type' is specified.") def execute_command(self, cmd, use_unsafe_shell=False, data=None): - if isinstance(cmd, list): - cmd = [to_text(item) for item in cmd] - else: - cmd = to_text(cmd) + cmd = [to_text(item) for item in cmd] return self.module.run_command(cmd, use_unsafe_shell=use_unsafe_shell, data=data) def execute_edit_commands(self, commands, arguments): @@ -2269,7 +2266,7 @@ class Nmcli(object): @staticmethod def settings_type(setting): - if setting in ('bridge.stp', + if setting in {'bridge.stp', 'bridge-port.hairpin-mode', 'connection.autoconnect', 'ipv4.never-default', @@ -2279,9 +2276,9 @@ class Nmcli(object): 'ipv6.ignore-auto-dns', 'ipv6.ignore-auto-routes', '802-11-wireless.hidden', - 'team.runner-fast-rate'): + 'team.runner-fast-rate'}: return bool - elif setting in ('ipv4.addresses', + elif setting in {'ipv4.addresses', 'ipv6.addresses', 'ipv4.dns', 'ipv4.dns-search', @@ -2298,10 +2295,10 @@ class Nmcli(object): '802-11-wireless-security.proto', '802-11-wireless-security.psk-flags', '802-11-wireless-security.wep-key-flags', - '802-11-wireless.mac-address-blacklist'): + '802-11-wireless.mac-address-blacklist'}: return list - elif setting in ('connection.autoconnect-priority', - 'connection.autoconnect-retries'): + elif setting in {'connection.autoconnect-priority', + 'connection.autoconnect-retries'}: return int return str @@ -2484,7 +2481,7 @@ class Nmcli(object): for line in out.splitlines(): prefix = '%s.' % setting - if (line.startswith(prefix)): + if line.startswith(prefix): pair = line.split(':', 1) property = pair[0].strip().replace(prefix, '') properties.append(property) @@ -2768,7 +2765,11 @@ def main(): mutually_exclusive=[['never_default4', 'gw4'], ['routes4_extended', 'routes4'], ['routes6_extended', 'routes6']], - required_if=[("type", "wifi", [("ssid")])], + required_if=[ + ("type", "wifi", ["ssid"]), + ("type", "team-slave", ["master", "ifname"]), + ("slave_type", "team", ["master", "ifname"]), + ], supports_check_mode=True, ) module.run_command_environ_update = dict(LANG='C', LC_ALL='C', LC_MESSAGES='C', LC_CTYPE='C') @@ -2778,21 +2779,12 @@ def main(): (rc, out, err) = (None, '', '') result = {'conn_name': nmcli.conn_name, 'state': nmcli.state} - # check for issues - if nmcli.conn_name is None: - nmcli.module.fail_json(msg="Please specify a name for the connection") # team checks if nmcli.type == "team": if nmcli.runner_hwaddr_policy and not nmcli.runner == "activebackup": nmcli.module.fail_json(msg="Runner-hwaddr-policy is only allowed for runner activebackup") if nmcli.runner_fast_rate is not None and nmcli.runner != "lacp": nmcli.module.fail_json(msg="runner-fast-rate is only allowed for runner lacp") - # team-slave checks - if nmcli.type == 'team-slave' or nmcli.slave_type == 'team': - if nmcli.master is None: - nmcli.module.fail_json(msg="Please specify a name for the master when type is %s" % nmcli.type) - if nmcli.ifname is None: - nmcli.module.fail_json(msg="Please specify an interface name for the connection when type is %s" % nmcli.type) if nmcli.type == 'wifi': unsupported_properties = {} if nmcli.wifi: @@ -2815,7 +2807,7 @@ def main(): (rc, out, err) = nmcli.down_connection() (rc, out, err) = nmcli.remove_connection() if rc != 0: - module.fail_json(name=('No Connection named %s exists' % nmcli.conn_name), msg=err, rc=rc) + module.fail_json(name=('Error removing connection named %s' % nmcli.conn_name), msg=err, rc=rc) elif nmcli.state == 'present': if nmcli.connection_exists(): @@ -2852,7 +2844,7 @@ def main(): (rc, out, err) = nmcli.reload_connection() (rc, out, err) = nmcli.up_connection() if rc != 0: - module.fail_json(name=('No Connection named %s exists' % nmcli.conn_name), msg=err, rc=rc) + module.fail_json(name=('Error bringing up connection named %s' % nmcli.conn_name), msg=err, rc=rc) elif nmcli.state == 'down': if nmcli.connection_exists(): @@ -2862,7 +2854,7 @@ def main(): (rc, out, err) = nmcli.reload_connection() (rc, out, err) = nmcli.down_connection() if rc != 0: - module.fail_json(name=('No Connection named %s exists' % nmcli.conn_name), msg=err, rc=rc) + module.fail_json(name=('Error bringing down connection named %s' % nmcli.conn_name), msg=err, rc=rc) except NmcliModuleError as e: module.fail_json(name=nmcli.conn_name, msg=str(e)) diff --git a/plugins/modules/oneandone_firewall_policy.py b/plugins/modules/oneandone_firewall_policy.py index d0b5319aad..f949767ef3 100644 --- a/plugins/modules/oneandone_firewall_policy.py +++ b/plugins/modules/oneandone_firewall_policy.py @@ -288,7 +288,7 @@ def _add_firewall_rules(module, oneandone_conn, firewall_id, rules): if module.check_mode: firewall_policy_id = get_firewall_policy(oneandone_conn, firewall_id) - if (firewall_rules and firewall_policy_id): + if firewall_rules and firewall_policy_id: return True return False diff --git a/plugins/modules/oneandone_load_balancer.py b/plugins/modules/oneandone_load_balancer.py index 2d19a98adf..5cd5da79d4 100644 --- a/plugins/modules/oneandone_load_balancer.py +++ b/plugins/modules/oneandone_load_balancer.py @@ -344,7 +344,7 @@ def _add_load_balancer_rules(module, oneandone_conn, load_balancer_id, rules): if module.check_mode: lb_id = get_load_balancer(oneandone_conn, load_balancer_id) - if (load_balancer_rules and lb_id): + if load_balancer_rules and lb_id: return True return False diff --git a/plugins/modules/oneandone_monitoring_policy.py b/plugins/modules/oneandone_monitoring_policy.py index a0aa17611e..627e693e5a 100644 --- a/plugins/modules/oneandone_monitoring_policy.py +++ b/plugins/modules/oneandone_monitoring_policy.py @@ -537,7 +537,7 @@ def _add_processes(module, oneandone_conn, monitoring_policy_id, processes): if module.check_mode: mp_id = get_monitoring_policy(oneandone_conn, monitoring_policy_id) - if (monitoring_policy_processes and mp_id): + if monitoring_policy_processes and mp_id: return True return False diff --git a/plugins/modules/onepassword_info.py b/plugins/modules/onepassword_info.py index 00fa847c07..77daf481bf 100644 --- a/plugins/modules/onepassword_info.py +++ b/plugins/modules/onepassword_info.py @@ -209,7 +209,7 @@ class OnePasswordInfo(object): def _parse_field(self, data_json, item_id, field_name, section_title=None): data = json.loads(data_json) - if ('documentAttributes' in data['details']): + if 'documentAttributes' in data['details']: # This is actually a document, let's fetch the document data instead! document = self._run(["get", "document", data['overview']['title']]) return {'document': document[1].strip()} @@ -219,7 +219,7 @@ class OnePasswordInfo(object): # Some types of 1Password items have a 'password' field directly alongside the 'fields' attribute, # not inside it, so we need to check there first. - if (field_name in data['details']): + if field_name in data['details']: return {field_name: data['details'][field_name]} # Otherwise we continue looking inside the 'fields' attribute for the specified field. diff --git a/plugins/modules/osx_defaults.py b/plugins/modules/osx_defaults.py index 75bd03b4ad..bc8a7afd5e 100644 --- a/plugins/modules/osx_defaults.py +++ b/plugins/modules/osx_defaults.py @@ -191,7 +191,7 @@ class OSXDefaults(object): @staticmethod def is_int(value): as_str = str(value) - if (as_str.startswith("-")): + if as_str.startswith("-"): return as_str[1:].isdigit() else: return as_str.isdigit() diff --git a/plugins/modules/ovh_ip_loadbalancing_backend.py b/plugins/modules/ovh_ip_loadbalancing_backend.py index cefb9231bd..8bf294a1d5 100644 --- a/plugins/modules/ovh_ip_loadbalancing_backend.py +++ b/plugins/modules/ovh_ip_loadbalancing_backend.py @@ -244,7 +244,7 @@ def main(): 'parameters. Error returned by OVH api was : {0}' .format(apiError)) - if (backendProperties['weight'] != weight): + if backendProperties['weight'] != weight: # Change weight try: client.post( @@ -263,7 +263,7 @@ def main(): .format(apiError)) moduleChanged = True - if (backendProperties['probe'] != probe): + if backendProperties['probe'] != probe: # Change probe backendProperties['probe'] = probe try: diff --git a/plugins/modules/pacemaker_cluster.py b/plugins/modules/pacemaker_cluster.py index caf18abb27..ffed13f9c5 100644 --- a/plugins/modules/pacemaker_cluster.py +++ b/plugins/modules/pacemaker_cluster.py @@ -13,6 +13,7 @@ module: pacemaker_cluster short_description: Manage pacemaker clusters author: - Mathieu Bultel (@matbu) + - Dexter Le (@munchtoast) description: - This module can manage a pacemaker cluster and nodes from Ansible using the pacemaker CLI. extends_documentation_fragment: @@ -26,18 +27,20 @@ options: state: description: - Indicate desired state of the cluster. - choices: [cleanup, offline, online, restart] + - The value V(maintenance) has been added in community.general 11.1.0. + choices: [cleanup, offline, online, restart, maintenance] type: str - node: + name: description: - Specify which node of the cluster you want to manage. V(null) == the cluster status itself, V(all) == check the status of all nodes. type: str + aliases: ['node'] timeout: description: - - Timeout when the module should considered that the action has failed. - default: 300 + - Timeout period (in seconds) for polling the cluster operation. type: int + default: 300 force: description: - Force the change of the cluster state. @@ -63,132 +66,104 @@ out: returned: always """ -import time - -from ansible.module_utils.basic import AnsibleModule +from ansible_collections.community.general.plugins.module_utils.module_helper import StateModuleHelper +from ansible_collections.community.general.plugins.module_utils.pacemaker import pacemaker_runner, get_pacemaker_maintenance_mode -_PCS_CLUSTER_DOWN = "Error: cluster is not currently running on this node" +class PacemakerCluster(StateModuleHelper): + module = dict( + argument_spec=dict( + state=dict(type='str', choices=[ + 'cleanup', 'offline', 'online', 'restart', 'maintenance']), + name=dict(type='str', aliases=['node']), + timeout=dict(type='int', default=300), + force=dict(type='bool', default=True) + ), + supports_check_mode=True, + ) + default_state = "" + def __init_module__(self): + self.runner = pacemaker_runner(self.module) + self.vars.set('apply_all', True if not self.module.params['name'] else False) + get_args = dict([('cli_action', 'cluster'), ('state', 'status'), ('name', None), ('apply_all', self.vars.apply_all)]) + if self.module.params['state'] == "maintenance": + get_args['cli_action'] = "property" + get_args['state'] = "config" + get_args['name'] = "maintenance-mode" + elif self.module.params['state'] == "cleanup": + get_args['cli_action'] = "resource" + get_args['name'] = self.module.params['name'] -def get_cluster_status(module): - cmd = ["pcs", "cluster", "status"] - rc, out, err = module.run_command(cmd) - if out in _PCS_CLUSTER_DOWN: - return 'offline' - else: - return 'online' + self.vars.set('get_args', get_args) + self.vars.set('previous_value', self._get()['out']) + self.vars.set('value', self.vars.previous_value, change=True, diff=True) + if not self.module.params['state']: + self.module.deprecate( + 'Parameter "state" values not set is being deprecated. Make sure to provide a value for "state"', + version='12.0.0', + collection_name='community.general' + ) -def get_node_status(module, node='all'): - node_l = ["all"] if node == "all" else [] - cmd = ["pcs", "cluster", "pcsd-status"] + node_l - rc, out, err = module.run_command(cmd) - if rc == 1: - module.fail_json(msg="Command execution failed.\nCommand: `%s`\nError: %s" % (cmd, err)) - status = [] - for o in out.splitlines(): - status.append(o.split(':')) - return status + def __quit_module__(self): + self.vars.set('value', self._get()['out']) + def _process_command_output(self, fail_on_err, ignore_err_msg=""): + def process(rc, out, err): + if fail_on_err and rc != 0 and err and ignore_err_msg not in err: + self.do_raise('pcs failed with error (rc={0}): {1}'.format(rc, err)) + out = out.rstrip() + return None if out == "" else out + return process -def clean_cluster(module, timeout): - cmd = ["pcs", "resource", "cleanup"] - rc, out, err = module.run_command(cmd) - if rc == 1: - module.fail_json(msg="Command execution failed.\nCommand: `%s`\nError: %s" % (cmd, err)) + def _get(self): + with self.runner('cli_action state name') as ctx: + result = ctx.run(cli_action=self.vars.get_args['cli_action'], state=self.vars.get_args['state'], name=self.vars.get_args['name']) + return dict([('rc', result[0]), + ('out', result[1] if result[1] != "" else None), + ('err', result[2])]) + def state_cleanup(self): + with self.runner('cli_action state name', output_process=self._process_command_output(True, "Fail"), check_mode_skip=True) as ctx: + ctx.run(cli_action='resource') -def set_cluster(module, state, timeout, force): - if state == 'online': - cmd = ["pcs", "cluster", "start"] - if state == 'offline': - cmd = ["pcs", "cluster", "stop"] - if force: - cmd = cmd + ["--force"] - rc, out, err = module.run_command(cmd) - if rc == 1: - module.fail_json(msg="Command execution failed.\nCommand: `%s`\nError: %s" % (cmd, err)) + def state_offline(self): + with self.runner('cli_action state name apply_all wait', + output_process=self._process_command_output(True, "not currently running"), + check_mode_skip=True) as ctx: + ctx.run(cli_action='cluster', apply_all=self.vars.apply_all, wait=self.module.params['timeout']) - t = time.time() - ready = False - while time.time() < t + timeout: - cluster_state = get_cluster_status(module) - if cluster_state == state: - ready = True - break - if not ready: - module.fail_json(msg="Failed to set the state `%s` on the cluster\n" % (state)) + def state_online(self): + with self.runner('cli_action state name apply_all wait', + output_process=self._process_command_output(True, "currently running"), + check_mode_skip=True) as ctx: + ctx.run(cli_action='cluster', apply_all=self.vars.apply_all, wait=self.module.params['timeout']) + + if get_pacemaker_maintenance_mode(self.runner): + with self.runner('cli_action state name', output_process=self._process_command_output(True, "Fail"), check_mode_skip=True) as ctx: + ctx.run(cli_action='property', state='maintenance', name='maintenance-mode=false') + + def state_maintenance(self): + with self.runner('cli_action state name', + output_process=self._process_command_output(True, "Fail"), + check_mode_skip=True) as ctx: + ctx.run(cli_action='property', name='maintenance-mode=true') + + def state_restart(self): + with self.runner('cli_action state name apply_all wait', + output_process=self._process_command_output(True, "not currently running"), + check_mode_skip=True) as ctx: + ctx.run(cli_action='cluster', state='offline', apply_all=self.vars.apply_all, wait=self.module.params['timeout']) + ctx.run(cli_action='cluster', state='online', apply_all=self.vars.apply_all, wait=self.module.params['timeout']) + + if get_pacemaker_maintenance_mode(self.runner): + with self.runner('cli_action state name', output_process=self._process_command_output(True, "Fail"), check_mode_skip=True) as ctx: + ctx.run(cli_action='property', state='maintenance', name='maintenance-mode=false') def main(): - argument_spec = dict( - state=dict(type='str', choices=['online', 'offline', 'restart', 'cleanup']), - node=dict(type='str'), - timeout=dict(type='int', default=300), - force=dict(type='bool', default=True), - ) - - module = AnsibleModule( - argument_spec, - supports_check_mode=True, - ) - changed = False - state = module.params['state'] - node = module.params['node'] - force = module.params['force'] - timeout = module.params['timeout'] - - if state in ['online', 'offline']: - # Get cluster status - if node is None: - cluster_state = get_cluster_status(module) - if cluster_state == state: - module.exit_json(changed=changed, out=cluster_state) - else: - if module.check_mode: - module.exit_json(changed=True) - set_cluster(module, state, timeout, force) - cluster_state = get_cluster_status(module) - if cluster_state == state: - module.exit_json(changed=True, out=cluster_state) - else: - module.fail_json(msg="Fail to bring the cluster %s" % state) - else: - cluster_state = get_node_status(module, node) - # Check cluster state - for node_state in cluster_state: - if node_state[1].strip().lower() == state: - module.exit_json(changed=changed, out=cluster_state) - else: - if module.check_mode: - module.exit_json(changed=True) - # Set cluster status if needed - set_cluster(module, state, timeout, force) - cluster_state = get_node_status(module, node) - module.exit_json(changed=True, out=cluster_state) - - elif state == 'restart': - if module.check_mode: - module.exit_json(changed=True) - set_cluster(module, 'offline', timeout, force) - cluster_state = get_cluster_status(module) - if cluster_state == 'offline': - set_cluster(module, 'online', timeout, force) - cluster_state = get_cluster_status(module) - if cluster_state == 'online': - module.exit_json(changed=True, out=cluster_state) - else: - module.fail_json(msg="Failed during the restart of the cluster, the cluster cannot be started") - else: - module.fail_json(msg="Failed during the restart of the cluster, the cluster cannot be stopped") - - elif state == 'cleanup': - if module.check_mode: - module.exit_json(changed=True) - clean_cluster(module, timeout) - cluster_state = get_cluster_status(module) - module.exit_json(changed=True, out=cluster_state) + PacemakerCluster.execute() if __name__ == '__main__': diff --git a/plugins/modules/pacemaker_resource.py b/plugins/modules/pacemaker_resource.py index 38f1c45cef..2fdf785487 100644 --- a/plugins/modules/pacemaker_resource.py +++ b/plugins/modules/pacemaker_resource.py @@ -163,13 +163,15 @@ class PacemakerResource(StateModuleHelper): required_if=[('state', 'present', ['resource_type', 'resource_option'])], supports_check_mode=True, ) - default_state = "present" def __init_module__(self): - self.runner = pacemaker_runner(self.module, cli_action='resource') - self._maintenance_mode_runner = pacemaker_runner(self.module, cli_action='property') - self.vars.set('previous_value', self._get()) + self.runner = pacemaker_runner(self.module) + self.vars.set('previous_value', self._get()['out']) self.vars.set('value', self.vars.previous_value, change=True, diff=True) + self.module.params['name'] = self.module.params['name'] or None + + def __quit_module__(self): + self.vars.set('value', self._get()['out']) def _process_command_output(self, fail_on_err, ignore_err_msg=""): def process(rc, out, err): @@ -180,45 +182,31 @@ class PacemakerResource(StateModuleHelper): return process def _get(self): - with self.runner('state name', output_process=self._process_command_output(False)) as ctx: - return ctx.run(state='status') + with self.runner('cli_action state name') as ctx: + result = ctx.run(cli_action="resource", state='status') + return dict([('rc', result[0]), + ('out', result[1] if result[1] != "" else None), + ('err', result[2])]) def state_absent(self): - runner_args = ['state', 'name', 'force'] - force = get_pacemaker_maintenance_mode(self._maintenance_mode_runner) - with self.runner(runner_args, output_process=self._process_command_output(True, "does not exist"), check_mode_skip=True) as ctx: - ctx.run(force=force) - self.vars.set('value', self._get()) - self.vars.stdout = ctx.results_out - self.vars.stderr = ctx.results_err - self.vars.cmd = ctx.cmd + force = get_pacemaker_maintenance_mode(self.runner) + with self.runner('cli_action state name force', output_process=self._process_command_output(True, "does not exist"), check_mode_skip=True) as ctx: + ctx.run(cli_action='resource', force=force) def state_present(self): with self.runner( - 'state name resource_type resource_option resource_operation resource_meta resource_argument wait', - output_process=self._process_command_output(not get_pacemaker_maintenance_mode(self._maintenance_mode_runner), "already exists"), + 'cli_action state name resource_type resource_option resource_operation resource_meta resource_argument wait', + output_process=self._process_command_output(not get_pacemaker_maintenance_mode(self.runner), "already exists"), check_mode_skip=True) as ctx: - ctx.run() - self.vars.set('value', self._get()) - self.vars.stdout = ctx.results_out - self.vars.stderr = ctx.results_err - self.vars.cmd = ctx.cmd + ctx.run(cli_action='resource') def state_enabled(self): - with self.runner('state name', output_process=self._process_command_output(True, "Starting"), check_mode_skip=True) as ctx: - ctx.run() - self.vars.set('value', self._get()) - self.vars.stdout = ctx.results_out - self.vars.stderr = ctx.results_err - self.vars.cmd = ctx.cmd + with self.runner('cli_action state name', output_process=self._process_command_output(True, "Starting"), check_mode_skip=True) as ctx: + ctx.run(cli_action='resource') def state_disabled(self): - with self.runner('state name', output_process=self._process_command_output(True, "Stopped"), check_mode_skip=True) as ctx: - ctx.run() - self.vars.set('value', self._get()) - self.vars.stdout = ctx.results_out - self.vars.stderr = ctx.results_err - self.vars.cmd = ctx.cmd + with self.runner('cli_action state name', output_process=self._process_command_output(True, "Stopped"), check_mode_skip=True) as ctx: + ctx.run(cli_action='resource') def main(): diff --git a/plugins/modules/packet_device.py b/plugins/modules/packet_device.py index 39f3e71e83..da04f52f6f 100644 --- a/plugins/modules/packet_device.py +++ b/plugins/modules/packet_device.py @@ -420,12 +420,12 @@ def get_hostname_list(module): # at this point, hostnames is a list hostnames = [h.strip() for h in hostnames] - if (len(hostnames) > 1) and (count > 1): + if len(hostnames) > 1 and count > 1: _msg = ("If you set count>1, you should only specify one hostname " "with the %d formatter, not a list of hostnames.") raise Exception(_msg) - if (len(hostnames) == 1) and (count > 0): + if len(hostnames) == 1 and count > 0: hostname_spec = hostnames[0] count_range = range(count_offset, count_offset + count) if re.search(r"%\d{0,2}d", hostname_spec): diff --git a/plugins/modules/pagerduty.py b/plugins/modules/pagerduty.py index 0c14688dbd..5de20a5270 100644 --- a/plugins/modules/pagerduty.py +++ b/plugins/modules/pagerduty.py @@ -203,7 +203,7 @@ class PagerDutyRequest(object): return False, json_out, True def _create_services_payload(self, service): - if (isinstance(service, list)): + if isinstance(service, list): return [{'id': s, 'type': 'service_reference'} for s in service] else: return [{'id': service, 'type': 'service_reference'}] diff --git a/plugins/modules/pingdom.py b/plugins/modules/pingdom.py index 192dd244f2..031085e61e 100644 --- a/plugins/modules/pingdom.py +++ b/plugins/modules/pingdom.py @@ -132,10 +132,10 @@ def main(): passwd = module.params['passwd'] key = module.params['key'] - if (state == "paused" or state == "stopped"): + if state == "paused" or state == "stopped": (rc, name, result) = pause(checkid, uid, passwd, key) - if (state == "running" or state == "started"): + if state == "running" or state == "started": (rc, name, result) = unpause(checkid, uid, passwd, key) if rc != 0: diff --git a/plugins/modules/rhevm.py b/plugins/modules/rhevm.py index a23448cc7a..7536b7843a 100644 --- a/plugins/modules/rhevm.py +++ b/plugins/modules/rhevm.py @@ -812,7 +812,7 @@ class RHEVConn(object): setChanged() HOST = self.get_Host(host_name) state = HOST.status.state - while (state != 'non_operational' and state != 'up'): + while state != 'non_operational' and state != 'up': HOST = self.get_Host(host_name) state = HOST.status.state time.sleep(1) diff --git a/plugins/modules/rocketchat.py b/plugins/modules/rocketchat.py index b134916040..765b7a71e3 100644 --- a/plugins/modules/rocketchat.py +++ b/plugins/modules/rocketchat.py @@ -181,7 +181,7 @@ def build_payload_for_rocketchat(module, text, channel, username, icon_url, icon elif text is not None: payload = dict(attachments=[dict(text=text, color=color)]) if channel is not None: - if (channel[0] == '#') or (channel[0] == '@'): + if channel[0] == '#' or channel[0] == '@': payload['channel'] = channel else: payload['channel'] = '#' + channel diff --git a/plugins/modules/sensu_silence.py b/plugins/modules/sensu_silence.py index a6d699f4c1..b030dc4e69 100644 --- a/plugins/modules/sensu_silence.py +++ b/plugins/modules/sensu_silence.py @@ -202,7 +202,7 @@ def create( expire_on_resolve, reason, subscription): (rc, out, changed) = query(module, url, check, subscription) for i in out: - if (i['subscription'] == subscription): + if i['subscription'] == subscription: if ( (check is None or check == i['check']) and ( diff --git a/plugins/modules/sl_vm.py b/plugins/modules/sl_vm.py index 31ec12db02..8b199f5698 100644 --- a/plugins/modules/sl_vm.py +++ b/plugins/modules/sl_vm.py @@ -173,8 +173,16 @@ options: type: int requirements: - softlayer >= 4.1.1 +notes: + - If using Python 2.7, you must install C(softlayer-python<=5.7.2). + - If using Python 3.6, you must install C(softlayer-python<=6.0.0). + - The C(softlayer-python) library, at version 6.2.6 (from Jan 2025), only supports Python version 3.8, 3.9 and 3.10. author: - Matt Colton (@mcltn) +seealso: + - name: SoftLayer API Python Client + description: The SoftLayer API Python Client is required for this module. + link: https://github.com/SoftLayer/softlayer-python """ EXAMPLES = r""" @@ -311,9 +319,9 @@ def create_virtual_instance(module): return False, None # Check if OS or Image Template is provided (Can't be both, defaults to OS) - if (module.params.get('os_code') is not None and module.params.get('os_code') != ''): + if module.params.get('os_code') is not None and module.params.get('os_code') != '': module.params['image_id'] = '' - elif (module.params.get('image_id') is not None and module.params.get('image_id') != ''): + elif module.params.get('image_id') is not None and module.params.get('image_id') != '': module.params['os_code'] = '' module.params['disks'] = [] # Blank out disks since it will use the template else: diff --git a/plugins/modules/slack.py b/plugins/modules/slack.py index 61ccfbfc9e..f1c375c31b 100644 --- a/plugins/modules/slack.py +++ b/plugins/modules/slack.py @@ -32,8 +32,9 @@ options: domain: type: str description: - - Slack (sub)domain for your environment without protocol. (For example V(example.slack.com).) In Ansible 1.8 and beyond, - this is deprecated and may be ignored. See token documentation for information. + - "When using new format 'Webhook token' and WebAPI tokens: this can be V(slack.com) or V(slack-gov.com) and is ignored otherwise." + - "When using old format 'Webhook token': Slack (sub)domain for your environment without protocol. (For example V(example.slack.com).) + in Ansible 1.8 and beyond, this is deprecated and may be ignored. See token documentation for information." token: type: str description: @@ -41,9 +42,10 @@ options: depending on what method you use. - 'Webhook token: Prior to Ansible 1.8, a token looked like V(3Ffe373sfhRE6y42Fg3rvf4GlK). In Ansible 1.8 and above, Ansible adapts to the new slack API where tokens look like V(G922VJP24/D921DW937/3Ffe373sfhRE6y42Fg3rvf4GlK). If tokens - are in the new format then slack will ignore any value of domain. If the token is in the old format the domain is - required. Ansible has no control of when slack will get rid of the old API. When slack does that the old format will - stop working. ** Please keep in mind the tokens are not the API tokens but are the webhook tokens. In slack these + are in the new format then slack will ignore any value of domain except V(slack.com) or V(slack-gov.com). If the token + is in the old format the domain is required. Ansible has no control of when slack will get rid of the old API. When slack + does that the old format will stop working. + ** Please keep in mind the tokens are not the API tokens but are the webhook tokens. In slack these are found in the webhook URL which are obtained under the apps and integrations. The incoming webhooks can be added in that area. In some cases this may be locked by your Slack admin and you must request access. It is there that the incoming webhooks can be added. The key is on the end of the URL given to you in that section.' @@ -267,10 +269,10 @@ from ansible.module_utils.six.moves.urllib.parse import urlencode from ansible.module_utils.urls import fetch_url OLD_SLACK_INCOMING_WEBHOOK = 'https://%s/services/hooks/incoming-webhook?token=%s' -SLACK_INCOMING_WEBHOOK = 'https://hooks.slack.com/services/%s' -SLACK_POSTMESSAGE_WEBAPI = 'https://slack.com/api/chat.postMessage' -SLACK_UPDATEMESSAGE_WEBAPI = 'https://slack.com/api/chat.update' -SLACK_CONVERSATIONS_HISTORY_WEBAPI = 'https://slack.com/api/conversations.history' +SLACK_INCOMING_WEBHOOK = 'https://hooks.%s/services/%s' +SLACK_POSTMESSAGE_WEBAPI = 'https://%s/api/chat.postMessage' +SLACK_UPDATEMESSAGE_WEBAPI = 'https://%s/api/chat.update' +SLACK_CONVERSATIONS_HISTORY_WEBAPI = 'https://%s/api/conversations.history' # Escaping quotes and apostrophes to avoid ending string prematurely in ansible call. # We do not escape other characters used as Slack metacharacters (e.g. &, <, >). @@ -372,7 +374,11 @@ def build_payload_for_slack(text, channel, thread_id, username, icon_url, icon_e return payload -def get_slack_message(module, token, channel, ts): +def validate_slack_domain(domain): + return (domain if domain in ('slack.com', 'slack-gov.com') else 'slack.com') + + +def get_slack_message(module, domain, token, channel, ts): headers = { 'Content-Type': 'application/json; charset=UTF-8', 'Accept': 'application/json', @@ -384,7 +390,8 @@ def get_slack_message(module, token, channel, ts): 'limit': 1, 'inclusive': 'true', }) - url = SLACK_CONVERSATIONS_HISTORY_WEBAPI + '?' + qs + domain = validate_slack_domain(domain) + url = (SLACK_CONVERSATIONS_HISTORY_WEBAPI % domain) + '?' + qs response, info = fetch_url(module=module, url=url, headers=headers, method='GET') if info['status'] != 200: module.fail_json(msg="failed to get slack message") @@ -402,9 +409,11 @@ def do_notify_slack(module, domain, token, payload): use_webapi = False if token.count('/') >= 2: # New style webhook token - slack_uri = SLACK_INCOMING_WEBHOOK % token + domain = validate_slack_domain(domain) + slack_uri = SLACK_INCOMING_WEBHOOK % (domain, token) elif re.match(r'^xox[abp]-\S+$', token): - slack_uri = SLACK_UPDATEMESSAGE_WEBAPI if 'ts' in payload else SLACK_POSTMESSAGE_WEBAPI + domain = validate_slack_domain(domain) + slack_uri = (SLACK_UPDATEMESSAGE_WEBAPI if 'ts' in payload else SLACK_POSTMESSAGE_WEBAPI) % domain use_webapi = True else: if not domain: @@ -426,7 +435,7 @@ def do_notify_slack(module, domain, token, payload): if use_webapi: obscured_incoming_webhook = slack_uri else: - obscured_incoming_webhook = SLACK_INCOMING_WEBHOOK % '[obscured]' + obscured_incoming_webhook = SLACK_INCOMING_WEBHOOK % (domain, '[obscured]') module.fail_json(msg=" failed to send %s to %s: %s" % (data, obscured_incoming_webhook, info['msg'])) # each API requires different handling @@ -494,7 +503,7 @@ def main(): # if updating an existing message, we can check if there's anything to update if message_id is not None: changed = False - msg = get_slack_message(module, token, channel, message_id) + msg = get_slack_message(module, domain, token, channel, message_id) for key in ('icon_url', 'icon_emoji', 'link_names', 'color', 'attachments', 'blocks'): if msg.get(key) != module.params.get(key): changed = True diff --git a/plugins/modules/ssh_config.py b/plugins/modules/ssh_config.py index 07637e8003..b4d6ed16bf 100644 --- a/plugins/modules/ssh_config.py +++ b/plugins/modules/ssh_config.py @@ -162,6 +162,15 @@ EXAMPLES = r""" other_options: serveraliveinterval: '30' +- name: Add SSH config with key auto-added to agent + community.general.ssh_config: + user: devops + host: "example.com" + hostname: "staging.example.com" + identity_file: "/home/devops/.ssh/id_rsa" + add_keys_to_agent: true + state: present + - name: Delete a host from the configuration community.general.ssh_config: ssh_config_file: "{{ ssh_config_test }}" diff --git a/plugins/modules/urpmi.py b/plugins/modules/urpmi.py index 5760a4829f..454921eaf3 100644 --- a/plugins/modules/urpmi.py +++ b/plugins/modules/urpmi.py @@ -184,7 +184,7 @@ def install_packages(module, pkgspec, root, force=True, no_recommends=True): def root_option(root): - if (root): + if root: return "--root=%s" % (root) else: return "" diff --git a/plugins/modules/xattr.py b/plugins/modules/xattr.py index fe48ce2eef..cbd9dcc05c 100644 --- a/plugins/modules/xattr.py +++ b/plugins/modules/xattr.py @@ -209,7 +209,7 @@ def main(): not (namespace == 'user' and key.startswith('user.'))): key = '%s.%s' % (namespace, key) - if (state == 'present' or value is not None): + if state == 'present' or value is not None: current = get_xattr(module, path, key, follow) if current is None or key not in current or value != current[key]: if not module.check_mode: diff --git a/plugins/modules/xfconf.py b/plugins/modules/xfconf.py index a63ada665f..1cae7fb12b 100644 --- a/plugins/modules/xfconf.py +++ b/plugins/modules/xfconf.py @@ -178,7 +178,7 @@ class XFConfProperty(StateModuleHelper): output_params = ('property', 'channel', 'value') module = dict( argument_spec=dict( - state=dict(type='str', choices=("present", "absent"), default="present"), + state=dict(type='str', choices=('present', 'absent'), default='present'), channel=dict(type='str', required=True), property=dict(type='str', required=True), value_type=dict(type='list', elements='str', @@ -191,8 +191,6 @@ class XFConfProperty(StateModuleHelper): supports_check_mode=True, ) - default_state = 'present' - def __init_module__(self): self.runner = xfconf_runner(self.module) self.vars.version = get_xfconf_version(self.runner) @@ -208,8 +206,8 @@ class XFConfProperty(StateModuleHelper): self.do_raise('xfconf-query failed with error (rc={0}): {1}'.format(rc, err)) result = out.rstrip() - if "Value is an array with" in result: - result = result.split("\n") + if 'Value is an array with' in result: + result = result.split('\n') result.pop(0) result.pop(0) @@ -225,7 +223,7 @@ class XFConfProperty(StateModuleHelper): self.vars.stdout = ctx.results_out self.vars.stderr = ctx.results_err self.vars.cmd = ctx.cmd - self.vars.set("run_info", ctx.run_info, verbosity=4) + self.vars.set('run_info', ctx.run_info, verbosity=4) self.vars.value = None def state_present(self): @@ -255,7 +253,7 @@ class XFConfProperty(StateModuleHelper): self.vars.stdout = ctx.results_out self.vars.stderr = ctx.results_err self.vars.cmd = ctx.cmd - self.vars.set("run_info", ctx.run_info, verbosity=4) + self.vars.set('run_info', ctx.run_info, verbosity=4) if not self.vars.is_array: self.vars.value = self.vars.value[0] diff --git a/plugins/modules/xml.py b/plugins/modules/xml.py index ef79cdbfbc..31deb4145d 100644 --- a/plugins/modules/xml.py +++ b/plugins/modules/xml.py @@ -635,7 +635,7 @@ def check_or_make_target(module, tree, xpath, namespaces): # module.fail_json(msg="now tree=%s" % etree.tostring(tree, pretty_print=True)) elif eoa == "": for node in tree.xpath(inner_xpath, namespaces=namespaces): - if (node.text != eoa_value): + if node.text != eoa_value: node.text = eoa_value changed = True diff --git a/tests/integration/targets/callback_tasks_only/aliases b/tests/integration/targets/callback_tasks_only/aliases new file mode 100644 index 0000000000..3e2dd244c1 --- /dev/null +++ b/tests/integration/targets/callback_tasks_only/aliases @@ -0,0 +1,6 @@ +# Copyright (c) Ansible Project +# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt) +# SPDX-License-Identifier: GPL-3.0-or-later + +azp/posix/3 +needs/target/callback diff --git a/tests/integration/targets/callback_tasks_only/tasks/main.yml b/tests/integration/targets/callback_tasks_only/tasks/main.yml new file mode 100644 index 0000000000..b02ddc8efc --- /dev/null +++ b/tests/integration/targets/callback_tasks_only/tasks/main.yml @@ -0,0 +1,79 @@ +--- +#################################################################### +# WARNING: These are designed specifically for Ansible tests # +# and should not be used as examples of how to write Ansible roles # +#################################################################### + +# 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 + +- block: + - name: Create temporary file + tempfile: + register: tempfile + + - name: Run tests + include_role: + name: callback + vars: + tests: + - name: Simple test + environment: + ANSIBLE_NOCOLOR: 'true' + ANSIBLE_FORCE_COLOR: 'false' + ANSIBLE_PYTHON_INTERPRETER: "{{ ansible_python_interpreter }}" + ANSIBLE_STDOUT_CALLBACK: community.general.tasks_only + playbook: | + - hosts: testhost + gather_facts: true + tasks: + - name: Create file + copy: + dest: "{{ tempfile.path }}" + content: | + Foo bar + + - name: Modify file + copy: + dest: "{{ tempfile.path }}" + content: | + Foo bar + Bar baz bam! + expected_output: + - "" + - "TASK [Gathering Facts] *********************************************************" + - "ok: [testhost]" + - "" + - "TASK [Create file] *************************************************************" + - "changed: [testhost]" + - "" + - "TASK [Modify file] *************************************************************" + - "changed: [testhost]" + - name: Different column width + environment: + ANSIBLE_NOCOLOR: 'true' + ANSIBLE_FORCE_COLOR: 'false' + ANSIBLE_PYTHON_INTERPRETER: "{{ ansible_python_interpreter }}" + ANSIBLE_STDOUT_CALLBACK: community.general.tasks_only + ANSIBLE_COLLECTIONS_TASKS_ONLY_NUMBER_OF_COLUMNS: 40 + playbook: | + - hosts: testhost + gather_facts: false + tasks: + - name: A task + debug: + msg: Test. + expected_output: + - "" + - "TASK [A task] ***************************" + - "ok: [testhost] => {" + - ' "msg": "Test."' + - "}" + + + always: + - name: Clean up temp file + file: + path: "{{ tempfile.path }}" + state: absent diff --git a/tests/integration/targets/hg/tasks/install.yml b/tests/integration/targets/hg/tasks/install.yml index caa2e21512..efc0549e95 100644 --- a/tests/integration/targets/hg/tasks/install.yml +++ b/tests/integration/targets/hg/tasks/install.yml @@ -26,11 +26,11 @@ shell: apt-get -y update && apt-get -y install mercurial when: ansible_facts.pkg_mgr == 'apt' -- name: install packages (apk) +- name: install mercurial package package: name: mercurial state: present - when: ansible_facts.pkg_mgr in ['apk', 'community.general.apk'] + when: ansible_facts.pkg_mgr in ['apk', 'community.general.apk', 'pacman', 'community.general.pacman', 'pkgng', 'community.general.pkgng', 'zypper', 'community.general.zypper'] - name: install mercurial (dnf) dnf: @@ -42,21 +42,6 @@ name: mercurial when: ansible_facts.pkg_mgr == 'yum' -- name: install mercurial (pacman) - package: - name: mercurial - when: ansible_facts.pkg_mgr in ['pacman', 'community.general.pacman'] - -- name: install mercurial (pkgng) - package: - name: mercurial - when: ansible_facts.pkg_mgr in ['pkgng', 'community.general.pkgng'] - -- name: install mercurial (zypper) - package: - name: mercurial - when: ansible_facts.pkg_mgr in ['zypper', 'community.general.zypper'] - - name: preserve the updated python command: cp -av "{{ which_python.stdout }}" "{{ which_python.stdout }}.updated" diff --git a/tests/integration/targets/hg/tasks/main.yml b/tests/integration/targets/hg/tasks/main.yml index 8c79d20b86..842f4c6570 100644 --- a/tests/integration/targets/hg/tasks/main.yml +++ b/tests/integration/targets/hg/tasks/main.yml @@ -14,13 +14,6 @@ register: has_hg ignore_errors: true -- name: warn if the underlying system is not capable of running these tests - debug: - msg: >- - The mercurial client is not able to check out Bitbucket repositories as per the changes mentioned here: - https://bitbucket.org/blog/deprecating-tlsv1-tlsv1-1-2018-12-01 . Therefore these tests are skipped. - when: (ansible_distribution == "Ubuntu" and ansible_distribution_version == "14.04") or ansible_python_version is version("2.7.9", "<") - - block: - name: install mercurial include_tasks: install.yml @@ -32,14 +25,3 @@ - name: uninstall mercurial include_tasks: uninstall.yml when: has_hg is failed - - # As per the bitbucket changes in https://bitbucket.org/blog/deprecating-tlsv1-tlsv1-1-2018-12-01 , this - # test will fail under certain circumstances, to avoid false positives, we skip these tests under the following - # circumstances: - # - # - The ubuntu 14.04 image used on shippable runs python 2.7.6, so we skip explicitly for this image. - # - When ansible_python_version is not 2.7.9 or higher, mercurial is likely to also run using this same (old) - # python version, which causes issues as per the link above. - when: - - not (ansible_distribution == "Ubuntu" and ansible_distribution_version == "14.04") - - ansible_python_version is version("2.7.9", ">=") diff --git a/tests/integration/targets/hg/tasks/run-tests.yml b/tests/integration/targets/hg/tasks/run-tests.yml index 928b7cb68d..07aa08d225 100644 --- a/tests/integration/targets/hg/tasks/run-tests.yml +++ b/tests/integration/targets/hg/tasks/run-tests.yml @@ -4,17 +4,13 @@ # 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: set where to extract the repo +- name: set variables for tests set_fact: + repo: "http://hg.code.sf.net/p/cg-hg-test-repo/hgtest" checkout_dir: "{{ remote_tmp_dir }}/hg_project_test" -- name: set what repo to use - set_fact: - repo: "http://hg.pf.osdn.net/view/a/ak/akasurde/hg_project_test" - - name: clean out the remote_tmp_dir - shell: rm -rf {{ remote_tmp_dir }}/* + shell: rm -rf "{{ checkout_dir }}" - name: verify that mercurial is installed so this test can continue shell: which hg @@ -25,8 +21,6 @@ dest: "{{ checkout_dir }}" register: hg_result -- debug: var=hg_result - - shell: ls {{ checkout_dir }} - name: verify information about the initial clone @@ -45,23 +39,20 @@ - debug: var=hg_result2 -- name: check for tags +- name: check if tags exists stat: path: "{{ checkout_dir }}/.hgtags" - register: tags + register: hg_tags - name: check for remotes stat: path: "{{ checkout_dir }}/.hg/branch" register: branches -- debug: var=tags -- debug: var=branches - - name: assert presence of tags/trunk/branches assert: that: - - "tags.stat.isreg" + - "hg_tags.stat.isreg" - "branches.stat.isreg" - name: verify on a re-clone things are marked unchanged @@ -71,7 +62,7 @@ - name: Checkout non-existent repo clone hg: - repo: "http://hg.pf.osdn.net/view/a/ak/akasurde/hg_project_test_1" + repo: "http://hg.code.sf.net/p/cg-hg-test-repo1" clone: false update: false register: hg_result3 @@ -80,6 +71,5 @@ - name: Verify result of non-existent repo clone assert: that: - - hg_result3.msg - - "'abort: HTTP Error 404: Not Found' in hg_result3.msg" + - "'abort: HTTP Error' in hg_result3.msg" - "not hg_result3.changed" diff --git a/tests/integration/targets/hg/tasks/uninstall.yml b/tests/integration/targets/hg/tasks/uninstall.yml index b2274caf1f..73c50f4909 100644 --- a/tests/integration/targets/hg/tasks/uninstall.yml +++ b/tests/integration/targets/hg/tasks/uninstall.yml @@ -16,12 +16,6 @@ line: "#!{{ stat_hg_interpreter.stat.path }}" when: stat_hg_interpreter.stat.islnk -- name: uninstall packages which were not originally installed (apk) - package: - name: mercurial - state: absent - when: ansible_facts.pkg_mgr in ['apk', 'community.general.apk'] - # using the apt module prevents autoremove from working, so call apt-get via shell instead - name: uninstall packages which were not originally installed (apt) shell: apt-get -y remove mercurial && apt-get -y autoremove @@ -39,11 +33,11 @@ shell: yum -y autoremove mercurial when: ansible_facts.pkg_mgr == 'yum' -- name: uninstall packages which were not originally installed (pacman) +- name: uninstall packages which were not originally installed package: name: mercurial state: absent - when: ansible_facts.pkg_mgr in ['pacman', 'community.general.pacman'] + when: ansible_facts.pkg_mgr in ['pacman', 'community.general.pacman', 'zypper', 'community.general.zypper', 'apk', 'community.general.apk'] - name: uninstall packages which were not originally installed (pkgng) package: @@ -52,12 +46,6 @@ autoremove: true when: ansible_facts.pkg_mgr in ['pkgng', 'community.general.pkgng'] -- name: uninstall packages which were not originally installed (zypper) - package: - name: mercurial - state: absent - when: ansible_facts.pkg_mgr in ['zypper', 'community.general.zypper'] - - name: restore the default python raw: mv "{{ which_python.stdout }}.default" "{{ which_python.stdout }}" diff --git a/tests/integration/targets/jenkins_credential/README.md b/tests/integration/targets/jenkins_credential/README.md new file mode 100644 index 0000000000..3b1dc74c15 --- /dev/null +++ b/tests/integration/targets/jenkins_credential/README.md @@ -0,0 +1,16 @@ + + +The integration test can be performed as follows: + +``` +# 1. Start docker-compose: +docker-compose -f tests/integration/targets/jenkins_credential/docker-compose.yml down +docker-compose -f tests/integration/targets/jenkins_credential/docker-compose.yml up -d + +# 2. Run the integration tests: +ansible-test integration jenkins_credential --allow-unsupported -v +``` diff --git a/tests/integration/targets/jenkins_credential/aliases b/tests/integration/targets/jenkins_credential/aliases new file mode 100644 index 0000000000..d2086eecf8 --- /dev/null +++ b/tests/integration/targets/jenkins_credential/aliases @@ -0,0 +1,5 @@ +# 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 + +unsupported \ No newline at end of file diff --git a/tests/integration/targets/jenkins_credential/docker-compose.yml b/tests/integration/targets/jenkins_credential/docker-compose.yml new file mode 100644 index 0000000000..c99c9ed575 --- /dev/null +++ b/tests/integration/targets/jenkins_credential/docker-compose.yml @@ -0,0 +1,21 @@ +# 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 + +version: "3.8" + +services: + jenkins: + image: bitnami/jenkins + container_name: jenkins-test + ports: + - "8080:8080" + environment: + JENKINS_USERNAME: "FishLegs" + JENKINS_PASSWORD: "MeatLug" + JENKINS_PLUGINS: "credentials,cloudbees-folder,plain-credentials,github-branch-source,github-api,scm-api,workflow-step-api" + healthcheck: + test: curl -s http://localhost:8080/login || exit 1 + interval: 10s + timeout: 10s + retries: 10 diff --git a/tests/integration/targets/jenkins_credential/tasks/add.yml b/tests/integration/targets/jenkins_credential/tasks/add.yml new file mode 100644 index 0000000000..c956773454 --- /dev/null +++ b/tests/integration/targets/jenkins_credential/tasks/add.yml @@ -0,0 +1,169 @@ +# 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: Add CUSTOM scope (run {{ run_number }}) + community.general.jenkins_credential: + id: "CUSTOM" + type: "scope" + jenkins_user: "{{ jenkins_username }}" + token: "{{ token }}" + description: "Custom scope credential" + inc_path: + - "include/path" + - "include/path2" + exc_path: + - "exclude/path" + - "exclude/path2" + inc_hostname: + - "included-hostname" + - "included-hostname2" + exc_hostname: + - "excluded-hostname" + - "excluded-hostname2" + schemes: + - "http" + - "https" + inc_hostname_port: + - "included-hostname:7000" + - "included-hostname2:7000" + exc_hostname_port: + - "excluded-hostname:7000" + - "excluded-hostname2:7000" + register: custom_scope + +- name: Assert CUSTOM scope changed value + assert: + that: + - custom_scope.changed == (run_number == 1) + fail_msg: "CUSTOM scope changed status incorrect on run {{ run_number }}" + success_msg: "CUSTOM scope behaved correctly on run {{ run_number }}" + +- name: Add user_and_pass credential (run {{ run_number }}) + community.general.jenkins_credential: + id: "userpass-id" + type: "user_and_pass" + jenkins_user: "{{ jenkins_username }}" + token: "{{ token }}" + description: "User and password credential" + username: "user1" + password: "pass1" + register: userpass_cred + +- name: Assert user_and_pass changed value + assert: + that: + - userpass_cred.changed == (run_number == 1) + fail_msg: "user_and_pass credential changed status incorrect on run {{ run_number }}" + success_msg: "user_and_pass credential behaved correctly on run {{ run_number }}" + +- name: Add file credential to custom scope (run {{ run_number }}) + community.general.jenkins_credential: + id: "file-id" + type: "file" + jenkins_user: "{{ jenkins_username }}" + token: "{{ token }}" + scope: "CUSTOM" + description: "File credential" + file_path: "{{ output_dir }}/my-secret.pem" + register: file_cred + +- name: Assert file credential changed value + assert: + that: + - file_cred.changed == (run_number == 1) + fail_msg: "file credential changed status incorrect on run {{ run_number }}" + success_msg: "file credential behaved correctly on run {{ run_number }}" + +- name: Add text credential to folder (run {{ run_number }}) + community.general.jenkins_credential: + id: "text-id" + type: "text" + jenkins_user: "{{ jenkins_username }}" + token: "{{ token }}" + description: "Text credential" + secret: "mysecrettext" + location: "folder" + url: "http://localhost:8080/job/test" + register: text_cred + +- name: Assert text credential changed value + assert: + that: + - text_cred.changed == (run_number == 1) + fail_msg: "text credential changed status incorrect on run {{ run_number }}" + success_msg: "text credential behaved correctly on run {{ run_number }}" + +- name: Add githubApp credential (run {{ run_number }}) + community.general.jenkins_credential: + id: "githubapp-id" + type: "github_app" + jenkins_user: "{{ jenkins_username }}" + token: "{{ token }}" + description: "GitHub app credential" + appID: "12345" + private_key_path: "{{ output_dir }}/github.pem" + owner: "github_owner" + register: githubapp_cred + +- name: Assert githubApp credential changed value + assert: + that: + - githubapp_cred.changed == (run_number == 1) + fail_msg: "githubApp credential changed status incorrect on run {{ run_number }}" + success_msg: "githubApp credential behaved correctly on run {{ run_number }}" + +- name: Add sshKey credential (run {{ run_number }}) + community.general.jenkins_credential: + id: "sshkey-id" + type: "ssh_key" + jenkins_user: "{{ jenkins_username }}" + token: "{{ token }}" + description: "SSH key credential" + username: "sshuser" + private_key_path: "{{ output_dir }}/ssh_key" + passphrase: 1234 + register: sshkey_cred + +- name: Assert sshKey credential changed value + assert: + that: + - sshkey_cred.changed == (run_number == 1) + fail_msg: "sshKey credential changed status incorrect on run {{ run_number }}" + success_msg: "sshKey credential behaved correctly on run {{ run_number }}" + +- name: Add certificate (p12) credential (run {{ run_number }}) + community.general.jenkins_credential: + id: "certificate-id" + type: "certificate" + jenkins_user: "{{ jenkins_username }}" + token: "{{ token }}" + description: "Certificate credential" + password: "12345678901234" + file_path: "{{ output_dir }}/certificate.p12" + register: cert_p12_cred + +- name: Assert certificate (p12) credential changed value + assert: + that: + - cert_p12_cred.changed == (run_number == 1) + fail_msg: "certificate (p12) credential changed status incorrect on run {{ run_number }}" + success_msg: "certificate (p12) credential behaved correctly on run {{ run_number }}" + +- name: Add certificate (pem) credential (run {{ run_number }}) + community.general.jenkins_credential: + id: "certificate-id-pem" + type: "certificate" + jenkins_user: "{{ jenkins_username }}" + token: "{{ token }}" + description: "Certificate credential (pem)" + file_path: "{{ output_dir }}/cert.pem" + private_key_path: "{{ output_dir }}/private.key" + register: cert_pem_cred + +- name: Assert certificate (pem) credential changed value + assert: + that: + - cert_pem_cred.changed == (run_number == 1) + fail_msg: "certificate (pem) credential changed status incorrect on run {{ run_number }}" + success_msg: "certificate (pem) credential behaved correctly on run {{ run_number }}" diff --git a/tests/integration/targets/jenkins_credential/tasks/del.yml b/tests/integration/targets/jenkins_credential/tasks/del.yml new file mode 100644 index 0000000000..036b65d3a1 --- /dev/null +++ b/tests/integration/targets/jenkins_credential/tasks/del.yml @@ -0,0 +1,128 @@ +# 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: Delete user_and_pass credential (run {{ run_number }}) + community.general.jenkins_credential: + id: "userpass-id" + jenkins_user: "{{ jenkins_username }}" + token: "{{ token }}" + state: "absent" + register: userpass_cred + +- name: Assert user_and_pass changed value + assert: + that: + - userpass_cred.changed == (run_number == 1) + fail_msg: "user_and_pass credential changed status incorrect on run {{ run_number }}" + success_msg: "user_and_pass credential behaved correctly on run {{ run_number }}" + +- name: Delete file credential to custom scope (run {{ run_number }}) + community.general.jenkins_credential: + id: "file-id" + jenkins_user: "{{ jenkins_username }}" + token: "{{ token }}" + scope: "CUSTOM" + state: "absent" + register: file_cred + +- name: Assert file credential changed value + assert: + that: + - file_cred.changed == (run_number == 1) + fail_msg: "file credential changed status incorrect on run {{ run_number }}" + success_msg: "file credential behaved correctly on run {{ run_number }}" + +- name: Delete CUSTOM scope credential (run {{ run_number}}) + community.general.jenkins_credential: + id: "CUSTOM" + type: "scope" + jenkins_user: "{{ jenkins_username }}" + token: "{{ token }}" + state: "absent" + register: custom_scope + +- name: Assert CUSTOM scope changed value + assert: + that: + - custom_scope.changed == (run_number == 1) + fail_msg: "CUSTOM scope changed status incorrect on run {{ run_number }}" + success_msg: "CUSTOM scope behaved correctly on run {{ run_number }}" + +- name: Delete text credential to folder (run {{ run_number }}) + community.general.jenkins_credential: + id: "text-id" + jenkins_user: "{{ jenkins_username }}" + token: "{{ token }}" + state: "absent" + location: "folder" + url: "http://localhost:8080/job/test" + register: text_cred + +- name: Assert text credential changed value + assert: + that: + - text_cred.changed == (run_number == 1) + fail_msg: "text credential changed status incorrect on run {{ run_number }}" + success_msg: "text credential behaved correctly on run {{ run_number }}" + +- name: Delete githubApp credential (run {{ run_number }}) + community.general.jenkins_credential: + id: "githubapp-id" + jenkins_user: "{{ jenkins_username }}" + token: "{{ token }}" + state: "absent" + register: githubapp_cred + +- name: Assert githubApp credential changed value + assert: + that: + - githubapp_cred.changed == (run_number == 1) + fail_msg: "githubApp credential changed status incorrect on run {{ run_number }}" + success_msg: "githubApp credential behaved correctly on run {{ run_number }}" + +- name: Delete sshKey credential (run {{ run_number }}) + community.general.jenkins_credential: + id: "sshkey-id" + jenkins_user: "{{ jenkins_username }}" + token: "{{ token }}" + description: "SSH key credential" + state: "absent" + register: sshkey_cred + +- name: Assert sshKey credential changed value + assert: + that: + - sshkey_cred.changed == (run_number == 1) + fail_msg: "sshKey credential changed status incorrect on run {{ run_number }}" + success_msg: "sshKey credential behaved correctly on run {{ run_number }}" + +- name: Delete certificate credential (p12) (run {{ run_number }}) + community.general.jenkins_credential: + id: "certificate-id" + jenkins_user: "{{ jenkins_username }}" + token: "{{ token }}" + state: "absent" + register: cert_p12_cred + +- name: Assert certificate (p12) credential changed value + assert: + that: + - cert_p12_cred.changed == (run_number == 1) + fail_msg: "certificate (p12) credential changed status incorrect on run {{ run_number }}" + success_msg: "certificate (p12) credential behaved correctly on run {{ run_number }}" + +- name: Delete certificate credential (pem) (run {{ run_number }}) + community.general.jenkins_credential: + id: "certificate-id-pem" + jenkins_user: "{{ jenkins_username }}" + token: "{{ token }}" + state: "absent" + register: cert_pem_cred + +- name: Assert certificate (pem) credential changed value + assert: + that: + - cert_pem_cred.changed == (run_number == 1) + fail_msg: "certificate (pem) credential changed status incorrect on run {{ run_number }}" + success_msg: "certificate (pem) credential behaved correctly on run {{ run_number }}" diff --git a/tests/integration/targets/jenkins_credential/tasks/edit.yml b/tests/integration/targets/jenkins_credential/tasks/edit.yml new file mode 100644 index 0000000000..bd8d1eff7b --- /dev/null +++ b/tests/integration/targets/jenkins_credential/tasks/edit.yml @@ -0,0 +1,192 @@ +# 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: Generate token + community.general.jenkins_credential: + id: "{{ tokenUuid}}" + name: "test-token-2" + jenkins_user: "{{ jenkins_username }}" + jenkins_password: "{{ jenkins_password }}" + type: "token" + force: true + register: token_result + +- name: Set token in vars + set_fact: + token: "{{ token_result.token }}" + tokenUuid: "{{ token_result.token_uuid }}" + +- name: Edit CUSTOM scope credential + community.general.jenkins_credential: + id: "CUSTOM" + type: "scope" + jenkins_user: "{{ jenkins_username }}" + token: "{{ token }}" + description: "New custom scope credential" + inc_path: + - "new_include/path" + - "new_include/path2" + exc_path: + - "new_exclude/path" + - "new_exclude/path2" + inc_hostname: + - "new_included-hostname" + - "new_included-hostname2" + exc_hostname: + - "new_excluded-hostname" + - "new_excluded-hostname2" + schemes: + - "new_http" + - "new_https" + inc_hostname_port: + - "new_included-hostname:7000" + - "new_included-hostname2:7000" + exc_hostname_port: + - "new_excluded-hostname:7000" + - "new_excluded-hostname2:7000" + force: true + register: custom_scope + +- name: Assert CUSTOM scope changed value + assert: + that: + - custom_scope.changed == true + fail_msg: "CUSTOM scope changed status when it shouldn't" + success_msg: "CUSTOM scope behaved correctly" + +- name: Edit user_and_pass credential + community.general.jenkins_credential: + id: "userpass-id" + type: "user_and_pass" + jenkins_user: "{{ jenkins_username }}" + token: "{{ token }}" + description: "new user and password credential" + username: "user2" + password: "pass2" + force: true + register: userpass_cred + +- name: Assert user_and_pass changed value + assert: + that: + - userpass_cred.changed == true + fail_msg: "user_and_pass credential changed status incorrect" + success_msg: "user_and_pass credential behaved correctly" + +- name: Edit file credential to custom scope + community.general.jenkins_credential: + id: "file-id" + type: "file" + jenkins_user: "{{ jenkins_username }}" + token: "{{ token }}" + scope: "CUSTOM" + description: "New file credential" + file_path: "{{ output_dir }}/my-secret.pem" + force: true + register: file_cred + +- name: Assert file credential changed value + assert: + that: + - file_cred.changed == true + fail_msg: "file credential changed status incorrect" + success_msg: "file credential behaved correctly" + +- name: Edit text credential to folder + community.general.jenkins_credential: + id: "text-id" + type: "text" + jenkins_user: "{{ jenkins_username }}" + token: "{{ token }}" + description: "New text credential" + secret: "mynewsecrettext" + location: "folder" + url: "http://localhost:8080/job/test" + force: true + register: text_cred + +- name: Assert text credential changed value + assert: + that: + - text_cred.changed == true + fail_msg: "text credential changed status incorrect" + success_msg: "text credential behaved correctly" + +- name: Edit githubApp credential + community.general.jenkins_credential: + id: "githubapp-id" + type: "github_app" + jenkins_user: "{{ jenkins_username }}" + token: "{{ token }}" + description: "New GitHub app credential" + appID: "12345678" + private_key_path: "{{ output_dir }}/github.pem" + owner: "new_github_owner" + force: true + register: githubapp_cred + +- name: Assert githubApp credential changed value + assert: + that: + - githubapp_cred.changed == true + fail_msg: "githubApp credential changed status incorrect" + success_msg: "githubApp credential behaved correctly" + +- name: Edit sshKey credential + community.general.jenkins_credential: + id: "sshkey-id" + type: "ssh_key" + jenkins_user: "{{ jenkins_username }}" + token: "{{ token }}" + description: "New SSH key credential" + username: "new_sshuser" + private_key_path: "{{ output_dir }}/ssh_key" + passphrase: 1234 + force: true + register: sshkey_cred + +- name: Assert sshKey credential changed value + assert: + that: + - sshkey_cred.changed == true + fail_msg: "sshKey credential changed status incorrect" + success_msg: "sshKey credential behaved correctly" + +- name: Edit certificate credential (p12) + community.general.jenkins_credential: + id: "certificate-id" + type: "certificate" + jenkins_user: "{{ jenkins_username }}" + token: "{{ token }}" + description: "New certificate credential" + password: "12345678901234" + file_path: "{{ output_dir }}/certificate.p12" + force: true + register: cert_p12_cred + +- name: Assert certificate (p12) credential changed value + assert: + that: + - cert_p12_cred.changed == true + fail_msg: "certificate (p12) credential changed status incorrect" + success_msg: "certificate (p12) credential behaved correctly" + +- name: Edit certificate credential (pem) + community.general.jenkins_credential: + id: "certificate-id-pem" + type: "certificate" + jenkins_user: "{{ jenkins_username }}" + token: "{{ token }}" + description: "New certificate credential (pem)" + file_path: "{{ output_dir }}/cert.pem" + private_key_path: "{{ output_dir }}/private.key" + force: true + register: cert_pem_cred + +- name: Assert certificate (pem) credential changed value + assert: + that: + - cert_pem_cred.changed == true + fail_msg: "certificate (pem) credential changed status incorrect" + success_msg: "certificate (pem) credential behaved correctly" diff --git a/tests/integration/targets/jenkins_credential/tasks/main.yml b/tests/integration/targets/jenkins_credential/tasks/main.yml new file mode 100644 index 0000000000..88ee0693cf --- /dev/null +++ b/tests/integration/targets/jenkins_credential/tasks/main.yml @@ -0,0 +1,79 @@ +# 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: Prepare the test environment + include_tasks: pre.yml + vars: + output_dir: "{{ playbook_dir }}/generated" + +- name: Generate token + community.general.jenkins_credential: + name: "test-token" + jenkins_user: "{{ jenkins_username }}" + jenkins_password: "{{ jenkins_password }}" + type: "token" + no_log: true + register: token_result + +- name: Assert token and tokenUuid are returned + assert: + that: + - token_result.token is defined + - token_result.token_uuid is defined + fail_msg: "Token generation failed" + success_msg: "Token and tokenUuid successfully returned" + +- name: Set token facts + set_fact: + token: "{{ token_result.token }}" + tokenUuid: "{{ token_result.token_uuid }}" + +- name: Test adding new credentials and scopes + include_tasks: add.yml + vars: + run_number: 1 + output_dir: "{{ playbook_dir }}/generated" + +- name: Test adding credentials and scopes when they already exist + include_tasks: add.yml + vars: + run_number: 2 + output_dir: "{{ playbook_dir }}/generated" + +- name: Test editing credentials + include_tasks: edit.yml + vars: + output_dir: "{{ playbook_dir }}/generated" + +- name: Test deleting credentials and scopes + include_tasks: del.yml + vars: + run_number: 1 + +- name: Test deleting credentials and scopes when they don't exist + include_tasks: del.yml + vars: + run_number: 2 + +- name: Delete token + community.general.jenkins_credential: + id: "{{ tokenUuid }}" + name: "test-token-2" + jenkins_user: "{{ jenkins_username }}" + jenkins_password: "{{ jenkins_password }}" + state: "absent" + type: "token" + register: delete_token_result + +- name: Assert token deletion + assert: + that: + - delete_token_result.changed is true + fail_msg: "Token deletion failed" + success_msg: "Token successfully deleted" + +- name: Remove generated test files + ansible.builtin.file: + path: "{{ playbook_dir }}/generated" + state: absent diff --git a/tests/integration/targets/jenkins_credential/tasks/pre.yml b/tests/integration/targets/jenkins_credential/tasks/pre.yml new file mode 100644 index 0000000000..abb649ae1e --- /dev/null +++ b/tests/integration/targets/jenkins_credential/tasks/pre.yml @@ -0,0 +1,92 @@ +# 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: Include Jenkins user variables + include_vars: "{{ role_path }}/vars/credentials.yml" + +- name: Make sure Jenkins is ready + uri: + url: http://localhost:8080/login + status_code: 200 + return_content: false + timeout: 30 + register: result + retries: 10 + delay: 5 + until: result.status == 200 + +- name: Get Jenkins crumb and save cookie + shell: | + curl -s -c cookies.txt -u FishLegs:MeatLug http://localhost:8080/crumbIssuer/api/json > crumb.json + args: + executable: /bin/bash + +- name: Read crumb value + set_fact: + crumb_data: "{{ lookup('file', 'crumb.json') | from_json }}" + +- name: Create Jenkins folder 'test' + shell: | + curl -b cookies.txt -u {{ jenkins_username }}:{{ jenkins_password }} \ + -H "{{ crumb_data.crumbRequestField }}: {{ crumb_data.crumb }}" \ + -H "Content-Type: application/xml" \ + --data-binary @- http://localhost:8080/createItem?name=test < + Test Folder + + + EOF + args: + executable: /bin/bash + +- name: Create output directory + ansible.builtin.file: + path: "{{ output_dir }}" + state: directory + mode: "0755" + +- name: Generate private key + community.crypto.openssl_privatekey: + path: "{{ output_dir }}/private.key" + size: 2048 + type: RSA + +- name: Generate CSR (certificate signing request) + community.crypto.openssl_csr: + path: "{{ output_dir }}/request.csr" + privatekey_path: "{{ output_dir }}/private.key" + common_name: "dummy.local" + +- name: Generate self-signed certificate + community.crypto.x509_certificate: + path: "{{ output_dir }}/cert.pem" + privatekey_path: "{{ output_dir }}/private.key" + csr_path: "{{ output_dir }}/request.csr" + provider: selfsigned + +- name: Create PKCS#12 (.p12) file + community.crypto.openssl_pkcs12: + path: "{{ output_dir }}/certificate.p12" + privatekey_path: "{{ output_dir }}/private.key" + certificate_path: "{{ output_dir }}/cert.pem" + friendly_name: "dummy-cert" + passphrase: "12345678901234" + +- name: Copy cert.pem to github.pem + ansible.builtin.copy: + src: "{{ output_dir }}/cert.pem" + dest: "{{ output_dir }}/github.pem" + remote_src: true + +- name: Copy private.key to my-secret.pem + ansible.builtin.copy: + src: "{{ output_dir }}/private.key" + dest: "{{ output_dir }}/my-secret.pem" + remote_src: true + +- name: Generate dummy SSH key + community.crypto.openssh_keypair: + path: "{{ output_dir }}/ssh_key" + type: rsa + size: 2048 diff --git a/tests/integration/targets/jenkins_credential/vars/credentials.yml b/tests/integration/targets/jenkins_credential/vars/credentials.yml new file mode 100644 index 0000000000..27df98700b --- /dev/null +++ b/tests/integration/targets/jenkins_credential/vars/credentials.yml @@ -0,0 +1,6 @@ +# Copyright (c) Ansible Project +# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt) +# SPDX-License-Identifier: GPL-3.0-or-later + +jenkins_username: FishLegs +jenkins_password: MeatLug diff --git a/tests/integration/targets/keycloak_modules_authentication/tasks/main.yml b/tests/integration/targets/keycloak_modules_authentication/tasks/main.yml index 1553e29c1c..b788865de9 100644 --- a/tests/integration/targets/keycloak_modules_authentication/tasks/main.yml +++ b/tests/integration/targets/keycloak_modules_authentication/tasks/main.yml @@ -3,6 +3,19 @@ # 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: Reset public login in master admin-cli (if potentially previous test failed) + community.general.keycloak_client: + auth_keycloak_url: "{{ url }}" + auth_realm: "{{ admin_realm }}" + auth_username: "{{ admin_user }}" + auth_password: "{{ admin_password }}" + auth_client_id: "admin-cli" + auth_client_secret: "{{ client_secret }}" + client_id: "admin-cli" + secret: "{{ client_secret }}" + public_client: true + state: present + - name: Create realm community.general.keycloak_realm: auth_keycloak_url: "{{ url }}" @@ -201,6 +214,89 @@ debug: var: result +- name: PREPARE - Temporarily disable public login in master admin-cli + community.general.keycloak_client: + auth_keycloak_url: "{{ url }}" + auth_realm: "{{ admin_realm }}" + auth_username: "{{ admin_user }}" + auth_password: "{{ admin_password }}" + auth_client_id: "admin-cli" + auth_client_secret: "{{ client_secret }}" + client_id: "admin-cli" + secret: "{{ client_secret }}" + public_client: false + service_accounts_enabled: true + client_authenticator_type: "client-secret" + state: present + +- name: PREPARE - Get admin role id + community.general.keycloak_role: + auth_keycloak_url: "{{ url }}" + auth_realm: "{{ admin_realm }}" + auth_username: "{{ admin_user }}" + auth_password: "{{ admin_password }}" + auth_client_id: "admin-cli" + auth_client_secret: "{{ client_secret }}" + name: "admin" + register: admin_role + +- name: PREPARE - Assign admin role to admin-cli in master + community.general.keycloak_user_rolemapping: + auth_keycloak_url: "{{ url }}" + auth_realm: "{{ admin_realm }}" + auth_username: "{{ admin_user }}" + auth_password: "{{ admin_password }}" + auth_client_id: "admin-cli" + auth_client_secret: "{{ client_secret }}" + realm: "master" + roles: + - name: "admin" + service_account_user_client_id: "admin-cli" + +- name: Create new realm role with valid client_id and client_secret + community.general.keycloak_role: + auth_keycloak_url: "{{ url }}" + auth_realm: "{{ admin_realm }}" + auth_client_id: "admin-cli" + auth_client_secret: "{{ client_secret }}" + realm: "{{ realm }}" + name: "{{ role }}" + description: "{{ keycloak_role_description }}" + state: present + register: result + +- name: Debug + debug: + var: result + +- name: Reset temporarily disabled public login in master admin-cli + community.general.keycloak_client: + auth_keycloak_url: "{{ url }}" + auth_realm: "{{ admin_realm }}" + auth_username: "{{ admin_user }}" + auth_password: "{{ admin_password }}" + auth_client_id: "admin-cli" + auth_client_secret: "{{ client_secret }}" + client_id: "admin-cli" + secret: "{{ client_secret }}" + public_client: true + state: present + +- name: Remove created realm role + community.general.keycloak_role: + auth_keycloak_url: "{{ url }}" + auth_realm: "{{ admin_realm }}" + auth_username: "{{ admin_user }}" + auth_password: "{{ admin_password }}" + realm: "{{ realm }}" + name: "{{ role }}" + state: absent + register: result + +- name: Debug + debug: + var: result + ### Unhappy path tests - name: Fail to create new realm role with invalid username/password @@ -215,7 +311,6 @@ state: present register: result failed_when: > - (result.exception is not defined) or ("HTTP Error 401: Unauthorized" not in result.msg) - name: Fail to create new realm role with invalid auth token @@ -228,7 +323,6 @@ state: present register: result failed_when: > - (result.exception is not defined) or ("HTTP Error 401: Unauthorized" not in result.msg) - name: Fail to create new realm role with invalid auth and refresh tokens, and invalid username/password @@ -245,5 +339,4 @@ state: present register: result failed_when: > - (result.exception is not defined) or ("HTTP Error 401: Unauthorized" not in result.msg) diff --git a/tests/integration/targets/keycloak_modules_authentication/vars/main.yml b/tests/integration/targets/keycloak_modules_authentication/vars/main.yml index 02ad618e1b..f57d791d86 100644 --- a/tests/integration/targets/keycloak_modules_authentication/vars/main.yml +++ b/tests/integration/targets/keycloak_modules_authentication/vars/main.yml @@ -9,6 +9,7 @@ admin_user: admin admin_password: password realm: myrealm client_id: myclient +client_secret: myclientsecret role: myrole keycloak_role_name: test diff --git a/tests/integration/targets/lookup_lmdb_kv/aliases b/tests/integration/targets/lookup_lmdb_kv/aliases index 9c7febe241..5ecc8bfd38 100644 --- a/tests/integration/targets/lookup_lmdb_kv/aliases +++ b/tests/integration/targets/lookup_lmdb_kv/aliases @@ -5,3 +5,4 @@ azp/posix/2 destructive skip/aix +disabled # TODO: currently broken diff --git a/tests/integration/targets/sysrc/tasks/main.yml b/tests/integration/targets/sysrc/tasks/main.yml index 8b55101f66..549a1b8387 100644 --- a/tests/integration/targets/sysrc/tasks/main.yml +++ b/tests/integration/targets/sysrc/tasks/main.yml @@ -141,12 +141,12 @@ # # NOTE: currently fails with FreeBSD 12 with minor version less than 4 # NOTE: currently fails with FreeBSD 13 with minor version less than 4 - # NOTE: currently fails with FreeBSD 14 with minor version less than 1 + # NOTE: currently fails with FreeBSD 14 with minor version less than 2 # when: >- ansible_distribution_version is version('12.4', '>=') and ansible_distribution_version is version('13', '<') or ansible_distribution_version is version('13.4', '>=') and ansible_distribution_version is version('14', '<') - or ansible_distribution_version is version('14.1', '>=') + or ansible_distribution_version is version('14.2', '>=') block: - name: Setup testjail include_tasks: setup-testjail.yml diff --git a/tests/sanity/ignore-2.16.txt b/tests/sanity/ignore-2.16.txt index 1642c0d275..1a4c8f89b1 100644 --- a/tests/sanity/ignore-2.16.txt +++ b/tests/sanity/ignore-2.16.txt @@ -1,3 +1,4 @@ +plugins/callback/tasks_only.py yamllint:unparsable-with-libyaml plugins/connection/wsl.py yamllint:unparsable-with-libyaml plugins/inventory/gitlab_runners.py yamllint:unparsable-with-libyaml plugins/inventory/iocage.py yamllint:unparsable-with-libyaml diff --git a/tests/sanity/ignore-2.15.txt b/tests/sanity/ignore-2.20.txt similarity index 54% rename from tests/sanity/ignore-2.15.txt rename to tests/sanity/ignore-2.20.txt index 63b01e5cd6..97751e5a92 100644 --- a/tests/sanity/ignore-2.15.txt +++ b/tests/sanity/ignore-2.20.txt @@ -1,21 +1,14 @@ -.azure-pipelines/scripts/publish-codecov.py replace-urlopen -plugins/connection/wsl.py yamllint:unparsable-with-libyaml -plugins/inventory/gitlab_runners.py yamllint:unparsable-with-libyaml -plugins/inventory/iocage.py yamllint:unparsable-with-libyaml -plugins/inventory/linode.py yamllint:unparsable-with-libyaml -plugins/inventory/lxd.py yamllint:unparsable-with-libyaml -plugins/inventory/nmap.py yamllint:unparsable-with-libyaml -plugins/inventory/scaleway.py yamllint:unparsable-with-libyaml -plugins/inventory/virtualbox.py yamllint:unparsable-with-libyaml -plugins/lookup/dependent.py validate-modules:unidiomatic-typecheck plugins/modules/consul_session.py validate-modules:parameter-state-invalid-choice plugins/modules/homectl.py import-3.11 # Uses deprecated stdlib library 'crypt' +plugins/modules/homectl.py import-3.12 # Uses deprecated stdlib library 'crypt' plugins/modules/iptables_state.py validate-modules:undocumented-parameter # params _back and _timeout used by action plugin plugins/modules/lxc_container.py validate-modules:use-run-command-not-popen plugins/modules/osx_defaults.py validate-modules:parameter-state-invalid-choice plugins/modules/parted.py validate-modules:parameter-state-invalid-choice plugins/modules/rhevm.py validate-modules:parameter-state-invalid-choice plugins/modules/udm_user.py import-3.11 # Uses deprecated stdlib library 'crypt' +plugins/modules/udm_user.py import-3.12 # Uses deprecated stdlib library 'crypt' plugins/modules/xfconf.py validate-modules:return-syntax-error -plugins/test/ansible_type.py yamllint:unparsable-with-libyaml +plugins/module_utils/univention_umc.py pylint:use-yield-from # suggested construct does not work with Python 2 +tests/unit/plugins/modules/uthelper.py pylint:use-yield-from # suggested construct does not work with Python 2 tests/unit/plugins/modules/test_gio_mime.yaml no-smart-quotes diff --git a/tests/sanity/ignore-2.15.txt.license b/tests/sanity/ignore-2.20.txt.license similarity index 100% rename from tests/sanity/ignore-2.15.txt.license rename to tests/sanity/ignore-2.20.txt.license diff --git a/tests/unit/plugins/connection/test_wsl.py b/tests/unit/plugins/connection/test_wsl.py index 768f9a8d27..8b0d6cdd5b 100644 --- a/tests/unit/plugins/connection/test_wsl.py +++ b/tests/unit/plugins/connection/test_wsl.py @@ -17,7 +17,7 @@ from ansible.playbook.play_context import PlayContext from ansible.plugins.loader import connection_loader from io import StringIO from pathlib import Path -from unittest.mock import patch, MagicMock, mock_open +from ansible_collections.community.internal_test_tools.tests.unit.compat.mock import patch, MagicMock, mock_open @pytest.fixture diff --git a/tests/unit/plugins/inventory/test_linode.py b/tests/unit/plugins/inventory/test_linode.py index 0f239f2dd9..ead41591a7 100644 --- a/tests/unit/plugins/inventory/test_linode.py +++ b/tests/unit/plugins/inventory/test_linode.py @@ -7,14 +7,8 @@ from __future__ import (absolute_import, division, print_function) __metaclass__ = type import pytest -import sys linode_apiv4 = pytest.importorskip('linode_api4') -mandatory_py_version = pytest.mark.skipif( - sys.version_info < (2, 7), - reason='The linode_api4 dependency requires python2.7 or higher' -) - from ansible.errors import AnsibleError from ansible.parsing.dataloader import DataLoader diff --git a/tests/unit/plugins/lookup/test_dependent.py b/tests/unit/plugins/lookup/test_dependent.py index ad02cecf19..fef53dec00 100644 --- a/tests/unit/plugins/lookup/test_dependent.py +++ b/tests/unit/plugins/lookup/test_dependent.py @@ -9,10 +9,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type +from ansible.template import Templar + from ansible_collections.community.internal_test_tools.tests.unit.compat.unittest import TestCase -from ansible_collections.community.internal_test_tools.tests.unit.compat.mock import ( - MagicMock, -) from ansible_collections.community.internal_test_tools.tests.unit.utils.trust import make_trusted from ansible.plugins.loader import lookup_loader @@ -20,8 +19,7 @@ from ansible.plugins.loader import lookup_loader class TestLookupModule(TestCase): def setUp(self): - templar = MagicMock() - templar._loader = None + templar = Templar(loader=None) self.lookup = lookup_loader.get("community.general.dependent", templar=templar) def test_empty(self): diff --git a/tests/unit/plugins/module_utils/net_tools/pritunl/test_api.py b/tests/unit/plugins/module_utils/net_tools/pritunl/test_api.py index 6ddc827a14..a176a55768 100644 --- a/tests/unit/plugins/module_utils/net_tools/pritunl/test_api.py +++ b/tests/unit/plugins/module_utils/net_tools/pritunl/test_api.py @@ -13,7 +13,7 @@ from ansible.module_utils.six import iteritems from ansible_collections.community.general.plugins.module_utils.net_tools.pritunl import ( api, ) -from mock import MagicMock +from ansible_collections.community.internal_test_tools.tests.unit.compat.mock import MagicMock __metaclass__ = type diff --git a/tests/unit/plugins/module_utils/xenserver/conftest.py b/tests/unit/plugins/module_utils/xenserver/conftest.py index 3fcea55617..6190bb1ea0 100644 --- a/tests/unit/plugins/module_utils/xenserver/conftest.py +++ b/tests/unit/plugins/module_utils/xenserver/conftest.py @@ -16,7 +16,7 @@ import pytest from .FakeAnsibleModule import FakeAnsibleModule from ansible.module_utils import six -from mock import MagicMock +from ansible_collections.community.internal_test_tools.tests.unit.compat.mock import MagicMock @pytest.fixture diff --git a/tests/unit/plugins/modules/test_github_repo.py b/tests/unit/plugins/modules/test_github_repo.py index bbb1f624f4..846f766723 100644 --- a/tests/unit/plugins/modules/test_github_repo.py +++ b/tests/unit/plugins/modules/test_github_repo.py @@ -7,13 +7,10 @@ __metaclass__ = type import re import json -import sys from httmock import with_httmock, urlmatch, response from ansible_collections.community.internal_test_tools.tests.unit.compat import unittest from ansible_collections.community.general.plugins.modules import github_repo -GITHUB_MINIMUM_PYTHON_VERSION = (2, 7) - @urlmatch(netloc=r'.*') def debug_mock(url, request): @@ -167,11 +164,6 @@ def delete_repo_notfound_mock(url, request): class TestGithubRepo(unittest.TestCase): - def setUp(self): - if sys.version_info < GITHUB_MINIMUM_PYTHON_VERSION: - self.skipTest("Python %s+ is needed for PyGithub" % - ",".join(map(str, GITHUB_MINIMUM_PYTHON_VERSION))) - @with_httmock(get_orgs_mock) @with_httmock(get_repo_notfound_mock) @with_httmock(create_new_org_repo_mock) diff --git a/tests/unit/plugins/modules/test_jenkins_credential.py b/tests/unit/plugins/modules/test_jenkins_credential.py new file mode 100644 index 0000000000..b74b7c4b59 --- /dev/null +++ b/tests/unit/plugins/modules/test_jenkins_credential.py @@ -0,0 +1,348 @@ +# 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 + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type + +from ansible_collections.community.general.plugins.modules import jenkins_credential +from ansible_collections.community.internal_test_tools.tests.unit.compat.mock import ( + MagicMock, + patch, + mock_open, +) + +import json +import sys + +if sys.version_info[0] == 3: + import builtins + open_path = "builtins.open" +else: + import __builtin__ as builtins + open_path = "__builtin__.open" + + +def test_validate_file_exist_passes_when_file_exists(): + module = MagicMock() + with patch("os.path.exists", return_value=True): + jenkins_credential.validate_file_exist(module, "/some/file/path") + module.fail_json.assert_not_called() + + +def test_validate_file_exist_fails_when_file_missing(): + module = MagicMock() + with patch("os.path.exists", return_value=False): + jenkins_credential.validate_file_exist(module, "/missing/file/path") + module.fail_json.assert_called_once_with( + msg="File not found: /missing/file/path" + ) + + +@patch( + "ansible_collections.community.general.plugins.modules.jenkins_credential.fetch_url" +) +def test_get_jenkins_crumb_sets_crumb_header(fetch_mock): + module = MagicMock() + module.params = {"type": "file", "url": "http://localhost:8080"} + headers = {} + + fake_response = MagicMock() + fake_response.read.return_value = json.dumps( + {"crumbRequestField": "crumb_field", "crumb": "abc123"} + ).encode("utf-8") + + fetch_mock.return_value = ( + fake_response, + {"status": 200, "set-cookie": "JSESSIONID=something; Path=/"}, + ) + + crumb_request_field, crumb, session_coockie = jenkins_credential.get_jenkins_crumb( + module, headers + ) + + assert "Cookie" not in headers + assert "crumb_field" in headers + assert crumb == "abc123" + assert headers[crumb_request_field] == crumb + + +@patch( + "ansible_collections.community.general.plugins.modules.jenkins_credential.fetch_url" +) +def test_get_jenkins_crumb_sets_cookie_if_type_token(fetch_mock): + module = MagicMock() + module.params = {"type": "token", "url": "http://localhost:8080"} + headers = {} + + fake_response = MagicMock() + fake_response.read.return_value = json.dumps( + {"crumbRequestField": "crumb_field", "crumb": "secure"} + ).encode("utf-8") + + fetch_mock.return_value = ( + fake_response, + {"status": 200, "set-cookie": "JSESSIONID=token-cookie; Path=/"}, + ) + + crumb_request_field, crumb, session_cookie = jenkins_credential.get_jenkins_crumb( + module, headers + ) + + assert "crumb_field" in headers + assert crumb == "secure" + assert headers[crumb_request_field] == crumb + assert headers["Cookie"] == session_cookie + + +@patch( + "ansible_collections.community.general.plugins.modules.jenkins_credential.fetch_url" +) +def test_get_jenkins_crumb_fails_on_non_200_status(fetch_mock): + module = MagicMock() + module.params = {"type": "file", "url": "http://localhost:8080"} + headers = {} + + fetch_mock.return_value = (MagicMock(), {"status": 403}) + + jenkins_credential.get_jenkins_crumb(module, headers) + + module.fail_json.assert_called_once() + assert "Failed to fetch Jenkins crumb" in module.fail_json.call_args[1]["msg"] + + +@patch( + "ansible_collections.community.general.plugins.modules.jenkins_credential.fetch_url" +) +def test_get_jenkins_crumb_removes_job_from_url(fetch_mock): + module = MagicMock() + module.params = {"type": "file", "url": "http://localhost:8080/job/test"} + headers = {} + + fake_response = MagicMock() + fake_response.read.return_value = json.dumps( + {"crumbRequestField": "Jenkins-Crumb", "crumb": "xyz"} + ).encode("utf-8") + + fetch_mock.return_value = (fake_response, {"status": 200, "set-cookie": ""}) + + jenkins_credential.get_jenkins_crumb(module, headers) + + url_called = fetch_mock.call_args[0][1] + assert url_called == "http://localhost:8080/crumbIssuer/api/json" + + +def test_clean_data_removes_extraneous_fields(): + data = { + "id": "cred1", + "description": "test", + "jenkins_user": "admin", + "token": "secret", + "url": "http://localhost:8080", + "file_path": None, + } + expected = {"id": "cred1", "description": "test"} + result = jenkins_credential.clean_data(data) + assert result == expected, "Expected {}, got {}".format(expected, result) + + +@patch( + "ansible_collections.community.general.plugins.modules.jenkins_credential.fetch_url" +) +def test_target_exists_returns_true_on_200(fetch_url_mock): + module = MagicMock() + module.params = { + "url": "http://localhost:8080", + "location": "system", + "scope": "_", + "id": "my-id", + "jenkins_user": "admin", + "token": "secret", + "type": "file", + } + + fetch_url_mock.return_value = (MagicMock(), {"status": 200}) + assert jenkins_credential.target_exists(module) is True + + +@patch( + "ansible_collections.community.general.plugins.modules.jenkins_credential.fetch_url" +) +def test_target_exists_returns_false_on_404(fetch_url_mock): + module = MagicMock() + module.params = { + "url": "http://localhost:8080", + "location": "system", + "scope": "_", + "id": "my-id", + "jenkins_user": "admin", + "token": "secret", + "type": "file", + } + + fetch_url_mock.return_value = (MagicMock(), {"status": 404}) + assert jenkins_credential.target_exists(module) is False + + +@patch( + "ansible_collections.community.general.plugins.modules.jenkins_credential.fetch_url" +) +def test_target_exists_calls_fail_json_on_unexpected_status(fetch_url_mock): + module = MagicMock() + module.params = { + "url": "http://localhost:8080", + "location": "system", + "scope": "_", + "id": "my-id", + "jenkins_user": "admin", + "token": "secret", + "type": "file", + } + + fetch_url_mock.return_value = (MagicMock(), {"status": 500}) + jenkins_credential.target_exists(module) + module.fail_json.assert_called_once() + assert "Unexpected status code" in module.fail_json.call_args[1]["msg"] + + +@patch( + "ansible_collections.community.general.plugins.modules.jenkins_credential.fetch_url" +) +def test_target_exists_skips_check_for_token_type(fetch_url_mock): + module = MagicMock() + module.params = { + "type": "token", + "url": "ignored", + "location": "ignored", + "scope": "ignored", + "id": "ignored", + "jenkins_user": "ignored", + "token": "ignored", + } + + assert jenkins_credential.target_exists(module) is False + fetch_url_mock.assert_not_called() + + +@patch( + "ansible_collections.community.general.plugins.modules.jenkins_credential.fetch_url" +) +def test_delete_target_fails_deleting(fetch_mock): + module = MagicMock() + module.params = { + "type": "token", + "jenkins_user": "admin", + "url": "http://localhost:8080", + "id": "token-id", + "location": "system", + "scope": "_", + } + headers = {"Authorization": "Basic abc", "Content-Type": "whatever"} + + fetch_mock.return_value = (MagicMock(), {"status": 500}) + + jenkins_credential.delete_target(module, headers) + + module.fail_json.assert_called_once() + assert "Failed to delete" in module.fail_json.call_args[1]["msg"] + + +@patch( + "ansible_collections.community.general.plugins.modules.jenkins_credential.fetch_url", + side_effect=Exception("network error"), +) +def test_delete_target_raises_exception(fetch_mock): + module = MagicMock() + module.params = { + "type": "scope", + "jenkins_user": "admin", + "location": "system", + "url": "http://localhost:8080", + "id": "domain-id", + "scope": "_", + } + headers = {"Authorization": "Basic auth"} + + jenkins_credential.delete_target(module, headers) + + module.fail_json.assert_called_once() + assert "Exception during delete" in module.fail_json.call_args[1]["msg"] + assert "network error" in module.fail_json.call_args[1]["msg"] + + +def test_read_privateKey_returns_trimmed_contents(): + module = MagicMock() + module.params = {"private_key_path": "/fake/path/key.pem"} + + mocked_file = mock_open( + read_data="\n \t -----BEGIN PRIVATE KEY-----\nKEYDATA\n-----END PRIVATE KEY----- \n\n" + ) + with patch(open_path, mocked_file): + result = jenkins_credential.read_privateKey(module) + + expected = "-----BEGIN PRIVATE KEY-----\nKEYDATA\n-----END PRIVATE KEY-----" + + assert result == expected + mocked_file.assert_called_once_with("/fake/path/key.pem", "r") + + +def test_read_privateKey_handles_file_read_error(): + module = MagicMock() + module.params = {"private_key_path": "/invalid/path.pem"} + + with patch(open_path, side_effect=IOError("cannot read file")): + jenkins_credential.read_privateKey(module) + + module.fail_json.assert_called_once() + assert "Failed to read private key file" in module.fail_json.call_args[1]["msg"] + + +def test_embed_file_into_body_returns_multipart_fields(): + module = MagicMock() + file_path = "/fake/path/secret.pem" + credentials = {"id": "my-id"} + fake_file_content = b"MY SECRET DATA" + + mock = mock_open() + mock.return_value.read.return_value = fake_file_content + + with patch("os.path.basename", return_value="secret.pem"), patch.object( + builtins, "open", mock + ): + body, content_type = jenkins_credential.embed_file_into_body( + module, file_path, credentials.copy() + ) + + assert "multipart/form-data; boundary=" in content_type + + # Check if file content is embedded in body + assert b"MY SECRET DATA" in body + assert b'filename="secret.pem"' in body + + +def test_embed_file_into_body_fails_when_file_unreadable(): + module = MagicMock() + file_path = "/fake/path/missing.pem" + credentials = {"id": "something"} + + with patch(open_path, side_effect=IOError("can't read file")): + jenkins_credential.embed_file_into_body(module, file_path, credentials) + + module.fail_json.assert_called_once() + assert "Failed to read file" in module.fail_json.call_args[1]["msg"] + + +def test_embed_file_into_body_injects_file_keys_into_credentials(): + module = MagicMock() + file_path = "/fake/path/file.txt" + credentials = {"id": "test"} + + with patch(open_path, mock_open(read_data=b"1234")), patch( + "os.path.basename", return_value="file.txt" + ): + + jenkins_credential.embed_file_into_body(module, file_path, credentials) + + assert credentials["file"] == "file0" + assert credentials["fileName"] == "file.txt" diff --git a/tests/unit/plugins/modules/test_linode_v4.py b/tests/unit/plugins/modules/test_linode_v4.py index d4bcdf3243..47e77a52e8 100644 --- a/tests/unit/plugins/modules/test_linode_v4.py +++ b/tests/unit/plugins/modules/test_linode_v4.py @@ -7,15 +7,10 @@ __metaclass__ = type import json import os -import sys import pytest linode_apiv4 = pytest.importorskip('linode_api4') -mandatory_py_version = pytest.mark.skipif( - sys.version_info < (2, 7), - reason='The linode_api4 dependency requires python2.7 or higher' -) from linode_api4.errors import ApiError as LinodeApiError from linode_api4 import LinodeClient diff --git a/tests/unit/plugins/modules/test_modprobe.py b/tests/unit/plugins/modules/test_modprobe.py index 12f6af7273..bada481cfc 100644 --- a/tests/unit/plugins/modules/test_modprobe.py +++ b/tests/unit/plugins/modules/test_modprobe.py @@ -147,7 +147,7 @@ class TestUnloadModule(ModuleTestCase): class TestModuleIsLoadedPersistently(ModuleTestCase): def setUp(self): - if (sys.version_info[0] == 3 and sys.version_info[1] < 7) or (sys.version_info[0] == 2 and sys.version_info[1] < 7): + if sys.version_info[0] == 3 and sys.version_info[1] < 7: self.skipTest("open_mock doesn't support readline in earlier python versions") super(TestModuleIsLoadedPersistently, self).setUp() @@ -222,7 +222,7 @@ class TestModuleIsLoadedPersistently(ModuleTestCase): class TestPermanentParams(ModuleTestCase): def setUp(self): - if (sys.version_info[0] == 3 and sys.version_info[1] < 7) or (sys.version_info[0] == 2 and sys.version_info[1] < 7): + if sys.version_info[0] == 3 and sys.version_info[1] < 7: self.skipTest("open_mock doesn't support readline in earlier python versions") super(TestPermanentParams, self).setUp() diff --git a/tests/unit/plugins/modules/test_pacemaker_cluster.py b/tests/unit/plugins/modules/test_pacemaker_cluster.py new file mode 100644 index 0000000000..ad69411a9c --- /dev/null +++ b/tests/unit/plugins/modules/test_pacemaker_cluster.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +# Author: Dexter Le (dextersydney2001@gmail.com) +# Largely adapted from test_redhat_subscription by +# Jiri Hnidek (jhnidek@redhat.com) +# +# Copyright (c) Dexter Le (dextersydney2001@gmail.com) +# Copyright (c) Jiri Hnidek (jhnidek@redhat.com) +# +# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt) +# SPDX-License-Identifier: GPL-3.0-or-later + +from __future__ import (absolute_import, division, print_function) +__metaclass__ = type + + +from ansible_collections.community.general.plugins.modules import pacemaker_cluster +from .uthelper import UTHelper, RunCommandMock + +UTHelper.from_module(pacemaker_cluster, __name__, mocks=[RunCommandMock]) diff --git a/tests/unit/plugins/modules/test_pacemaker_cluster.yaml b/tests/unit/plugins/modules/test_pacemaker_cluster.yaml new file mode 100644 index 0000000000..785a7cb4f6 --- /dev/null +++ b/tests/unit/plugins/modules/test_pacemaker_cluster.yaml @@ -0,0 +1,488 @@ +# -*- coding: utf-8 -*- +# Copyright (c) Dexter Le (dextersydney2001@gmail.com) +# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt) +# SPDX-License-Identifier: GPL-3.0-or-later + +--- +anchors: + environ: &env-def {environ_update: {LANGUAGE: C, LC_ALL: C}, check_rc: false} +test_cases: + - id: test_online_minimal_input_initial_online_all_no_maintenance + input: + state: online + output: + changed: false + previous_value: ' * Online: [ pc1, pc2, pc3 ]' + value: ' * Online: [ pc1, pc2, pc3 ]' + mocks: + run_command: + - command: [/testbin/pcs, cluster, status] + environ: *env-def + rc: 0 + out: ' * Online: [ pc1, pc2, pc3 ]' + err: "" + - command: [/testbin/pcs, cluster, start, --all, --wait=300] + environ: *env-def + rc: 0 + out: "Starting Cluster..." + err: "" + - command: [/testbin/pcs, property, config] + environ: *env-def + rc: 1 + out: | + Cluster Properties: cib-bootstrap-options + cluster-infrastructure=corosync + cluster-name=hacluster + dc-version=2.1.9-1.fc41-7188dbf + have-watchdog=false + err: "" + - command: [/testbin/pcs, cluster, status] + environ: *env-def + rc: 0 + out: ' * Online: [ pc1, pc2, pc3 ]' + err: "" + - id: test_online_minimal_input_initial_offline_all_maintenance + input: + state: online + output: + changed: true + previous_value: 'Error: cluster is not currently running on this node' + value: ' * Online: [ pc1, pc2, pc3 ]' + mocks: + run_command: + - command: [/testbin/pcs, cluster, status] + environ: *env-def + rc: 1 + out: 'Error: cluster is not currently running on this node' + err: "" + - command: [/testbin/pcs, cluster, start, --all, --wait=300] + environ: *env-def + rc: 0 + out: "Starting Cluster..." + err: "" + - command: [/testbin/pcs, property, config] + environ: *env-def + rc: 0 + out: | + Cluster Properties: cib-bootstrap-options + cluster-infrastructure=corosync + cluster-name=hacluster + dc-version=2.1.9-1.fc41-7188dbf + have-watchdog=false + maintenance-mode=true + err: "" + - command: [/testbin/pcs, property, set, maintenance-mode=false] + environ: *env-def + rc: 0 + out: "" + err: "" + - command: [/testbin/pcs, cluster, status] + environ: *env-def + rc: 0 + out: ' * Online: [ pc1, pc2, pc3 ]' + err: "" + - id: test_online_minimal_input_initial_offline_single_nonlocal_no_maintenance + input: + state: online + name: pc2 + output: + changed: true + previous_value: '* Node pc2: UNCLEAN (offline)\n * Online: [ pc1, pc3 ]' + value: ' * Online: [ pc1, pc2, pc3 ]' + mocks: + run_command: + - command: [/testbin/pcs, cluster, status] + environ: *env-def + rc: 0 + out: '* Node pc2: UNCLEAN (offline)\n * Online: [ pc1, pc3 ]' + err: "" + - command: [/testbin/pcs, cluster, start, pc2, --wait=300] + environ: *env-def + rc: 0 + out: "Starting Cluster..." + err: "" + - command: [/testbin/pcs, property, config] + environ: *env-def + rc: 1 + out: | + Cluster Properties: cib-bootstrap-options + cluster-infrastructure=corosync + cluster-name=hacluster + dc-version=2.1.9-1.fc41-7188dbf + have-watchdog=false + err: "" + - command: [/testbin/pcs, cluster, status] + environ: *env-def + rc: 0 + out: ' * Online: [ pc1, pc2, pc3 ]' + err: "" + - id: test_online_minimal_input_initial_offline_single_local_no_maintenance + input: + state: online + name: pc1 + output: + changed: true + previous_value: 'Error: cluster is not currently running on this node' + value: ' * Online: [ pc1, pc2, pc3 ]' + mocks: + run_command: + - command: [/testbin/pcs, cluster, status] + environ: *env-def + rc: 1 + out: 'Error: cluster is not currently running on this node' + err: "" + - command: [/testbin/pcs, cluster, start, pc1, --wait=300] + environ: *env-def + rc: 0 + out: "Starting Cluster..." + err: "" + - command: [/testbin/pcs, property, config] + environ: *env-def + rc: 1 + out: | + Cluster Properties: cib-bootstrap-options + cluster-infrastructure=corosync + cluster-name=hacluster + dc-version=2.1.9-1.fc41-7188dbf + have-watchdog=false + err: "" + - command: [/testbin/pcs, cluster, status] + environ: *env-def + rc: 0 + out: ' * Online: [ pc1, pc2, pc3 ]' + err: "" + - id: test_offline_minimal_input_initial_online_all + input: + state: offline + output: + changed: true + previous_value: ' * Online: [ pc1, pc2, pc3 ]' + value: 'Error: cluster is not currently running on this node' + mocks: + run_command: + - command: [/testbin/pcs, cluster, status] + environ: *env-def + rc: 0 + out: ' * Online: [ pc1, pc2, pc3 ]' + err: "" + - command: [/testbin/pcs, cluster, stop, --all, --wait=300] + environ: *env-def + rc: 0 + out: "Stopping Cluster..." + err: "" + - command: [/testbin/pcs, cluster, status] + environ: *env-def + rc: 1 + out: 'Error: cluster is not currently running on this node' + err: "" + - id: test_offline_minimal_input_initial_offline_all + input: + state: offline + output: + changed: false + previous_value: 'Error: cluster is not currently running on this node' + value: 'Error: cluster is not currently running on this node' + mocks: + run_command: + - command: [/testbin/pcs, cluster, status] + environ: *env-def + rc: 1 + out: 'Error: cluster is not currently running on this node' + err: "" + - command: [/testbin/pcs, cluster, stop, --all, --wait=300] + environ: *env-def + rc: 0 + out: "Stopping Cluster..." + err: "" + - command: [/testbin/pcs, cluster, status] + environ: *env-def + rc: 1 + out: 'Error: cluster is not currently running on this node' + err: "" + - id: test_offline_minimal_input_initial_offline_single_nonlocal + input: + state: offline + name: pc3 + output: + changed: true + previous_value: '* Node pc2: UNCLEAN (offline)\n * Online: [ pc1, pc3 ]' + value: '* Node pc2: UNCLEAN (offline)\n* Node pc3: UNCLEAN (offline)\n * Online: [ pc1 ]' + mocks: + run_command: + - command: [/testbin/pcs, cluster, status] + environ: *env-def + rc: 0 + out: '* Node pc2: UNCLEAN (offline)\n * Online: [ pc1, pc3 ]' + err: "" + - command: [/testbin/pcs, cluster, stop, pc3, --wait=300] + environ: *env-def + rc: 0 + out: "Stopping Cluster..." + err: "" + - command: [/testbin/pcs, cluster, status] + environ: *env-def + rc: 0 + out: '* Node pc2: UNCLEAN (offline)\n* Node pc3: UNCLEAN (offline)\n * Online: [ pc1 ]' + err: "" + - id: test_restart_minimal_input_initial_online_all_no_maintenance + input: + state: restart + output: + changed: false + previous_value: ' * Online: [ pc1, pc2, pc3 ]' + value: ' * Online: [ pc1, pc2, pc3 ]' + mocks: + run_command: + - command: [/testbin/pcs, cluster, status] + environ: *env-def + rc: 0 + out: ' * Online: [ pc1, pc2, pc3 ]' + err: "" + - command: [/testbin/pcs, cluster, stop, --all, --wait=300] + environ: *env-def + rc: 0 + out: "Stopping Cluster..." + err: "" + - command: [/testbin/pcs, cluster, start, --all, --wait=300] + environ: *env-def + rc: 0 + out: "Starting Cluster..." + err: "" + - command: [/testbin/pcs, property, config] + environ: *env-def + rc: 1 + out: | + Cluster Properties: cib-bootstrap-options + cluster-infrastructure=corosync + cluster-name=hacluster + dc-version=2.1.9-1.fc41-7188dbf + have-watchdog=false + err: "" + - command: [/testbin/pcs, cluster, status] + environ: *env-def + rc: 0 + out: ' * Online: [ pc1, pc2, pc3 ]' + err: "" + - id: test_restart_minimal_input_initial_offline_all_no_maintenance + input: + state: restart + output: + changed: true + previous_value: 'Error: cluster is not currently running on this node' + value: ' * Online: [ pc1, pc2, pc3 ]' + mocks: + run_command: + - command: [/testbin/pcs, cluster, status] + environ: *env-def + rc: 1 + out: 'Error: cluster is not currently running on this node' + err: "" + - command: [/testbin/pcs, cluster, stop, --all, --wait=300] + environ: *env-def + rc: 0 + out: "Stopping Cluster..." + err: "" + - command: [/testbin/pcs, cluster, start, --all, --wait=300] + environ: *env-def + rc: 0 + out: "Starting Cluster..." + err: "" + - command: [/testbin/pcs, property, config] + environ: *env-def + rc: 1 + out: | + Cluster Properties: cib-bootstrap-options + cluster-infrastructure=corosync + cluster-name=hacluster + dc-version=2.1.9-1.fc41-7188dbf + have-watchdog=false + err: "" + - command: [/testbin/pcs, cluster, status] + environ: *env-def + rc: 0 + out: ' * Online: [ pc1, pc2, pc3 ]' + err: "" + - id: test_restart_minimal_input_initial_offline_all_maintenance + input: + state: restart + output: + changed: true + previous_value: 'Error: cluster is not currently running on this node' + value: ' * Online: [ pc1, pc2, pc3 ]' + mocks: + run_command: + - command: [/testbin/pcs, cluster, status] + environ: *env-def + rc: 1 + out: 'Error: cluster is not currently running on this node' + err: "" + - command: [/testbin/pcs, cluster, stop, --all, --wait=300] + environ: *env-def + rc: 0 + out: "Stopping Cluster..." + err: "" + - command: [/testbin/pcs, cluster, start, --all, --wait=300] + environ: *env-def + rc: 0 + out: "Starting Cluster..." + err: "" + - command: [/testbin/pcs, property, config] + environ: *env-def + rc: 0 + out: | + Cluster Properties: cib-bootstrap-options + cluster-infrastructure=corosync + cluster-name=hacluster + dc-version=2.1.9-1.fc41-7188dbf + have-watchdog=false + maintenance-mode=true + err: "" + - command: [/testbin/pcs, property, set, maintenance-mode=false] + environ: *env-def + rc: 0 + out: "" + err: "" + - command: [/testbin/pcs, cluster, status] + environ: *env-def + rc: 0 + out: ' * Online: [ pc1, pc2, pc3 ]' + err: "" + - id: test_maintenance_minimal_input_initial_online + input: + state: maintenance + output: + changed: true + previous_value: 'maintenance-mode=false (default)' + value: 'maintenance-mode=true' + mocks: + run_command: + - command: [/testbin/pcs, property, config, maintenance-mode] + environ: *env-def + rc: 0 + out: 'maintenance-mode=false (default)' + err: "" + - command: [/testbin/pcs, property, set, maintenance-mode=true] + environ: *env-def + rc: 0 + out: "" + err: "" + - command: [/testbin/pcs, property, config, maintenance-mode] + environ: *env-def + rc: 0 + out: 'maintenance-mode=true' + err: "" + - id: test_maintenance_minimal_input_initial_offline + input: + state: maintenance + output: + failed: true + msg: "pcs failed with error (rc=1): Error: unable to get cib" + mocks: + run_command: + - command: [/testbin/pcs, property, config, maintenance-mode] + environ: *env-def + rc: 1 + out: "" + err: "Error: unable to get cib" + - command: [/testbin/pcs, property, set, maintenance-mode=true] + environ: *env-def + rc: 1 + out: "" + err: "Error: unable to get cib" + - id: test_maintenance_minimal_input_initial_maintenance + input: + state: maintenance + output: + changed: false + previous_value: 'maintenance-mode=true' + value: 'maintenance-mode=true' + mocks: + run_command: + - command: [/testbin/pcs, property, config, maintenance-mode] + environ: *env-def + rc: 0 + out: 'maintenance-mode=true' + err: "" + - command: [/testbin/pcs, property, set, maintenance-mode=true] + environ: *env-def + rc: 0 + out: "" + err: "" + - command: [/testbin/pcs, property, config, maintenance-mode] + environ: *env-def + rc: 0 + out: 'maintenance-mode=true' + err: "" + - id: test_cleanup_minimal_input_initial_resources_not_exist + input: + state: cleanup + output: + changed: false + previous_value: "NO resources configured" + value: "NO resources configured" + mocks: + run_command: + - command: [/testbin/pcs, resource, status] + environ: *env-def + rc: 0 + out: "NO resources configured" + err: "" + - command: [/testbin/pcs, resource, cleanup] + environ: *env-def + rc: 0 + out: "Cleaned up all resources on all nodes" + err: "" + - command: [/testbin/pcs, resource, status] + environ: *env-def + rc: 0 + out: "NO resources configured" + err: "" + - id: test_cleanup_minimal_input_initial_resources_exists + input: + state: cleanup + output: + changed: true + previous_value: " * virtual-ip\t(ocf:heartbeat:IPAddr2):\t Started" + value: "NO resources configured" + mocks: + run_command: + - command: [/testbin/pcs, resource, status] + environ: *env-def + rc: 0 + out: " * virtual-ip\t(ocf:heartbeat:IPAddr2):\t Started" + err: "" + - command: [/testbin/pcs, resource, cleanup] + environ: *env-def + rc: 0 + out: "Cleaned up all resources on all nodes" + err: "" + - command: [/testbin/pcs, resource, status] + environ: *env-def + rc: 0 + out: "NO resources configured" + err: "" + - id: test_cleanup_specific_minimal_input_initial_resources_exists + input: + state: cleanup + name: virtual-ip + output: + changed: true + previous_value: " * virtual-ip\t(ocf:heartbeat:IPAddr2):\t Started" + value: "NO resources configured" + mocks: + run_command: + - command: [/testbin/pcs, resource, status, virtual-ip] + environ: *env-def + rc: 0 + out: " * virtual-ip\t(ocf:heartbeat:IPAddr2):\t Started" + err: "" + - command: [/testbin/pcs, resource, cleanup, virtual-ip] + environ: *env-def + rc: 0 + out: "Cleaned up virtual-ip on X" + err: "" + - command: [/testbin/pcs, resource, status, virtual-ip] + environ: *env-def + rc: 0 + out: "NO resources configured" + err: "" diff --git a/tests/unit/plugins/modules/test_pacemaker_resource.yaml b/tests/unit/plugins/modules/test_pacemaker_resource.yaml index 7d4b4b2855..76679d14d9 100644 --- a/tests/unit/plugins/modules/test_pacemaker_resource.yaml +++ b/tests/unit/plugins/modules/test_pacemaker_resource.yaml @@ -51,6 +51,63 @@ test_cases: rc: 0 out: " * virtual-ip\t(ocf:heartbeat:IPAddr2):\t Started" err: "" + - id: test_present_filled_input_resource_not_exist + input: + state: present + name: virtual-ip + resource_type: + resource_name: IPaddr2 + resource_option: + - "ip=[192.168.2.1]" + resource_operation: + - operation_action: start + operation_option: + - timeout=1200 + - operation_action: stop + operation_option: + - timeout=1200 + - operation_action: monitor + operation_option: + - timeout=1200 + resource_meta: + - test_meta1=123 + - test_meta2=456 + resource_argument: + argument_action: group + argument_option: + - test_group + wait: 200 + output: + changed: true + previous_value: null + value: " * virtual-ip\t(ocf:heartbeat:IPAddr2):\t Started" + mocks: + run_command: + - command: [/testbin/pcs, resource, status, virtual-ip] + environ: *env-def + rc: 1 + out: "" + err: "Error: resource or tag id 'virtual-ip' not found" + - command: [/testbin/pcs, property, config] + environ: *env-def + rc: 1 + out: | + Cluster Properties: cib-bootstrap-options + cluster-infrastructure=corosync + cluster-name=hacluster + dc-version=2.1.9-1.fc41-7188dbf + have-watchdog=false + err: "" + - command: [/testbin/pcs, resource, create, virtual-ip, IPaddr2, "ip=[192.168.2.1]", op, start, timeout=1200, op, stop, timeout=1200, op, monitor, timeout=1200, meta, test_meta1=123, meta, test_meta2=456, --group, test_group, --wait=200] + environ: *env-def + rc: 0 + out: "Assumed agent name 'ocf:heartbeat:IPaddr2' (deduced from 'IPAddr2')" + err: "" + - command: [/testbin/pcs, resource, status, virtual-ip] + environ: *env-def + rc: 0 + out: " * virtual-ip\t(ocf:heartbeat:IPAddr2):\t Started" + err: "" - id: test_present_minimal_input_resource_exists input: state: present diff --git a/tests/unit/plugins/modules/test_slack.py b/tests/unit/plugins/modules/test_slack.py index e656ab902f..e0c87f907f 100644 --- a/tests/unit/plugins/modules/test_slack.py +++ b/tests/unit/plugins/modules/test_slack.py @@ -103,6 +103,22 @@ class TestSlackModule(ModuleTestCase): self.assertTrue(fetch_url_mock.call_count, 1) self.assertEqual(fetch_url_mock.call_args[1]['url'], "https://slack.com/api/chat.postMessage") + def test_govslack_message(self): + with set_module_args({ + 'token': 'xoxa-123456789abcdef', + 'domain': 'slack-gov.com', + 'msg': 'test with ts' + }): + with patch.object(slack, "fetch_url") as fetch_url_mock: + mock_response = Mock() + mock_response.read.return_value = '{"fake":"data"}' + fetch_url_mock.return_value = (mock_response, {"status": 200}) + with self.assertRaises(AnsibleExitJson): + self.module.main() + + self.assertTrue(fetch_url_mock.call_count, 1) + self.assertEqual(fetch_url_mock.call_args[1]['url'], "https://slack-gov.com/api/chat.postMessage") + def test_edit_message(self): with set_module_args({ 'token': 'xoxa-123456789abcdef',