Compare commits

..

434 Commits

Author SHA1 Message Date
Felix Fontein
026a54a634 Remove CI. 2023-11-01 12:54:18 +01:00
Felix Fontein
6b8698a402 Release 5.8.10. 2023-11-01 08:37:18 +01:00
Felix Fontein
225818b1d4 Prepare final 5.8.10 release. 2023-10-30 22:58:27 +01:00
patchback[bot]
02cd2e9252 [PR #7446/8055dd1c backport][stable-5] Revert "Disable ansible_galaxy_install tests until Galaxy is fixed (#7440)" (#7447)
Revert "Disable ansible_galaxy_install tests until Galaxy is fixed (#7440)" (#7446)

This reverts commit f7532c7d9d.

(cherry picked from commit 8055dd1c9b)

Co-authored-by: Felix Fontein <felix@fontein.de>
2023-10-29 20:57:44 +01:00
patchback[bot]
f6edbe1f98 [PR #7440/f7532c7d backport][stable-5] Disable ansible_galaxy_install tests until Galaxy is fixed (#7441)
Disable ansible_galaxy_install tests until Galaxy is fixed (#7440)

Disable ansible_galaxy_install tests until Galaxy is fixed.

(cherry picked from commit f7532c7d9d)

Co-authored-by: Felix Fontein <felix@fontein.de>
2023-10-29 09:58:21 +01:00
patchback[bot]
973da9670f [PR #7385/91fdc8e0 backport][stable-5] Skip odbc tests on Python 2.6 and CentOS 7 (#7386)
Skip odbc tests on Python 2.6 and CentOS 7 (#7385)

Skip odbc tests on Python 2.6 and CentOS 7.

(cherry picked from commit 91fdc8e06a)

Co-authored-by: Felix Fontein <felix@fontein.de>
2023-10-11 15:58:17 +02:00
patchback[bot]
e5a5e5a3ff [PR #7334/92d7bd68 backport][stable-5] Fix Galaxy URLs (#7335)
Fix Galaxy URLs (#7334)

Fix Galaxy URLs.

(cherry picked from commit 92d7bd68e9)

Co-authored-by: Felix Fontein <felix@fontein.de>
2023-09-30 21:20:49 +02:00
patchback[bot]
7279ea33dd [PR #7309/522fb23e backport][stable-5] xinetd no longer exists; use mdadm instead (#7311)
xinetd no longer exists; use mdadm instead (#7309)

xinetd no longer exists; use mdadm instead.

(cherry picked from commit 522fb23e06)

Co-authored-by: Felix Fontein <felix@fontein.de>
2023-09-25 05:51:01 +02:00
Felix Fontein
7b302f1d06 [stable-5] Move stable-2.13 to EOL CI (#7288)
Move stable-2.13 to EOL CI.
2023-09-19 17:51:44 +02:00
patchback[bot]
46b60dfdca [PR #7172/f3a02b3e backport][stable-5] CI: make sure EXTERNALLY-MANAGED is absent on Arch Linux (#7173)
CI: make sure EXTERNALLY-MANAGED is absent on Arch Linux (#7172)

Make sure EXTERNALLY-MANAGED is absent on Arch.

(cherry picked from commit f3a02b3efb)

Co-authored-by: Felix Fontein <felix@fontein.de>
2023-08-30 06:16:04 +02:00
patchback[bot]
9df16f405b [PR #7103/5e27bbfd backport][stable-5] CI: FreeBSD 13.0 and 12.3 are no longer availabe, bump versions and disable since these versions are already tested with stable-2.15 (#7105)
CI: FreeBSD 13.0 and 12.3 are no longer availabe, bump versions and disable since these versions are already tested with stable-2.15 (#7103)

FreeBSD 13.0 and 12.3 are no longer availabe, bump versions and disable since these versions are already tested with stable-2.15.

(cherry picked from commit 5e27bbfdf6)

Co-authored-by: Felix Fontein <felix@fontein.de>
2023-08-13 20:12:28 +02:00
patchback[bot]
af5920a4f2 [PR #6995/cc5e1b6f backport][stable-5] Skip java_cert and java_keystore tests on RHEL (#6998)
Skip java_cert and java_keystore tests on RHEL (#6995)

Skip java_cert and java_keystore tests on RHEL.

(cherry picked from commit cc5e1b6fe7)

Co-authored-by: Felix Fontein <felix@fontein.de>
2023-07-24 08:27:16 +02:00
Felix Fontein
2295837edf The next release will be 5.8.10. 2023-07-16 16:08:33 +02:00
Felix Fontein
099e17d408 Release 5.8.9. 2023-07-16 15:45:04 +02:00
patchback[bot]
9943c564d5 [PR #6955/8a344ea0 backport][stable-5] 📝 Add missing commas to documentation (#6959)
📝 Add missing commas to documentation (#6955)

(cherry picked from commit 8a344ea036)

Co-authored-by: Dov Benyomin Sohacheski <b@kloud.email>
2023-07-16 14:39:04 +02:00
patchback[bot]
8dd0a14666 [PR #6954/9abdc5a9 backport][stable-5] CI: Stop restricting idna (#6962)
CI: Stop restricting idna (#6954)

Stop restricting idna.

(cherry picked from commit 9abdc5a995)

Co-authored-by: Felix Fontein <felix@fontein.de>
2023-07-16 14:38:46 +02:00
patchback[bot]
35442f9e28 [PR #6874/53c1ed18 backport][stable-5] Temporarily disable pipx tests (#6875)
Temporarily disable pipx tests (#6874)

Temporarily disable pipx tests.

(cherry picked from commit 53c1ed184d)

Co-authored-by: Felix Fontein <felix@fontein.de>
2023-07-07 08:02:31 +02:00
patchback[bot]
9101fb5046 [PR #6804/c4a2801f backport][stable-5] Remove pre-commit config (#6805)
Remove pre-commit config (#6804)

Remove pre-commit config.

(cherry picked from commit c4a2801f99)

Co-authored-by: Felix Fontein <felix@fontein.de>
2023-06-29 05:52:42 +02:00
patchback[bot]
5f968f609b [PR #6775/cfaeed04 backport][stable-5] Bump AZP container (#6776)
Bump AZP container (#6775)

Bump AZP container.

(cherry picked from commit cfaeed0492)

Co-authored-by: Felix Fontein <felix@fontein.de>
2023-06-24 16:29:48 +02:00
patchback[bot]
3ed0a9c141 [PR #6759/f88f4008 backport][stable-5] ipify_facts: skip tests on Python 2.6 (#6760)
ipify_facts: skip tests on Python 2.6 (#6759)

Needs some special requirements on Python 2.6 so that it can contact the server.

These seem to be installed when running all tests. I don't want to figure out what exactly
is missing, so let's just skip the tests on Python 2.6 for now.

(cherry picked from commit f88f40086d)

Co-authored-by: Felix Fontein <felix@fontein.de>
2023-06-21 10:42:45 +02:00
Felix Fontein
7ef0d9371b [stable-5] CI: Remove ansible-core devel tests; should have stopped with stable-2.15 (#6740)
* Remove ansible-core devel tests. Should have stopped with stable-2.15.

* Remove non-existing versions.
2023-06-20 07:15:32 +02:00
patchback[bot]
d053b6a1dc [PR #6629/2cfbcb4e backport][stable-5] CI: ansible-core devel drops support for Python 3.5 (#6632)
CI: ansible-core devel drops support for Python 3.5 (#6629)

ansible-core devel drops support for Python 3.5.

(cherry picked from commit 2cfbcb4efd)

Co-authored-by: Felix Fontein <felix@fontein.de>
2023-06-07 06:59:38 +02:00
patchback[bot]
44e6f3bd97 [PR #6584/a6dd7d78 backport][stable-5] Move ansible-core 2.12 to EOL CI (#6585)
Move ansible-core 2.12 to EOL CI (#6584)

* https://github.com/ansible/ansible/pull/79734 has been merged and backported for all branches but stable-2.10 and stable-2.11.

* Move ansible-core 2.12 to EOL CI.

(cherry picked from commit a6dd7d789b)

Co-authored-by: Felix Fontein <felix@fontein.de>
2023-05-29 18:33:39 +02:00
patchback[bot]
fcf9e08dfa [PR #6578/ab046755 backport][stable-5] CI: restrict to python-nomad < 2.0.0 for Python < 3.7 (#6579)
CI: restrict to python-nomad < 2.0.0 for Python < 3.7 (#6578)

Restrict to python-nomad < 2.0.0 for Python < 3.7.

(cherry picked from commit ab046755bb)

Co-authored-by: Felix Fontein <felix@fontein.de>
2023-05-29 15:56:46 +02:00
Felix Fontein
9b973ce633 [stable-5] Switch to Ansible Galaxy compatible requirements files for tests (#6553)
Switch to Ansible Galaxy compatible requirements files for tests (#6549)

Switch to Ansible Galaxy compatible requirements files for tests.

(cherry picked from commit d643bd5794)
2023-05-21 16:11:27 +02:00
Felix Fontein
0bc29c344d [stable-5] CI: include has finally been removed in ansible-core devel (#6550)
CI: include has finally been removed in ansible-core devel (#6535)

include: → include_tasks:.
(cherry picked from commit ddca52ee15)
2023-05-21 14:40:25 +02:00
patchback[bot]
cc52e194be [PR #6538/08377df7 backport][stable-5] Fix code formatting in documentation of dconf.py (#6541)
Fix code formatting in documentation of dconf.py (#6538)

* Fix code formatting in documentation of dconf.py

* Update plugins/modules/dconf.py

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

* Update plugins/modules/dconf.py

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

---------

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

Co-authored-by: Tamerlan Bimzhanov <bimzhanovt.net@gmail.com>
2023-05-20 14:55:51 +02:00
patchback[bot]
9e112272be [PR #6478/c740f89d backport][stable-5] CI: Add FreeBSD 13.2 (#6507)
CI: Add FreeBSD 13.2 (#6478)

* Add FreeBSD 13.2.

* Skip FreeBSD 13.2 for iso_extract tests.

* Fix autoremove test: m4 is no longer a dependency, or it was already installed beforehand.

* Also disable the jail tests for FreeBSD 13.2.

(cherry picked from commit c740f89df3)

Co-authored-by: Felix Fontein <felix@fontein.de>
2023-05-09 19:48:50 +02:00
Felix Fontein
8361aecf15 Move regular CI runs to 11:00 once per week. 2023-05-08 21:42:41 +02:00
Felix Fontein
ebe214074e Remove stable-4 from CI cron; add stable-7 instead.
(cherry picked from commit 9708561131)
2023-05-08 21:41:41 +02:00
patchback[bot]
8db1ffeb49 [PR #6503/6558c998 backport][stable-5] fix typo in terraform docs (#6505)
fix typo in `terraform` docs (#6503)

fix typo

The [Docs](https://docs.ansible.com/ansible/latest/collections/community/general/terraform_module.html) have a typo in the examples. `camplex_vars` should be spelled `complex_vars`.

Since many people are copy-and-pasting from docs and modify them to their needs this typo is an annoyance for users.

(cherry picked from commit 6558c9981f)

Co-authored-by: Max Juhlke <max.juhlke@gmail.com>
2023-05-08 20:22:13 +02:00
Felix Fontein
4ea6ad08fa Prepare 5.8.9 release. 2023-05-08 06:49:03 +02:00
patchback[bot]
5fb79182e9 [PR #6498/61a0dc43 backport][stable-5] proxmox_kvm: remove non-working example (#6500)
proxmox_kvm: remove non-working example (#6498)

Remove non-working example.

(cherry picked from commit 61a0dc4370)

Co-authored-by: Felix Fontein <felix@fontein.de>
2023-05-07 21:29:48 +02:00
patchback[bot]
01f50d249a [PR #6482/737d37e0 backport][stable-5] CI: Arch Linux now uses Python 3.11 (#6486)
CI: Arch Linux now uses Python 3.11 (#6482)

Arch Linux now uses Python 3.11.

(cherry picked from commit 737d37e019)

Co-authored-by: Felix Fontein <felix@fontein.de>
2023-05-04 08:12:35 +02:00
patchback[bot]
5d3ea0977a [PR #6472/cb81abc6 backport][stable-5] CI: Fix matrix entries (#6473)
CI: Fix matrix entries (#6472)

Fix CI matrix entries.

(cherry picked from commit cb81abc636)

Co-authored-by: Felix Fontein <felix@fontein.de>
2023-05-02 20:43:29 +02:00
patchback[bot]
0c213d76c5 [PR #6442/b4628e27 backport][stable-5] awall: improve docs (#6454)
awall: improve docs (#6442)

* awall: improve docs

* Update plugins/modules/awall.py

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

---------

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

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2023-04-28 15:26:00 +02:00
patchback[bot]
98e0f0b6ff [PR #6447/c58dda14 backport][stable-5] passwordstore plugin: vendor FileLock that was removed from ansible-core devel (#6449)
passwordstore plugin: vendor FileLock that was removed from ansible-core devel (#6447)

Vendor FileLock that was removed from ansible-core devel.

(cherry picked from commit c58dda14c2)

Co-authored-by: Felix Fontein <felix@fontein.de>
2023-04-28 12:17:40 +02:00
patchback[bot]
421b5253f8 [PR #6439/6e913a3b backport][stable-5] dnsimple_info: remove extraneous importorskip from test (#6445)
dnsimple_info: remove extraneous importorskip from test (#6439)

* dnsimple_info: remove extraneous importorskip from test

* remove yet another extraneous importorskip from test

(cherry picked from commit 6e913a3b28)

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2023-04-28 10:20:57 +02:00
Felix Fontein
5e1ff39c8d Next expected release is 5.8.9. 2023-04-24 21:28:49 +02:00
Felix Fontein
a87aa9e360 Release 5.8.8. 2023-04-24 20:55:28 +02:00
Felix Fontein
744c92ae0d Prepare 5.8.8 release. 2023-04-23 22:46:17 +02:00
patchback[bot]
5392e0f1cc [PR #6403/eab39ffc backport][stable-5] iso_customize: fix integration test (#6426)
iso_customize: fix integration test (#6403)

* Fix bad parameters in integration test.

* Remove unrelated thing.

* Simply remove test.

(cherry picked from commit eab39ffc23)

Co-authored-by: Felix Fontein <felix@fontein.de>
2023-04-23 20:59:24 +02:00
patchback[bot]
d64e1e8e64 [PR #6415/f0fcc91a backport][stable-5] zypper_repository: disable failing repository (#6423)
zypper_repository: disable failing repository (#6415)

* Disable failing repository from zypper_repository tests.

* Also disable repo file for >= 15.4.

* Simply disable file test for now.

(cherry picked from commit f0fcc91ac7)

Co-authored-by: Felix Fontein <felix@fontein.de>
2023-04-23 18:50:00 +02:00
patchback[bot]
7d3f6be2a2 [PR #6414/69d7f19c backport][stable-5] Restrict jail tests for sysrc to certain FreeBSD versions (#6420)
Restrict jail tests for sysrc to certain FreeBSD versions (#6414)

Restrict jail tests for sysrc to certain FreeBSD versions.

(cherry picked from commit 69d7f19c74)

Co-authored-by: Felix Fontein <felix@fontein.de>
2023-04-23 18:49:51 +02:00
patchback[bot]
624c5f7b68 [PR #6413/0edc3e82 backport][stable-5] xfs_quota: uninstalling packages breaks tests on Alpine (#6417)
xfs_quota: uninstalling packages breaks tests on Alpine (#6413)

Uninstalling packages breaks tests on Alpine.

(cherry picked from commit 0edc3e820e)

Co-authored-by: Felix Fontein <felix@fontein.de>
2023-04-23 18:49:41 +02:00
patchback[bot]
3db3608335 [PR #6404/e49c6a33 backport][stable-5] ini_file: removing required=true for 'section' option (#6410)
ini_file: removing required=true for 'section' option (#6404)

Fix ini_file by removing required=true for 'section' option.

(cherry picked from commit e49c6a339e)

Co-authored-by: Felix Fontein <felix@fontein.de>
2023-04-23 18:49:29 +02:00
patchback[bot]
af4ac4813e [PR #6401/486c47f9 backport][stable-5] rhsm_release: removing required=true for 'release' option (#6408)
rhsm_release: removing required=true for 'release' option (#6401)

Fix rhsm_release by removing required=true for 'release' option.

(cherry picked from commit 486c47f922)

Co-authored-by: Felix Fontein <felix@fontein.de>
2023-04-23 18:49:18 +02:00
patchback[bot]
5dc60cbc9e [PR #6390/c1b16d53 backport][stable-5] office_365_connector_card: Remove references to dev.outlook.com (#6406)
office_365_connector_card: Remove references to dev.outlook.com (#6390)

* office_365_connector_card: Remove references to dev.outlook.com

Remove references to the deprecated dev.outlook.com and update them to the relevant learn.microsoft.com links.

Closed #6262

* Fix PEP 8 line length issue

* Apply suggestions from PR review

* Update plugins/modules/office_365_connector_card.py

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

---------

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

Co-authored-by: Marc Sensenich <marc-sensenich@users.noreply.github.com>
2023-04-23 16:50:32 +02:00
patchback[bot]
8f6ea3de8e [PR #6370/484f642c backport][stable-5] Redfish iDRAC: Allow for specifying an exact manager with 'resource_id' for CreateBiosConfigJob (#6379)
Redfish iDRAC: Allow for specifying an exact manager with 'resource_id' for CreateBiosConfigJob (#6370)

Allow for specifying an exact manager with 'resource_id' for CreateBiosConfigJob

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

Co-authored-by: Mike Raineri <michael.raineri@dell.com>
2023-04-20 07:50:45 +02:00
patchback[bot]
e4765f2e2b [PR #6289/6e0bc4f4 backport][stable-5] Remove --app by flatpak check if already installed (ansible-collectio… (#6371)
Remove --app by flatpak check if already installed (ansible-collectio… (#6289)

* Remove --app by flatpak check if already installed (ansible-collections#6265)

* Add Changelogfragment

* Fix syntax

* Update changelogs/fragments/6289-bugfix-flatpak-check-if-already-installed.yml

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

---------

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

Co-authored-by: Svenum <43136984+Svenum@users.noreply.github.com>
2023-04-20 06:34:26 +02:00
patchback[bot]
a91255824e [PR #6286/76dd465e backport][stable-5] icinga2_host: make use of templates and template vars (#6374)
icinga2_host: make use of templates and template vars (#6286)

* icinga2_host: make use of templates, append vars instead of replacing all vars array.

* Initialize `template` variable. Add changelog fragment.

* Update changelogs/fragments/6286-icinga2_host-template-and-template-vars.yml

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

---------

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

Co-authored-by: yoannlr <32494673+yoannlr@users.noreply.github.com>
2023-04-20 06:34:03 +02:00
patchback[bot]
e60daa8509 [PR #6337/67b921e4 backport][stable-5] parted: add integration test (#6347)
* parted: add integration test (#6337)

* parted: add integration test

* Update tests/integration/targets/parted/aliases

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

* adjusted for Alpine

---------

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

* Target azp/posix/vm does not exist in stable-5.

---------

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
Co-authored-by: Felix Fontein <felix@fontein.de>
2023-04-16 22:33:20 +02:00
patchback[bot]
fd2528dc3c [PR #6345/ee11847c backport][stable-5] Do extra docs validation; explicitly disallow semantic markup in docs (#6349)
Do extra docs validation; explicitly disallow semantic markup in docs (#6345)

* Do extra docs validation. Explicitly disallow semantic markup in docs.

* Forgot to add new requirement.

* Fix prefixes.

* Remove superfluous condition.

* TEMP - make CI fail.

* Revert "TEMP - make CI fail."

This reverts commit 14f4d6b503.

* Remove unnecessary import.

* Make sure ANSIBLE_COLLECTIONS_PATH is set.

* Make sure sanity tests from older Ansible versions don't complain.

(cherry picked from commit ee11847c7e)

Co-authored-by: Felix Fontein <felix@fontein.de>
2023-04-16 19:29:33 +02:00
patchback[bot]
72b282fe85 [PR #6274/14b19afc backport][stable-5] archive: Generate crc32 over 16MiB chunks (#6325)
archive: Generate crc32 over 16MiB chunks (#6274)

* archive: Generate crc32 over 16MiB chunks

Running crc32 over the whole content of the compressed file potentially
requires a lot of RAM. The crc32 function in zlib allows for calculating
the checksum in chunks. This changes the code to calculate the checksum
over 16 MiB chunks instead. 16 MiB is the value also used by
shutil.copyfileobj().

* Update changelogs/fragments/6199-archive-generate-checksum-in-chunks.yml

Change the type of change to bugfix

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

* Update changelogs/fragments/6199-archive-generate-checksum-in-chunks.yml

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

---------

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

Co-authored-by: Nils Meyer <nils@nm.cx>
2023-04-13 05:09:24 +00:00
patchback[bot]
cb49b96b4d [PR #6313/aa77a88f backport][stable-5] pkgng: skip jail tests also on FreeBSD 12.3 (#6314)
pkgng: skip jail tests also on FreeBSD 12.3 (#6313)

Skip jail tests also on FreeBSD 12.3.

(cherry picked from commit aa77a88f4b)

Co-authored-by: Felix Fontein <felix@fontein.de>
2023-04-10 21:30:56 +02:00
patchback[bot]
2aca1a910c [PR #6307/28bdf1ed backport][stable-5] xfs_quota: fix integration tests for Alpine Linux (#6309)
xfs_quota: fix integration tests for Alpine Linux (#6307)

* xfs_quota: fix integration tests for Alpine Linux

* remove skip/alpine

(cherry picked from commit 28bdf1ed74)

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2023-04-10 07:26:34 +00:00
patchback[bot]
c44f07a405 [PR #6304/08f14f3e backport][stable-5] pids tests: 'some-' is not that a unique pattern. (#6305)
pids tests: 'some-' is not that a unique pattern. (#6304)

* 'some-' is not that a unique pattern.

* Add debugging help.

* Avoid passing the name as a parameter to obtainpid.sh.

(cherry picked from commit 08f14f3eb0)

Co-authored-by: Felix Fontein <felix@fontein.de>
2023-04-09 15:10:14 +02:00
patchback[bot]
e113c8cf11 [PR #6299/37cddb8c backport][stable-5] snap: enable ubuntu in integration tests (#6301)
snap: enable ubuntu in integration tests (#6299)

enable ubuntu in integration tests for snap

(cherry picked from commit 37cddb8c02)

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2023-04-08 17:28:46 +00:00
Felix Fontein
552e1e826c [stable-5] Update CI matrix: add stable-2.15 (#6287)
Update CI matrix: add stable-2.15 (#6284)

* Add ignore files for bumped devel version.

* Update CI matrix.

(cherry picked from commit 7d19eca8bf)
2023-04-04 13:02:03 +02:00
Felix Fontein
516107aaf6 Next release will be 5.8.8. 2023-03-27 21:59:42 +02:00
Felix Fontein
fb7797702a Release 5.8.7. 2023-03-27 21:36:59 +02:00
patchback[bot]
21478e3be0 [PR #5815/5e1e8d06 backport][stable-5] ldap_entry documentation is lacking examples (#6254)
ldap_entry documentation is lacking examples (#5815)

* Add changelog fragment

* Add documentation for possible values of LDAP entry attributes

* Add PR information

* Update plugins/modules/ldap_entry.py

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

* remove changlog

* Update docstring

* Align ldap_attrs doc to ldap_entry module

* Update plugins/modules/ldap_attrs.py

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

* Change formulations.

---------

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit 5e1e8d06ef)

Co-authored-by: Cédric Servais <cedric.servais@outlook.com>
2023-03-27 19:20:52 +00:00
patchback[bot]
3e6974815f [PR #6227/cd706454 backport][stable-5] Fixed XenOrchestra inventory plugin failing due to not checking response ID. (#6244)
Fixed XenOrchestra inventory plugin failing due to not checking response ID. (#6227)

* Added call method to select proper response from xo server

* Added changelog fragment

* Removed excess blank lines

* Moved period in changelog fragment

* Made suggested changes

* Remove f-strings for Python 2.7 compatibility

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

---------

Co-authored-by: Linus Kirkwood <lkirkwood@allette.com.au>
Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit cd706454ec)

Co-authored-by: lirkwood <linuskirkwood@gmail.com>
2023-03-26 10:04:00 +02:00
patchback[bot]
737789b1e3 [PR #6106/5ee68704 backport][stable-5] nmcli: fixed idempotency issue with 'may_fail4' when 'method' is 'disabled' (#6240)
nmcli: fixed idempotency issue with 'may_fail4' when 'method' is 'disabled' (#6106)

* nmcli: fixed idempotency issue with 'may_fail4' when 'method' is 'disabled'

* added note to documentation

* updated changelog fragment

* Update changelog fragment.

---------

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

Co-authored-by: Sam Potekhin <heaveaxy@gmail.com>
2023-03-26 09:46:35 +02:00
patchback[bot]
3176c08b5b [PR #6105/81b16a88 backport][stable-5] nmcli: fixed idempotency issue when config bridge connection (#6242)
nmcli: fixed idempotency issue when config bridge connection (#6105)

* nmcli: fixed idempotency issue when config bridge connection

* Update changelog fragment.

---------

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

Co-authored-by: Sam Potekhin <heaveaxy@gmail.com>
2023-03-26 09:46:23 +02:00
Felix Fontein
40e0379112 Prepare 5.8.7 release. 2023-03-23 21:33:35 +01:00
patchback[bot]
e3a12f1e54 [PR #6111/3fb1ff0b backport][stable-5] Fix influxdb_user grants in check mode (#6213)
Fix influxdb_user grants in check mode (#6111)

* Fix influxdb_user grants in check mode

When running in check mode, `influxdb_user` will return error when the user doesn't exist yet, instead of reporting `changed` state.

* Update changelogs/fragments/6111-influxdb_user-check-mode.yaml

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

---------

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

Co-authored-by: Petr Tichý <petr@pex.com>
2023-03-22 13:16:09 +01:00
patchback[bot]
3e740112a0 [PR #6180/f66cc7c9 backport][stable-5] Replace deprecated error with BadZipFile (#6215)
Replace deprecated error with BadZipFile (#6180)

* Replace deprecated error with BadZipFile

* Use imported BadZipFile

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

* Add news fragment

* Update new fragment

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

---------

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

Co-authored-by: Hugo van Kemenade <hugovk@users.noreply.github.com>
2023-03-22 13:15:55 +01:00
Felix Fontein
8ce81d24f2 [stable-5] Interfaces file spaces fix (#6170)
Interfaces file spaces fix (#6131)

* interfaces_file: added test case for #6120

* interfaces_file: reverted code to #fafabed

* interfaces_file: added changelog fragment

* interfaces_file: added missing licenses

* interfaces_file: improved test coverage

* interfaces_file: fixed retrieving option values

* Update plugins/modules/interfaces_file.py

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

* Update plugins/modules/interfaces_file.py

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

* Update tests/unit/plugins/modules/interfaces_file/test_interfaces_file.py

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

* Update plugins/modules/interfaces_file.py

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

* Update plugins/modules/interfaces_file.py

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

* Update plugins/modules/interfaces_file.py

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

* Update plugins/modules/interfaces_file.py

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

* Update plugins/modules/interfaces_file.py

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

* Update plugins/modules/interfaces_file.py

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

* Update tests/unit/plugins/modules/interfaces_file/test_interfaces_file.py

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

* interfaces_file: spacing fix

---------

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

Co-authored-by: Roman Belyakovsky <roman.beliakovskii@smartly.io>
2023-03-14 22:37:04 +01:00
patchback[bot]
ba7f680486 [PR #6175/1ddcdc63 backport][stable-5] Mark monit integration tests as unstable (#6177)
Mark monit integration tests as unstable (#6175)

Mark monit integration tests as unstable.

(cherry picked from commit 1ddcdc63ff)

Co-authored-by: Felix Fontein <felix@fontein.de>
2023-03-12 12:06:30 +00:00
patchback[bot]
637eb8a275 [PR #6166/6b8a1cd8 backport][stable-5] Add macOS 13.2 to CI (#6167)
Add macOS 13.2 to CI (#6166)

Add macOS 13.2 to CI.

(cherry picked from commit 6b8a1cd8e6)

Co-authored-by: Felix Fontein <felix@fontein.de>
2023-03-09 06:42:29 +01:00
patchback[bot]
7e608db3e5 [PR #6161/6d003ca7 backport][stable-5] [make] Improve module doc (#6162)
[make] Improve module doc (#6161)

This change reorder the parameters so that we get the mandatory one at
the top, then alphabetically order the other bellow.

It also adds the returned values.

(cherry picked from commit 6d003ca7fc)

Co-authored-by: Cédric Jeanneret <39397510+cjeanner@users.noreply.github.com>
2023-03-08 15:19:51 +01:00
patchback[bot]
afb16dc0a2 [PR #6114/6cf67448 backport][stable-5] memset*.py: Fixed URLError handling (#6156)
memset*.py: Fixed URLError handling (#6114)

* memset.py: Added URLError exception and stderr to Response() object

* memset_*.py: Check response.status_code and response.stderr

* Added changelog fragment

* memset.py: Fixed pep8

* Renamed changelog fragment with .yml file extension

(cherry picked from commit 6cf674485f)

Co-authored-by: Daniel Patrick <dani.p1991@gmail.com>
2023-03-08 13:58:36 +01:00
patchback[bot]
6d03887c55 [PR #6104/2dee3464 backport][stable-5] nmcli: fixed inability to change mtu on vlan connection (#6139)
nmcli: fixed inability to change mtu on vlan connection (#6104)

* tests updated

Co-authored-by: Sam Potekhin <heaveaxy@gmail.com>
(cherry picked from commit 2dee3464dd)

Co-authored-by: Sam Potekhin <24751685+heaveaxy@users.noreply.github.com>
2023-03-04 10:21:54 +01:00
patchback[bot]
f2d980f75a [PR #6118/9a97bc7c backport][stable-5] Add 'inventory_hostname' to the jail plugin documentation (#6136)
Add 'inventory_hostname' to the jail plugin documentation (#6118)

This fixes the following warning on FreeBSD:

  [WARNING]: The "jail" connection plugin has an improperly configured
  remote target value, forcing "inventory_hostname" templated value
  instead of the string

(cherry picked from commit 9a97bc7c11)

Co-authored-by: Giacomo Olgeni <olgeni@olgeni.com>
2023-03-03 23:09:49 +01:00
patchback[bot]
d0b27d68e2 [PR #6121/c0cb7958 backport][stable-5] Documentation: yum_versionlock typo fix (#6125)
Documentation: yum_versionlock typo fix (#6121)

##### SUMMARY
Fixing typo in documentation, we need to use name parameter instead of package.

##### ISSUE TYPE
- Docs Pull Request

+label: docsite_pr

(cherry picked from commit c0cb7958cb)

Co-authored-by: AnatomicJC <github@open-web.fr>
2023-03-02 20:16:09 +01:00
Felix Fontein
70747b0db8 Next release will be 5.8.7. 2023-02-26 18:47:14 +01:00
Felix Fontein
c9728c2869 Release 5.8.6. 2023-02-26 18:13:21 +01:00
Felix Fontein
adced191b0 Fix changelog fragment type.
(cherry picked from commit 681fad92c2)
2023-02-26 16:20:17 +01:00
patchback[bot]
adda78b162 [PR #5972/094dc6b6 backport][stable-5] cloudflare_dns: Fix setting SRV records with a root level entry (#6096)
cloudflare_dns: Fix setting SRV records with a root level entry (#5972)

* cloudflare_dns: Fix setting SRV records with a root level entry

* cloudflare_dns: Remove the part which deletes the zone from the SRV record name

The cloudflare API accepts the record name + zone name to be sent. Removing that, will guarantee the module to be idempotent even though that line was added ~7 years ago for that specific reason: 7477fe5141

It seems the most logical explanition is that Cloudflare changed their API response somewhere over the last 7 years.

* cloudflare_dns: Update the changelog fragment

(cherry picked from commit 094dc6b69c)

Co-authored-by: Roy Lenferink <lenferinkroy@gmail.com>
2023-02-26 14:13:47 +01:00
patchback[bot]
5e010994d9 [PR #6072/3db0fcf1 backport][stable-5] Adding jyundt to Redfish maintainers (#6093)
Adding jyundt to Redfish maintainers (#6072)

(cherry picked from commit 3db0fcf1bd)

Co-authored-by: Mike Raineri <michael.raineri@dell.com>
2023-02-25 16:01:35 +01:00
patchback[bot]
51bf8ed298 [PR #6074/b6492911 backport][stable-5] stop passing loader/dataloader since it has been deprecated by ansible (#6091)
stop passing loader/dataloader since it has been deprecated by ansible (#6074)

* stop passing loader/dataloader since it has been deprecated by ansible

Signed-off-by: Martin Schurz <Martin.Schurz@t-systems.com>

* add changelog fragment

Signed-off-by: Martin Schurz <Martin.Schurz@t-systems.com>

* explicitly pass None to keep compatibility to older Ansible versions

Signed-off-by: Martin Schurz <Martin.Schurz@t-systems.com>

* use try/except to keep things compatible

Signed-off-by: Martin Schurz <Martin.Schurz@t-systems.com>

* Update plugins/lookup/cartesian.py

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

* Update plugins/lookup/flattened.py

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

* Update plugins/lookup/flattened.py

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

* Update plugins/lookup/cartesian.py

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

* Update changelogs/fragments/6074-loader_in_listify.yml.yml

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

---------

Signed-off-by: Martin Schurz <Martin.Schurz@t-systems.com>
Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit b64929118e)

Co-authored-by: schurzi <github@drachen-server.de>
2023-02-25 15:39:43 +01:00
patchback[bot]
c3b1a3a873 [PR #5994/1877ef15 backport][stable-5] github_webhook: Don't include secret in the config if it's absent (#6087)
github_webhook: Don't include secret in the config if it's absent (#5994)

* github_webhook: Don't include secret in the config if it's absent

* Add changelogs

* Fix indentation

* Apply suggestion to simplify the check

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

---------

Co-authored-by: dima1206 <–32818228+dima1206@users.noreply.github.com>
Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit 1877ef1510)

Co-authored-by: dima1206 <32818228+dima1206@users.noreply.github.com>
2023-02-25 11:56:00 +01:00
patchback[bot]
5da6dc7d72 [PR #5943/53f72973 backport][stable-5] zfs_delegate_admin: fix: zfs allow cannot parse unknown uid/gid (#6085)
zfs_delegate_admin: fix: zfs allow cannot parse unknown uid/gid (#5943)

When setting allow permissions for particular users or groups
there will be circumstances when that user is not known to the
host system.

In that case the output of `zfs allow <pool/dataset>`
looks similar to this:

  $ sudo zfs allow tank/test
  ---- Permissions on tank/test ---------------------------------------
  Local+Descendent permissions:
    user (unknown: 1002) hold
    user zfsuser receive

The fix in this commit removes ' (unknown: '+')' from the output
leaving only the uid/gid.

This allows the current parser to continue even if the uid/gid
is not known.

This situation occurs most often when moving a zpool from one system
to another that may not have the same users/groups. Simply adding
permissions to a user/group and then deleting the user/group
from the system will cause this situation to occur.

(cherry picked from commit 53f729730b)

Co-authored-by: Phil Kauffman <philip@kauffman.me>
2023-02-25 11:48:29 +01:00
patchback[bot]
d96600d4de [PR #6034/f0529dcb backport][stable-5] lxd plugins and modules: fix TLS/SSL context creation (#6083)
lxd plugins and modules: fix TLS/SSL context creation (#6034)

Use correct purpose.

(cherry picked from commit f0529dcb0e)

Co-authored-by: Felix Fontein <felix@fontein.de>
2023-02-25 11:41:40 +01:00
patchback[bot]
1f5703d0af [PR #6048/682c6fc9 backport][stable-5] nmcli: Treat order as significant when comparing address lists (#6081)
nmcli: Treat order as significant when comparing address lists (#6048)

* nmcli: Treat order as significant when comparing address lists

Don't sort the old and new values for ipv4.addresses and
ipv6.addresses before comparing them, because order matters in these
parameters: the first address specified is the default source address
for outbound connections.

* Changelog fragment for #6048

* Update changelogs/fragments/6048-nmcli-addres-order.yml

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

---------

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

Co-authored-by: Jonathan Kamens <jik@kamens.us>
2023-02-25 11:29:41 +01:00
patchback[bot]
170a099101 [PR #5998/2c762c47 backport][stable-5] Added support for openSUSE MicroOS (#6077)
Added support for openSUSE MicroOS (#5998)

* fix(zypper): Added condition to check for transactional-update binary to support microos

closes #5615

* style(changelog): Made zypper-change uppercase

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

* fix(zypper): Removed check for /var/lib/misc/transactional-update.state

* feat(zypper): Aligned transactional-update checks with zypper's

* refactor(zypper): Removed dependency to psutil and made use of parsing /proc/mount

* refactor(zypper): Removed need for regex, plus small refactoring

---------

Co-authored-by: André Dörscheln <ad@itesign.de>
Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit 2c762c4753)

Co-authored-by: andre161292 <andre161292@users.noreply.github.com>
2023-02-25 11:23:20 +01:00
Felix Fontein
04df03f365 [stable-5] Run tests with EOL ansible-core versions in GHA (#6070)
* Run tests with EOL ansible-core versions in GHA (#6044)

Run tests with EOL ansible-core versions in GHA.

(cherry picked from commit b72b7d4936)

* Re-schedule cron.
2023-02-24 12:52:03 +01:00
patchback[bot]
76f9bc5b69 [PR #5431/490899f8 backport][stable-5] nmcli: two fixes needed to make wifi.wake-on-wlan settings work properly (#6050)
nmcli: two fixes needed to make wifi.wake-on-wlan settings work properly (#5431)

* nmcli: Convert current value of wifi.wake-on-wlan before comparing

The new value of wifi.wake-on-wlan is specified as an integer, but in
the nmcli output it's specified as a hex string followed by a textual
description of it. Therefore, to determine properly whether it's being
changed we need to pull the hex string out of the current value,
convert it into an integer, and finally convert the integer back to a
string so that we can compare it to the new specified value. Without
this change, whenever wifi.wake-on-wlan is specified in the module
arguments the module will think the value is being changed even when
it isn't.

* nmcli: Handle wifi options correctly when connection type not specified

When an nmcli task does not specify the connection type and the module
ask nmcli for it, the module needs to convert nmcli's
`802-11-wireless` to `wifi`, the term for this connection type used by
the module.

* nmcli: Correctly detect values changed to the integer 0

If the user specifies a value of 0 (without quotes) in a task, we
should interpret that as an actual value, not empty, when comparing
the new value to the old one. Otherwise we incorrectly conclude that
there was no change.

* Changelog fragment for #5431

(cherry picked from commit 490899f87f)

Co-authored-by: Jonathan Kamens <jik@kamens.us>
2023-02-24 09:29:46 +01:00
patchback[bot]
f9fdf816eb [PR #6031/e348d285 backport][stable-5] Re-enable Arch Linux tests (#6039)
Re-enable Arch Linux tests (#6031)

Revert "Disable Arch Linux tests for now (#6013)"

This reverts commit 1b2c2af9a8.

(cherry picked from commit e348d28559)

Co-authored-by: Felix Fontein <felix@fontein.de>
2023-02-22 22:39:47 +01:00
patchback[bot]
7ff20a5e98 [PR #5934/78297e44 backport][stable-5] Fix keycloak sanitize_cr (#6035)
Fix keycloak sanitize_cr (#5934)

* Fix keycloak sanitize_cr

* Update changelogs/fragments/5934-fix-keycloak-sanitize_cr.yml

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

---------

Co-authored-by: Claude Dioudonnat <claude.dioudonnat@be-ys.cloud>
Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit 78297e44b7)

Co-authored-by: Claude Dioudonnat <claude@dioudonnat.fr>
2023-02-22 15:20:15 +01:00
patchback[bot]
865a8e9961 [PR #6013/1b2c2af9 backport][stable-5] Disable Arch Linux tests for now (#6015)
Disable Arch Linux tests for now (#6013)

Disable Arch Linux tests for now until https://github.com/ansible-community/images/pull/40 and https://github.com/systemd/systemd/issues/26474 are resolved.

(cherry picked from commit 1b2c2af9a8)

Co-authored-by: Felix Fontein <felix@fontein.de>
2023-02-18 22:08:15 +01:00
patchback[bot]
f61a6bd991 [PR #5989/cd0a414e backport][stable-5] Update gitlab_project_members.py - typo fix (#5990)
Update gitlab_project_members.py - typo fix (#5989)

Update gitlab_project_members.py

##### SUMMARY

typo fix

##### ISSUE TYPE
- Docs Pull Request

+label: docsite_pr

(cherry picked from commit cd0a414e9f)

Co-authored-by: cybernet <cybernet2u@yahoo.com>
2023-02-13 22:07:05 +01:00
patchback[bot]
f4bae2d717 [PR #5981/68d0cac3 backport][stable-5] Ignore more unnecessary import warnings (#5982)
Ignore more unnecessary import warnings (#5981)

Fix imports.

(cherry picked from commit 68d0cac310)

Co-authored-by: Felix Fontein <felix@fontein.de>
2023-02-12 22:15:46 +01:00
Felix Fontein
66e3c19a57 [stalbe-5] Remove unnecessary test imports (#5980)
Remove unnecessary test imports (#5978)

Remove unnecessary test imports.

(cherry picked from commit 9f87989e7f)
2023-02-12 21:32:49 +01:00
Felix Fontein
24210b32cf [stable-5] Remove unneccessary imports (#5977)
* Remove unneccessary imports (#5940)

* Remove unneccessary imports.

* Keep unnecessary imports in module_utils - for now.

* Make older sanity tests shut up.

* Also make flake8 happier.

(cherry picked from commit 2b8ac3c629)

* Re-add os import.
2023-02-12 20:22:36 +01:00
Felix Fontein
6932a937c5 [stable-5] Fix pylint errors (#5938)
Fix pylint errors (#5933)

* Fix pylint errors.

* Also adjust to https://github.com/ansible/ansible/pull/79909.

(cherry picked from commit b1d9507cd2)
2023-02-04 17:28:15 +01:00
Felix Fontein
a467da2f39 Next expected release will be 5.8.6. 2023-01-31 07:42:13 +01:00
Felix Fontein
7c76d92ed0 Release 5.8.5. 2023-01-31 07:15:46 +01:00
Felix Fontein
74c7cee446 Fix changelog fragment types.
(cherry picked from commit 84dbb286eb)
2023-01-31 07:15:24 +01:00
patchback[bot]
7b532be10d [PR #5903/ea5cbe25 backport][stable-5] Redfish: Removed basic auth header when performing a GET on the service root and POST to the session collection (#5923)
Redfish: Removed basic auth header when performing a GET on the service root and POST to the session collection (#5903)

* Redfish: Removed basic auth header when performing a GET on the service root and POST to the session collection

* Update changelogs/fragments/5886-redfish-correct-basic-auth-usage-on-session-creation.yml

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

---------

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

Co-authored-by: Mike Raineri <mraineri@gmail.com>
2023-01-30 21:17:01 +01:00
patchback[bot]
38616e43f9 [PR #5914/3da24d50 backport][stable-5] dig lookup: fix DNSKEY's algorithm handling (#5915)
dig lookup: fix DNSKEY's algorithm handling (#5914)

Fix DNSKEY's algorithm handling.

(cherry picked from commit 3da24d50cd)

Co-authored-by: Felix Fontein <felix@fontein.de>
2023-01-29 18:37:21 +01:00
patchback[bot]
dfac632d25 [PR #5888/855cbd67 backport][stable-5] Update gitlab_deploy_key.py (#5895)
Update gitlab_deploy_key.py (#5888)

* Update gitlab_deploy_key.py

Change key title on key update

* Create 5888-update-key-title

Add changelog fragment for key title change

* Update changelogs/fragments/5888-update-key-title

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

* Rename 5888-update-key-title to 5888-update-key-title.yml

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

Co-authored-by: lapete <github@lapete.de>
2023-01-26 06:23:48 +01:00
patchback[bot]
270754dc10 [PR #5868/098912c2 backport][stable-5] stormssh tests: do not install newer cryptography (#5871)
stormssh tests: do not install newer cryptography (#5868)

Do not install newer cryptography.

ci_complete

(cherry picked from commit 098912c229)

Co-authored-by: Felix Fontein <felix@fontein.de>
2023-01-22 18:16:50 +01:00
patchback[bot]
fef77b3c9c [PR #5811/bf117c83 backport][stable-5] Clarify Error message when bitwarden vault not unlocked (#5877)
Clarify Error message when bitwarden vault not unlocked (#5811)

* Clarify Error message when vault not unlocked

You can be logged into the Bitwarden-CLI, but it can still be locked. This took me several hours to debug, since every time I ran 'bw login' it told me, that I am already logged in.
If you run 'bw unlock' without being logged in, you are prompted to log in.
This clarifies the Error occurring and can drastically reduce debugging time, since you don't have to look into the source code to get an understanding of whats wrong.

* RM: negation

Nobody needs negation

* Update function name

* FIX: tests

* ADD: changelog

* Update changelogs/fragments/5811-clarify-bitwarden-error.yml

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

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

Co-authored-by: Christoph <29735603+Chr1s70ph@users.noreply.github.com>
2023-01-22 17:46:41 +01:00
patchback[bot]
b022b87362 [PR #5750/6781dd19 backport][stable-5] bugfixing keycloak user federation failing when updating default mapper simultaneously (#5875)
bugfixing keycloak user federation failing when updating default mapper simultaneously (#5750)

* fix(modules/keycloak_user_federation): fixes ...

... user federation creation failing when also updating/changing default
mappers at the same time

* add changelog fragment for pr

Co-authored-by: Mirko Wilhelmi <Mirko.Wilhelmi@sma.de>
(cherry picked from commit 6781dd1918)

Co-authored-by: morco <thegreatwiper@web.de>
2023-01-22 17:44:49 +01:00
patchback[bot]
2c92db98d5 [PR #5732/0ca41ded backport][stable-5] Bugfix/keycloak userfed idempotency (#5873)
Bugfix/keycloak userfed idempotency (#5732)

* fix(modules/keycloak_user_federation): fixes ...

... federation read call not finding already existing federations
properly because of bad parametrisation

* fix(modules/keycloak_user_federation): added ...

... new integration test for module idempotency bugfix

* added changelog fragment for pr

Co-authored-by: Mirko Wilhelmi <Mirko.Wilhelmi@sma.de>
(cherry picked from commit 0ca41dedce)

Co-authored-by: morco <thegreatwiper@web.de>
2023-01-22 17:44:39 +01:00
patchback[bot]
b66df6932e [PR #5845/1430ed00 backport][stable-5] pipx: add testcase w/ env vars PIPX_xxxx (#5858)
pipx: add testcase w/ env vars PIPX_xxxx (#5845)

* pipx: add testcase w/ env vars PIPX_xxxx

* add note to the docs about env vars

* add note to the docs about env vars

* Apply suggestions from code review

* Update plugins/modules/pipx.py

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

* Update plugins/modules/pipx_info.py

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

* break long lines into smaller ones

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

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2023-01-18 21:43:11 +01:00
Felix Fontein
5060f19a05 Prepare 5.8.5 release. 2023-01-18 08:19:30 +01:00
patchback[bot]
99652cb06d [PR #5818/5ad703ac backport][stable-5] nsupdate: fix zone lookup (#5852)
nsupdate: fix zone lookup (#5818)

The SOA record for an existing zone is returned as an answer RR and not
as an authority RR. It can be returned as an authority RR for subdomains
of a zone.

$ dig -t SOA example.com
;; ANSWER SECTION:
example.com.	3530	IN	SOA	ns.icann.org. noc.dns.icann.org. 2022091184 7200 3600 1209600 3600

$ dig -t SOA www.example.com
;; AUTHORITY SECTION:
example.com.	3600	IN	SOA	ns.icann.org. noc.dns.icann.org. 2022091184 7200 3600 1209600 3600

(cherry picked from commit 5ad703ac64)

Co-authored-by: n0p90 <36303164+n0p90@users.noreply.github.com>
2023-01-17 21:32:08 +01:00
patchback[bot]
6aeeab18c2 [PR #5843/44172dda backport][stable-5] Add -no-color argument to terraform validation (#5846)
Add -no-color argument to terraform validation (#5843)

(cherry picked from commit 44172ddaa6)

Co-authored-by: Kristian Heljas <11139388+kristianheljas@users.noreply.github.com>
2023-01-16 23:11:10 +01:00
patchback[bot]
2a2bfb6c5b [PR #5808/6ec04973 backport][stable-5] xml children module parameter does not exist (#5838)
xml children module parameter does not exist (#5808)

* Add changelog

* Add integration tests

* Rename children to set_children

* Add PR information

* Update changelogs/fragments/5808-xml-children-parameter-does-not-exist.yml

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

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

Co-authored-by: Cédric Servais <cedric.servais@outlook.com>
2023-01-14 18:34:45 +01:00
patchback[bot]
773ab9ba25 [PR #5833/08b0ea70 backport][stable-5] ldap.py: capitalize one letter (#5835)
ldap.py: capitalize one letter (#5833)

(cherry picked from commit 08b0ea700d)

Co-authored-by: bluikko <14869000+bluikko@users.noreply.github.com>
2023-01-14 18:30:16 +01:00
patchback[bot]
4fde0617c8 [PR #5766/317f79ff backport][stable-5] multiple scaleway modules: fixed markups in doc (#5826)
multiple scaleway modules: fixed markups in doc (#5766)

* multiple scaleway modules: fixed markups in doc

* Update plugins/modules/scaleway_ip.py

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

* Update plugins/modules/scaleway_volume.py

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

* Update plugins/modules/scaleway_private_network.py

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

* Update plugins/modules/scaleway_security_group.py

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

* Update plugins/modules/scaleway_security_group_rule.py

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

* Update plugins/modules/scaleway_sshkey.py

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

* further docs adjustments

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

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2023-01-12 21:56:21 +01:00
Felix Fontein
8cc343110f [stable-5] Update CI matrix (#5799)
Update CI matrix (#5782)

* Update CI matrix.

* Disable RHEL 9.1 for tests where RHEL 9.0 was disabled as well.

* Skip iso_extract on FreeBSD 12.4.

* Fix cloud_init_data_facts test for Fedora 37.

* Do not try to install snap on RHEL 9.1.

* Skip pkgng jail tests on FreeBSD 12.4 as well.

(cherry picked from commit 6fb212b104)
2023-01-07 18:17:15 +01:00
patchback[bot]
37feac8f68 [PR #5794/3b73e7ed backport][stable-5] alternatives: make work with Fedora 37 (#5796)
alternatives: make work with Fedora 37 (#5794)

* alternatives in Fedora 37 uses follower instead of slave.

* Add changelog fragment.

(cherry picked from commit 3b73e7ed2a)

Co-authored-by: Felix Fontein <felix@fontein.de>
2023-01-07 16:55:41 +01:00
patchback[bot]
7392a8e52c [PR #5786/759ca9a0 backport][stable-5] Remove currently unneeded generic tests from CI (#5790)
Remove currently unneeded generic tests from CI (#5786)

Remove currently unneeded generic tests from CI.

(cherry picked from commit 759ca9a0ab)

Co-authored-by: Felix Fontein <felix@fontein.de>
2023-01-07 15:24:43 +01:00
patchback[bot]
bfebc93f15 [PR #5785/0ff003d3 backport][stable-5] Fix CI (#5788)
Fix CI (#5785)

Try to fix CI.

(cherry picked from commit 0ff003d312)

Co-authored-by: Felix Fontein <felix@fontein.de>
2023-01-07 15:20:27 +01:00
patchback[bot]
b6e822aad2 [PR #5760/9e3a729d backport][stable-5] Improve callback docs (#5783)
Improve callback docs (#5760)

* Improve callback docs.

* Apply suggestions from code review

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

* Update plugins/callback/logentries.py

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

* More improvements.

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

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
(cherry picked from commit 9e3a729da9)

Co-authored-by: Felix Fontein <felix@fontein.de>
2023-01-07 11:45:09 +00:00
patchback[bot]
2a6f91b4e4 [PR #5751/2670215c backport][stable-5] Fix gem.py, hang on uninstall specific gem version (#5779)
Fix gem.py, hang on uninstall specific gem version (#5751)

* Update gem.py

move 'cmd.append('--executable')' to all uninstalls rather than only all versions

* Create 5751-gem-fix-uninstall-hang

* Rename 5751-gem-fix-uninstall-hang to 5751-gem-fix-uninstall-hang.yml

(cherry picked from commit 2670215c8a)

Co-authored-by: rietvelde <99407273+rietvelde@users.noreply.github.com>
2023-01-07 10:53:25 +01:00
patchback[bot]
8d94d16eec [PR #5735/fc2b1aac backport][stable-5] terraform: bugfix: init command when default workspace doesn't exists (#5776)
terraform: bugfix: init command when default workspace doesn't exists (#5735)

* feat: init when default workspace doesn't exists

* doc: add changelogs fragment and docs update

* fix: changelog formating fix

(cherry picked from commit fc2b1aac4a)

Co-authored-by: Teodor Janez Podobnik <48418580+dorkamotorka@users.noreply.github.com>
2023-01-07 10:53:05 +01:00
patchback[bot]
f2c08bebd6 [PR #5767/217a62ac backport][stable-5] consul: minor fixes in docs (#5770)
consul: minor fixes in docs (#5767)

* consul: minor fixes in docs

* additional docs fixes

* adjustments from review

(cherry picked from commit 217a62aca2)

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2023-01-06 15:17:43 +01:00
patchback[bot]
e7f66d9bc1 [PR #5761/84ebda65 backport][stable-5] Fix callback plugin types (#5763)
Fix callback plugin types (#5761)

Fix callback types.

(cherry picked from commit 84ebda65f1)

Co-authored-by: Felix Fontein <felix@fontein.de>
2023-01-04 23:46:28 +01:00
patchback[bot]
21e402e2bb [PR #5755/b49bf081 backport][stable-5] ModuleHelper - fix bug when adjusting conflicting output (#5757)
ModuleHelper - fix bug when adjusting conflicting output (#5755)

* ModuleHelper - fix bug when adjusting conflicting output

* add changelog fragment

* remove commented test code

(cherry picked from commit b49bf081f8)

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2023-01-04 21:40:53 +01:00
Felix Fontein
6d4c5b76a4 Next expected release is 5.8.5. 2023-01-04 07:58:15 +01:00
Felix Fontein
a1fd642008 Release 5.8.4. 2023-01-04 07:28:44 +01:00
Felix Fontein
8298b2c7c1 Prepare 5.8.4 release. 2023-01-03 23:54:28 +01:00
patchback[bot]
25ff8d4179 [PR #5741/06d72dfe backport][stable-5] htpasswd: improve documentation on crypt_scheme (#5748)
htpasswd: improve documentation on crypt_scheme (#5741)

* htpasswd: improve documentation on crypt_scheme

* htpasswd: formatting in documentation

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

* htpasswd: formatting in documentation

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

* Apply suggestions from code review

* Apply suggestions from code review

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

Co-authored-by: bluikko <14869000+bluikko@users.noreply.github.com>
2022-12-31 08:14:57 +01:00
patchback[bot]
145ceb693b [PR #5744/568e1880 backport][stable-5] unixy Callback: Fix typo using ansibles config manager (#5746)
unixy Callback: Fix typo using ansibles config manager (#5744)

Fixes typo introduced in 53da86c.

Signed-off-by: Fabian P. Schmidt <kerel@mailbox.org>

Signed-off-by: Fabian P. Schmidt <kerel@mailbox.org>
(cherry picked from commit 568e18809c)

Co-authored-by: Fabian P. Schmidt <kerel@mailbox.org>
2022-12-31 07:54:05 +01:00
patchback[bot]
40d094e63a [PR #5672/fab73a1d backport][stable-5] Bugfix: Remove redundant VMID parameters (#5708)
Bugfix: Remove redundant VMID parameters (#5672)

* Remove redundant parameters VMID

* Add changelog fragment

(cherry picked from commit fab73a1d1e)

Co-authored-by: castorsky <csky57@gmail.com>
2022-12-19 20:43:16 +01:00
patchback[bot]
6988ea052d [PR #5705/2b39470a backport][stable-5] opkg: fix issue that force=reinstall would not reinstall an existing package (#5710)
opkg: fix issue that force=reinstall would not reinstall an existing package (#5705)

* opkg: fix issue that force=reinstall would not reinstall an existing package

Signed-off-by: Joerg Hofrichter <joerg.hofrichter@ni.com>

* changelog fragment

Signed-off-by: Joerg Hofrichter <joerg.hofrichter@ni.com>
(cherry picked from commit 2b39470a77)

Co-authored-by: joergho <48011876+joergho@users.noreply.github.com>
2022-12-19 20:42:57 +01:00
patchback[bot]
f26883f45f [PR #5699/25be366c backport][stable-5] Fixed github_release docs: only module-specific returned key is tag (#5700)
Fixed `github_release` docs: only module-specific returned key is `tag` (#5699)

* Fixed github_release docs: only module-specific returned key is "tag"

* Update plugins/modules/github_release.py - added a dot

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

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

Co-authored-by: Or Bin <orbin50@gmail.com>
2022-12-18 09:25:50 +01:00
patchback[bot]
03b312c0ae [PR #5659/af53271c backport][stable-5] lxc_container: fix lxc argument when executing lxc command (#5697)
lxc_container: fix lxc argument when executing lxc command (#5659)

lxc_container fails when executing the lxc command (e.g. when creating
a new container) because PR#5358 broke the module argument
parsing. The resulting argument dict contained only the module argument name
and the argument flag but not the value. E.g.
```
- lxc_container:
    template: debian
```
would result in lxc command arguments `lxc template --template` instead of
`lxc --template debian`.

Fixes: 6f88426cf1 ("lxc_container: minor refactor (#5358)")
Fixes #5578

Signed-off-by: Alexander Couzens <lynxis@fe80.eu>

Signed-off-by: Alexander Couzens <lynxis@fe80.eu>
(cherry picked from commit af53271c41)

Co-authored-by: Alexander Couzens <lynxis@fe80.eu>
2022-12-17 12:22:27 +01:00
Felix Fontein
a634cc2928 [stable-5] gconftool2: fix index error (#5687)
Fix index error.
2022-12-15 06:48:33 +01:00
patchback[bot]
14f23fbebe [PR #5667/c3bc172b backport][stable-5] respect new variable property in gitlab_group_variable and gitlab_project_variable (#5678)
respect new variable property in gitlab_group_variable and gitlab_project_variable (#5667)

* draft

* add changelog fragment

* rework

* rework group variables

* add new line at end of file

* Update plugins/module_utils/gitlab.py

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

* rename

* revert

* return a copy

* Update plugins/modules/gitlab_project_variable.py

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

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

Co-authored-by: Markus Bergholz <git@osuv.de>
2022-12-10 22:42:16 +01:00
patchback[bot]
77aabcd8f5 [PR #5674/b5e58a3b backport][stable-5] CI: Bump CentOS Stream 8 Python from 3.8 to 3.9 (#5676)
CI: Bump CentOS Stream 8 Python from 3.8 to 3.9 (#5674)

Bump CentOS Stream 8 Python from 3.8 to 3.9.

(cherry picked from commit b5e58a3bcc)

Co-authored-by: Felix Fontein <felix@fontein.de>
2022-12-09 15:52:34 +00:00
patchback[bot]
3a1f23323c [PR #5668/50021d6b backport][stable-5] Fix pipx_info tests (#5669)
Fix pipx_info tests (#5668)

Update dependencies.

(cherry picked from commit 50021d6bfb)

Co-authored-by: Felix Fontein <felix@fontein.de>
2022-12-08 22:25:09 +01:00
Felix Fontein
6ccb9a9813 Next expected release is 5.8.4. 2022-12-05 22:08:58 +01:00
Felix Fontein
e6e4260926 Release 5.8.3. 2022-12-05 20:47:58 +01:00
patchback[bot]
7111edd631 [PR #5619/f0b3bba0 backport][stable-5] Fix keycloak_client_rolemapping role removal and diff (#5655)
Fix keycloak_client_rolemapping role removal and diff (#5619)

* Keycloak: Fix client rolemapping removal

Keycloak's delete_group_rolemapping API wrapper didn't pass data about
the roles to remove to keycloak, resulting in removal of all roles.

Follow the intended behaviour and delete only the roles listed in the
module invocation.

Signed-off-by: Florian Achleitner <flo@fopen.at>

* Keycloak: Fix client_rolemapping diff

The module's diff output wrongly showed the changed roles list as
'after' state. This is obviously wrong for role removal and also
wrong for role addition, if there are other roles assigned.

Use the result of the API query for 'end_state' for 'diff' as well.

Signed-off-by: Florian Achleitner <flo@fopen.at>

* Keycloak: Calculate client_rolemapping proposed state properly

Signed-off-by: Florian Achleitner <flo@fopen.at>

* Add changelog fragment

Signed-off-by: Florian Achleitner <flo@fopen.at>
Co-authored-by: Felix Fontein <felix@fontein.de>
Co-authored-by: Felix Fontein <felix@fontein.de>

* Fix for python2 unit test

Signed-off-by: Florian Achleitner <flo@fopen.at>
Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit f0b3bba030)

Co-authored-by: fachleitner <flo@fopen.at>
2022-12-05 05:47:14 +00:00
Felix Fontein
a84a004308 Prepare 5.8.3 release. 2022-12-04 21:44:23 +01:00
patchback[bot]
ac5bbe666e [PR #5602/632fc07e backport][stable-5] Updated tags delimiter (#5651)
Updated tags delimiter (#5602)

* Updated tags delimiter

Starting from Proxmox 7.3 tags are delimited by semicolon. For backward compatibility it needs to be splitted by both commas and semicolons.

* Added missing space

* Add changelog fragment.

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

Co-authored-by: domelek <40233039+domelek@users.noreply.github.com>
2022-12-04 12:57:21 +01:00
patchback[bot]
0273420e70 [PR #5638/23aacc78 backport][stable-5] Reenable and enhance copr integration tests (#5645)
Reenable and enhance `copr` integration tests (#5638)

* Enhance `copr` integration tests

- Switch to a new test Copr repository. @copr/integration_tests was
  removed which caused the tests to fail. I created a new one under my
  account that I'll ensure stays around.
- Add basic testing to ensure that repo files are created in the correct
  location and contain the correct baseurl and enabled status.
- Also run tests on Enterprise Linux.
- Test that packages from the Copr install. This has to be disabled on
  EOL Fedoras that Copr does not allow building new packages for.

Resolves: https://github.com/ansible-collections/community.general/issues/5595

* copr tests: Fix ansible_python_interpreter on c8s

* copr: Don't test on alt Pythons on cs8

* Revert "copr tests: Fix ansible_python_interpreter on c8s"

This reverts commit 58e15a7ebf.

(cherry picked from commit 23aacc78e1)

Co-authored-by: Maxwell G <gotmax@e.email>
2022-12-03 22:40:58 +01:00
patchback[bot]
ce8d9d56ca [PR #5639/da7cba4c backport][stable-5] Fix example in keycloak_realm documentation (#5642)
Fix example in keycloak_realm documentation (#5639)

(cherry picked from commit da7cba4c12)

Co-authored-by: Dorian Monnier <contact@dorianmonnier.fr>
2022-12-01 22:48:50 +01:00
patchback[bot]
7f6623657f vdo: Use yaml.safe_load() instead of yaml.load() (#5632) (#5636)
* vdo: Use yaml.safe_load() instead of yaml.load()

yaml.load() without specifying a Loader= is deprecated and unsafe.

For details, see
https://github.com/yaml/pyyaml/wiki/PyYAML-yaml.load(input)-Deprecation

* Update changelogs/fragments/5632-vdo-Use-yaml-safe-load-instead-of-yaml-load.yml

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

Co-authored-by: Lee Garrett <lgarrett@rocketjump.eu>
Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit 428e181440)

Co-authored-by: Lee Garrett <leegarrett@users.noreply.github.com>
2022-11-30 22:55:56 +01:00
patchback[bot]
ccdec10c67 Fix for vmadm get_vm_uuid out of range (#5628) (#5634)
* Fix for vmadm get_vm_uuid out of range

* Fix for vmadm get_vm_uuid out of range

* Update changelogs/fragments/5628-fix-vmadm-off-by-one.yml

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

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

Co-authored-by: Carlos Neira <cneirabustos@gmail.com>
2022-11-30 22:49:18 +01:00
Felix Fontein
09abc09b52 Next release will be 5.8.3. 2022-11-29 08:57:48 +01:00
Felix Fontein
c87ba3a626 Release 5.8.2. 2022-11-29 08:18:50 +01:00
patchback[bot]
cda6248cea unixy Callback: Use Ansible's config manager (#5601) (#5624)
* unixy Callback: Use Ansible's config manager

In ansible-core 2.14 deprecated support was removed[1] for accessing options
of the DefaultCallback via class attributes. Use the "new" config system
instead.

[1]: dbdbfe845a

Fixes #5600.

Signed-off-by: Fabian P. Schmidt <kerel@mailbox.org>

* Update changelog fragment.

Signed-off-by: Fabian P. Schmidt <kerel@mailbox.org>
Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit 53da86c1a5)

Co-authored-by: Fabian P. Schmidt <kerel@mailbox.org>
2022-11-29 08:01:04 +01:00
Felix Fontein
2cbd8ba71e Prepare 5.8.2 release. 2022-11-28 22:12:25 +01:00
patchback[bot]
eb2b8f4409 contributing: Modify link anchor to changelog fragments docs (#5618) (#5620)
The hmtl anchor linked now points to the parent section
("Creating changelog fragments").

Previously new contributors were linked to the subsection
"Creating a changelog fragment", just to be immediately be guided
by the second paragraph to jump to the previous section.

Signed-off-by: Fabian P. Schmidt <kerel@mailbox.org>

Signed-off-by: Fabian P. Schmidt <kerel@mailbox.org>
(cherry picked from commit 3f80aa3c63)

Co-authored-by: Fabian P. Schmidt <kerel@mailbox.org>
2022-11-28 21:08:20 +01:00
patchback[bot]
a27b1a135d redhat_subscription: improve wording wrt Satellite (#5581) (#5607)
Do not mention an explicit version of Satellite for an environment to
use; future versions of Satellite will support that, and older versions
are long EOL.

Also mention Katello next to Red Hat Satellite.

(cherry picked from commit 911769d2f3)

Co-authored-by: Pino Toscano <ptoscano@redhat.com>
2022-11-26 18:49:38 +01:00
patchback[bot]
db6cb07028 Temporarily disable copr tests. (#5594) (#5597)
(cherry picked from commit 11e1423f60)

Co-authored-by: Felix Fontein <felix@fontein.de>
2022-11-23 20:34:33 +01:00
patchback[bot]
6ccffc3de5 chroot plugin fix inventory_hostname var for remote_addr (#5570) (#5572)
* Add inventory_hostname under remote_addr.vars in chroot connection plugin required by ansible 2.13

* fix changelog fragment

(cherry picked from commit 5e5af458fb)

Co-authored-by: Evan Jarrett <ejfirestar00@gmail.com>
2022-11-17 07:29:55 +01:00
patchback[bot]
17cc574b04 cmd_runner module utils: fix case for as_fixed() format (#5538) (#5561)
* cmd_runner module utils: fix case for as_fixed() format

* add changelog fragment

* simplified test_cmd_runner

* fix handling empty default for `as_map()`

* add changelog fragment

* MissingArgumentValue is reraised in run()

(cherry picked from commit e87ca10b61)

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2022-11-16 06:56:24 +01:00
Felix Fontein
1f2c352b83 Next expected release is 5.8.2. 2022-11-15 13:09:09 +01:00
Felix Fontein
b90f87f3d8 Release 5.8.1. 2022-11-15 08:57:33 +01:00
patchback[bot]
b23fdc3be3 dependent lookup: prevent deprecation warning with ansible-core 2.14 (#5543) (#5547)
* Prevent deprecation warning.

* Improve naming and add comment.

(cherry picked from commit 60c8b9a67f)

Co-authored-by: Felix Fontein <felix@fontein.de>
2022-11-15 08:47:51 +01:00
patchback[bot]
bc83586c15 [PR #5493/27a4ffc2 backport][stable-5] Fix: Duplicate vmid in proxmox_disk module #5492 (#5536)
* Fix:  Duplicate vmid in proxmox_disk module #5492 (#5493)

https://github.com/ansible-collections/community.general/issues/5492
(cherry picked from commit 27a4ffc293)

* Add changelog fragment.

(cherry picked from commit 672385309c)

Co-authored-by: Doc_Tiebeau <elie.saintfelix@gmail.com>
Co-authored-by: Felix Fontein <felix@fontein.de>
2022-11-13 21:23:50 +01:00
patchback[bot]
b765938b79 Short descriptions (batch3) - massive fix on Capitalization and trailing period (#5521) (#5528)
* short_description fix batch 3

* Update plugins/modules/telegram.py

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

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

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2022-11-09 21:19:06 +01:00
Felix Fontein
4ed5177d60 Ignore mpdehaan in BOTMETA. (#5524) (#5526)
(cherry picked from commit 0e9cd5e6b6)
2022-11-09 18:44:53 +01:00
patchback[bot]
88ac419c0e short_description fix batch 2 (#5520) (#5522)
(cherry picked from commit f683d6a05d)

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2022-11-09 14:08:55 +01:00
patchback[bot]
cc63dd884c Short descriptions (batch1) - massive fix on Capitalization and trailing period (#5503) (#5515)
* short_description fix batch 1

* Update plugins/modules/ali_instance.py

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

* Update plugins/modules/apt_rpm.py

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

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

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2022-11-09 07:33:03 +01:00
patchback[bot]
d817fc7215 one_vm: fix for 'NoneType' object has no attribute 'split' in get_vm_labels_and_attributes_dict (#5489) (#5512)
* Fix for 'NoneType' object has no attribute 'split'

* Added changelog to fix

* Update changelogs/fragments/5489-nonetype-in-get-vm-by-label.yml

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

* Fix line ending in changelog

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

Co-authored-by: wh1t3 r4bb1t <16529603+d34d5p4rr0w@users.noreply.github.com>
2022-11-09 07:12:05 +01:00
patchback[bot]
64897d762c Clarification to use underscores instead of dashes in parser name (#5500) (#5508)
* Clarification to use underscores instead of dashes in parser name

* Update plugins/filter/jc.py

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

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

Co-authored-by: Kelly Brazil <kellyjonbrazil@gmail.com>
2022-11-08 20:32:25 +01:00
patchback[bot]
64cbf1900b minor docs update (#5501) (#5504)
(cherry picked from commit 858eaac500)

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2022-11-08 14:16:41 +01:00
patchback[bot]
7e23ef3801 fix the issue#5275: iso_create doesn't add folders (#5468) (#5487)
* fix the issue

* add changelog

* add changelog file

* Update changelogs/fragments/5468-iso-create-not-add-folders.yml

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

Co-authored-by: Yuhua Zou <41054978+ZouYuhua@users.noreply.github.com>
2022-11-07 07:28:53 +01:00
patchback[bot]
27fc80895c Convert copyright docstings to proper copyright comments (#5480) (#5482)
* Drop stable-3 from weekly CI; migrate stable-4 from nightly to weekly.

* Convert copyright docstings to proper copyright comments.

(cherry picked from commit 8de0221ae6)

Co-authored-by: Felix Fontein <felix@fontein.de>
2022-11-06 20:40:06 +01:00
Felix Fontein
0754449d60 Drop stable-3 from weekly CI; migrate stable-4 from nightly to weekly.
(cherry picked from commit 90ac53d150)
2022-11-06 12:53:05 +01:00
patchback[bot]
460cd523fe snap: fix regex to support option values with whitespaces (#5475) (#5479)
* snap: fix regex to support option values with whitespaces

* add changelog fragment

(cherry picked from commit 8fb2228125)

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2022-11-06 11:51:31 +01:00
patchback[bot]
ad2d899713 django_manage: add extra tests (#5476) (#5478)
(cherry picked from commit fc817601bc)

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2022-11-06 11:51:22 +01:00
Felix Fontein
3182be1a2f Prepare 5.8.1 release. 2022-11-06 11:47:03 +01:00
patchback[bot]
b726110f1f ldap_attrs: escape ldap search filter (#5435) (#5469)
* escape ldap search filter

* move escape to separate line

* add changelog fragment

* Update changelogs/fragments/5435-escape-ldap-param.yml

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

* fix encoding

* fixup! fix encoding

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

Co-authored-by: Reto Kupferschmid <kupferschmid@puzzle.ch>
2022-11-04 11:46:19 +01:00
Felix Fontein
24a4d6e685 Warn about using internal FQCNs for modules and actions. (#5373) 2022-11-03 07:41:48 +01:00
patchback[bot]
1badcffe1c Clearer error logging in passwordstore lookup (#5436) (#5458)
* Clearer error logging in passwordstore lookup

* Add changelog fragment for passwordstore errmsgs

Co-authored-by: Sylvia van Os <sylvia@hackerchick.me>
(cherry picked from commit e4b9e098c7)

Co-authored-by: Jan-Philipp Litza <jplitza@users.noreply.github.com>
2022-11-02 22:31:45 +01:00
patchback[bot]
b87196348a nsupdate: issues/4657 (#5377) (#5460)
* Insert new entries before deleting old ones.
resolves #4657

* Slight wording changes.

* lint fix

* Address lint

* Added changelog
Fixed lint

* More linting

* Update changelogs/fragments/5377-nsupdate-ns-records-with-bind.yml

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

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

Co-authored-by: Simon-TheUser <35318753+Simon-TheUser@users.noreply.github.com>
2022-11-02 20:29:30 +01:00
patchback[bot]
21423ca6a0 fix int options idempotence bug and add new test to check it (#5443) (#5455)
(cherry picked from commit dc66aefa40)

Co-authored-by: Alex Groshev <38885591+haddystuff@users.noreply.github.com>
2022-11-01 21:56:54 +01:00
patchback[bot]
4926f15d86 Fix non-matching defaults. (#5452) (#5453)
(cherry picked from commit f84a9bf932)

Co-authored-by: Felix Fontein <felix@fontein.de>
2022-11-01 19:45:37 +01:00
Felix Fontein
9466103a4a Revert "Fix non-matching defaults in docs (#5446) (#5451)"
This reverts commit b26df2a008.
2022-11-01 19:12:11 +01:00
patchback[bot]
b26df2a008 Fix non-matching defaults in docs (#5446) (#5451)
* Allow to pass options as lookup options.

* Adjust tests.

* Fix non-matching defaults.

(cherry picked from commit a978bff2c7)

Co-authored-by: Felix Fontein <felix@fontein.de>
2022-11-01 18:06:30 +00:00
patchback[bot]
cba4fa2fe8 Fix iso_customize tests. (#5447) (#5448)
(cherry picked from commit a1f75efee2)

Co-authored-by: Felix Fontein <felix@fontein.de>
2022-10-31 21:31:02 +01:00
patchback[bot]
833530ab47 Prepare un-flatmapping (#5350) (#5427)
* Add module name into fixtures directory name.

* Rename conftest.py to avoid collisions.

* Match filenames inside directories.

(cherry picked from commit fa924aae31)

Co-authored-by: Felix Fontein <felix@fontein.de>
2022-10-26 08:00:05 +02:00
Felix Fontein
1f0361a1c6 Next expected release is 5.8.1. 2022-10-25 10:26:52 +02:00
Felix Fontein
4df53dbacf Release 5.8.0. 2022-10-25 08:12:19 +02:00
patchback[bot]
f25519e308 ldap_attrs: search_s based _is_value_present (#5385) (#5423)
* search_s based _is_value_present

* Fix formatted string and ldap import

* Add changelog fragment

* Remove superfluous import ldap

* Improve fragment

* Code format {x} prefix

* Lower-case fixes

* Fix suggestions to changelog

* Break with the past and let bools be bools

* Let ldap_attrs break on invalid DN's

(cherry picked from commit 091bdc77c3)

Co-authored-by: Martin <github@mrvanes.com>
2022-10-25 08:09:34 +02:00
Felix Fontein
1bb47ad73e Fix broken changelog fragment.
(cherry picked from commit c88f0f4ca0)
2022-10-24 21:02:37 +02:00
patchback[bot]
fd3e84fcd6 clarify jc filter usage in the example (#5396) (#5420)
* Update jc.py

##### SUMMARY
<!— Your description here –>

##### ISSUE TYPE
- Docs Pull Request

+label: docsite_pr

* Update jc.py

* Update plugins/filter/jc.py

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

* Update jc.py

* Update plugins/filter/jc.py

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

* Update jc.py

* Update jc.py

* Update jc.py

* Update plugins/filter/jc.py

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

* Update plugins/filter/jc.py

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

* change all of the tags to be FQMN

FQMN = fully qualified module name

* Update jc.py

* Update plugins/filter/jc.py

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

* Update jc.py

* Update jc.py

* Update plugins/filter/jc.py

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

* Update jc.py

* Update plugins/filter/jc.py

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

* Update plugins/filter/jc.py

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

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

Co-authored-by: Ron Green <11993626+georgettica@users.noreply.github.com>
2022-10-24 20:49:18 +02:00
patchback[bot]
f75471e7d2 Send string instead of boolean to proxmox api (#5198) (#5417)
* Send string instead of boolean to proxmox api

* Add changelog fragment.

* Update plugins/modules/cloud/misc/proxmox_kvm.py

Co-authored-by: castorsky <csky57@gmail.com>

Co-authored-by: Felix Fontein <felix@fontein.de>
Co-authored-by: castorsky <csky57@gmail.com>
(cherry picked from commit b9d0864957)

Co-authored-by: Alexander Holzapfel <git@hlz.io>
2022-10-23 20:54:14 +02:00
patchback[bot]
aadf1d4f6a [Scaleway] Add module to manage container registries (#5399) (#5414)
* [Scaleway] Add module to manage container registries

Signed-off-by: Lunik <lunik@tiwabbit.fr>

* first review

Signed-off-by: Lunik <lunik@tiwabbit.fr>

* lint documentation on return value

Signed-off-by: Lunik <lunik@tiwabbit.fr>

* second review

Signed-off-by: Lunik <lunik@tiwabbit.fr>

* second review *bis

Signed-off-by: Lunik <lunik@tiwabbit.fr>

* second review *ter

Signed-off-by: Lunik <lunik@tiwabbit.fr>

* Fix typo.

Signed-off-by: Lunik <lunik@tiwabbit.fr>
Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit 2680739153)

Co-authored-by: Guillaume MARTINEZ <lunik@tiwabbit.fr>
2022-10-23 20:44:50 +02:00
patchback[bot]
f5ff54979a MH CmdModuleHelper: deprecation (#5370) (#5413)
* MH CmdModuleHelper: deprecation

* add changelog fragment

* add deprecation comments in many parts of the code

(cherry picked from commit 91cac4c816)

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2022-10-23 19:11:48 +02:00
patchback[bot]
957a74b525 django_manage: deprecate venv creation when missing (#5405) (#5412)
* deprecate venv creation when missing

* add changelog fragment

* fix sanity checks

* Update changelogs/fragments/5404-django-manage-venv-deprecation.yml

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

* Update plugins/modules/web_infrastructure/django_manage.py

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

* Update plugins/modules/web_infrastructure/django_manage.py

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

* minor change to help future removal of feature

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

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2022-10-23 18:15:51 +02:00
Felix Fontein
29afed337a Prepare 5.8.0 release. 2022-10-23 16:42:58 +02:00
patchback[bot]
e748acdd51 manageiq_tags_info: new module (#5368) (#5409)
* manageiq_tags: refactor ManageIQTags class out to utils

* add manageiq_tags_info module

* refactor query_resource_id as a method in ManageIQ

* minor adjustments

* fix comments from PR

* rollback register result in examples

* add basic docs for return value

(cherry picked from commit 389dfe9f09)

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2022-10-23 16:36:53 +02:00
patchback[bot]
eed45fe6aa pkgng: fix error-handling when upgrading all (#5369) (#5411)
* pkgng: fix error-handling when upgrading all

* provide for rc=1 in check_mode + test

* fix name of task in test

* add changelog fragment

(cherry picked from commit baa8bd52ab)

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2022-10-23 16:24:38 +02:00
patchback[bot]
cce52e1812 nmcli: add transport_mode configuration for Infiniband devices (#5361) (#5408)
* Adds transport_mode configuration for Infiniband devices

Adds transport_mode configuration for Infiniband based ipoib devices,
which is one of:
  - datagram (default)
  - connected

* Remove trailing whitespace

* Add changelog fragment

* Update changelogs/fragments/5361-nmcli-add-infiniband-transport-mode.yaml

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

* Update plugins/modules/net_tools/nmcli.py

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

* Update plugins/modules/net_tools/nmcli.py

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

* Remove default for transport_mode

* Add test for changing Infiniband transport_mode

* remove blank line at end of file

Co-authored-by: Thomas Gebert <thomas.gebert@atos.net>
Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit b54483b52e)

Co-authored-by: ThomasGebert <44234595+ThomasGebert@users.noreply.github.com>
2022-10-23 16:14:09 +02:00
patchback[bot]
0bcce340ed portage: update comment, drop gentoolkit requirement (#5406) (#5407)
This reflects the changes made in
9189f7a6bf.

Signed-off-by: John Helmert III <ajak@gentoo.org>

Signed-off-by: John Helmert III <ajak@gentoo.org>
(cherry picked from commit 8072d11d06)

Co-authored-by: ajakk <ajak@gentoo.org>
2022-10-23 13:02:13 +02:00
patchback[bot]
da8a11b8d8 django_manage: deprecate old commands (#5400) (#5404)
* deprecate old commands

* add changelog fragment

* fix django version in docs

* fix wording on the deprecations

* Update changelogs/fragments/5400-django-manage-deprecations.yml

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

* update chglog fragment

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

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2022-10-22 20:40:59 +02:00
patchback[bot]
9ed0603072 archive: better expose requirements (#5392) (#5402)
* Better expose requirements.

* Move sentence back to notes.

* Update plugins/modules/files/archive.py

Co-authored-by: Maxwell G <gotmax@e.email>

* Break line.

Co-authored-by: Maxwell G <gotmax@e.email>
(cherry picked from commit a023f2a344)

Co-authored-by: Felix Fontein <felix@fontein.de>
2022-10-21 05:42:22 +00:00
patchback[bot]
e2fa11b381 Do not crash when lzma is not around. (#5393) (#5398)
(cherry picked from commit 5aa1e58749)

Co-authored-by: Felix Fontein <felix@fontein.de>
2022-10-20 21:07:24 +02:00
patchback[bot]
36f7ff15e9 Fix module. (#5383) (#5388)
(cherry picked from commit c3bdc4b394)

Co-authored-by: Felix Fontein <felix@fontein.de>
2022-10-19 10:24:38 +02:00
patchback[bot]
8eac491057 [opentelemetry][callback] support opentelemetry-api 1.13 (#5342) (#5379)
* [opentelemetry][callback] support opentelemetry-api 1.13

* [opentelemetry][callback] changelog fragment

* Update changelogs/fragments/5342-opentelemetry_bug_fix_opentelemetry-api-1.13.yml

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

* [opentelemetry-callback] refactor time_ns in a function

* fix linting

* change branch outside of the function

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

* [opentelemetry]: remove options from suggestion

* Apply suggestions from code review

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

Co-authored-by: Felix Fontein <felix@fontein.de>
Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
(cherry picked from commit 5732023aa2)

Co-authored-by: Victor Martinez <victormartinezrubio@gmail.com>
2022-10-18 10:50:58 +02:00
patchback[bot]
607f3d83a0 virtualbox: Fix crash when handling deeply nested hostvars (#5348) (#5381)
* virtualbox: Fix nested data parsing

- Skip parsing values with keys that have both a value and nested data.
- Skip parsing values that are nested more than two keys deep.

* Update changelogs/fragments/5348-fix-vbox-deeply-nested-hostvars.yml

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

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

Co-authored-by: Paul Sanchez <124954+basicdays@users.noreply.github.com>
2022-10-18 10:26:29 +02:00
patchback[bot]
d6cd90838f consul: pythonisms + a couple of required_if clauses (#5367) (#5380)
* consul: pythonisms + a couple of required_if clauses

* adjust condition of if

* adjust condition of if (again)

* Update plugins/modules/clustering/consul/consul.py

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

* simplify parse_check logic

* fix condition of if

* remove test made redundant by required_if

* add changelog fragment

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

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2022-10-18 10:25:50 +02:00
patchback[bot]
22e0a6dac7 portage: drop usage of gentoolkit, add knobs for --with-bdeps, --backtrack (#5349) (#5365)
* portage: drop dependency on gentoolkit (provides equery)

Portage installs a Python module, which is available anywhere that
Portage itself is available. We can use that instead of calling a
shell command.

Signed-off-by: John Helmert III <ajak@gentoo.org>

* portage: add knob for emerge's --backtrack flag

Signed-off-by: John Helmert III <ajak@gentoo.org>

* portage: add knob for portage's --with-bdeps option

Also, this option does not accept "True" like other options. Instead,
it only uses 'y' and 'n', so parse booleans properly into these chars.

Signed-off-by: John Helmert III <ajak@gentoo.org>

* Add changelog entry for #5349

Signed-off-by: John Helmert III <ajak@gentoo.org>

Signed-off-by: John Helmert III <ajak@gentoo.org>
(cherry picked from commit 2a54644cfa)

Co-authored-by: ajakk <jchelmert3@posteo.net>
2022-10-14 22:48:06 +02:00
patchback[bot]
3751e188ca lxc_container: minor refactor (#5358) (#5364)
* lxc_container: minor refactor

* add changelog fragment

(cherry picked from commit 6f88426cf1)

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2022-10-14 22:47:58 +02:00
patchback[bot]
cd4f3ca445 manageiq_policies_info: new module (#5321) (#5352)
* manageiq_provider_info: new module

* fix reference to manageiq.module

* add missing alias in suboption

* fix filename in botmeta

* Update plugins/modules/remote_management/manageiq/manageiq_policies_info.py

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

* Update plugins/modules/remote_management/manageiq/manageiq_policies_info.py

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

* fix description of parameters

* Update plugins/modules/remote_management/manageiq/manageiq_policies_info.py

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

* Update plugins/modules/remote_management/manageiq/manageiq_policies_info.py

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

* remove change applied on the wrong branch

* fix the module name in metadata files

* Update plugins/modules/remote_management/manageiq/manageiq_policies_info.py

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

* adjust RETURN documentation

* adjust RETURN documentation indentation

* Update plugins/modules/remote_management/manageiq/manageiq_policies_info.py

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

* Update plugins/modules/remote_management/manageiq/manageiq_policies_info.py

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

* Update plugins/modules/remote_management/manageiq/manageiq_policies_info.py

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

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

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2022-10-12 11:32:26 +02:00
patchback[bot]
1d05f81e53 added missing aliases to documentation (#5351) (#5353)
(cherry picked from commit 4941a25c40)

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2022-10-12 11:06:07 +02:00
patchback[bot]
4ef80ecd46 Updated to use the new newrelic v2 api (#5341) (#5354)
* updated to use the new newrelic v2 api

* check that application_id is set

* indenting issue

* added back app_name

* fix import ordering

* resolving various spellings & wordings

* fixed wordings

* validate_certs

* fixed unreachable code

(cherry picked from commit 7e2a6cf198)

Co-authored-by: Wei Liao <wliao008@gmail.com>
2022-10-12 11:05:42 +02:00
patchback[bot]
68e184eba8 Change CI group identifiers. (#5344) (#5347)
(cherry picked from commit e47845ab3a)

Co-authored-by: Felix Fontein <felix@fontein.de>
2022-10-11 12:17:31 +02:00
patchback[bot]
5dcd2c7df5 New module: iso_customize (#5190) (#5346)
* add ansible module iso_customize.py

* rerun CI testing due to "Failed to send request to https://api.github.com/repos/ansible/ansible/issues/23642: HTTP Error 403: rate limit exceeded"

* Rerun CI testing due to "Failed to send request to https://api.github....."

* rerun CI testing due to failure "Unknown error when attempting to call Galaxy at 'https://galaxy.ansible.com/api/v2/collections/netbox/netbox/versions/3.1.0/': The read operation timed out"

* change document part as  felixfontein's careful review

* modify test file as russoz's comments

* modify comment part of module

* add comment for the example

* add more tests: check the files are deleted / added in customized ISO

* fix it: failed to run ansible.posix.mount in ubuntu

* fix it:  ansible.posix.mount is not working well in some OS.

* change DOCUMENTATION part

* change files according to the comment from code review

* fix issue: E231: missing whitespace after ':'

* modify the description of Document

* modify code for code review

* delete extra blank line in yml file

* Try to fix CI testing issue: "Caught \"'foo' is undefined. 'foo' is undefined\" while evaluating 'b' with item == {'a': 1}"

* delete extra blank line in the end of file

* change code as the comment from code review

* change code from code review

* change type: str to type: path

* change type:str to type:path

* delete unused variable

* fix CI testing error: return-syntax-error: RETURN.dest_iso.type: not a valid value for dictionary value @ data['dest_iso']['type']. Got 'path'

* add testcase: test add files / delete files separately

* add more testcases: test if we can catch exception from error input of users

* change code from code review

* fix issue: E231: missing whitespace after ','

* change code from code review

* add notes to document

* modify notes in document part

* /rebuild_failed

/rebuild_failed

* Try to support running testcases not only in MAC but also in other OS.

* modify document

* change mount to ansible.posix.mount

* skip the test platform which report "Error mounting"

* fix mount failed: Operation not permitted

* change code from code review

* change document from code review

* fix CI testing issue in some platforms

* Update plugins/modules/files/iso_customize.py

* change code from code review

1) change testcase
2) try to fix "mount: not permitted"

* modify aliases file

* change document and rerun CI testing

* add skip/docker as suggested

* add debug task

* fix issue in redhat 7.9: occurred while running the lookup plugin 'file'. ..could not locate file in lookup..

* change code from the code review

* modify function "iso_rr_check_file_exist" to "iso_check_file_exists" to make it works in all types of ISO

1. modify function "iso_rr_check_file_exist" to "iso_check_file_exists" to make it works in all types of ISO

2. run main.yml  with newer python 3.10.6
ansible [core 2.13.4]
  config file = None
  configured module search path = ['/Users/zouy/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/local/Cellar/ansible/6.4.0/libexec/lib/python3.10/site-packages/ansible
  ansible collection location = /Users/zouy/.ansible/collections:/usr/share/ansible/collections
  executable location = /usr/local/bin/ansible
  python version = 3.10.6 (main, Aug 30 2022, 05:12:36) [Clang 13.1.6 (clang-1316.0.21.2.5)]
  jinja version = 3.1.2
  libyaml = True

* delete blank

* simply the code as suggested.

* Two small docs updates.

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit d76392ed2a)

Co-authored-by: Yuhua Zou <41054978+ZouYuhua@users.noreply.github.com>
2022-10-10 23:08:49 +02:00
patchback[bot]
134a0dc7e2 opentelemetry: send logs (#4175) (#5345)
* opentelemetry: logs property

* opentelemetry: support for span events with the Task dump output

* opentelemetry: support property to disable the logs

* bump the version when supported

* add section ini

* test: fix change of signature

* [opentelemetry][callback] changelog fragment

* Apply suggestions from code review

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

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

Co-authored-by: Victor Martinez <victormartinezrubio@gmail.com>
2022-10-10 22:03:05 +02:00
patchback[bot]
13e3e176fb Make pfexec become usable for illumos (#3889) (#5339)
* Experimental change from OpenIndiana

* resolve pfexec problem, by removing superfluous quotes

* reimplement "wrap_exe"

* remove spaces arround keyword argument assignment

* adapted pfexec unit test

* Try to fix quoting of test expression

* Fix quoting of test expression by replacing ' with "

* Add changelog fragment

(cherry picked from commit dc2d3c24fa)

Co-authored-by: manschwetusCS <30724946+manschwetusCS@users.noreply.github.com>
2022-10-05 12:49:38 +02:00
patchback[bot]
eb98be580d znode: add options for authentication (#5306) (#5337)
* add options for authentication

* Update changelogs/fragments/5306-add-options-for-authentication.yml

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

* Update plugins/modules/clustering/znode.py

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

* Update plugins/modules/clustering/znode.py

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

* Update plugins/modules/clustering/znode.py

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

* Update plugins/modules/clustering/znode.py

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

* rename scheme to auth_scheme, credential to auth_credential

* make pycodestyle happy

* Update plugins/modules/clustering/znode.py

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

* Update plugins/modules/clustering/znode.py

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

* remove unneeded quotes

* Update changelogs/fragments/5306-add-options-for-authentication.yml

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

* Update version_added.

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

Co-authored-by: henkwiedig <henk@wiedig.de>
2022-10-05 08:45:13 +02:00
patchback[bot]
49ef8b1900 keycloak_user_federation: add explanation and example to vendor option (#4893) (#5336)
* Add explanation and example to vendor option

##### SUMMARY
<!— Your description here –>

##### ISSUE TYPE
- Docs Pull Request

+label: docsite_pr

* Update plugins/modules/identity/keycloak/keycloak_user_federation.py

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

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

Co-authored-by: clovis-monmousseau <58973012+clovis-monmousseau@users.noreply.github.com>
2022-10-05 08:19:17 +02:00
Felix Fontein
19d22d605a Next expected release is 5.8.0. 2022-10-04 08:04:10 +02:00
Felix Fontein
f17b10bfa2 Release 5.7.0. 2022-10-04 07:35:24 +02:00
patchback[bot]
258eb68022 Allow terraform module to specify complex variable structures (#4797) (#5331)
* Adding capability to specify complex variables type to terraform

* Terrform variable types are mapped to ansible veriable types

* Currently handles Dict, List, Str, Int, Bool types

* Updated the documentation accordingly

* Updated with an example.

* Update plugins/modules/cloud/misc/terraform.py

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

* Update plugins/modules/cloud/misc/terraform.py

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

* Update plugins/modules/cloud/misc/terraform.py

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

* Update plugins/modules/cloud/misc/terraform.py

Wonder how that missed the PEP8 checks :).

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

* Update plugins/modules/cloud/misc/terraform.py

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

* Adding the changelog fragment

* Update plugins/modules/cloud/misc/terraform.py

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

* Adding ``integer_types`` from ``module_utils``

Simplified the ``integer_types``,  ``str`` and ``float`` value population through ``json.dumps()``.  Now the strings can have special characters which can break the module execution.

* Update changelogs/fragments/4797-terraform-complex-variables.yml

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

* * Changed to approach to make the code more readble and simple to understand.

    * Maintaining the original for loop for the top_level variables. Therefore the rocess_conplex_args() now only handle second level variables when the type() is either Dict or List.

    * Json dumps are used only for the low level variables. Terraform CLI had issues interpreting escape sequecences from json.dumps()

* Update plugins/modules/cloud/misc/terraform.py

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

* adding boolean explicitly, although boolean is a subclass of integer, adding this for self documentation pupose and the clarity of the code.

* fixing the doc strings

* Update terraform.py

Fixing docstrings

* * Introducing format_args funtion to simplify formatting each argument type for top_level and lower level.

* Terraform Lists of strings, numbers, objects and lists are supported.

* Adding COMMAND: to the fail_json msg, for plan failures to help troubleshoot command line arguments.

* Update plugins/modules/cloud/misc/terraform.py

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

* * Adding full terraform command to fail_json() when the terrafor plan fails
    * Fixing a spelling mistake.

* plan_command if a list, stringifying the list

* * Fixing the new line for the change fragments

* Removed CR (\r) from the output messages. Now output lines carry only LF (\n), not CRLF (\r\n).

* Added integration testing for complex variables.

* Restructured integration testing code to be more expandable.

* Update changelogs/fragments/4797-terraform-complex-variables.yml

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

* Update plugins/modules/cloud/misc/terraform.py

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

* double-quotes are not properly escaped in shell, and python string
escaping are nullified the way terraform handle second tier string
variables (within terraform).

* changing all the task actions to FQCN format.

* integration testing now includes:

1. Top level strings containing, special shell characters, spaces,
   double-quotes.

2. Second level strings containing, special shell characters, spaces,
   double-quotes repeating double-quotes to ensure proper regex
substitution.

* Adding colon ':' to string test casses.

* Added complex_vars to switch between the old and the new variable
interpretations.
Updated the documentations to reflect the changes.
Updated the examples.
Handling '\' as well with the escape sequence.

* Added tests for the new escape sequences.
Added multilines tests.

* Restructuring the documente strings to a shorter string.
Argument_spec changed to 'bool'

* Update changelogs/fragments/4797-terraform-complex-variables.yml

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

* Update plugins/modules/cloud/misc/terraform.py

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

* Update plugins/modules/cloud/misc/terraform.py

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

* Update plugins/modules/cloud/misc/terraform.py

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

* Update plugins/modules/cloud/misc/terraform.py

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

* Update plugins/modules/cloud/misc/terraform.py

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

* Update plugins/modules/cloud/misc/terraform.py

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

Co-authored-by: Felix Fontein <felix@fontein.de>
Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
(cherry picked from commit beef93f687)

Co-authored-by: Kosala Atapattu <kosala@kosala.net>
2022-10-03 22:21:03 +02:00
patchback[bot]
264c98189c Fix #5313: redhat_subscription module is not idempotent when pool_ids (#5319) (#5330)
This fix ensures the idempotency of the redhat_subscription module when pool_ids are used. The main problem was, that a 'None' quantity was not properly handled and that the quantity check compared a string with an integer.

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

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

Co-authored-by: cfiehe <cfiehe@users.noreply.github.com>
2022-10-03 20:36:35 +02:00
Felix Fontein
7aec01190a Prepare 5.7.0 release. 2022-10-01 22:39:18 +02:00
patchback[bot]
00fd2847e4 New Module: Keycloak User Rolemapping (#4898) (#5324)
* keycloak_user_rolemapping: implement user role mapping

* keycloak_user_rolemapping: additional logging

* keycloak_user_rolemapping: move to getters, use names parameters

* keycloak_user_rolemapping: add service account user example

* Add keyring and keyring_info modules (#4764)

* keycloak_user_rolemapping: write tests, address ansibullbot concerns no.1

* keycloak_user_rolemapping: address felixfontein concerns no.1

* keycloak_user_rolemapping: remove rebase mistakes

* keycloak_user_rolemapping: address felixfontein concerns no.2

* keycloak_user_rolemapping: refactor duplicate username usage example

* keycloak_user_rolemapping: fix sanity check errors no.1

* keycloak_user_rolemapping: fix sanity check errors no.2

* keycloak_user_rolemapping: fix sanity check errors no.3

* keycloak_user_rolemapping: fix sanity check errors no.4

* keycloak_user_rolemapping: write tests, address ansibullbot concerns no.1

* keycloak_user_rolemapping: resolve rebase conflicts with origin/main branch

# Conflicts:
#	plugins/module_utils/identity/keycloak/keycloak.py

* keycloak_user_rolemapping: remove keycloak_role_composites from BOTMETA.yml

* keycloak_user_rolemapping: fix sanity check errors no.5

* keycloak_user_rolemapping: address felixfontein reviews concerns no.1

* keycloak_user_rolemapping: address felixfontein reviews concerns no.2

Co-authored-by: Dušan Markovič <dusan.markovic@better.care>
Co-authored-by: ahussey-redhat <93101976+ahussey-redhat@users.noreply.github.com>
(cherry picked from commit 2cac3ae879)

Co-authored-by: bratwurzt <johnny.galatikitis@gmail.com>
2022-10-01 21:53:54 +02:00
patchback[bot]
94ea18f1cb bitwarden: Add field to search for all item attributes, instead of on… (#5297) (#5325)
* bitwarden: Add field to search for all item attributes, instead of only name.

* bitwarden: Add change to changelog.

* bitwarden: Update changelog entry.

* Update changelogs/fragments/5297-bitwarden-add-search-field.yml

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

* Update plugins/lookup/bitwarden.py

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

* Update plugins/lookup/bitwarden.py

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

Co-authored-by: Ole Pannbacker <opannbacker@cronon.net>
Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit 394647df84)

Co-authored-by: betuxy <72452886+betuxy@users.noreply.github.com>
2022-10-01 18:26:03 +02:00
patchback[bot]
0b42aca72f chore: Update lxc_container to support py3 (#5304) (#5323)
* chore: Update lxc_container to support py3

This change is mostly just a documentation change which will report the requirements
correctly for python3-lxc. I've also removed the use of six which results in us
changing `xrange` to `range`.

Resolves: https://github.com/ansible-collections/community.general/issues/5294
Signed-off-by: Kevin Carter <kevin.carter@figment.io>
Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>

* Update changelogs/fragments/5280-lxc_container-py3.yaml

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

* Update changelogs/fragments/5280-lxc_container-py3.yaml

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

* Update 5280-lxc_container-py3.yaml

* Update 5280-lxc_container-py3.yaml

Signed-off-by: Kevin Carter <kevin.carter@figment.io>
Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit 2eba5dc4e7)

Co-authored-by: Kevin Carter <kevin@cloudnull.com>
2022-10-01 18:17:25 +02:00
patchback[bot]
2658bf31cd terraform: run init with no-color, too (#5147) (#5322)
* terraform: run `init` with no-color, too

When running `terraform init` fails, it would output ansi color sequences, making the output hard to read.

Maybe setting TF_IN_AUTOMATION would also be beneficial: https://www.terraform.io/cli/config/environment-variables#tf_in_automation

* add changelog fragment for `terraform init -no-color`

* move changelog into correct directory; add PR link

(cherry picked from commit 202cabc769)

Co-authored-by: azrdev <azrdev@qrdn.de>
2022-10-01 10:53:01 +02:00
patchback[bot]
869e1a1eab [feat] proxmox_snap: snapshot containers with configured mountpoints (#5274) (#5317)
* module_utils.proxmox: new `api_task_ok` helper + integrated with existing modules

* proxmox_snap: add `unbind` param to snapshot containers with mountpoints

* [fix] errors reported by 'test sanity pep8'
at
https://github.com/ansible-collections/community.general/pull/5274#issuecomment-1242932079

* module_utils.proxmox.api_task_ok: small improvement

* proxmox_snap.unbind: version_added, formatting errors, changelog fragment

* Apply suggestions from code review

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

* proxmox_snap.unbind: update version_added tag

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

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

Co-authored-by: nxet <nxet821@protonmail.com>
2022-09-28 23:20:21 +02:00
patchback[bot]
d25b6e7681 nmcli: fix error when setting previously unset mac address (#5291) (#5318)
* fix #5290

* add changelog fragment

* remove unnecessary braces

* Update changelogs/fragments/5291-fix-nmcli-error-when-setting-unset-mac-address.yaml

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

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

Co-authored-by: Giorgio Gallo <giorgio.gallo@bitnic.it>
2022-09-28 23:19:17 +02:00
patchback[bot]
8beb5d70c5 machinectl: include the success command (#5287) (#5312)
Combines the success command when building the become command. This is
consistent with other become plugins.

(cherry picked from commit f3bcfa5a75)

Co-authored-by: Ben Brown <ben@demerara.io>
2022-09-28 13:57:10 +02:00
patchback[bot]
f9fecf12e7 locale_gen: fix UbuntuMode (#5282) (#5310)
* Fix UbuntuMode

* Fix indentation

* Create 5281-locale_gen.yaml

* Update and rename 5281-locale_gen.yaml to 5282-locale_gen.yaml

* apply suggested changes

* apply suggested change

(cherry picked from commit fb1cf91ebd)

Co-authored-by: Bartosz-lab <73119351+Bartosz-lab@users.noreply.github.com>
2022-09-25 21:07:46 +02:00
patchback[bot]
b165337bbe ini_file: fix lint error (#5307) (#5308)
* ini_file: fix lint error

* add changelog fragment

* remove line from sanity test ignore files

(cherry picked from commit f0ee21b8b2)

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2022-09-25 21:07:35 +02:00
patchback[bot]
6572f46998 Add SetSessionService to redfish_config (#5009) (#5311)
* Add SetSessionService to redfish_config
adding SetSessionService command to redfish_config
to set BMC default session timeout policy.

Fixes #5008

* fix white space issues

* Making Requested changes:
 - changed category from SessionService to Sessions
 - changed set_sessionservice() to set_session_service()
 - other misc. changes for cleanup

* Apply suggestions from code review

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

* Fix issues with checks

* Fix issues with checks part 2

* Fix issues with checks part 3

* Update plugins/modules/remote_management/redfish/redfish_config.py

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

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit d9d830a168)

Co-authored-by: tejabailey <33755314+tejabailey@users.noreply.github.com>
2022-09-25 19:07:21 +00:00
patchback[bot]
b4ae2ce44d netcup_dnsapi: Add timeout paramter (#5301) (#5302)
* netcup_dnsapi: Add timeout paramter

* add changelog fragment

* Apply suggestions from code review

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

* remove unnecessary newline

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

Co-authored-by: Marc Leuser <marcquark@users.noreply.github.com>
2022-09-22 12:33:55 +02:00
Felix Fontein
baec510c40 Add stable-2.14 to CI, adjust to devel version bump (#5298) (#5300)
* Add stable-2.14 to CI, adjust to devel version bump.

* Thin out matrix a bit.

(cherry picked from commit a938c9de65)
2022-09-21 08:28:29 +02:00
patchback[bot]
96cda3a48a New module: Proxmox disk management (#5101) (#5295)
* New module: Proxmox disk management

* Remove misplaced option

* Type missed

* Fixed docs, quotes, 2.7 syntax

* Forgotten comma

* Version added 5.5.0

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

* Italic options

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

* Missed dot

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

* Pythonify python

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

* Shorten command

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

* Action parameter drop. General improvements.

* Add proxmox_disk integration testing

* Shorten getting vmid

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

* Code tag for value

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

* Italic tag for option

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

* Definite ID of the VM

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

* Docs edit and loop condition

* Simplify conditions

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

* Dropped bps options, added idempotency checks

* Documentaion edit

* Rewrite create/import condition

* Trainling comma

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

* Added type field to all choosable arguments

* Description of disk bus ranges

* Fix imports

* Update version

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

* Lowercase YAML boolean

* Rename grown to resized and update documentation

* Documentation updated before actual changes

* Added 'update' flag for 'present' state

* Traling space

* YAML indentation

* Merged 'updated' option into 'present'.

* Doc update.

* Exclude 'import_from' on update

* Version bump

* yaml boolean lowercase

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

* yaml boolean lowercase

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

* More detailed description

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

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit 7777b48c99)

Co-authored-by: castorsky <csky57@gmail.com>
2022-09-19 20:19:21 +02:00
patchback[bot]
9dc2e2d032 pipx module utils: removed unused import (#5288) (#5292)
(cherry picked from commit 35e3a9615a)

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2022-09-18 12:05:17 +02:00
Felix Fontein
86c0af6cbb Next expected release is 5.7.0. 2022-09-13 13:28:07 +02:00
Felix Fontein
f5a2d32caa Release 5.6.0. 2022-09-13 13:10:09 +02:00
Felix Fontein
c11b7b4c86 Prepare 5.6.0 release. 2022-09-13 07:47:20 +02:00
patchback[bot]
cdbcf8abc7 add a couple conditionals to make sure updating can be done with vmid… (#5206) (#5279)
* add a couple conditionals to make sure updating can be done with vmid only

* add changelog to PR

* replace conditional with any

* any takes list

* fix next conditional

* Update changelogs/fragments/5206-proxmox-conditional-vmid.yml

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

* capitalize VM and remove conditional for name requirement upon creation

* Fix URL destroyed by GitHub.

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

Co-authored-by: Yvan E. Watchman <git@yvanwatchman.eu>
Co-authored-by: Felix Fontein <felix@fontein.de>
Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
(cherry picked from commit 19e4b7d3ab)

Co-authored-by: Yvan Watchman <ik@yvanwatchman.eu>
2022-09-12 21:15:25 +02:00
patchback[bot]
2e781bf8c4 gitlab_hook: minor refactoring (#5271) (#5278)
* gitlab_hook: minor refactoring

* add changelog fragment

(cherry picked from commit fbb6ceea1d)

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2022-09-12 21:14:22 +02:00
patchback[bot]
8f588ac745 slack: add CP channel prefix (#5249) (#5280)
* add CP channel prefix

* changelog added

* altered docs

* added description for docs change

* fix line length

* Update plugins/modules/notification/slack.py

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

* Update plugins/modules/notification/slack.py

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

* Update plugins/modules/notification/slack.py

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

* Update plugins/modules/notification/slack.py

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

* Update changelogs/fragments/5249-add-new-channel-prefix.yml

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

Co-authored-by: Денис Сперанский <d_speranskiy@head-point.ru>
Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit b5d311a171)

Co-authored-by: sprnza <denis@speran.info>
2022-09-12 21:14:10 +02:00
patchback[bot]
7cd9b839c5 gitlab modules: improved imports (#5259) (#5277)
* gitlab modules: improved imports

* add changelog fragment

* refactored the import check to its sole function

(cherry picked from commit 6b463e6fa6)

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2022-09-12 21:13:59 +02:00
patchback[bot]
e4651c1bf3 Fix changelogs killed by GitHub. (#5272) (#5273)
(cherry picked from commit 5470ea30dc)

Co-authored-by: Felix Fontein <felix@fontein.de>
2022-09-10 12:41:23 +02:00
patchback[bot]
0342cf1730 multiple modules: removed unused imports (#5258) (#5268)
(cherry picked from commit 0a85bb7d23)

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2022-09-10 12:18:27 +02:00
patchback[bot]
269df75421 Fix pkgng tests (#5266) (#5270)
* Now there are problems with 13.0 as well. But maybe 13.1 works again?

* 13.1 still does not work, maybe 13.2 will (not yet available in CI)...

(cherry picked from commit b371bd6a5b)

Co-authored-by: Felix Fontein <felix@fontein.de>
2022-09-10 11:40:01 +02:00
patchback[bot]
bc32914424 osx_defaults: add expand_user_and_vars flag to write (#5243) (#5260)
* Add expand_user_and_vars flag to write

Closes #5234

* Add changelog

* Update changelogs/fragments/5243-osx-defaults-expand-user-flags.yml

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

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

Co-authored-by: Pavel Zwerschke <pavelzw@gmail.com>
2022-09-10 11:18:55 +02:00
patchback[bot]
21ad7c8bfa Restrict Python packages for nomad tests. (#5262) (#5265)
(cherry picked from commit dde0b55f1a)

Co-authored-by: Felix Fontein <felix@fontein.de>
2022-09-10 11:18:43 +02:00
patchback[bot]
ae3fe51929 changed the default proxmox container unprivileged flag (#5224) (#5261)
* changed the default proxmox container to unprivileged

* Reverted the default value with a deprecation.

* use true/false instead of yes/no

* Update plugins/modules/cloud/misc/proxmox.py

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

* Apply suggestions from code review

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

* param -> parameter

* Apply suggestions from code review

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

* fix

* review

* Update changelogs/fragments/5224-proxmox-unprivileged-default.yaml

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

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit 33059a807c)

Co-authored-by: Shaul Shnaidman <shaul753@gmail.com>
2022-09-10 11:03:16 +02:00
patchback[bot]
5d6047a21a multiple modules: removed unused imports (#5240) (#5257)
* multiple modules: removed unused imports

* fixed ali_instance(_info) import check

* add changelog fragment

* Update changelogs/fragments/5240-unused-imports.yaml

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

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

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2022-09-09 22:38:29 +02:00
patchback[bot]
c0d11f631f homebrew: add Linux brew path to defaults (#5241) (#5254)
* homebrew: add Linux brew path to defaults

* changelogs: add 5241 fragment

* homebrew_tap: add Linux brew path to defaults

* changelogs: update 5241 entry

* homebrew_tap: format path separator in desc

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

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

Co-authored-by: Dawid Dziurla <dawidd0811@gmail.com>
2022-09-08 08:05:36 +02:00
patchback[bot]
173c8b1dfa nmcli: honor IP options for VPNs (#5228) (#5252)
* nmcli: honor IP options for VPNs

This can be used for split tunneling - I extended a test as an example.

* Add changelog

(cherry picked from commit 946c48d148)

Co-authored-by: Chih-Hsuan Yen <yan12125@gmail.com>
2022-09-08 07:53:36 +02:00
patchback[bot]
005db8177e nmcli: Add xmit_hash_policy to bond options. (#5149) (#5253)
* Add xmit_hash_policy to nmcli bond-options.

* #5149 - Add changelog fragment.

* Update plugins/modules/net_tools/nmcli.py

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

* Update changelogs/fragments/5149-nmcli-bond-option.yml

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

Co-authored-by: Ole Pannbacker <opannbacker@cronon.net>
Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit b4f89b78dd)

Co-authored-by: betuxy <72452886+betuxy@users.noreply.github.com>
2022-09-08 07:53:26 +02:00
patchback[bot]
8595601708 Normalize more booleans. (#5247) (#5250)
(cherry picked from commit 015566fb06)

Co-authored-by: Felix Fontein <felix@fontein.de>
2022-09-06 21:07:46 +02:00
patchback[bot]
7229ef4ac4 nagios: some refactoring (#5239) (#5246)
* nagios: some refactoring

* rollback one change

* add changelog fragment

* Update changelogs/fragments/5239-nagios-refactor.yaml

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

* Update plugins/modules/monitoring/nagios.py

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

* Update plugins/modules/monitoring/nagios.py

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

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

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2022-09-06 08:06:17 +02:00
patchback[bot]
5170c26ffd multiple modules 2: fixed markups in doc (#5237) (#5244)
* multiple modules 2: fixed markups in doc

* Update plugins/modules/cloud/misc/proxmox_template.py

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

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

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2022-09-06 08:05:25 +02:00
patchback[bot]
64049a35de Multiple doc fix 3 (#5238) (#5245)
* multiple modules 2: fixed markups in doc

* multiple modules 3: fixed markups in doc

* fixed yaml

* Update plugins/modules/cloud/misc/proxmox_template.py

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

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

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2022-09-06 08:05:16 +02:00
patchback[bot]
3427e02fce multiple modules: fixed markups in doc (#5227) (#5233)
(cherry picked from commit 6e011f00f4)

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2022-09-04 15:59:57 +02:00
patchback[bot]
f2e1abfe5e ali_instance: fixed markups in doc (#5226) (#5232)
* ali_instance: fixed markups in doc

* Update plugins/modules/cloud/alicloud/ali_instance.py

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

* Update plugins/modules/cloud/alicloud/ali_instance.py

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

* Update plugins/modules/cloud/alicloud/ali_instance.py

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

* Update plugins/modules/cloud/alicloud/ali_instance.py

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

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

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2022-09-04 15:59:47 +02:00
patchback[bot]
fc0d813d5f ipwcli_dns: fixed markups in doc (#5225) (#5230)
* ipwcli_dns: fixed markups in doc

* added punctuation

(cherry picked from commit a481f8356e)

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2022-09-04 15:59:31 +02:00
patchback[bot]
b51e008358 New module: pipx_info (#5196) (#5219)
* pipx_info: new module

* pipx_info: add integration tests

* ensure apps are uninstalled after tests

* Update plugins/modules/packaging/language/pipx_info.py

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

* rework module output, add docs

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

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2022-09-03 13:35:58 +02:00
patchback[bot]
b32b69742b WDC Redfish support for setting the power mode. (#5145) (#5223)
* WDC Redfish support for setting the power mode.

* Apply suggestions from code review

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

* Add change fragment.

* Add extension to changelog fragment.

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

Co-authored-by: Mike Moerk <michael.moerk@wdc.com>
2022-09-03 12:51:31 +02:00
patchback[bot]
73ee9702db consul: add support for session token (#5193) (#5222)
Signed-off-by: Wilfried Roset <wilfriedroset@users.noreply.github.com>

Signed-off-by: Wilfried Roset <wilfriedroset@users.noreply.github.com>
(cherry picked from commit feabe20c63)

Co-authored-by: wilfriedroset <wilfriedroset@users.noreply.github.com>
2022-09-03 12:23:02 +02:00
patchback[bot]
1cddae2265 nmcli: avoid changed status for most cases with VPN connections (#5126) (#5220)
* nmcli: avoid changed status for most cases with VPN connections

Follow-up https://github.com/ansible-collections/community.general/pull/4746

* `nmcli connection show` includes vpn.service-type but not vpn-type.
  Switching to vpn.service-type removes unneeded diffs while keeping
  the same functionality, as vpn-type is an alias of vpn.service-type
  per nm-settings-nmcli(1).

  NetworkManager also adds `org.freedesktop.NetworkManager.` prefix for
  known VPN types [1]. The logic is non-trivial so I didn't implement it
  in this commit. If a user specifies `service-type: l2tp`, changed will
  be always be True:

    -    "vpn.service-type": "org.freedesktop.NetworkManager.l2tp"
    +    "vpn.service-type": "l2tp"

* The vpn.data field from `nmcli connection show` is sorted by keys and
  there are spaces around equal signs. I added codes for parsing such
  data.

Tests are also updated to match outputs of nmcli commands.

[1] https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/blob/1.38.4/src/libnm-core-impl/nm-vpn-plugin-info.c#L619

* Add changelog

* Some suggested changes

* Make space stripping more flexible - works for cases without equal
  signs.
* Keep vpn.data in a test case with no spaces

* nmcli: allow any string for vpn service-type

(cherry picked from commit 6ff594b524)

Co-authored-by: Chih-Hsuan Yen <yan12125@gmail.com>
2022-09-03 12:15:38 +02:00
patchback[bot]
ea2df93116 Bugfix - EnvironmentError with wrong indentation (#5202) (#5221)
* The EnvironmentError is now handled in the splid_pid_name function.

The error also had a wrong indentation. See previous setup with correct setup: 6a7811f696/plugins/modules/system/listen_ports_facts.py

* Add changelog fragment

* Sanity Check failed before

* Update changelogs/fragments/5202-bugfix-environmentError-wrong-indentation.yaml

Co-authored-by: Paul-Kehnel <paul.kehnel@ocean.ibm.com>
Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit 36a7939962)

Co-authored-by: PKehnel <ga65coy@mytum.de>
2022-09-03 12:15:30 +02:00
patchback[bot]
e646d21935 seport: add local argument (#5203) (#5218)
Using `local: true` users can enforce to work only with local policy
modifications. i.e.

    # Without `local`, no new modification is added when port already exists
    $ sudo ansible -m seport -a 'ports=22 state=present setype=ssh_port_t proto=tcp' localhost

    localhost | SUCCESS => {
        "changed": false,
        "ports": [
            "22"
        ],
        "proto": "tcp",
        "setype": "ssh_port_t",
        "state": "present"
    }

    $ sudo semanage port -l -C

    # With `local`, a port is always added/changed in local modification list
    $ sudo ansible -m seport -a 'ports=22 state=present setype=ssh_port_t proto=tcp local=true' localhost

    localhost | CHANGED => {
        "changed": true,
        "ports": [
            "22"
        ],
        "proto": "tcp",
        "setype": "ssh_port_t",
        "state": "present"
    }

    $ sudo semanage port -l -C
    SELinux Port Type              Proto    Port Number

    ssh_port_t                     tcp      22

    # With `local`, seport removes the port only from local modifications
    $ sudo ansible -m seport -a 'ports=22 state=absent setype=ssh_port_t proto=tcp local=true' localhost

    localhost | CHANGED => {
        "changed": true,
        "ports": [
            "22"
        ],
        "proto": "tcp",
        "setype": "ssh_port_t",
        "state": "absent"
    }

    $ sudo semanage port -l -C

    # Even though the port is still defined in system policy, the module
    # result is success as there's no port local modification
    $ sudo ansible -m seport -a 'ports=22 state=absent setype=ssh_port_t proto=tcp local=true' localhost

    localhost | SUCCESS => {
        "changed": false,
        "ports": [
            "22"
        ],
        "proto": "tcp",
        "setype": "ssh_port_t",
        "state": "absent"
    }

    # But it fails without `local` as it tries to remove port defined in
    # system policy
    $ sudo ansible -m seport -a 'ports=22 state=absent setype=ssh_port_t proto=tcp' localhost

    An exception occurred during task execution. To see the full traceback, use -vvv. The error was: ValueError: Port tcp/22 is defined in policy, cannot be deleted
    localhost | FAILED! => {
        "changed": false,
        "msg": "ValueError: Port tcp/22 is defined in policy, cannot be deleted\n"
    }

Signed-off-by: Petr Lautrbach <plautrba@redhat.com>

Signed-off-by: Petr Lautrbach <plautrba@redhat.com>
(cherry picked from commit 4c52fdb9d9)

Co-authored-by: Petr Lautrbach <plautrba@redhat.com>
2022-09-03 11:58:47 +02:00
patchback[bot]
f522802977 Update BOTMETA.yml (#5165) (#5217)
* Update BOTMETA.yml

Removing Endlesstrax and Amigus as maintainers.

* Update .github/BOTMETA.yml

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

* Update BOTMETA.yml

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

Co-authored-by: tylerezimmerman <100804646+tylerezimmerman@users.noreply.github.com>
2022-09-03 11:46:31 +02:00
patchback[bot]
3710f28efb Catch more broader error messages. (#5212) (#5215)
(cherry picked from commit fa49051912)

Co-authored-by: Felix Fontein <felix@fontein.de>
2022-09-03 11:38:38 +02:00
patchback[bot]
2f24bcef8f Fix exception when agent argument is not specified. (#5194) (#5195)
(cherry picked from commit 82d69bb871)

Co-authored-by: Markus Reiter <me@reitermark.us>
2022-08-28 12:16:07 +02:00
patchback[bot]
6223b755e1 [TEMP] Fix RHEL 8 issues by restricting bcrypt to < 4.0.0 (#5183) (#5187)
(cherry picked from commit 8e59e52525)

Co-authored-by: Felix Fontein <felix@fontein.de>
2022-08-25 08:07:20 +02:00
patchback[bot]
813c6e232d filesystem: create temp directory outside /tmp to avoid problems with tmpfs. (#5182) (#5185)
(cherry picked from commit 8027bc5335)

Co-authored-by: Felix Fontein <felix@fontein.de>
2022-08-25 06:58:58 +02:00
patchback[bot]
3e4aae56bd Update redfish module for compatibility with VirtualMedia resource location (#5124) (#5180)
* Update redfish module for compatibility with VirtualMedia resource location from Manager to Systems

* Add changelogs fragments for PR 5124

* Update some issue according to the suggestions

* update changelogs fragment to list new features in the minor_changes catagory

Co-authored-by: Tami YY3 Pan <panyy3@lenovo.com>
(cherry picked from commit 766c109d47)

Co-authored-by: jixj5 <66418293+jixj5@users.noreply.github.com>
2022-08-24 21:44:44 +02:00
patchback[bot]
b099a465c5 Adjust booleans in misc plugins. (#5161) (#5175)
(cherry picked from commit 19ce50f6b9)

Co-authored-by: Felix Fontein <felix@fontein.de>
2022-08-24 21:39:13 +02:00
patchback[bot]
d2b0a0d2bf Fix indent. (#5177) (#5179)
(cherry picked from commit 57e1e2bd8e)

Co-authored-by: Felix Fontein <felix@fontein.de>
2022-08-24 20:53:26 +02:00
patchback[bot]
fe0a5fd85f Adjust booleans in notification modules. (#5157) (#5171)
(cherry picked from commit 35a283918a)

Co-authored-by: Felix Fontein <felix@fontein.de>
2022-08-24 20:48:53 +02:00
patchback[bot]
f3a2750205 Adjust booleans in monitoring modules. (#5156) (#5170)
(cherry picked from commit 1b480e9f37)

Co-authored-by: Felix Fontein <felix@fontein.de>
2022-08-24 20:47:17 +02:00
Felix Fontein
5657889b28 Adjust booleans in system modules (#5153) (#5178)
* Adjust booleans in system modules.

* Fix some IP addresses

Co-authored-by: Sandra McCann <samccann@redhat.com>

Co-authored-by: Sandra McCann <samccann@redhat.com>
(cherry picked from commit be2de15c66)
2022-08-24 20:46:48 +02:00
patchback[bot]
1b2fbd72de Adjust booleans in doc fragments. (#5152) (#5168)
(cherry picked from commit bcecf2dcdc)

Co-authored-by: Felix Fontein <felix@fontein.de>
2022-08-24 20:46:40 +02:00
patchback[bot]
5a2e7f9b1b Adjust booleans in packaging modules. (#5154) (#5169)
(cherry picked from commit ddc989ec6d)

Co-authored-by: Felix Fontein <felix@fontein.de>
2022-08-24 20:46:30 +02:00
patchback[bot]
c5ff49db56 Adjust booleans in misc modules. (#5160) (#5174)
(cherry picked from commit 403c4f7477)

Co-authored-by: Felix Fontein <felix@fontein.de>
2022-08-24 20:29:08 +02:00
patchback[bot]
43dc6ba533 Adjust booleans in cloud modules. (#5155) (#5176)
(cherry picked from commit 3a08903e1c)

Co-authored-by: Felix Fontein <felix@fontein.de>
2022-08-24 20:22:10 +02:00
patchback[bot]
eb1f0c28a9 Adjust booleans in net tools, web infrastructure, and clustering modules. (#5159) (#5173)
(cherry picked from commit 7533f9ac26)

Co-authored-by: Felix Fontein <felix@fontein.de>
2022-08-24 20:22:02 +02:00
patchback[bot]
41993d44e2 Adjust booleans in source control modules. (#5158) (#5172)
(cherry picked from commit 675bdef190)

Co-authored-by: Felix Fontein <felix@fontein.de>
2022-08-24 20:21:52 +02:00
patchback[bot]
9345db2001 adding nested try block for tss.py to import new Delinea library (#5151) (#5164)
* adding nested try block to import delinea library

* whitespace

* Update plugins/lookup/tss.py

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

* adding changelog fragment

* Update changelogs/fragments/5151-add-delinea-support-tss-lookup.yml

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

Co-authored-by: Tom Reeb <Thomas.Reeb_e@morganlewis.com>
Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit 9f39294f50)

Co-authored-by: Tom Reeb <tomreeb@users.noreply.github.com>
2022-08-23 22:03:30 +02:00
Felix Fontein
527417dce9 Next expected release is 5.6.0. 2022-08-23 18:31:43 +02:00
Felix Fontein
7bca37a098 Release 5.5.0. 2022-08-23 14:06:45 +02:00
Felix Fontein
4f18ecacfe Prepare 5.5.0 release. 2022-08-21 22:11:39 +02:00
patchback[bot]
cf17033278 feat: Add crc32 filter (#5062) (#5140)
* feat: Add crc32 filter

Compute CRC32 checksum of a string and return its hex representation. Can be
use to create short checksums.

Signed-off-by: Julien Riou <julien@riou.xyz>

* Update license lines

* Improve string check of a crc32 value

Signed-off-by: Julien Riou <julien@riou.xyz>

Signed-off-by: Julien Riou <julien@riou.xyz>
Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit 8e9ec610c3)

Co-authored-by: Julien Riou <julien@riou.xyz>
2022-08-21 22:08:42 +02:00
Felix Fontein
1c07537dd5 Fix workflow's permissions.
(cherry picked from commit 2149056595)
2022-08-21 11:35:59 +02:00
patchback[bot]
a886633758 Make reuse conformant (#5138) (#5139)
* Add .license files.

* Add reuse test.

* Update README.

* Also remove .yaml changelog fragments.

* Add changelog fragment.

* Normalize licenses extra sanity test.

* Declare REUSE conformance.

* Update README.md

(cherry picked from commit 02d9a1de9e)

Co-authored-by: Felix Fontein <felix@fontein.de>
2022-08-21 09:14:04 +02:00
patchback[bot]
2e11c2dfa4 dig: Fix evaluation of boolean parameters (#5129) (#5137)
* Add lookup_dig tests

* Fix boolean evaluation

* Add changelog fragment

* Apply review changes

* Add license

(cherry picked from commit 3c2d7eb193)

Co-authored-by: Michal Hybner <76526074+mu1f407@users.noreply.github.com>
2022-08-20 14:49:33 +02:00
patchback[bot]
43e599abb1 Increase xfs size to 300 MB. This seems to be new minimal size. (#5133) (#5136)
(cherry picked from commit 98ea27847f)

Co-authored-by: Felix Fontein <felix@fontein.de>
2022-08-20 13:55:53 +02:00
patchback[bot]
ef11714708 Fix nsupdate when updating NS record (#5112) (#5132)
* Fix nsupdate when updating NS record

* Changelog fragment

* Update changelogs/fragments/5112-fix-nsupdate-ns-entry.yaml

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

* Switch to fallback to AUTHORITY instead of using with NS type.

* Update plugins/modules/net_tools/nsupdate.py

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

* Update plugins/modules/net_tools/nsupdate.py

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

Co-authored-by: jonathan lung <lungj@heresjono.com>
Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit ad8965218d)

Co-authored-by: Jonathan Lung <lungj@users.noreply.github.com>
2022-08-20 13:34:36 +02:00
patchback[bot]
6cd2b4f93b Change Proxmox agent argument to string. (#5107) (#5130)
* Change Proxmox `agent` argument to string.

* Add changelog entry.

* Pass boolean directly to `proxmoxer`.

(cherry picked from commit 0be7b6e7b9)

Co-authored-by: Markus Reiter <me@reitermark.us>
2022-08-20 13:34:05 +02:00
patchback[bot]
a509c08b3a pipx: add state latest (#5105) (#5125)
* pipx: add state latest

* add changelog fragment

* Update plugins/modules/packaging/language/pipx.py

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

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

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2022-08-18 13:11:39 +02:00
patchback[bot]
4f036cc7f8 Remove Fedora 35 from devel CI runs. (#5121) (#5123)
(cherry picked from commit ad0c7095d4)

Co-authored-by: Felix Fontein <felix@fontein.de>
2022-08-16 22:38:06 +02:00
patchback[bot]
bc2403042a [PR #5098/aab22e7f backport][stable-5] Add remaining copyright statements, add licenses sanity test (#5099)
* Add remaining copyright statements, add licenses sanity test (#5098)

* Add sanity test (currently fails).

* doc_fragments can also be non-GPLv3+.

* Replace 'Author:' by 'Copyright:' in some specific cases.

* Avoid matching string for license checkers.

* Reformulate not to throw license detection off.

* Add PSF copyright notice for plugins/module_utils/_mount.py.

* Add generic copyright notices.

* Update changelog fragment.

(cherry picked from commit aab22e7f32)

* Update copyright statements. (#5106)

(cherry picked from commit c8925058aa)

Co-authored-by: Felix Fontein <felix@fontein.de>
2022-08-14 10:26:44 +02:00
patchback[bot]
f67708f91c Try to install virtualenv via pip on Arch. (#5116) (#5119)
ci_complete

(cherry picked from commit 3dcff121c4)

Co-authored-by: Felix Fontein <felix@fontein.de>
2022-08-13 12:53:21 +02:00
patchback[bot]
2587a2588d Fix linting errors; fix some real bugs (#5111) (#5114)
* Fix linting errors.

* Fix bugs.

* Another linter error ignored.

* More fixes.

* Ignore sanity errors with older versions.

ci_complete

* Forgot to commit more changes.

(cherry picked from commit a54af8909c)

Co-authored-by: Felix Fontein <felix@fontein.de>
2022-08-12 12:33:02 +02:00
patchback[bot]
5a93168d88 Fix Proxmox node, name condition. (#5108) (#5110)
* Fix Proxmox `node`, `name` condition.

* Add changelog entry.

(cherry picked from commit 0338eb7a7c)

Co-authored-by: Markus Reiter <me@reitermark.us>
2022-08-12 07:48:33 +02:00
patchback[bot]
e962da8b9d pipx: add required_if fo upgrade and reinstall (#5100) (#5102)
* pipx: add required_if for upgrade and reinstall

* add changelog fragment

(cherry picked from commit 83317419d7)

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2022-08-09 10:29:22 +02:00
patchback[bot]
0d598c3542 Fix more copyright lines, add more default copyright lines (#5095) (#5096)
* Fix copyright lines.

* Add default copyright line.

(cherry picked from commit 424d706f92)

Co-authored-by: Felix Fontein <felix@fontein.de>
2022-08-08 15:19:46 +02:00
patchback[bot]
7b73a83b91 Add more default license and copyright notices (#5087) (#5094)
* Add more default license and copyright notices.

* Fix tests.

* Fix typos.

* Fix task type.

* Add URL to changelog fragment.

* Improve headers for setup_wildfly_server.

(cherry picked from commit 9327b12c4d)

Co-authored-by: Felix Fontein <felix@fontein.de>
2022-08-08 14:06:21 +02:00
patchback[bot]
82cdc354fa pipx: use CmdRunner (#5085) (#5093)
* pipx: use CmdRunner

* added BOTMETA entry for pipx module_utils

* add changelog fragment

* add missing line

* Update plugins/module_utils/pipx.py

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

* Update plugins/module_utils/pipx.py

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

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

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2022-08-08 08:41:08 +02:00
patchback[bot]
a125458748 Add more license statements (#5079) (#5088)
* Add more license statements. These were modified manually incorporating existing data.

* Remove accidentally added line.

(cherry picked from commit 2a9fd7359f)

Co-authored-by: Felix Fontein <felix@fontein.de>
2022-08-07 12:03:49 +00:00
patchback[bot]
df59034d75 WDC Redfish support for chassis indicator LED toggling. (#5059) (#5086)
* WDC Redfish support for chassis indicator LED toggling.

* Added changelog fragment.

* Apply suggestions from code review

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

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

Co-authored-by: Mike Moerk <mike@moerk.org>
2022-08-07 10:14:07 +02:00
patchback[bot]
6a029bcba3 Fix copyright lines (make sure 'Copyright' is there). (#5083) (#5084)
(cherry picked from commit 496bf27b5c)

Co-authored-by: Felix Fontein <felix@fontein.de>
2022-08-05 22:45:15 +02:00
patchback[bot]
1790dbd5e1 Add simple license headers, not completely at top. (#5080) (#5082)
(cherry picked from commit 68e7e52557)

Co-authored-by: Felix Fontein <felix@fontein.de>
2022-08-05 21:56:40 +02:00
Felix Fontein
7933fe7ea3 Make sure all files have trailing newline (#5076) (#5081)
* Make sure all files have trailing newline.

* Adjust tests.

(cherry picked from commit fa6c009ff0)
2022-08-05 21:31:26 +02:00
patchback[bot]
45990b464e Remove superfluous empty file. (#5077) (#5078)
(cherry picked from commit 79b201ae49)

Co-authored-by: Felix Fontein <felix@fontein.de>
2022-08-05 20:54:42 +02:00
Felix Fontein
22a400d626 Add default license header to files which have no copyright or license header yet (#5074) (#5075)
* Add default license header to files which have no copyright or license header yet.

* yml extension should have been xml...

(cherry picked from commit 1ab2a5f1bc)
2022-08-05 20:16:36 +02:00
patchback[bot]
203747027e Move licenses to LICENSES/, run add-license.py, add LICENSES/MIT.txt (#5065) (#5068)
* Move licenses to LICENSES/, run add-license.py, add LICENSES/MIT.txt.

* Replace 'Copyright:' with 'Copyright'

sed -i 's|Copyright:\(.*\)|Copyright\1|' $(rg -l 'Copyright:')

Co-authored-by: Maxwell G <gotmax@e.email>
(cherry picked from commit 123c7efe5e)

Co-authored-by: Felix Fontein <felix@fontein.de>
2022-08-05 13:17:19 +02:00
patchback[bot]
ffd51d1e22 aix_filesystem: Fix examples (#5067) (#5071)
`community.general.filesystem` is not a valid argument to
aix_filesystem.

(cherry picked from commit 8f37638480)

Co-authored-by: Maxwell G <9920591+gotmax23@users.noreply.github.com>
2022-08-05 12:46:57 +02:00
patchback[bot]
4e13c8b969 Fix docs. (#5063) (#5064)
(cherry picked from commit f67473024d)

Co-authored-by: Felix Fontein <felix@fontein.de>
2022-08-04 21:10:48 +02:00
Felix Fontein
bccf77a461 Next expected release is 5.5.0. 2022-08-02 12:39:38 +02:00
Felix Fontein
6b3c797bf6 Release 5.4.0. 2022-08-02 12:20:29 +02:00
patchback[bot]
a81e94ddc7 WDC Redfish firmware update support for update image creds (#5056) (#5057)
Allows user to specify Basic Auth credentials for firmware update image.

(cherry picked from commit 4eb3540c8e)

Co-authored-by: Mike <michael.moerk@wdc.com>
2022-08-02 10:20:15 +02:00
patchback[bot]
e56dafde94 Set CARGO_NET_GIT_FETCH_WITH_CLI=true for cargo on Alpine. (#5053) (#5055)
(cherry picked from commit b5eae69e36)

Co-authored-by: Felix Fontein <felix@fontein.de>
2022-08-01 23:20:33 +02:00
patchback[bot]
767a296b60 New lookup plug-in: bitwarden (#5012) (#5049)
* Basic support for Bitwarden lookups

Co-authored-by: Felix Fontein <felix@fontein.de>
Co-authored-by: Sviatoslav Sydorenko <wk.cvs.github@sydorenko.org.ua>

* Update plugins/lookup/bitwarden.py

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

* Update plugins/lookup/bitwarden.py

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

* Update plugins/lookup/bitwarden.py

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

Co-authored-by: jonathan lung <lungj@heresjono.com>
Co-authored-by: Felix Fontein <felix@fontein.de>
Co-authored-by: Sviatoslav Sydorenko <wk.cvs.github@sydorenko.org.ua>
(cherry picked from commit ab0cd83bb1)

Co-authored-by: Jonathan Lung <lungj@users.noreply.github.com>
2022-08-01 11:52:05 +02:00
patchback[bot]
963bbaccb7 xfconf: add command output to results (#5037) (#5051)
* xfconf: add command output to results

* add changelog fragment

* add docs for return value cmd

* Update plugins/modules/system/xfconf.py

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

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

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2022-08-01 11:27:57 +02:00
patchback[bot]
9358640ed9 Fix: Add user-agent header to allow request through WAF with bot protection (#5024) (#5046)
* Fix: Add user agent header to allow request through CDN/WAF with bot protection

* upate doc-fragment

* move http_agent variable assignment

* set http_agent param for all Keycloak API Requests

* Update plugins/doc_fragments/keycloak.py

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

* Update changelogs/fragments/5023-http-agent-param-keycloak.yml

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

* fix formatting

* Update plugins/doc_fragments/keycloak.py

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

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

Co-authored-by: Dishant Pandya <drpdishant@gmail.com>
2022-08-01 09:59:49 +02:00
patchback[bot]
2846242e95 lastpass lookup: use config manager, improve documentation (#5022) (#5047)
* LastPass lookup: use config manager, improve documentation

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

* Update changelogs/fragments/5022-lastpass-lookup-cleanup.yml

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

Co-authored-by: jonathan lung <lungj@heresjono.com>
Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit e8e6b9bbd7)

Co-authored-by: Jonathan Lung <lungj@users.noreply.github.com>
2022-08-01 09:59:36 +02:00
patchback[bot]
ce934aa49b Slack: Add support for (some) groups (#5019) (#5044)
* Slack: Add support for (some) groups

Some of the older private channels in the workspace I'm working in have channel ID's starting with `G0` and `GF` and this resulted to false positive `channel_not_found` errors.
I've added these prefixes to the list to maintain as much backwards compatibility as possible.

Ideally the auto-prefix of the channel name with `#` is dropped entirely, given the Channel ID's have become more dominant in the Slack API over the past years.

* Add changelog fragment for slack channel prefix fix

* Update changelogs/fragments/5019-slack-support-more-groups.yml

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

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

Co-authored-by: Richard Tuin <richardtuin@gmail.com>
2022-07-31 23:52:47 +02:00
Felix Fontein
083bd49976 Prepare 5.4.0 release. 2022-07-31 22:57:11 +02:00
patchback[bot]
2cc72c2213 Pacman: Add support for install reason (#4956) (#5040)
* Pacman: Add support for setting install reason

* Improved description

* Fix documentation

* Add changelog fragment

* Use source for installation

* Get all reasons at once

* Removed default for reason

* Added version info to documentation

* Fix NameError

* Moved determination of reason to _build_inventory

* Fix duplication and sanity errors

* adjust tests for changed inventory

* Documentation: remove empty default for reason

* mention packages with changed reason in exit params/info

* Added integration tests for reason and reason_for

Inspired by the integration tests for url packages

* Correct indentation

* Fix indentation

* Also sort changed packages in normal mode

* Also sort result in unit test

* Apply suggestions from code review

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

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

Co-authored-by: Minei3oat <Minei3oat@users.noreply.github.com>
2022-07-31 22:55:21 +02:00
patchback[bot]
1f4a98c8cc Module listen ports facts extend output (#4953) (#5041)
* Initial Rework of netstat and ss to include additional information.
State, foreign address, process.

* Fixed sanity tests. Python 2 compatible code. pylint errors resolved.

* Sanity tests. ss_parse fix minor error I created before.

* Rename variable for clarity

* Python2 rsplit takes no keyword argument. -> remove keyword argument

* Generic improvments for split_pid_name. Added changelog

* Sanity Test (no type hints for python2.7)

* add include_non_listening param. Add param to test. Add documentation. Only return state and foreign_address when include_non_listening

* Update changelogs/fragments/4953-listen-ports-facts-extend-output.yaml

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

* Add info to changelog fragment. Clarify documentation.

* The case where we have multiple entries in pids for udp eg: users:(("rpcbind",pid=733,fd=5),("systemd",pid=1,fd=30)) is not in the tests. So roll back to previous approach where this is covered. Fix wrong if condition for include_non_listening.

* Rewrite documentation and formatting.

* Last small documentation adjustments.

* Update parameters to match description.

* added test cases to check if include_non_listening is set to no by default. And test if ports and foreign_address exists if set to yes

* undo rename from address to local_address -> breaking change

* Replace choice with bool, as it is the correct fit here

* nestat distinguishes between tcp6 and tcp output should always be tcp

* Minor adjustments in the docs (no -> false, is set to yes -> true)

Co-authored-by: Paul-Kehnel <paul.kehnel@ocean.ibm.com>
Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit c273498a03)

Co-authored-by: PKehnel <ga65coy@mytum.de>
2022-07-31 22:55:13 +02:00
patchback[bot]
53b2d69bd7 passwordstore: Add some real gopass integration tests (#5030) (#5042)
* passwordstore: Add some real go tests

This is work in progress.

* passwordstore: Fix gopass init

* Init gopass store in explicit path in integration test

* passwordstore: Show versions of tools in integration test

* passwordstore: Install gopass from different location on Debian

Part of integration tests

* passwordstore: Add changelog fragment for #5030

* passwordstore: Address review feedback

(cherry picked from commit 74f2e1d28b)

Co-authored-by: grembo <freebsd@grem.de>
2022-07-31 22:55:05 +02:00
patchback[bot]
981c7849ce consul: add support for session TTL (#4996) (#5038)
Signed-off-by: Wilfried Roset <wilfriedroset@users.noreply.github.com>
(cherry picked from commit d214f49be7)

Co-authored-by: wilfriedroset <wilfriedroset@users.noreply.github.com>
2022-07-31 22:12:13 +02:00
patchback[bot]
258471b267 mh base: add verbosity() property (#5035) (#5036)
* mh base: add verbosity property

* add changelog fragment

(cherry picked from commit aba089369e)

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2022-07-31 11:39:33 +02:00
patchback[bot]
3020b305bb Fix returnall for gopass (#5027) (#5029)
* Fix returnall for gopass

Gopass was always given the --password flag, despite there being no need for this.

* Add changelog fragment

Co-authored-by: Sylvia van Os <sylvia.van.os@politie.nl>
(cherry picked from commit 3eb29eb4b6)

Co-authored-by: Sylvia van Os <sylvia@hackerchick.me>
2022-07-29 14:33:45 +02:00
Felix Fontein
66cbd926f2 Fix changelog fragment.
(cherry picked from commit c64dd16f1c)
2022-07-29 12:10:40 +02:00
patchback[bot]
37fb2137b3 vmadm: add comment to ignore file (#5025) (#5026)
(cherry picked from commit 618fab5f9c)

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2022-07-29 11:46:27 +02:00
patchback[bot]
f083a0f4e7 xfconf: add unit test for bool value (#5014) (#5018)
(cherry picked from commit 1c167ab894)

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2022-07-28 21:14:50 +02:00
patchback[bot]
9dc82793c4 xfconf: fix setting of boolean values (#5007) (#5013)
(cherry picked from commit 9290381bea)

Co-authored-by: Felix Fontein <felix@fontein.de>
2022-07-27 08:37:43 +02:00
patchback[bot]
aab93949e1 Pacman: Improve url integrity test (#4968) (#5011)
* Fix typo

* Host url package

* Delete cached files

* Add cases for cached url package

* Rename file_pkg for clarification

* Change port to 8080, as 80 is already used in pipeline

* Added fragment

* Change port to 8000, as 8080 is already used in pipeline

* Fixed changelog fragment

* Change port to 53280, as 8000 is already used in pipeline

* Change port to 27617 (copied from get_url), as 53280 is already used in pipeline

* Also download the signature of url package

Co-authored-by: Jean Raby <jean@raby.sh>

* Fix duplication errors

Co-authored-by: Jean Raby <jean@raby.sh>

* Copied waiting from get_url; applyed output redirection from jraby

* Fix signature filename

* Use correct cache dir

* Add missing assertions for uninstall_1c

* Fix typo

* Delete changelog fragment

* Make python server true async with 90 sec timeout

Copied from ainsible.builtin.get_url

Co-authored-by: Jean Raby <jean@raby.sh>
(cherry picked from commit 76b235c6b3)

Co-authored-by: Minei3oat <Minei3oat@users.noreply.github.com>
2022-07-27 07:41:40 +02:00
patchback[bot]
c8d6181f64 fixing minor documentation flaws (#5000) (#5004)
Co-authored-by: Thomas Blaesing <thomas.blaesing@erwinhymergroup.com>
(cherry picked from commit 037c75db4f)

Co-authored-by: Thomas <3999809+tehtbl@users.noreply.github.com>
2022-07-26 12:26:56 +02:00
patchback[bot]
c286758248 Apk: add support for a custom world file (#4976) (#5005)
* Apk: add support for a custom world file

* Apk: Add changelog fragment for custom world file

(cherry picked from commit be0e47bfdc)

Co-authored-by: CactiChameleon9 <51231053+CactiChameleon9@users.noreply.github.com>
2022-07-26 12:26:38 +02:00
patchback[bot]
6e685e740e xfconf and xfconf_info: use do_raise (#4975) (#4993)
* remove redundant XfConfException class

* adjusted indentation in the documentaiton blocks

* add changelog fragment

(cherry picked from commit 31ef6c914b)

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2022-07-24 13:19:59 +02:00
patchback[bot]
695599e7d5 Introduce dig lookup argument fail_on_error (#4973) (#4992)
with default False for backwards compatibility.

Allows fail-fast behavior on lookup failures instead of returning strings and continuing.

(cherry picked from commit 2662bc881f)

Co-authored-by: Benjamin <1982589+tumbl3w33d@users.noreply.github.com>
2022-07-24 13:18:38 +02:00
patchback[bot]
29e7fae303 Fix keyring_info when using keyring library (#4964) (#4991)
* Fix keyring_info when using keyring library

This line used to always clobber the passphrase retrieved via the `keyring` library, making it useless on everything except gnome-keyring. After this change, it'll only use the alternate method if the default one didn't work.

* delete whitespace

* add changelog fragment

* Update changelogs/fragments/4964-fix-keyring-info.yml

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

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

Co-authored-by: Sargun Vohra <sargun.vohra@gmail.com>
2022-07-24 13:18:29 +02:00
patchback[bot]
303000c1a1 Expose unredirected_headers on maven_artifact (#4812) (#4994)
* Expose unredirected_headers to module

In some cases, when the initial request returns a redirect and we want
to follow it to get the artifact, we might not want to include certain
headers in the redirection request. Specially headers like
Authorization and Cookies.
Or perhaps the redirect server returns a 400 because it included some
unexpected headers.
Fetch url already supports this feature, but it was being shadowed by
maven_artifact. In here we just expose it.

* Fix Linting errors

* Applied Comments

 - Specified version added
 - Changed description of unredirected_headers

* Check for ansible version

If it's 2.11 or older, we ignore unredirected_headers, otherwise we use
it, as fetch_url has them

* Applied comments

- Removed duplicated code in the call of fetch_url. Used kwargs instead
- Added check if unredirected_params is not empty and the fetch_url
  function does not support it
- Changed function that checks for ansible version
- Removed unused import

* Remove 2.11 breaking change

Made default only for ansible-core version 2.12 and above, but for keep
it empty for ansible-core version 2.11 and below.
Also include the following changes:
  - change doc to use C() on the function description
  - changed doc to use ansible-core instead of Ansible

* Changes in description for readability

* Add changelog fragment

* Change description changelog fragment

(cherry picked from commit a2677fd051)

Co-authored-by: Raul Gabriel Verdi <95469166+raul-verdi@users.noreply.github.com>
2022-07-24 12:29:11 +02:00
patchback[bot]
371ffaeabe Update to new Github account for notifications (#4986) (#4989)
* Update to new Github account for notifications

* Update to new Github account for notifications

(cherry picked from commit 3204905e5c)

Co-authored-by: Florian <100365291+florianpaulhoberg@users.noreply.github.com>
2022-07-23 14:23:29 +02:00
patchback[bot]
42854887eb python-daemon 2.3.1 requires Python 3+. (#4977) (#4981)
(cherry picked from commit e1cfa13a1b)

Co-authored-by: Felix Fontein <felix@fontein.de>
2022-07-23 12:58:03 +02:00
patchback[bot]
5386f7d8cd Temporarily disable the yum_versionlock tests. (#4978) (#4985)
(cherry picked from commit 8f5a8cf4ba)

Co-authored-by: Felix Fontein <felix@fontein.de>
2022-07-23 12:22:41 +02:00
patchback[bot]
e86fcf76fc Pacman: Fix name of URL packages (#4959) (#4971)
* Strip downloading... of unseen URLs

* Added changelog fragment

* Added integration tests for reason and reason_for

Inspired by the integration tests for url packages

* Revert "Added integration tests for reason and reason_for"

This reverts commit f60d92f0d7.

Accidentally commited to the wrong branch.

(cherry picked from commit 788cfb624a)

Co-authored-by: Minei3oat <Minei3oat@users.noreply.github.com>
2022-07-21 20:16:28 +02:00
patchback[bot]
4d2895676f proxmox module_utils: fix get_vm int parse handling (#4945) (#4967)
* add int parse handling

* Revert "add int parse handling"

This reverts commit db2aac4254.

* fix: vmid check if state is absent

* add changelogs fragments

* Update changelogs/fragments/4945-fix-get_vm-int-parse-handling.yaml

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

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

Co-authored-by: miyuk <enough7531@gmail.com>
2022-07-21 08:14:42 +02:00
patchback[bot]
97b3ad6843 Fix path detection for gopass (#4955) (#4965)
* Fix path detection for gopass

As per fc8c9a2286/docs/features.md (initializing-a-password-store), gopass defaults to ~/.local/share/gopass/stores/root for its password store root location.

However, the user can also override this, and this will be stored in the gopass config file (ed7451678c/docs/config.md (configuration-options)).

This patch ensures that the config setting in gopass is respected, falling back to the default gopass path. pass' behaviour remains unchanged.

* Formatting improvements

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

* Add changelog fragment

* Formatting improvement

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

Co-authored-by: Felix Fontein <felix@fontein.de>
Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
(cherry picked from commit c31e6413f2)

Co-authored-by: Sylvia van Os <sylvia@hackerchick.me>
2022-07-21 08:14:30 +02:00
patchback[bot]
d7ecd40118 Redfish modules for Western Digital UltraStar Data102 storage enclosures (#4885) (#4958)
* WDC Redfish Info / Command modules for Western Digital Ultrastar Data102 storage enclosures.
Initial commands include:
* FWActivate
* UpdateAndActivate
* SimpleUpdateStatus

* delete unnecessary __init__.py modules

* PR Feedback

Notes list not guaranteed to be sorted
Use EXAMPLES tos how specifying ioms/basuri
Import missing_required_lib

* Apply suggestions from code review

Suggestions that could be auto-committed.

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

* Remove DNSCacheBypass

It is now the caller's responsibility to deal with stale IP addresses.

* Remove dnspython dependency.

Fix bug that this uncovered.

* Apply suggestions from code review

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

* PR Feedback

* Documentation, simple update status output format, unit tests.

Add docs showing how to use SimpleUpdateStatus
Change the format of SimpleUpateStatus format, put the results in a sub-object.
Fix unit tests whose asserts weren't actually running.

* PR Feedback

register: result on the 2nd example

* Final adjustments for merging for 5.4.0

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

Co-authored-by: Mike <mike@moerk.org>
2022-07-17 11:03:55 +02:00
patchback[bot]
fbf3b85d6b Adjust to b1dd2af4ca. (#4949) (#4952)
(cherry picked from commit ade54bceb8)

Co-authored-by: Felix Fontein <felix@fontein.de>
2022-07-12 17:18:37 +02:00
Felix Fontein
1bb1e882df Next expected release is 5.4.0. 2022-07-12 11:39:02 +02:00
Felix Fontein
a7dbefcaf1 Release 5.3.0. 2022-07-12 11:18:14 +02:00
patchback[bot]
9d5490e510 proxmox inventory: fix for agent enabled (#4910) (#4947)
* Update proxmox.py

* Forgot a debug print.

* pep

* Check if int, old school way.

* pep, once again.

* Create 4910-fix-for-agent-enabled.yml

* Must check the first listentry for enabled=1

* Update changelogs/fragments/4910-fix-for-agent-enabled.yml

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

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

Co-authored-by: ube <ube@alienautopsy.net>
2022-07-12 11:17:40 +02:00
patchback[bot]
2245742255 Misc. typo fixes (#4940) (#4942)
Signed-off-by: Abhijeet Kasurde <akasurde@redhat.com>
(cherry picked from commit bf94f08bc4)

Co-authored-by: Abhijeet Kasurde <akasurde@redhat.com>
2022-07-11 22:18:22 +02:00
patchback[bot]
6058a5e5b1 added password prompt support for machinectl (#4849) (#4941)
* added password prompt support for machinectl

* include review comments

This includes the review comments as well as changelog fragment. This also gives more information about the polkit rule.

* fix yaml doc with leftover bracket

* include review comments 2

* move regex compile to global scope

(cherry picked from commit 35ddf31b5f)

Co-authored-by: Louis Seubert <louis.seubert.ls@gmail.com>
2022-07-11 22:08:53 +02:00
Felix Fontein
224567e604 Prepare 5.3.0 release. 2022-07-11 22:08:31 +02:00
patchback[bot]
1eb872ccea allow configuring opentelementry callback via config file (#4916) (#4938)
this is especially useful for the `enable_from_environment` option, as
this allows to set a default for the whole project, instead of relying
on everyone setting the environment variable

(cherry picked from commit a5ff53f2ae)

Co-authored-by: Evgeni Golov <evgeni@golov.de>
2022-07-07 22:48:20 +02:00
patchback[bot]
ba18d6232a fix lxd connection plugin inventory_hostname (#4912) (#4935)
* fixes lxd connection plugin issue #4886

remote_addr value was set to literal string 'inventory_hostname' instead
of the value for inventory_hostname variable. solution found in PR
ansible/ansible#77894

* changelog fragment - bugfix - lxd connection plugin

* correct changelog fragment

* Update changelogs/fragments/4886-fix-lxd-inventory-hostname.yml

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

* replace _host instance variable with calls to get 'remote_addr' option

suggested by felixfontein

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

Co-authored-by: antonc42 <antonc42@users.noreply.github.com>
2022-07-07 22:40:16 +02:00
patchback[bot]
6115f18837 Fix syntax in rax_clb_nodes that breaks in Python3 (#4933) (#4937)
* Use syntax that works in both Python 2 and 3 when iterating through a
    dict that's going to be mutated during iteration
  * Fixes `dictionary changed size during iteration` error
  * Fixes #4932

(cherry picked from commit 9a928d5ffb)

Co-authored-by: Teddy Caddy <tcaddy@users.noreply.github.com>
2022-07-07 22:37:10 +02:00
patchback[bot]
3f4e3dd2b6 Fix license filenames. (#4923) (#4925)
(cherry picked from commit 1c06e237c8)

Co-authored-by: Felix Fontein <felix@fontein.de>
2022-07-04 20:12:10 +00:00
patchback[bot]
a573661458 Do not ignore tld option in DSV lookup plugin (#4911) (#4921)
* Do not ignore tld option in DSV lookup plugin

* add changelog fragment

* Update changelogs/fragments/4911-dsv-honor-tld-option.yml

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

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

Co-authored-by: andrii-zakurenyi <85106843+andrii-zakurenyi@users.noreply.github.com>
2022-07-04 20:40:25 +02:00
patchback[bot]
0977152b39 Fix GetChassisPower when multiple chassis are present (#4902) (#4915)
* Fix GetChassisPower when multiple chassis are present

When multiple chassis are present, and one or more of those chassis do _not_
report power information, the GetChassisPower command will fail. To address
that, only report a failure if _all_ of the Chassis objects lack power
power reporting functionality.

Fixes #4901

* Update changelogs/fragments/4901-fix-redfish-chassispower.yml

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

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

Co-authored-by: Jacob Yundt <jyundt@gmail.com>
2022-06-30 21:01:52 +02:00
patchback[bot]
91fe881226 Add GetFirmwareVersion command to redfish_info (#4900) (#4913)
* Add GetManagerInventory command to redfish_info

Adding GetManagerInventory command to redfish_info, similar to
GetSystemInventory to report Manager specific information like:
- FirmwareVersion
- Model
- ManagerType

Fixes #4899

* Update changelogs/fragments/4899-add-GetManagerInventory-for-redfish_info.yml

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

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

Co-authored-by: Jacob Yundt <jyundt@gmail.com>
2022-06-30 21:01:37 +02:00
patchback[bot]
b78c0cf64f Improve hwclock support test. (#4904) (#4909)
(cherry picked from commit 674b1da8bf)

Co-authored-by: Felix Fontein <felix@fontein.de>
2022-06-30 07:41:56 +02:00
patchback[bot]
c79ccbbf7e Fix command variable usage in CmdRunner (#4903) (#4906)
* Fix command variable usage

* Add changelog fragment for cmd-runner bugfix (#4903)

(cherry picked from commit 265c052c27)

Co-authored-by: Álvaro García Jaén <garciajaenalvaro@gmail.com>
2022-06-30 07:30:53 +02:00
patchback[bot]
a80761a8a4 Fix various module docs. (#4887) (#4888)
(cherry picked from commit 2dcdd2faca)

Co-authored-by: Felix Fontein <felix@fontein.de>
2022-06-22 22:54:08 +02:00
patchback[bot]
213419fb0c Fix docs. (#4881) (#4884)
(cherry picked from commit aa4c994dfd)

Co-authored-by: Felix Fontein <felix@fontein.de>
2022-06-22 14:44:33 +02:00
patchback[bot]
39a1f280e3 Added additional maintainers for TSS and DSV lookup plugins (#4870) (#4875)
(cherry picked from commit cb58867b57)

Co-authored-by: Ricky White <ricky@migusgroup.com>
2022-06-21 22:55:55 +02:00
Felix Fontein
a13d407247 Next expected release is 5.3.0. 2022-06-21 22:24:51 +02:00
patchback[bot]
ba3903e6e0 Disable opentelemetry installation for unit tests. (#4871) (#4873)
(cherry picked from commit 1eee35dffb)

Co-authored-by: Felix Fontein <felix@fontein.de>
2022-06-21 21:39:38 +02:00
Felix Fontein
4b6b00d249 Release 5.2.0. 2022-06-21 21:24:42 +02:00
patchback[bot]
0a0b0cb42d Fix CI due to pycdlib dropping Python 2 support. (#4865) (#4869)
(cherry picked from commit 297de3011c)

Co-authored-by: Felix Fontein <felix@fontein.de>
2022-06-21 15:03:51 +02:00
patchback[bot]
d0b39271b3 Sudoers validate (#4794) (#4866)
* Use visudo to validate sudoers rules before use

* Replace use of subprocess.Popen with module.run_command

* Switch out apt for package

* Check file mode when verifying file to determine whether something needs to change

* Only install sudo package for debian and redhat environments (when testing)

* Attempt to install sudo on FreeBSD too

* Try just installing sudo for non-darwin machines

* Don't validate file ownership

* Attempt to install sudo on all platforms

* Revert "Attempt to install sudo on all platforms"

This reverts commit b9562a8916.

* Remove file permissions changes from this PR

* Add changelog fragment for 4794 sudoers validation

* Add option to control when sudoers validation is used

* Update changelog fragment

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

* Add version_added to validation property

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

* Also validate failed sudoers validation error message

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

* Make visudo not executable instead of trying to delete it

* Update edge case validation

* Write invalid sudoers file to alternative path to avoid breaking sudo

* Don't try to remove or otherwise modify visudo on Darwin

* Update plugins/modules/system/sudoers.py

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

* Remove trailing extra empty line to appease sanity checker

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

Co-authored-by: Jon Ellis <ellis.jp@gmail.com>
2022-06-21 12:52:21 +02:00
Felix Fontein
f07cb76b09 Prepare 5.2.0 release. 2022-06-20 20:29:04 +02:00
patchback[bot]
09031fc9e6 Add keyring and keyring_info modules (#4764) (#4864)
(cherry picked from commit 45362d39a2)

Co-authored-by: ahussey-redhat <93101976+ahussey-redhat@users.noreply.github.com>
2022-06-20 18:27:10 +00:00
patchback[bot]
4481d0a4a9 redfish_command: VirtualMediaInsert does not work with Supermicro (#4839) (#4863)
* bugfix virtual media support for supermicro hardware

* Added Changelog for PR4839

(cherry picked from commit 5e57d2af0a)

Co-authored-by: FRUCHTiii <57792137+FRUCHTiii@users.noreply.github.com>
2022-06-20 19:29:52 +02:00
patchback[bot]
5861388f11 Remove myself from team_suse (#4860) (#4862)
I do not use `zypper` anymore and can thus not help with issues regarding the zypper module.

(cherry picked from commit 652392be27)

Co-authored-by: Dan Čermák <45594031+dcermak@users.noreply.github.com>
2022-06-20 19:04:32 +02:00
patchback[bot]
c581daa48a sudoers: fix handling of state: absent (#4852) (#4853) (#4858)
* sudoers: fix handling of state: absent (#4852)

* typo fixes

(cherry picked from commit 44e21dd407)

Co-authored-by: s-hamann <10639154+s-hamann@users.noreply.github.com>
2022-06-19 15:48:50 +02:00
patchback[bot]
75e2de3581 Add PSF-license.txt for plugins/module_utils/_mount.py (#4847) (#4848)
* Add PSF-license.txt for plugins/module_utils/_mount.py.

* Move other licenses to licenses/.

* Revert "Move other licenses to licenses/."

This reverts commit eab4209889.

(cherry picked from commit dcdfc9c413)

Co-authored-by: Felix Fontein <felix@fontein.de>
2022-06-17 12:49:08 +02:00
patchback[bot]
6c7bee1225 Add scw_compute_private_network (#4727) (#4845)
* Add scw_compute_private_network

* fix argument required and BOTMETA

* little fix in commentary/doc

* test with link for ansible-doc check

* remove unwanted file

* fix entry missing in  meta/runtime.yml

* scaleway_compute_private_network add some check in test and  some fic in doc

* a=add missing  del os.environ

* fix whitespace

* test_scaleway_compute_private_network : fix test

* test_scaleway_compute_private_network : fix pep8

* scaleway_compute_private_network

add . in description

* scaleway_compute_private_network: fix var name

* [scaleway_compute_private_network] add name for the example's task

* Update plugins/modules/cloud/scaleway/scaleway_compute_private_network.py

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

* Update plugins/modules/cloud/scaleway/scaleway_compute_private_network.py

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

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

Co-authored-by: pastral <52627592+pastral@users.noreply.github.com>
2022-06-15 10:58:13 +02:00
patchback[bot]
eafcdfbceb cmd_runner: add __call__ method to invoke context (#4791) (#4844)
* cmd_runner: add __call__ method to invoke context

* change xfconf to use the callable form

* add changelog fragment

* Update changelogs/fragments/4791-cmd-runner-callable.yaml

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

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

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2022-06-15 10:58:04 +02:00
patchback[bot]
82a764446b passwordstore: Make compatible with shims (#4780) (#4846)
* passwordstore: Make compatible with shims, add backend config

This allows using the passwordstore plugin with scripts that wrap other
password managers. Also adds an explicit configuration (`backend` in
`ini` and `passwordstore_backend` in `vars`) to set the backend to `pass`
(the default) or `gopass`, which allows using gopass as the backend
without the need of a wrapper script. Please be aware that gopass
support is currently limited, but will work for basic operations.

Includes integrations tests.

Resolves #4766

* Apply suggestions from code review

(cherry picked from commit 006f3bfa89)

Co-authored-by: grembo <freebsd@grem.de>
2022-06-15 10:57:52 +02:00
Felix Fontein
a0032f3513 Next expected release is 5.2.0. 2022-06-14 18:15:59 +02:00
Felix Fontein
8444367cd0 Release 5.1.1. 2022-06-14 17:52:01 +02:00
patchback[bot]
de5fbe457f Fix alternatives module (#4836) (#4840)
* Only pass subcommands when they are specified as module arguments.

* When 'subcommands' is specified, 'link' must be given for every subcommand.

* Extend subcommand tests.

(cherry picked from commit 84d8ca9234)

Co-authored-by: Felix Fontein <felix@fontein.de>
2022-06-14 16:30:42 +02:00
patchback[bot]
40b35acee2 redhat_subscription: call 'remove' instead of 'unsubscribe' (#4809) (#4838)
The 'unsubscribe' command of 'subscription-manager' was deprecated
already in subscription-manager 1.11.3, shipped with RHEL 5.11.
As it was removed in subscription-manager 1.29.x, unsubscribing from
pools was thus broken.

The simple fix is to call the proper command, 'remove'.

(cherry picked from commit a45b90e93f)

Co-authored-by: Pino Toscano <ptoscano@redhat.com>
2022-06-14 07:53:49 +02:00
Felix Fontein
9835deb17f Revert "Print debug output during tests."
This reverts commit 6fe9cf11f1.
2022-06-14 07:43:38 +02:00
Felix Fontein
6fe9cf11f1 Print debug output during tests. 2022-06-14 07:35:29 +02:00
Felix Fontein
d3ebdd2874 Prepare 5.1.1 release. 2022-06-13 22:28:45 +02:00
patchback[bot]
4275bfe87b alternatives: Fix bug with priority default (#4810) (#4835)
* alternatives: Fix bug with priority default

If neigther the priority nor the subcommands where specified the module decided to update the priority with the default value anyway. This resulted in bug #4803 and #4804

* Add changelog fragment.

* Distinguish None from 0.

* Address review comments.

* Update plugins/modules/system/alternatives.py

Co-authored-by: Pilou <pierre-louis@libregerbil.fr>

* Remove unrelated issues from changelog.

Co-authored-by: Felix Fontein <felix@fontein.de>
Co-authored-by: Pilou <pierre-louis@libregerbil.fr>
(cherry picked from commit 57e83ac80b)

Co-authored-by: Marius Rieder <marius.rieder@durchmesser.ch>
2022-06-13 21:51:08 +02:00
patchback[bot]
2f87b8c63f proxmox_kvm: fix typos (#4798) (#4832)
* Typofix

* Update plugins/modules/cloud/misc/proxmox_kvm.py

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

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

Co-authored-by: Wouter Schoot <wouter@schoot.org>
2022-06-13 12:13:16 +02:00
patchback[bot]
100fffb4c1 nmcli: do not convert undefined lists to empty strings (#4813) (#4834)
* do not convert undefined lists to empty strings

* add changelog fragment (#4813)

(cherry picked from commit 72faebffc6)

Co-authored-by: geichelberger <35195803+geichelberger@users.noreply.github.com>
2022-06-13 12:13:05 +02:00
patchback[bot]
1206900488 Ensure managed sudoers config files have 0440 permissions (#4814) (#4828)
* Ensure sudoers config files are created with 0440 permissions to appease visudo validation

* Remove change not required by the bugfix

* Add changelog fragment for 4814 sudoers file permissions

* Update changelogs/fragments/4814-sudoers-file-permissions.yml

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

* Have less oct casting

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

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

Co-authored-by: Jon Ellis <ellis.jp@gmail.com>
2022-06-12 08:59:53 +02:00
patchback[bot]
c28ae26636 Bump AZP container version. (#4819) (#4826)
(cherry picked from commit 42c5024b0b)

Co-authored-by: Felix Fontein <felix@fontein.de>
2022-06-12 08:59:34 +02:00
patchback[bot]
e1e626cdcb requests drops support for older Python (#4818) (#4822)
* requests drops support for older Python.

* Work around CentOS 6 pip bugs.

(cherry picked from commit c8a2c5d375)

Co-authored-by: Felix Fontein <felix@fontein.de>
2022-06-12 08:17:04 +02:00
patchback[bot]
f8d35eeb14 Added conditional to only collect qmpstatus on qemu VMs (#4816) (#4817)
* Added conditional to only collect qmpstatus on qemu VMs

* Processed feedback, added changelog

* Initial change to unit tests

* Made Sanity tests happy again

* Missed a function call, removed superfluous function

* Derp, no need to mock get_vm_status anymore

* Added detail checks whether hosts are mapped to the paused/prelaunch groups

* Fix sanity check

* Processed feedback

* Processed feedback - noqa

(cherry picked from commit 71745b8024)

Co-authored-by: Jeffrey van Pelt <jeff@vanpelt.one>
2022-06-11 13:55:15 +02:00
patchback[bot]
c44298c437 CI: Disable repo URL test for OpenSuSE 15.4 (#4805) (#4808)
* Disable repo URL test for OpenSuSE 15.4.

* Forgot some places.

(cherry picked from commit dd24c98fe5)

Co-authored-by: Felix Fontein <felix@fontein.de>
2022-06-08 22:21:47 +02:00
Felix Fontein
1b580476a8 Next expected release is 5.2.0. 2022-06-07 13:02:20 +02:00
Felix Fontein
44d2d62d38 Release 5.1.0. 2022-06-07 12:43:11 +02:00
patchback[bot]
82b2d294b7 add support to create L2TP and PPTP VPN connection (#4746) (#4793)
* add support to create L2TP and PPTP VPN connection

* Update plugins/modules/net_tools/nmcli.py

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

* Update plugins/modules/net_tools/nmcli.py

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

* Update plugins/modules/net_tools/nmcli.py

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

* Update plugins/modules/net_tools/nmcli.py

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

* Update plugins/modules/net_tools/nmcli.py

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

* Update plugins/modules/net_tools/nmcli.py

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

* Update plugins/modules/net_tools/nmcli.py

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

* Update plugins/modules/net_tools/nmcli.py

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

* apply changes pointed on tests and review

- add changelog fragment
- change example code to use jinja2 in place of shell command

* removes trailing whitespace

* Update plugins/modules/net_tools/nmcli.py

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

* Update plugins/modules/net_tools/nmcli.py

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

* removes linux command from examples

* remove unnecessary brakets

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

* remove unnecessary brakets

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

* simplify psk encoding on example

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

* Update plugins/modules/net_tools/nmcli.py

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

* Update plugins/modules/net_tools/nmcli.py

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

* add unit tests

- test unchenged l2tp and pptp vpn connections
- test create l2tp and pptp vpn connections
- fix is_connection_changed to remove default ifname attribuition

* improve tests on vpn.data param

- fix _compare_conn_params to handle vpn.data as lists

* removes block and set_fact from example

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

* makes line shortter to better reading

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

* Update plugins/modules/net_tools/nmcli.py

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

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

Co-authored-by: José Roberto Emerich Junior <jremerich@gmail.com>
2022-06-06 21:57:53 +02:00
patchback[bot]
812fbef786 xfconf module utils: providing a cmd_runner object (#4776) (#4789)
* xfconf: changed implementation to use cmd_runner

* added module_utils/xfconf.py

* xfconf_info: using cmd_runner

* added module_utils to BOTMETA.yml

* added changelog fragment

* use cmd_runner_fmt instead of deprecated form

(cherry picked from commit 8ba3d94740)

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2022-06-06 11:11:25 +02:00
patchback[bot]
9d795c334b ModuleHelperException module utils - improved exception initialization (#4755) (#4786)
* ModuleHelperException module utils - improved exception initialization

* added changelog fragment

* Update plugins/module_utils/mh/exceptions.py

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

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

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2022-06-06 11:11:15 +02:00
patchback[bot]
512d412eb4 Add subcommands parameter for module alternatives. (#4654) (#4788)
* Add slaves parameter for module alternatives.

* alternatives: Improve documentation abous slaves parameter

* alternatives: Apply suggestions from code review

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

* alternatives: Add schangelog for slaves parameter

* alernatives: Add integration tests

* alternatives: Improv tests

* alternatives: Update tests/integration/targets/alternatives/tasks/slaves.yml

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

* alternatives: Rework logic to support updating priority and subcommands

* alternatives: Use more inclusive naming

* alternatives: Fix linter warnings

* alternatives: Dont fail if link is absent

* alternatives: Update changelog fragment

* alternatives: Add tests for prio change and removing

* alternatives: Apply suggestions from code review

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

* alternatives: Add `state=auto`to reset mode to auto

* alternatives: Fix linter warnings

* alternatives: Fix documentation.

* alternatives: Combine multiple messages.

* alternatives: Set command env for all commands.

* alternatives: Do not update subcommands if parameter is omited

* alternatives: Fix a bug with python 2.7 var scoping

* alternatives: Improce diff before generation

* alternatives: Fix linter warnings

* alternatives: Fix test names

* alternatives: Simplify subcommands handling and improve diffs

* aliases: Only test for subcommand changes if subcommands parameter is set.

* Update plugins/modules/system/alternatives.py

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

* Apply suggestions from code review

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

Co-authored-by: Marius Rieder <marius.rieder@durchmesser.ch>
2022-06-06 10:57:41 +02:00
patchback[bot]
8f0ee6966f Add puppet confdir option (#4740) (#4787)
* Add puppet confdir option

* Add puppet confdir option change fragment

* Improve quoting in plugins/modules/system/puppet.py

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

* Add version_added to plugins/modules/system/puppet.py

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

Co-authored-by: Georg Vogt <georg.vogt@tngtech.com>
Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit 62ff263ac1)

Co-authored-by: Ge0rgi0s <34042518+Ge0rgi0s@users.noreply.github.com>
2022-06-06 10:57:37 +02:00
patchback[bot]
3af9e39043 cmd_runner: deprecate fmt as the name for the format class (#4777) (#4784)
* cmd_runner: deprecate fmt as the name for the format class

* added changelog fragment

* fixing the deprecation comment

(cherry picked from commit 2d38c8d892)

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2022-06-06 10:57:28 +02:00
Felix Fontein
7b78512c59 Forgot to bump version. 2022-06-06 10:40:44 +02:00
patchback[bot]
9f0913bf73 cmd_runner: added flag check_mode_skip to context (#4736) (#4772)
* cmd_runner: added flag skip_if_check_mode to context

* added changelog fragment

* adjusted param name and added new one

(cherry picked from commit be69f95f63)

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2022-06-06 10:30:32 +02:00
patchback[bot]
aea851018b gconftool2_info: new module (#4743) (#4773)
* gconftool2_info: new module

* fixed imports

* fixed docs for gconftool2_info

* fixed docs for gconftool2_info

* minor adjustment in docs

* added tests

* adjustments

(cherry picked from commit 49836bb484)

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2022-06-06 10:30:24 +02:00
patchback[bot]
69c79f618e ansible_galaxy_install: minor improvements based on MH updates (#4752) (#4774)
* ansible_galaxy_install: minor improvements based on MH updates

* added changelog fragment

(cherry picked from commit d019e22e7d)

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2022-06-06 10:30:15 +02:00
patchback[bot]
6a51ba5169 Proxmox Inventory: added new statuses for qemu (#4723) (#4775)
* added new statuses for qemu

* added document fragment

* lint fixes

* replaced f strings with %

* move the qmpstatus for qemu to a dedicated group

* added documentation to explain the new addition

* update changelog fragment to reflect the change correctly

* update changelog fragment to reflect the change correctly

* Apply suggestions from code review

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

* added a switch to get the qemu extended status

* Apply suggestions from code review

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

* groups created when qemu_extended_statuses is true and added tests to make sure they are there

* added test to make sure the groups are not present when qemu_extended_statuses is false

* Apply suggestions from code review

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

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

Co-authored-by: Ilija Matoski <ilijamt@gmail.com>
2022-06-06 10:30:08 +02:00
Felix Fontein
52e8e7e928 Prepare 5.1.0 release. 2022-06-06 10:28:30 +02:00
Felix Fontein
d71b90be07 Release 5.0.2. 2022-06-06 09:50:15 +02:00
patchback[bot]
1293b0ac91 remove mcodd as maintainer for newrelic_deployment and flowdock modules (#4781) (#4783)
(cherry picked from commit c6d4a0db80)

Co-authored-by: Matt Coddington <coddington@gmail.com>
2022-06-05 21:36:07 +02:00
patchback[bot]
d4330a3e54 nmcli: use capital case "DNS" in documentation, improve examples (#4732) (#4771)
* nmcli: use capital case "DNS" in documentation

In documentation sometimes DNS was written in (incorrect) lower
case "dns" and sometimes in (correct) capital case "DNS". Use the
right capital case spelling in all parameter descriptions.

* nmcli: documentation language

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

* nmcli: documentation language

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

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

Co-authored-by: bluikko <14869000+bluikko@users.noreply.github.com>
2022-06-04 09:00:52 +02:00
patchback[bot]
7c3bf118ca fix trailing whitespace after parameter (#4765) (#4768)
(cherry picked from commit b6e652b440)

Co-authored-by: Markus Bergholz <git@osuv.de>
2022-06-03 18:51:13 +02:00
Felix Fontein
742b438b32 Prepare 5.0.2 release. 2022-06-02 08:22:51 +02:00
patchback[bot]
c59ebc82cd Add simplified_bsd.txt license file (#4759) (#4761)
* Add simplified_bsd.txt and adjust references.

* Add changelog.

(cherry picked from commit 0be68bf04b)

Co-authored-by: Felix Fontein <felix@fontein.de>
2022-06-02 08:01:53 +02:00
Felix Fontein
36a4fbfe60 Next expected release is 5.0.2. 2022-05-30 19:39:31 +02:00
Felix Fontein
ad3e7bc21d Release 5.0.1. 2022-05-30 13:00:22 +02:00
patchback[bot]
66a7fdfeba keycloak_realm: fix default groups and roles (#4241) (#4719) (#4754)
* keycloak_realm: fix default groups and roles (#4241)

* add changelog fragment

(cherry picked from commit 7ee15f95f7)

Co-authored-by: adam-cleo <90759784+adam-cleo@users.noreply.github.com>
2022-05-30 12:55:41 +02:00
patchback[bot]
77e25a7503 fix invalid fail_json call (#4733) (#4750)
* fix invalid fail_json call

Currently causes this error:
```
TypeError: AnsibleModule.fail_json() missing 1 required positional argument: 'msg'
gitlab | FAILED! => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3.10"
    },
    "changed": false,
    "module_stderr": "Shared connection to 10.0.3.100 closed.\r\n",
    "module_stdout": "Traceback (most recent call last):\r\n  File \"/root/.ansible/tmp/ansible-tmp-1653579059.8318024-147674-84188943153768/AnsiballZ_redis.py\", line 107, in <module>\r\n    _ansiballz_main()\r\n  File \"/root/.ansible/tmp/ansible-tmp-1653579059.8318024-147674-84188943153768/AnsiballZ_redis.py\", line 99, in _ansiballz_main\r\n    invoke_module(zipped_mod, temp_path, ANSIBALLZ_PARAMS)\r\n  File \"/root/.ansible/tmp/ansible-tmp-1653579059.8318024-147674-84188943153768/AnsiballZ_redis.py\", line 47, in invoke_module\r\n    runpy.run_module(mod_name='ansible_collections.community.general.plugins.modules.redis', init_globals=dict(_module_fqn='ansible_collections.community.general.plugins.modules.redis', _modlib_path=modlib_path),\r\n  File \"/usr/lib/python3.10/runpy.py\", line 209, in run_module\r\n    return _run_module_code(code, init_globals, run_name, mod_spec)\r\n  File \"/usr/lib/python3.10/runpy.py\", line 96, in _run_module_code\r\n    _run_code(code, mod_globals, init_globals,\r\n  File \"/usr/lib/python3.10/runpy.py\", line 86, in _run_code\r\n    exec(code, run_globals)\r\n  File \"/tmp/ansible_community.general.redis_payload_di15cy0s/ansible_community.general.redis_payload.zip/ansible_collections/community/general/plugins/modules/redis.py\", line 328, in <module>\r\n  File \"/tmp/ansible_community.general.redis_payload_di15cy0s/ansible_community.general.redis_payload.zip/ansible_collections/community/general/plugins/modules/redis.py\", line 195, in main\r\n  File \"/tmp/ansible_community.general.redis_payload_di15cy0s/ansible_community.general.redis_payload.zip/ansible_collections/community/general/plugins/module_utils/redis.py\", line 40, in fail_imports\r\nTypeError: AnsibleModule.fail_json() missing 1 required positional argument: 'msg'\r\n",
    "msg": "MODULE FAILURE\nSee stdout/stderr for the exact error",
    "rc": 1
}
```

* Add changelog.

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

Co-authored-by: Brian Coca <bcoca@users.noreply.github.com>
2022-05-30 08:12:53 +02:00
Felix Fontein
05ac79cee6 Prepare 5.0.1 release. 2022-05-30 07:14:47 +02:00
patchback[bot]
22b4fc8d8b DOC: Documment setting of NTP server in examples. (#4655) (#4748)
Tested on iLO 5 (HP Gen 10).
Command checked from iLO5 REST API reference at https://hewlettpackard.github.io/ilo-rest-api-docs/ilo5/#configuring-network-time-protocol-ntp

(cherry picked from commit 3b48bde84f)

Co-authored-by: Ondrej Faměra <ondrej-xa2iel8u@famera.cz>
2022-05-30 07:04:59 +02:00
patchback[bot]
6252f3bded Fix quoting bug in zfs. (#4726) (#4744)
(cherry picked from commit 01b32fec14)

Co-authored-by: Felix Fontein <felix@fontein.de>
2022-05-29 07:59:03 +02:00
patchback[bot]
15c4e08295 Update CI matrix. (#4737) (#4739)
(cherry picked from commit dcb2e09b4a)

Co-authored-by: Felix Fontein <felix@fontein.de>
2022-05-27 14:21:03 +02:00
Felix Fontein
a77bb090b3 Remove no longer needed files.
(cherry picked from commit 1e646aad2d)
2022-05-27 11:23:33 +02:00
patchback[bot]
99958cea49 redfish modules: documentation language and formatting (#4722) (#4725)
* redfish_command: documentation language and formatting

Update the documentation block with more English language
more consistent with other modules and finish each description
with a full stop.

* redfish_command: do not end short desc in full stop

* redfish_command: remove more "the" on documentation

Remove "The" from beginning of descriptions.

* redfish_command: start documentation description with capital case

* redfish_config: update documentation language and format

Add full stops at end of descriptions, small updates to language,
ensure descriptions start with a capital case letter.

* redfish_config: documentation consistency

Use "username" for description similarly to redfish_command.

* redfish_info: documentation formatting and language

Update documentation block for consistency with other modules
with full stop at end of descriptions and small language updates.

* idrac_redfish_command: documentation formatting and language

Update documentation block for consistency with other modules
with full stop at end of descriptions and small language updates.

* idrac_redfish_command: more doc consistency fixes

Call it iDRAC everywhere and not sometimes OOB controller.

* idrac_redfish_command: documentation formatting and language

Update documentation block for consistency with other modules
with full stop at end of descriptions and small language updates.

* idrac_redfish_info: documentation formatting and language

Update documentation block for consistency with other modules
with full stop at end of descriptions and small language updates.

* ilo_redfish_config: documentation formatting and language

Update documentation block for consistency with other modules
with full stop at end of descriptions and small language updates.

* ilo_redfish_info: documentation formatting and language

Update documentation block for consistency with other modules
with full stop at end of descriptions and small language updates.

* idrac_redfish_info: documentation language

Call it "HTTP request" and not "URL request".

* idrac_redfish_command: documentation language fix

Call it "HTTP request" and not "URL request".

* idrac_redfish_config: documentation language fix

Call it "HTTP request" and not "URL request".

* redfish_command: documentation language fix

Call it "HTTP request" and not "URL request".

* redfish_config: documentation language fix

Call it "HTTP request" and not "URL request".

* redfish_info: documentation language fix

Call it "HTTP request" and not "URL request".

* redfish_command: documentation language fix

Boot device should be two words.

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

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

Co-authored-by: bluikko <14869000+bluikko@users.noreply.github.com>
2022-05-24 20:20:25 +02:00
patchback[bot]
b2802dc8eb redfish_command: documentation typo and language (#4718) (#4721)
Fix typo "od" to "of" and language

(cherry picked from commit d73789ba3a)

Co-authored-by: bluikko <14869000+bluikko@users.noreply.github.com>
2022-05-24 07:11:53 +02:00
patchback[bot]
8617568146 consul: applied bugfix from issue (#4712) (#4716)
* applied bugfix from issue

* added changelog fragment

(cherry picked from commit 4d2bed1dde)

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2022-05-23 07:37:08 +02:00
patchback[bot]
7569d6315c Multiple modules using ModuleHelper (#4674) (#4713)
* Multiple modules using ModuleHelper

Replaced raising exception with calling method do_raise() in MH.
Removed the importing of the exception class.

* added changelog fragment

(cherry picked from commit 6052776de1)

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2022-05-23 07:32:54 +02:00
patchback[bot]
ab5143b15d Add RHEL 9.0, FreeBSD 13.1, Ubuntu 22.04 and Fedora 36 to CI, fix bug in filesystem module (#4700) (#4710)
* Add RHEL 9.0 and FreeBSD 13.1 to CI.

* RHEL 9 has no pyOpenSSL apparently.

* Adjust URL for EPEL.

* Fix cargo install on FreeBSD 13.1.

* Add Ubuntu 22.04 and Fedora 36 to CI.

* Fix logic.

* filesystem: do not die output line does not contain ':'

* Skip django_manage tests on RHEL 9 as well.

* homectl tests don't work with RHEL 9.0.

* Improve error handling, improve fatresize output handling.

* Skip Fedora 36.

* Skip filesystem vfat tests on Ubuntu 22.04.

There, resizing fails with a bug:
Bug: Assertion (disk != NULL) at ../../libparted/disk.c:1620 in function ped_disk_get_partition_by_sector() failed.

* 'trusty' is 14.04. Adding 22.04 to skip list.

* Skip jail tests for FreeBSD 13.1.

* Add config for postgres on Ubuntu 22.04.

* Make CentOS 6 happy.

* Adjust postgres version.

* Try installing EPEL a bit differently.

* Skip ufw and iso_extract tests on RHEL 9.

* Skip odbc tests on RHEL 9.

* Skip RHEL 9.0 for snap tests.

* Add changelog fragment for filesystem code changes.

(cherry picked from commit 319c29c2a2)

Co-authored-by: Felix Fontein <felix@fontein.de>
2022-05-22 17:48:34 +02:00
patchback[bot]
a71ff614f0 certifi dropped Python 2 support (#4702) (#4705)
* certifi dropped Python 2 support.

* Apparently the consul tests didn't use the constraints.

(cherry picked from commit 8421af1ea3)

Co-authored-by: Felix Fontein <felix@fontein.de>
2022-05-19 15:23:47 +02:00
patchback[bot]
bfd3e15074 Ignore import sanity errors until the modules can be fixed. (#4689) (#4698)
(cherry picked from commit db1010a417)

Co-authored-by: Felix Fontein <felix@fontein.de>
2022-05-18 22:52:39 +02:00
patchback[bot]
90b815de50 Disable the OpenNebula integration tests. (#4692) (#4696)
(cherry picked from commit ae7f2f25cb)

Co-authored-by: Felix Fontein <felix@fontein.de>
2022-05-18 22:41:15 +02:00
patchback[bot]
056e16baa5 Update lenovoxcc module for compatibility with the virtualMedia resource location from Manager to System (#4682) (#4685)
* Update lenovoxcc module for compatibility due to redfish spec changes the virtualMedia resource location from Managers to Systems

* Add changelogs fragment for PR 4682

* Update changelogs/fragments/4682-compatibility-virtualmedia-resource-location.yaml

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

Co-authored-by: Tami YY3 Pan <panyy3@lenovo.com>
Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit 8db265f99b)

Co-authored-by: jixj5 <66418293+jixj5@users.noreply.github.com>
2022-05-18 07:47:16 +02:00
Felix Fontein
890cf636a0 Next expected release is 5.1.0. 2022-05-17 16:21:18 +02:00
Felix Fontein
8c2b2aeb83 Update links. 2022-05-17 13:48:00 +02:00
Felix Fontein
3c597d8b04 Release 5.0.0. 2022-05-17 13:45:04 +02:00
1529 changed files with 10676 additions and 27365 deletions

View File

@@ -1,9 +0,0 @@
<!--
Copyright (c) Ansible Project
GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
SPDX-License-Identifier: GPL-3.0-or-later
-->
## Azure Pipelines Configuration
Please see the [Documentation](https://github.com/ansible/community/wiki/Testing:-Azure-Pipelines) for more information.

View File

@@ -1,425 +0,0 @@
---
# Copyright (c) Ansible Project
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
# SPDX-License-Identifier: GPL-3.0-or-later
trigger:
batch: true
branches:
include:
- main
- stable-*
pr:
autoCancel: true
branches:
include:
- main
- stable-*
schedules:
- cron: 0 8 * * *
displayName: Nightly (main)
always: true
branches:
include:
- main
- cron: 0 10 * * *
displayName: Nightly (active stable branches)
always: true
branches:
include:
- stable-6
- stable-5
- cron: 0 11 * * 0
displayName: Weekly (old stable branches)
always: true
branches:
include:
- stable-4
variables:
- name: checkoutPath
value: ansible_collections/community/general
- name: coverageBranches
value: main
- name: pipelinesCoverage
value: coverage
- name: entryPoint
value: tests/utils/shippable/shippable.sh
- name: fetchDepth
value: 0
resources:
containers:
- container: default
image: quay.io/ansible/azure-pipelines-test-container:3.0.0
pool: Standard
stages:
### Sanity
- stage: Sanity_devel
displayName: Sanity devel
dependsOn: []
jobs:
- template: templates/matrix.yml
parameters:
nameFormat: Test {0}
testFormat: devel/sanity/{0}
targets:
- test: 1
- test: 2
- test: 3
- test: 4
- test: extra
- stage: Sanity_2_14
displayName: Sanity 2.14
dependsOn: []
jobs:
- template: templates/matrix.yml
parameters:
nameFormat: Test {0}
testFormat: 2.14/sanity/{0}
targets:
- test: 1
- test: 2
- test: 3
- test: 4
- stage: Sanity_2_13
displayName: Sanity 2.13
dependsOn: []
jobs:
- template: templates/matrix.yml
parameters:
nameFormat: Test {0}
testFormat: 2.13/sanity/{0}
targets:
- test: 1
- test: 2
- test: 3
- test: 4
- stage: Sanity_2_12
displayName: Sanity 2.12
dependsOn: []
jobs:
- template: templates/matrix.yml
parameters:
nameFormat: Test {0}
testFormat: 2.12/sanity/{0}
targets:
- test: 1
- test: 2
- test: 3
- test: 4
### Units
- stage: Units_devel
displayName: Units devel
dependsOn: []
jobs:
- template: templates/matrix.yml
parameters:
nameFormat: Python {0}
testFormat: devel/units/{0}/1
targets:
- test: 2.7
- test: 3.5
- test: 3.6
- test: 3.7
- test: 3.8
- test: 3.9
- test: '3.10'
- test: '3.11'
- stage: Units_2_14
displayName: Units 2.14
dependsOn: []
jobs:
- template: templates/matrix.yml
parameters:
nameFormat: Python {0}
testFormat: 2.14/units/{0}/1
targets:
- test: 2.7
- test: 3.9
- stage: Units_2_13
displayName: Units 2.13
dependsOn: []
jobs:
- template: templates/matrix.yml
parameters:
nameFormat: Python {0}
testFormat: 2.13/units/{0}/1
targets:
- test: 2.7
- test: 3.8
- stage: Units_2_12
displayName: Units 2.12
dependsOn: []
jobs:
- template: templates/matrix.yml
parameters:
nameFormat: Python {0}
testFormat: 2.12/units/{0}/1
targets:
- test: 2.6
- test: 3.8
## Remote
- stage: Remote_devel_extra_vms
displayName: Remote devel extra VMs
dependsOn: []
jobs:
- template: templates/matrix.yml
parameters:
testFormat: devel/{0}
targets:
- name: Alpine 3.17
test: alpine/3.17
# - name: Fedora 37
# test: fedora/37
# - name: Ubuntu 20.04
# test: ubuntu/20.04
- name: Ubuntu 22.04
test: ubuntu/22.04
groups:
- vm
- stage: Remote_devel
displayName: Remote devel
dependsOn: []
jobs:
- template: templates/matrix.yml
parameters:
testFormat: devel/{0}
targets:
- name: macOS 12.0
test: macos/12.0
- name: RHEL 7.9
test: rhel/7.9
- name: RHEL 9.1
test: rhel/9.1
- name: FreeBSD 13.1
test: freebsd/13.1
- name: FreeBSD 12.4
test: freebsd/12.4
groups:
- 1
- 2
- 3
- stage: Remote_2_14
displayName: Remote 2.14
dependsOn: []
jobs:
- template: templates/matrix.yml
parameters:
testFormat: 2.14/{0}
targets:
- name: RHEL 9.0
test: rhel/9.0
- name: FreeBSD 12.3
test: freebsd/12.3
groups:
- 1
- 2
- 3
- stage: Remote_2_13
displayName: Remote 2.13
dependsOn: []
jobs:
- template: templates/matrix.yml
parameters:
testFormat: 2.13/{0}
targets:
- name: macOS 12.0
test: macos/12.0
- name: RHEL 8.5
test: rhel/8.5
groups:
- 1
- 2
- 3
- stage: Remote_2_12
displayName: Remote 2.12
dependsOn: []
jobs:
- template: templates/matrix.yml
parameters:
testFormat: 2.12/{0}
targets:
- name: macOS 11.1
test: macos/11.1
- name: RHEL 8.4
test: rhel/8.4
- name: FreeBSD 13.0
test: freebsd/13.0
groups:
- 1
- 2
- 3
### Docker
- stage: Docker_devel
displayName: Docker devel
dependsOn: []
jobs:
- template: templates/matrix.yml
parameters:
testFormat: devel/linux/{0}
targets:
- name: CentOS 7
test: centos7
- name: Fedora 37
test: fedora37
- name: openSUSE 15
test: opensuse15
- name: Ubuntu 20.04
test: ubuntu2004
- name: Ubuntu 22.04
test: ubuntu2204
- name: Alpine 3
test: alpine3
groups:
- 1
- 2
- 3
- stage: Docker_2_14
displayName: Docker 2.14
dependsOn: []
jobs:
- template: templates/matrix.yml
parameters:
testFormat: 2.14/linux/{0}
targets:
- name: Fedora 36
test: fedora36
groups:
- 1
- 2
- 3
- stage: Docker_2_13
displayName: Docker 2.13
dependsOn: []
jobs:
- template: templates/matrix.yml
parameters:
testFormat: 2.13/linux/{0}
targets:
- name: Fedora 35
test: fedora35
- name: openSUSE 15 py2
test: opensuse15py2
- name: Alpine 3
test: alpine3
groups:
- 1
- 2
- 3
- stage: Docker_2_12
displayName: Docker 2.12
dependsOn: []
jobs:
- template: templates/matrix.yml
parameters:
testFormat: 2.12/linux/{0}
targets:
- name: CentOS 6
test: centos6
- name: Fedora 34
test: fedora34
- name: Ubuntu 18.04
test: ubuntu1804
groups:
- 1
- 2
- 3
### Community Docker
- stage: Docker_community_devel
displayName: Docker (community images) devel
dependsOn: []
jobs:
- template: templates/matrix.yml
parameters:
testFormat: devel/linux-community/{0}
targets:
- name: Debian Bullseye
test: debian-bullseye/3.9
- name: ArchLinux
test: archlinux/3.10
- name: CentOS Stream 8
test: centos-stream8/3.9
groups:
- 1
- 2
- 3
### Generic
- stage: Generic_devel
displayName: Generic devel
dependsOn: []
jobs:
- template: templates/matrix.yml
parameters:
nameFormat: Python {0}
testFormat: devel/generic/{0}/1
targets:
- test: 2.7
- test: '3.11'
- stage: Generic_2_14
displayName: Generic 2.14
dependsOn: []
jobs:
- template: templates/matrix.yml
parameters:
nameFormat: Python {0}
testFormat: 2.14/generic/{0}/1
targets:
- test: '3.10'
- stage: Generic_2_13
displayName: Generic 2.13
dependsOn: []
jobs:
- template: templates/matrix.yml
parameters:
nameFormat: Python {0}
testFormat: 2.13/generic/{0}/1
targets:
- test: 3.9
- stage: Generic_2_12
displayName: Generic 2.12
dependsOn: []
jobs:
- template: templates/matrix.yml
parameters:
nameFormat: Python {0}
testFormat: 2.12/generic/{0}/1
targets:
- test: 3.8
- stage: Summary
condition: succeededOrFailed()
dependsOn:
- Sanity_devel
- Sanity_2_12
- Sanity_2_13
- Sanity_2_14
- Units_devel
- Units_2_12
- Units_2_13
- Units_2_14
- Remote_devel_extra_vms
- Remote_devel
- Remote_2_12
- Remote_2_13
- Remote_2_14
- Docker_devel
- Docker_2_12
- Docker_2_13
- Docker_2_14
- Docker_community_devel
# Right now all generic tests are disabled. Uncomment when at least one of them is re-enabled.
# - Generic_devel
# - Generic_2_12
# - Generic_2_13
# - Generic_2_14
jobs:
- template: templates/coverage.yml

View File

@@ -1,24 +0,0 @@
#!/usr/bin/env bash
# Copyright (c) Ansible Project
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
# SPDX-License-Identifier: GPL-3.0-or-later
# Aggregate code coverage results for later processing.
set -o pipefail -eu
agent_temp_directory="$1"
PATH="${PWD}/bin:${PATH}"
mkdir "${agent_temp_directory}/coverage/"
options=(--venv --venv-system-site-packages --color -v)
ansible-test coverage combine --group-by command --export "${agent_temp_directory}/coverage/" "${options[@]}"
if ansible-test coverage analyze targets generate --help >/dev/null 2>&1; then
# Only analyze coverage if the installed version of ansible-test supports it.
# Doing so allows this script to work unmodified for multiple Ansible versions.
ansible-test coverage analyze targets generate "${agent_temp_directory}/coverage/coverage-analyze-targets.json" "${options[@]}"
fi

View File

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

View File

@@ -1,28 +0,0 @@
#!/usr/bin/env bash
# Copyright (c) Ansible Project
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
# SPDX-License-Identifier: GPL-3.0-or-later
# Check the test results and set variables for use in later steps.
set -o pipefail -eu
if [[ "$PWD" =~ /ansible_collections/ ]]; then
output_path="tests/output"
else
output_path="test/results"
fi
echo "##vso[task.setVariable variable=outputPath]${output_path}"
if compgen -G "${output_path}"'/junit/*.xml' > /dev/null; then
echo "##vso[task.setVariable variable=haveTestResults]true"
fi
if compgen -G "${output_path}"'/bot/ansible-test-*' > /dev/null; then
echo "##vso[task.setVariable variable=haveBotResults]true"
fi
if compgen -G "${output_path}"'/coverage/*' > /dev/null; then
echo "##vso[task.setVariable variable=haveCoverageData]true"
fi

View File

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

View File

@@ -1,19 +0,0 @@
#!/usr/bin/env bash
# Copyright (c) Ansible Project
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
# SPDX-License-Identifier: GPL-3.0-or-later
# Generate code coverage reports for uploading to Azure Pipelines and codecov.io.
set -o pipefail -eu
PATH="${PWD}/bin:${PATH}"
if ! ansible-test --help >/dev/null 2>&1; then
# Install the devel version of ansible-test for generating code coverage reports.
# This is only used by Ansible Collections, which are typically tested against multiple Ansible versions (in separate jobs).
# Since a version of ansible-test is required that can work the output from multiple older releases, the devel version is used.
pip install https://github.com/ansible/ansible/archive/devel.tar.gz --disable-pip-version-check
fi
ansible-test coverage xml --group-by command --stub --venv --venv-system-site-packages --color -v

View File

@@ -1,38 +0,0 @@
#!/usr/bin/env bash
# Copyright (c) Ansible Project
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
# SPDX-License-Identifier: GPL-3.0-or-later
# Configure the test environment and run the tests.
set -o pipefail -eu
entry_point="$1"
test="$2"
read -r -a coverage_branches <<< "$3" # space separated list of branches to run code coverage on for scheduled builds
export COMMIT_MESSAGE
export COMPLETE
export COVERAGE
export IS_PULL_REQUEST
if [ "${SYSTEM_PULLREQUEST_TARGETBRANCH:-}" ]; then
IS_PULL_REQUEST=true
COMMIT_MESSAGE=$(git log --format=%B -n 1 HEAD^2)
else
IS_PULL_REQUEST=
COMMIT_MESSAGE=$(git log --format=%B -n 1 HEAD)
fi
COMPLETE=
COVERAGE=
if [ "${BUILD_REASON}" = "Schedule" ]; then
COMPLETE=yes
if printf '%s\n' "${coverage_branches[@]}" | grep -q "^${BUILD_SOURCEBRANCHNAME}$"; then
COVERAGE=yes
fi
fi
"${entry_point}" "${test}" 2>&1 | "$(dirname "$0")/time-command.py"

View File

@@ -1,29 +0,0 @@
#!/usr/bin/env python
# Copyright (c) Ansible Project
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
# SPDX-License-Identifier: GPL-3.0-or-later
"""Prepends a relative timestamp to each input line from stdin and writes it to stdout."""
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
import sys
import time
def main():
"""Main program entry point."""
start = time.time()
sys.stdin.reconfigure(errors='surrogateescape')
sys.stdout.reconfigure(errors='surrogateescape')
for line in sys.stdin:
seconds = time.time() - start
sys.stdout.write('%02d:%02d %s' % (seconds // 60, seconds % 60, line))
sys.stdout.flush()
if __name__ == '__main__':
main()

View File

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

View File

@@ -1,60 +0,0 @@
---
# Copyright (c) Ansible Project
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
# SPDX-License-Identifier: GPL-3.0-or-later
# This template uses the provided targets and optional groups to generate a matrix which is then passed to the test template.
# If this matrix template does not provide the required functionality, consider using the test template directly instead.
parameters:
# A required list of dictionaries, one per test target.
# Each item in the list must contain a "test" or "name" key.
# Both may be provided. If one is omitted, the other will be used.
- name: targets
type: object
# An optional list of values which will be used to multiply the targets list into a matrix.
# Values can be strings or numbers.
- name: groups
type: object
default: []
# An optional format string used to generate the job name.
# - {0} is the name of an item in the targets list.
- name: nameFormat
type: string
default: "{0}"
# An optional format string used to generate the test name.
# - {0} is the name of an item in the targets list.
- name: testFormat
type: string
default: "{0}"
# An optional format string used to add the group to the job name.
# {0} is the formatted name of an item in the targets list.
# {{1}} is the group -- be sure to include the double "{{" and "}}".
- name: nameGroupFormat
type: string
default: "{0} - {{1}}"
# An optional format string used to add the group to the test name.
# {0} is the formatted test of an item in the targets list.
# {{1}} is the group -- be sure to include the double "{{" and "}}".
- name: testGroupFormat
type: string
default: "{0}/{{1}}"
jobs:
- template: test.yml
parameters:
jobs:
- ${{ if eq(length(parameters.groups), 0) }}:
- ${{ each target in parameters.targets }}:
- name: ${{ format(parameters.nameFormat, coalesce(target.name, target.test)) }}
test: ${{ format(parameters.testFormat, coalesce(target.test, target.name)) }}
- ${{ if not(eq(length(parameters.groups), 0)) }}:
- ${{ each group in parameters.groups }}:
- ${{ each target in parameters.targets }}:
- name: ${{ format(format(parameters.nameGroupFormat, parameters.nameFormat), coalesce(target.name, target.test), group) }}
test: ${{ format(format(parameters.testGroupFormat, parameters.testFormat), coalesce(target.test, target.name), group) }}

View File

@@ -1,50 +0,0 @@
---
# Copyright (c) Ansible Project
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
# SPDX-License-Identifier: GPL-3.0-or-later
# This template uses the provided list of jobs to create test one or more test jobs.
# It can be used directly if needed, or through the matrix template.
parameters:
# A required list of dictionaries, one per test job.
# Each item in the list must contain a "job" and "name" key.
- name: jobs
type: object
jobs:
- ${{ each job in parameters.jobs }}:
- job: test_${{ replace(replace(replace(job.test, '/', '_'), '.', '_'), '-', '_') }}
displayName: ${{ job.name }}
container: default
workspace:
clean: all
steps:
- checkout: self
fetchDepth: $(fetchDepth)
path: $(checkoutPath)
- bash: .azure-pipelines/scripts/run-tests.sh "$(entryPoint)" "${{ job.test }}" "$(coverageBranches)"
displayName: Run Tests
- bash: .azure-pipelines/scripts/process-results.sh
condition: succeededOrFailed()
displayName: Process Results
- bash: .azure-pipelines/scripts/aggregate-coverage.sh "$(Agent.TempDirectory)"
condition: eq(variables.haveCoverageData, 'true')
displayName: Aggregate Coverage Data
- task: PublishTestResults@2
condition: eq(variables.haveTestResults, 'true')
inputs:
testResultsFiles: "$(outputPath)/junit/*.xml"
displayName: Publish Test Results
- task: PublishPipelineArtifact@1
condition: eq(variables.haveBotResults, 'true')
displayName: Publish Bot Results
inputs:
targetPath: "$(outputPath)/bot/"
artifactName: "Bot $(System.JobAttempt) $(System.StageDisplayName) $(System.JobDisplayName)"
- task: PublishPipelineArtifact@1
condition: eq(variables.haveCoverageData, 'true')
displayName: Publish Coverage Data
inputs:
targetPath: "$(Agent.TempDirectory)/coverage/"
artifactName: "Coverage $(System.JobAttempt) $(System.StageDisplayName) $(System.JobDisplayName)"

1996
.github/BOTMETA.yml vendored

File diff suppressed because it is too large Load Diff

View File

@@ -1,193 +0,0 @@
---
# Copyright (c) Ansible Project
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
# SPDX-License-Identifier: GPL-3.0-or-later
# For the comprehensive list of the inputs supported by the ansible-community/ansible-test-gh-action GitHub Action, see
# https://github.com/marketplace/actions/ansible-test
name: EOL CI
on:
# Run EOL CI against all pushes (direct commits, also merged PRs), Pull Requests
push:
branches:
- main
- stable-*
pull_request:
# Run EOL CI once per day (at 10:00 UTC)
schedule:
- cron: '0 10 * * *'
concurrency:
# Make sure there is at most one active run per PR, but do not cancel any non-PR runs
group: ${{ github.workflow }}-${{ (github.head_ref && github.event.number) || github.run_id }}
cancel-in-progress: true
jobs:
sanity:
name: EOL Sanity (Ⓐ${{ matrix.ansible }})
strategy:
matrix:
ansible:
- '2.11'
# Ansible-test on various stable branches does not yet work well with cgroups v2.
# Since ubuntu-latest now uses Ubuntu 22.04, we need to fall back to the ubuntu-20.04
# image for these stable branches. The list of branches where this is necessary will
# shrink over time, check out https://github.com/ansible-collections/news-for-maintainers/issues/28
# for the latest list.
runs-on: >-
${{ contains(fromJson(
'["2.9", "2.10", "2.11"]'
), matrix.ansible) && 'ubuntu-20.04' || 'ubuntu-latest' }}
steps:
- name: Perform sanity testing
uses: felixfontein/ansible-test-gh-action@main
with:
ansible-core-github-repository-slug: felixfontein/ansible
ansible-core-version: stable-${{ matrix.ansible }}
coverage: ${{ github.event_name == 'schedule' && 'always' || 'never' }}
pull-request-change-detection: 'true'
testing-type: sanity
units:
# Ansible-test on various stable branches does not yet work well with cgroups v2.
# Since ubuntu-latest now uses Ubuntu 22.04, we need to fall back to the ubuntu-20.04
# image for these stable branches. The list of branches where this is necessary will
# shrink over time, check out https://github.com/ansible-collections/news-for-maintainers/issues/28
# for the latest list.
runs-on: >-
${{ contains(fromJson(
'["2.9", "2.10", "2.11"]'
), matrix.ansible) && 'ubuntu-20.04' || 'ubuntu-latest' }}
name: EOL Units (Ⓐ${{ matrix.ansible }}+py${{ matrix.python }})
strategy:
# As soon as the first unit test fails, cancel the others to free up the CI queue
fail-fast: true
matrix:
ansible:
- ''
python:
- ''
exclude:
- ansible: ''
include:
- ansible: '2.11'
python: '2.7'
- ansible: '2.11'
python: '3.5'
steps:
- name: >-
Perform unit testing against
Ansible version ${{ matrix.ansible }}
uses: felixfontein/ansible-test-gh-action@main
with:
ansible-core-github-repository-slug: felixfontein/ansible
ansible-core-version: stable-${{ matrix.ansible }}
coverage: ${{ github.event_name == 'schedule' && 'always' || 'never' }}
pre-test-cmd: >-
mkdir -p ../../ansible
;
git clone --depth=1 --single-branch https://github.com/ansible-collections/community.internal_test_tools.git ../../community/internal_test_tools
pull-request-change-detection: 'true'
target-python-version: ${{ matrix.python }}
testing-type: units
integration:
# Ansible-test on various stable branches does not yet work well with cgroups v2.
# Since ubuntu-latest now uses Ubuntu 22.04, we need to fall back to the ubuntu-20.04
# image for these stable branches. The list of branches where this is necessary will
# shrink over time, check out https://github.com/ansible-collections/news-for-maintainers/issues/28
# for the latest list.
runs-on: >-
${{ contains(fromJson(
'["2.9", "2.10", "2.11"]'
), matrix.ansible) && 'ubuntu-20.04' || 'ubuntu-latest' }}
name: EOL I (Ⓐ${{ matrix.ansible }}+${{ matrix.docker }}+py${{ matrix.python }}:${{ matrix.target }})
strategy:
fail-fast: false
matrix:
ansible:
- ''
docker:
- ''
python:
- ''
target:
- ''
exclude:
- ansible: ''
include:
# 2.11
- ansible: '2.11'
docker: fedora32
python: ''
target: azp/posix/1/
- ansible: '2.11'
docker: fedora32
python: ''
target: azp/posix/2/
- ansible: '2.11'
docker: fedora32
python: ''
target: azp/posix/3/
- ansible: '2.11'
docker: fedora33
python: ''
target: azp/posix/1/
- ansible: '2.11'
docker: fedora33
python: ''
target: azp/posix/2/
- ansible: '2.11'
docker: fedora33
python: ''
target: azp/posix/3/
- ansible: '2.11'
docker: alpine3
python: ''
target: azp/posix/1/
- ansible: '2.11'
docker: alpine3
python: ''
target: azp/posix/2/
- ansible: '2.11'
docker: alpine3
python: ''
target: azp/posix/3/
# Right now all generic tests are disabled. Uncomment when at least one of them is re-enabled.
# - ansible: '2.11'
# docker: default
# python: '2.7'
# target: azp/generic/1/
# - ansible: '2.11'
# docker: default
# python: '3.5'
# target: azp/generic/2/
steps:
- name: >-
Perform integration testing against
Ansible version ${{ matrix.ansible }}
under Python ${{ matrix.python }}
uses: felixfontein/ansible-test-gh-action@main
with:
ansible-core-github-repository-slug: felixfontein/ansible
ansible-core-version: stable-${{ matrix.ansible }}
coverage: ${{ github.event_name == 'schedule' && 'always' || 'never' }}
docker-image: ${{ matrix.docker }}
integration-continue-on-error: 'false'
integration-diff: 'false'
integration-retry-on-error: 'true'
pre-test-cmd: >-
mkdir -p ../../ansible
;
git clone --depth=1 --single-branch https://github.com/ansible-collections/ansible.posix.git ../../ansible/posix
;
git clone --depth=1 --single-branch https://github.com/ansible-collections/community.crypto.git ../../community/crypto
;
git clone --depth=1 --single-branch https://github.com/ansible-collections/community.internal_test_tools.git ../../community/internal_test_tools
pull-request-change-detection: 'true'
target: ${{ matrix.target }}
target-python-version: ${{ matrix.python }}
testing-type: integration

View File

@@ -1,61 +0,0 @@
---
# Copyright (c) Ansible Project
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
# SPDX-License-Identifier: GPL-3.0-or-later
name: "Code scanning - action"
on:
schedule:
- cron: '26 19 * * 1'
permissions:
contents: read
jobs:
CodeQL-Build:
permissions:
actions: read # for github/codeql-action/init to get workflow details
contents: read # for actions/checkout to fetch code
security-events: write # for github/codeql-action/autobuild to send a status report
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v3
with:
# We must fetch at least the immediate parents so that if this is
# a pull request then we can checkout the head.
fetch-depth: 2
# If this run was triggered by a pull request event, then checkout
# the head of the pull request instead of the merge commit.
- run: git checkout HEAD^2
if: ${{ github.event_name == 'pull_request' }}
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v2
# Override language selection by uncommenting this and choosing your languages
# with:
# languages: go, javascript, csharp, python, cpp, java
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
uses: github/codeql-action/autobuild@v2
# Command-line programs to run using the OS shell.
# 📚 https://git.io/JvXDl
# ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
# and modify them (or add more) to build your code if your project
# uses a compiled language
#- run: |
# make bootstrap
# make release
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v2

View File

@@ -1,35 +0,0 @@
---
# Copyright (c) Ansible Project
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
# SPDX-License-Identifier: GPL-3.0-or-later
name: Verify REUSE
on:
push:
branches: [main]
pull_request_target:
types: [opened, synchronize, reopened]
branches: [main]
# Run CI once per day (at 07:30 UTC)
schedule:
- cron: '30 7 * * *'
jobs:
check:
permissions:
contents: read
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
ref: ${{ github.event.pull_request.head.sha || '' }}
- name: Install dependencies
run: |
pip install reuse
- name: Check REUSE compliance
run: |
reuse lint

View File

@@ -1,23 +0,0 @@
---
# Copyright (c) Ansible Project
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
# SPDX-License-Identifier: GPL-3.0-or-later
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.0.1
hooks:
- id: trailing-whitespace
- id: end-of-file-fixer
- id: mixed-line-ending
args: [--fix=lf]
- id: fix-encoding-pragma
- id: check-ast
- id: check-merge-conflict
- id: check-symlinks
- repo: https://github.com/pre-commit/pygrep-hooks
rev: v1.9.0
hooks:
- id: rst-backticks
types: [file]
files: changelogs/fragments/.*\.(yml|yaml)$

File diff suppressed because it is too large Load Diff

View File

@@ -112,28 +112,22 @@ Creating new modules and plugins requires a bit more work than other Pull Reques
- Make sure that new plugins and modules have tests (unit tests, integration tests, or both); it is preferable to have some tests
which run in CI.
4. Action plugins need to be accompanied by a module, even if the module file only contains documentation
(`DOCUMENTATION`, `EXAMPLES` and `RETURN`). The module must have the same name and directory path in `plugins/modules/`
than the action plugin has in `plugins/action/`.
4. For modules and action plugins, make sure to create your module/plugin in the correct subdirectory, and add a redirect entry
in `meta/runtime.yml`. For example, for the `aerospike_migrations` module located in
`plugins/modules/database/aerospike/aerospike_migrations.py`, you need to create the following entry:
```.yaml
aerospike_migrations:
redirect: community.general.database.aerospike.aerospike_migrations
```
Here, the relative path `database/aerospike/` is inserted into the module's FQCN (Fully Qualified Collection Name) after the
collection's name and before the module's name. This must not be done for other plugin types but modules and action plugins!
- Action plugins need to be accompanied by a module, even if the module file only contains documentation
(`DOCUMENTATION`, `EXAMPLES` and `RETURN`). The module must have the same name and directory path in `plugins/modules/`
than the action plugin has in `plugins/action/`.
5. Make sure to add a BOTMETA entry for your new module/plugin in `.github/BOTMETA.yml`. Search for other plugins/modules in the
same directory to see how entries could look. You should list all authors either as `maintainers` or under `ignore`. People
listed as `maintainers` will be pinged for new issues and PRs that modify the module/plugin or its tests.
When you add a new plugin/module, we expect that you perform maintainer duty for at least some time after contributing it.
## pre-commit
To help ensure high-quality contributions this repository includes a [pre-commit](https://pre-commit.com) configuration which
corrects and tests against common issues that would otherwise cause CI to fail. To begin using these pre-commit hooks see
the [Installation](#installation) section below.
This is optional and not required to contribute to this repository.
### Installation
Follow the [instructions](https://pre-commit.com/#install) provided with pre-commit and run `pre-commit install` under the repository base. If for any reason you would like to disable the pre-commit hooks run `pre-commit uninstall`.
This is optional to run it locally.
You can trigger it locally with `pre-commit run --all-files` or even to run only for a given file `pre-commit run --files YOUR_FILE`.

View File

@@ -6,7 +6,7 @@ SPDX-License-Identifier: GPL-3.0-or-later
# Community General Collection
[![Build Status](https://dev.azure.com/ansible/community.general/_apis/build/status/CI?branchName=stable-6)](https://dev.azure.com/ansible/community.general/_build?definitionId=31)
[![Build Status](https://dev.azure.com/ansible/community.general/_apis/build/status/CI?branchName=stable-5)](https://dev.azure.com/ansible/community.general/_build?definitionId=31)
[![EOL CI](https://github.com/ansible-collections/community.general/workflows/EOL%20CI/badge.svg?event=push)](https://github.com/ansible-collections/community.general/actions)
[![Codecov](https://img.shields.io/codecov/c/github/ansible-collections/community.general)](https://codecov.io/gh/ansible-collections/community.general)
@@ -24,7 +24,7 @@ If you encounter abusive behavior violating the [Ansible Code of Conduct](https:
## Tested with Ansible
Tested with the current ansible-core 2.11, ansible-core 2.12, ansible-core 2.13, ansible-core 2.14 releases and the current development version of ansible-core. Ansible-core versions before 2.11.0 are not supported. This includes all ansible-base 2.10 and Ansible 2.9 releases.
Tested with the current ansible-core 2.11, ansible-core 2.12, ansible-core 2.13, ansible-core 2.14, and ansible-core 2.15 releases. Ansible-core versions before 2.11.0 are not supported. This includes all ansible-base 2.10 and Ansible 2.9 releases.
Parts of this collection will not work with ansible-core 2.11 on Python 3.12+.
@@ -34,13 +34,13 @@ Some modules and plugins require external libraries. Please check the requiremen
## Included content
Please check the included content on the [Ansible Galaxy page for this collection](https://galaxy.ansible.com/community/general) or the [documentation on the Ansible docs site](https://docs.ansible.com/ansible/latest/collections/community/general/).
Please check the included content on the [Ansible Galaxy page for this collection](https://galaxy.ansible.com/ui/repo/published/community/general/) or the [documentation on the Ansible docs site](https://docs.ansible.com/ansible/latest/collections/community/general/).
## Using this collection
This collection is shipped with the Ansible package. So if you have it installed, no more action is required.
If you have a minimal installation (only Ansible Core installed) or you want to use the latest version of the collection along with the whole Ansible package, you need to install the collection from [Ansible Galaxy](https://galaxy.ansible.com/community/general) manually with the `ansible-galaxy` command-line tool:
If you have a minimal installation (only Ansible Core installed) or you want to use the latest version of the collection along with the whole Ansible package, you need to install the collection from [Ansible Galaxy](https://galaxy.ansible.com/ui/repo/published/community/general/) manually with the `ansible-galaxy` command-line tool:
ansible-galaxy collection install community.general
@@ -57,7 +57,7 @@ Note that if you install the collection manually, it will not be upgraded automa
ansible-galaxy collection install community.general --upgrade
```
You can also install a specific version of the collection, for example, if you need to downgrade when something is broken in the latest version (please report an issue in this repository). Use the following syntax where `X.Y.Z` can be any [available version](https://galaxy.ansible.com/community/general):
You can also install a specific version of the collection, for example, if you need to downgrade when something is broken in the latest version (please report an issue in this repository). Use the following syntax where `X.Y.Z` can be any [available version](https://galaxy.ansible.com/ui/repo/published/community/general/):
```bash
ansible-galaxy collection install community.general:==X.Y.Z
@@ -65,6 +65,10 @@ ansible-galaxy collection install community.general:==X.Y.Z
See [Ansible Using collections](https://docs.ansible.com/ansible/latest/user_guide/collections_using.html) for more details.
### FQCNs for modules and actions
⚠️ The collection uses a similar directory structure for modules as the Ansible repository used for Ansible 2.9 and before. This directory structure was never exposed to the user. Due to changes in community.general 5.0.0 (using `meta/runtime.yml` redirects instead of symbolic links) some tooling started exposing the internal module names to end-users. These **internal names**, like `community.general.system.ufw` for the UFW firewall managing module, do work, but should be avoided since they are treated as an implementation detail that can change at any time, even in bugfix releases. Always use the three-component FQCN form, for example `community.general.ufw` for the UFW module. ⚠️
## Contributing to this collection
The content of this collection is made by good people just like you, a community of individuals collaborating on making the world better through developing automation software.
@@ -73,13 +77,13 @@ We are actively accepting new contributors.
All types of contributions are very welcome.
You don't know how to start? Refer to our [contribution guide](https://github.com/ansible-collections/community.general/blob/stable-6/CONTRIBUTING.md)!
You don't know how to start? Refer to our [contribution guide](https://github.com/ansible-collections/community.general/blob/main/CONTRIBUTING.md)!
The current maintainers are listed in the [commit-rights.md](https://github.com/ansible-collections/community.general/blob/stable-6/commit-rights.md#people) file. If you have questions or need help, feel free to mention them in the proposals.
The current maintainers are listed in the [commit-rights.md](https://github.com/ansible-collections/community.general/blob/main/commit-rights.md#people) file. If you have questions or need help, feel free to mention them in the proposals.
You can find more information in the [developer guide for collections](https://docs.ansible.com/ansible/devel/dev_guide/developing_collections.html#contributing-to-collections), and in the [Ansible Community Guide](https://docs.ansible.com/ansible/latest/community/index.html).
Also for some notes specific to this collection see [our CONTRIBUTING documentation](https://github.com/ansible-collections/community.general/blob/stable-6/CONTRIBUTING.md).
Also for some notes specific to this collection see [our CONTRIBUTING documentation](https://github.com/ansible-collections/community.general/blob/main/CONTRIBUTING.md).
### Running tests
@@ -89,7 +93,7 @@ See [here](https://docs.ansible.com/ansible/devel/dev_guide/developing_collectio
To learn how to maintain / become a maintainer of this collection, refer to:
* [Committer guidelines](https://github.com/ansible-collections/community.general/blob/stable-6/commit-rights.md).
* [Committer guidelines](https://github.com/ansible-collections/community.general/blob/main/commit-rights.md).
* [Maintainer guidelines](https://github.com/ansible/community-docs/blob/main/maintaining.rst).
It is necessary for maintainers of this collection to be subscribed to:
@@ -117,7 +121,7 @@ See the [Releasing guidelines](https://github.com/ansible/community-docs/blob/ma
## Release notes
See the [changelog](https://github.com/ansible-collections/community.general/blob/stable-6/CHANGELOG.rst).
See the [changelog](https://github.com/ansible-collections/community.general/blob/stable-5/CHANGELOG.rst).
## Roadmap
@@ -136,8 +140,8 @@ See [this issue](https://github.com/ansible-collections/community.general/issues
This collection is primarily licensed and distributed as a whole under the GNU General Public License v3.0 or later.
See [LICENSES/GPL-3.0-or-later.txt](https://github.com/ansible-collections/community.general/blob/stable-6/COPYING) for the full text.
See [LICENSES/GPL-3.0-or-later.txt](https://github.com/ansible-collections/community.general/blob/main/COPYING) for the full text.
Parts of the collection are licensed under the [BSD 2-Clause license](https://github.com/ansible-collections/community.general/blob/stable-6/LICENSES/BSD-2-Clause.txt), the [MIT license](https://github.com/ansible-collections/community.general/blob/stable-6/LICENSES/MIT.txt), and the [PSF 2.0 license](https://github.com/ansible-collections/community.general/blob/stable-6/LICENSES/PSF-2.0.txt).
Parts of the collection are licensed under the [BSD 2-Clause license](https://github.com/ansible-collections/community.general/blob/main/LICENSES/BSD-2-Clause.txt), the [MIT license](https://github.com/ansible-collections/community.general/blob/main/LICENSES/MIT.txt), and the [PSF 2.0 license](https://github.com/ansible-collections/community.general/blob/main/LICENSES/PSF-2.0.txt).
All files have a machine readable `SDPX-License-Identifier:` comment denoting its respective license(s) or an equivalent entry in an accompanying `.license` file. Only changelog fragments (which will not be part of a release) are covered by a blanket statement in `.reuse/dep5`. This conforms to the [REUSE specification](https://reuse.software/spec/).

File diff suppressed because it is too large Load Diff

View File

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

File diff suppressed because it is too large Load Diff

View File

@@ -49,9 +49,8 @@ options:
sender:
description:
- Mail sender.
- This is required since community.general 6.0.0.
- Note that this will be required from community.general 6.0.0 on.
type: str
required: true
ini:
- section: callback_mail
key: sender
@@ -105,6 +104,10 @@ class CallbackModule(CallbackBase):
super(CallbackModule, self).set_options(task_keys=task_keys, var_options=var_options, direct=direct)
self.sender = self.get_option('sender')
if self.sender is None:
self._display.deprecated(
'The sender for the mail callback has not been specified. This will be an error in the future',
version='6.0.0', collection_name='community.general')
self.to = self.get_option('to')
self.smtphost = self.get_option('mta')
self.smtpport = self.get_option('mtaport')

View File

@@ -22,6 +22,7 @@ DOCUMENTATION = '''
- Path to the jail
default: inventory_hostname
vars:
- name: inventory_hostname
- name: ansible_host
- name: ansible_jail_host
remote_user:

View File

@@ -1,93 +0,0 @@
# -*- coding: utf-8 -*-
# Copyright (c) Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# SPDX-License-Identifier: GPL-3.0-or-later
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
class ModuleDocFragment(object):
# Standard documentation fragment
DOCUMENTATION = r'''
options: {}
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.
'''
PLATFORM = r'''
options: {}
attributes:
platform:
description: Target OS/families that can be operated against.
support: N/A
'''
# Should be used together with the standard fragment
INFO_MODULE = r'''
options: {}
attributes:
check_mode:
support: full
details:
- This action does not modify state.
diff_mode:
support: N/A
details:
- This action does not modify state.
'''
CONN = r'''
options: {}
attributes:
become:
description: Is usable alongside C(become) keywords.
connection:
description: Uses the target's configured connection information to execute code on it.
delegation:
description: Can be used in conjunction with C(delegate_to) and related keywords.
'''
FACTS = r'''
options: {}
attributes:
facts:
description: Action returns an C(ansible_facts) dictionary that will update existing host facts.
'''
# Should be used together with the standard fragment and the FACTS fragment
FACTS_MODULE = r'''
options: {}
attributes:
check_mode:
support: full
details:
- This action does not modify state.
diff_mode:
support: N/A
details:
- This action does not modify state.
facts:
support: full
'''
FILES = r'''
options: {}
attributes:
safe_file_operations:
description: Uses Ansible's strict file operation functions to ensure proper permissions and avoid data corruption.
'''
FLOW = r'''
options: {}
attributes:
action:
description: Indicates this has a corresponding action plugin so some parts of the options can be executed on the controller.
async:
description: Supports being used with the C(async) keyword.
'''

View File

@@ -27,10 +27,8 @@ options:
description:
- The username.
- If not set the environment variable C(BITBUCKET_USERNAME) will be used.
- I(username) is an alias of I(user) since community.genreal 6.0.0. It was an alias of I(workspace) before.
type: str
version_added: 4.0.0
aliases: [ username ]
password:
description:
- The App password.

View File

@@ -29,7 +29,8 @@ options:
required: true
requirements:
- hpe3par_sdk >= 1.0.2. Install using C(pip install hpe3par_sdk).
- hpe3par_sdk >= 1.0.2. Install using 'pip install hpe3par_sdk'
- WSAPI service should be enabled on the 3PAR storage array.
notes:
- check_mode not supported
'''

View File

@@ -65,15 +65,4 @@ options:
choices: ['external', 'gssapi']
default: external
version_added: "2.0.0"
xorder_discovery:
description:
- Set the behavior on how to process Xordered DNs.
- C(enable) will perform a C(ONELEVEL) search below the superior RDN to find the matching DN.
- C(disable) will always use the DN unmodified (as passed by the I(dn) parameter).
- C(auto) will only perform a search if the first RDN does not contain an index number (C({x})).
- Possible choices are C(enable), C(auto), C(disable).
type: str
choices: ['enable', 'auto', 'disable']
default: auto
version_added: "6.4.0"
'''

View File

@@ -138,14 +138,8 @@ def jc_filter(data, parser, quiet=True, raw=False):
raise AnsibleError('You need to install "jc" as a Python library on the Ansible controller prior to running jc filter')
try:
# new API (jc v1.18.0 and higher) allows use of plugin parsers
if hasattr(jc, 'parse'):
return jc.parse(parser, data, quiet=quiet, raw=raw)
# old API (jc v1.17.7 and lower)
else:
jc_parser = importlib.import_module('jc.parsers.' + parser)
return jc_parser.parse(data, quiet=quiet, raw=raw)
jc_parser = importlib.import_module('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)

View File

@@ -121,8 +121,11 @@ compose:
ansible_host: "ipv4 | community.general.json_query('[?public==`false`].address') | first"
'''
import os
from ansible.errors import AnsibleError
from ansible.plugins.inventory import BaseInventoryPlugin, Constructable, Cacheable
from ansible.template import Templar
try:
@@ -141,14 +144,22 @@ class InventoryModule(BaseInventoryPlugin, Constructable, Cacheable):
def _build_client(self, loader):
"""Build the Linode client."""
t = Templar(loader=loader)
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)
if t.is_template(access_token):
access_token = t.template(variable=access_token, disable_lookups=False)
if access_token is None:
try:
access_token = os.environ['LINODE_ACCESS_TOKEN']
except KeyError:
pass
if access_token is None:
raise AnsibleError((
'Could not retrieve Linode access token '
'from plugin configuration sources'
'from plugin configuration or environment'
))
self.client = LinodeClient(access_token)

View File

@@ -55,11 +55,6 @@ DOCUMENTATION = r'''
type: str
default: none
choices: [ 'STOPPED', 'STARTING', 'RUNNING', 'none' ]
project:
description: Filter the instance according to the given project.
type: str
default: default
version_added: 6.2.0
type_filter:
description:
- Filter the instances by type C(virtual-machine), C(container) or C(both).
@@ -145,9 +140,6 @@ groupby:
vlan666:
type: vlanid
attribute: 666
projectInternals:
type: project
attribute: internals
'''
import json
@@ -159,7 +151,6 @@ from ansible.module_utils.common.text.converters import to_native, to_text
from ansible.module_utils.common.dict_transformations import dict_merge
from ansible.module_utils.six import raise_from
from ansible.errors import AnsibleError, AnsibleParserError
from ansible.module_utils.six.moves.urllib.parse import urlencode
from ansible_collections.community.general.plugins.module_utils.lxd import LXDClient, LXDClientException
try:
@@ -337,15 +328,7 @@ class InventoryModule(BaseInventoryPlugin):
# "status_code": 200,
# "type": "sync"
# }
url = '/1.0/instances'
if self.project:
url = url + '?{0}'.format(urlencode(dict(project=self.project)))
instances = self.socket.do('GET', url)
if self.project:
return [m.split('/')[3].split('?')[0] for m in instances['metadata']]
instances = self.socket.do('GET', '/1.0/instances')
return [m.split('/')[3] for m in instances['metadata']]
def _get_config(self, branch, name):
@@ -366,11 +349,9 @@ class InventoryModule(BaseInventoryPlugin):
dict(config): Config of the instance"""
config = {}
if isinstance(branch, (tuple, list)):
config[name] = {branch[1]: self.socket.do(
'GET', '/1.0/{0}/{1}/{2}?{3}'.format(to_native(branch[0]), to_native(name), to_native(branch[1]), urlencode(dict(project=self.project))))}
config[name] = {branch[1]: self.socket.do('GET', '/1.0/{0}/{1}/{2}'.format(to_native(branch[0]), to_native(name), to_native(branch[1])))}
else:
config[name] = {branch: self.socket.do(
'GET', '/1.0/{0}/{1}?{2}'.format(to_native(branch), to_native(name), urlencode(dict(project=self.project))))}
config[name] = {branch: self.socket.do('GET', '/1.0/{0}/{1}'.format(to_native(branch), to_native(name)))}
return config
def get_instance_data(self, names):
@@ -600,8 +581,6 @@ class InventoryModule(BaseInventoryPlugin):
self._set_data_entry(instance_name, 'network_interfaces', self.extract_network_information_from_instance_config(instance_name))
self._set_data_entry(instance_name, 'preferred_interface', self.get_prefered_instance_network_interface(instance_name))
self._set_data_entry(instance_name, 'vlan_ids', self.get_instance_vlans(instance_name))
self._set_data_entry(instance_name, 'project', self._get_data_entry(
'instances/{0}/instances/metadata/project'.format(instance_name)))
def build_inventory_network(self, instance_name):
"""Add the network interfaces of the instance to the inventory
@@ -705,8 +684,6 @@ class InventoryModule(BaseInventoryPlugin):
# add VLAN_ID information
if self._get_data_entry('inventory/{0}/vlan_ids'.format(instance_name)):
self.inventory.set_variable(instance_name, 'ansible_lxd_vlan_ids', self._get_data_entry('inventory/{0}/vlan_ids'.format(instance_name)))
# add project
self.inventory.set_variable(instance_name, 'ansible_lxd_project', self._get_data_entry('inventory/{0}/project'.format(instance_name)))
def build_inventory_groups_location(self, group_name):
"""create group by attribute: location
@@ -782,28 +759,6 @@ class InventoryModule(BaseInventoryPlugin):
# Ignore invalid IP addresses returned by lxd
pass
def build_inventory_groups_project(self, group_name):
"""create group by attribute: project
Args:
str(group_name): Group name
Kwargs:
None
Raises:
None
Returns:
None"""
# maybe we just want to expand one group
if group_name not in self.inventory.groups:
self.inventory.add_group(group_name)
gen_instances = [
instance_name for instance_name in self.inventory.hosts
if 'ansible_lxd_project' in self.inventory.get_host(instance_name).get_vars()]
for instance_name in gen_instances:
if self.groupby[group_name].get('attribute').lower() == self.inventory.get_host(instance_name).get_vars().get('ansible_lxd_project'):
self.inventory.add_child(group_name, instance_name)
def build_inventory_groups_os(self, group_name):
"""create group by attribute: os
@@ -942,7 +897,6 @@ class InventoryModule(BaseInventoryPlugin):
* 'profile'
* 'vlanid'
* 'type'
* 'project'
Args:
str(group_name): Group name
@@ -970,8 +924,6 @@ class InventoryModule(BaseInventoryPlugin):
self.build_inventory_groups_vlanid(group_name)
elif self.groupby[group_name].get('type') == 'type':
self.build_inventory_groups_type(group_name)
elif self.groupby[group_name].get('type') == 'project':
self.build_inventory_groups_project(group_name)
else:
raise AnsibleParserError('Unknown group type: {0}'.format(to_native(group_name)))
@@ -1078,7 +1030,6 @@ class InventoryModule(BaseInventoryPlugin):
try:
self.client_key = self.get_option('client_key')
self.client_cert = self.get_option('client_cert')
self.project = self.get_option('project')
self.debug = self.DEBUG
self.data = {} # store for inventory-data
self.groupby = self.get_option('groupby')

View File

@@ -46,25 +46,6 @@ DOCUMENTATION = '''
description: use IPv6 type addresses
type: boolean
default: true
udp_scan:
description:
- Scan via UDP.
- Depending on your system you might need I(sudo=true) for this to work.
type: boolean
default: false
version_added: 6.1.0
icmp_timestamp:
description:
- Scan via ICMP Timestamp (C(-PP)).
- Depending on your system you might need I(sudo=true) for this to work.
type: boolean
default: false
version_added: 6.1.0
dns_resolve:
description: Whether to always (C(true)) or never (C(false)) do DNS resolution.
type: boolean
default: false
version_added: 6.1.0
notes:
- At least one of ipv4 or ipv6 is required to be True, both can be True, but they cannot both be False.
- 'TODO: add OS fingerprinting'
@@ -185,15 +166,6 @@ class InventoryModule(BaseInventoryPlugin, Constructable, Cacheable):
cmd.append('--exclude')
cmd.append(','.join(self._options['exclude']))
if self._options['dns_resolve']:
cmd.append('-n')
if self._options['udp_scan']:
cmd.append('-sU')
if self._options['icmp_timestamp']:
cmd.append('-PP')
cmd.append(self._options['address'])
try:
# execute

View File

@@ -113,9 +113,10 @@ DOCUMENTATION = '''
description:
- Whether to set C(ansbile_host) for proxmox nodes.
- When set to C(true) (default), will use the first available interface. This can be different from what you expect.
- The default of this option changed from C(true) to C(false) in community.general 6.0.0.
- This currently defaults to C(true), but the default is deprecated since community.general 4.8.0.
The default will change to C(false) in community.general 6.0.0. To avoid a deprecation warning, please
set this parameter explicitly.
type: bool
default: false
filters:
version_added: 4.6.0
description: A list of Jinja templates that allow filtering hosts.
@@ -222,6 +223,7 @@ from ansible.module_utils.common.text.converters import to_native
from ansible.module_utils.six import string_types
from ansible.module_utils.six.moves.urllib.parse import urlencode
from ansible.utils.display import Display
from ansible.template import Templar
from ansible_collections.community.general.plugins.module_utils.version import LooseVersion
@@ -277,11 +279,6 @@ class InventoryModule(BaseInventoryPlugin, Constructable, Cacheable):
credentials = urlencode({'username': self.proxmox_user, 'password': self.proxmox_password, })
a = self._get_session()
if a.verify is False:
from requests.packages.urllib3 import disable_warnings
disable_warnings()
ret = a.post('%s/api2/json/access/ticket' % self.proxmox_url, data=credentials)
json = ret.json()
@@ -570,6 +567,14 @@ class InventoryModule(BaseInventoryPlugin, Constructable, Cacheable):
self.inventory.add_group(nodes_group)
want_proxmox_nodes_ansible_host = self.get_option("want_proxmox_nodes_ansible_host")
if want_proxmox_nodes_ansible_host is None:
display.deprecated(
'The want_proxmox_nodes_ansible_host option of the community.general.proxmox inventory plugin'
' currently defaults to `true`, but this default has been deprecated and will change to `false`'
' in community.general 6.0.0. To keep the current behavior and remove this deprecation warning,'
' explicitly set `want_proxmox_nodes_ansible_host` to `true` in your inventory configuration',
version='6.0.0', collection_name='community.general')
want_proxmox_nodes_ansible_host = True
# gather vm's on nodes
self._get_auth()
@@ -616,23 +621,40 @@ class InventoryModule(BaseInventoryPlugin, Constructable, Cacheable):
# read config from file, this sets 'options'
self._read_config_data(path)
# read and template auth options
for o in ('url', 'user', 'password', 'token_id', 'token_secret'):
v = self.get_option(o)
if self.templar.is_template(v):
v = self.templar.template(v, disable_lookups=False)
setattr(self, 'proxmox_%s' % o, v)
t = Templar(loader=loader)
# some more cleanup and validation
self.proxmox_url = self.proxmox_url.rstrip('/')
# read options
proxmox_url = self.get_option('url')
if t.is_template(proxmox_url):
proxmox_url = t.template(variable=proxmox_url, disable_lookups=False)
self.proxmox_url = proxmox_url.rstrip('/')
if self.proxmox_password is None and (self.proxmox_token_id is None or self.proxmox_token_secret is None):
proxmox_user = self.get_option('user')
if t.is_template(proxmox_user):
proxmox_user = t.template(variable=proxmox_user, disable_lookups=False)
self.proxmox_user = proxmox_user
proxmox_password = self.get_option('password')
if t.is_template(proxmox_password):
proxmox_password = t.template(variable=proxmox_password, disable_lookups=False)
self.proxmox_password = proxmox_password
proxmox_token_id = self.get_option('token_id')
if t.is_template(proxmox_token_id):
proxmox_token_id = t.template(variable=proxmox_token_id, disable_lookups=False)
self.proxmox_token_id = proxmox_token_id
proxmox_token_secret = self.get_option('token_secret')
if t.is_template(proxmox_token_secret):
proxmox_token_secret = t.template(variable=proxmox_token_secret, disable_lookups=False)
self.proxmox_token_secret = proxmox_token_secret
if proxmox_password is None and (proxmox_token_id is None or proxmox_token_secret is None):
raise AnsibleError('You must specify either a password or both token_id and token_secret.')
if self.get_option('qemu_extended_statuses') and not self.get_option('want_facts'):
raise AnsibleError('You must set want_facts to True if you want to use qemu_extended_statuses.')
# read rest of options
self.cache_key = self.get_cache_key(path)
self.use_cache = cache and self.get_option('cache')
self.host_filters = self.get_option('filters')

View File

@@ -78,6 +78,7 @@ compose:
import json
import ssl
from time import sleep
from ansible.errors import AnsibleError
from ansible.plugins.inventory import BaseInventoryPlugin, Constructable, Cacheable
@@ -138,21 +139,42 @@ class InventoryModule(BaseInventoryPlugin, Constructable, Cacheable):
self.conn = create_connection(
'{0}://{1}/api/'.format(proto, xoa_api_host), sslopt=sslopt)
CALL_TIMEOUT = 100
"""Number of 1/10ths of a second to wait before method call times out."""
def call(self, method, params):
"""Calls a method on the XO server with the provided parameters."""
id = self.pointer
self.conn.send(json.dumps({
'id': id,
'jsonrpc': '2.0',
'method': method,
'params': params
}))
waited = 0
while waited < self.CALL_TIMEOUT:
response = json.loads(self.conn.recv())
if 'id' in response and response['id'] == id:
return response
else:
sleep(0.1)
waited += 1
raise AnsibleError(
'Method call {method} timed out after {timeout} seconds.'.format(method=method, timeout=self.CALL_TIMEOUT / 10))
def login(self, user, password):
payload = {'id': self.pointer, 'jsonrpc': '2.0', 'method': 'session.signIn', 'params': {
'username': user, 'password': password}}
self.conn.send(json.dumps(payload))
result = json.loads(self.conn.recv())
result = self.call('session.signIn', {
'username': user, 'password': password
})
if 'error' in result:
raise AnsibleError(
'Could not connect: {0}'.format(result['error']))
def get_object(self, name):
payload = {'id': self.pointer, 'jsonrpc': '2.0',
'method': 'xo.getAllObjects', 'params': {'filter': {'type': name}}}
self.conn.send(json.dumps(payload))
answer = json.loads(self.conn.recv())
answer = self.call('xo.getAllObjects', {'filter': {'type': name}})
if 'error' in answer:
raise AnsibleError(

View File

@@ -28,12 +28,8 @@ DOCUMENTATION = """
default: name
version_added: 5.7.0
field:
description: Field to fetch. Leave unset to fetch whole response.
description: Field to fetch; leave unset to fetch whole response.
type: str
collection_id:
description: Collection ID to filter results by collection. Leave unset to skip filtering.
type: str
version_added: 6.3.0
"""
EXAMPLES = """
@@ -47,20 +43,10 @@ EXAMPLES = """
msg: >-
{{ lookup('community.general.bitwarden', 'bafba515-af11-47e6-abe3-af1200cd18b2', search='id', field='password') }}
- name: "Get 'password' from Bitwarden record named 'a_test' from collection"
ansible.builtin.debug:
msg: >-
{{ lookup('community.general.bitwarden', 'a_test', field='password', collection_id='bafba515-af11-47e6-abe3-af1200cd18b2') }}
- name: "Get full Bitwarden record named 'a_test'"
ansible.builtin.debug:
msg: >-
{{ lookup('community.general.bitwarden', 'a_test') }}
- name: "Get custom field 'api_key' from Bitwarden record named 'a_test'"
ansible.builtin.debug:
msg: >-
{{ lookup('community.general.bitwarden', 'a_test', field='api_key') }}
"""
RETURN = """
@@ -105,17 +91,10 @@ class Bitwarden(object):
raise BitwardenException(err)
return to_text(out, errors='surrogate_or_strict'), to_text(err, errors='surrogate_or_strict')
def _get_matches(self, search_value, search_field, collection_id):
def _get_matches(self, search_value, search_field):
"""Return matching records whose search_field is equal to key.
"""
# Prepare set of params for Bitwarden CLI
params = ['list', 'items', '--search', search_value]
if collection_id:
params.extend(['--collectionid', collection_id])
out, err = self._run(params)
out, err = self._run(['list', 'items', '--search', search_value])
# This includes things that matched in different fields.
initial_matches = AnsibleJSONDecoder().raw_decode(out)[0]
@@ -123,27 +102,17 @@ class Bitwarden(object):
# Filter to only include results from the right field.
return [item for item in initial_matches if item[search_field] == search_value]
def get_field(self, field, search_value, search_field="name", collection_id=None):
"""Return a list of the specified field for records whose search_field match search_value
and filtered by collection if collection has been provided.
def get_field(self, field, search_value, search_field="name"):
"""Return a list of the specified field for records whose search_field match search_value.
If field is None, return the whole record for each match.
"""
matches = self._get_matches(search_value, search_field, collection_id)
matches = self._get_matches(search_value, search_field)
if field in ['autofillOnPageLoad', 'password', 'passwordRevisionDate', 'totp', 'uris', 'username']:
if field:
return [match['login'][field] for match in matches]
elif not field:
return matches
else:
custom_field_matches = []
for match in matches:
for custom_field in match['fields']:
if custom_field['name'] == field:
custom_field_matches.append(custom_field['value'])
if matches and not custom_field_matches:
raise AnsibleError("Custom field {field} does not exist in {search_value}".format(field=field, search_value=search_value))
return custom_field_matches
return matches
class LookupModule(LookupBase):
@@ -152,11 +121,10 @@ class LookupModule(LookupBase):
self.set_options(var_options=variables, direct=kwargs)
field = self.get_option('field')
search_field = self.get_option('search')
collection_id = self.get_option('collection_id')
if not _bitwarden.unlocked:
raise AnsibleError("Bitwarden Vault locked. Run 'bw unlock'.")
return [_bitwarden.get_field(field, term, search_field, collection_id) for term in terms]
return [_bitwarden.get_field(field, term, search_field) for term in terms]
_bitwarden = Bitwarden()

View File

@@ -15,11 +15,9 @@ DOCUMENTATION = '''
- 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].
You can see the exact syntax in the examples section.
options:
_terms:
_raw:
description:
- a set of lists
type: list
elements: list
required: true
'''
@@ -76,7 +74,6 @@ class LookupModule(LookupBase):
return results
def run(self, terms, variables=None, **kwargs):
self.set_options(var_options=variables, direct=kwargs)
terms = self._lookup_variables(terms)

View File

@@ -22,33 +22,25 @@ DOCUMENTATION = '''
required: true
table:
description: name of the credstash table to query
type: str
default: 'credential-store'
version:
description: Credstash version
type: str
default: ''
region:
description: AWS region
type: str
profile_name:
description: AWS profile to use for authentication
type: str
env:
- name: AWS_PROFILE
aws_access_key_id:
description: AWS access key ID
type: str
env:
- name: AWS_ACCESS_KEY_ID
aws_secret_access_key:
description: AWS access key
type: str
env:
- name: AWS_SECRET_ACCESS_KEY
aws_session_token:
description: AWS session token
type: str
env:
- name: AWS_SESSION_TOKEN
'''
@@ -93,6 +85,8 @@ RETURN = """
type: str
"""
import os
from ansible.errors import AnsibleError
from ansible.plugins.lookup import LookupBase
@@ -106,39 +100,28 @@ except ImportError:
class LookupModule(LookupBase):
def run(self, terms, variables=None, **kwargs):
def run(self, terms, variables, **kwargs):
if not CREDSTASH_INSTALLED:
raise AnsibleError('The credstash lookup plugin requires credstash to be installed.')
self.set_options(var_options=variables, direct=kwargs)
version = self.get_option('version')
region = self.get_option('region')
table = self.get_option('table')
profile_name = self.get_option('profile_name')
aws_access_key_id = self.get_option('aws_access_key_id')
aws_secret_access_key = self.get_option('aws_secret_access_key')
aws_session_token = self.get_option('aws_session_token')
context = dict(
(k, v) for k, v in kwargs.items()
if k not in ('version', 'region', 'table', 'profile_name', 'aws_access_key_id', 'aws_secret_access_key', 'aws_session_token')
)
kwargs_pass = {
'profile_name': profile_name,
'aws_access_key_id': aws_access_key_id,
'aws_secret_access_key': aws_secret_access_key,
'aws_session_token': aws_session_token,
}
ret = []
for term in terms:
try:
ret.append(credstash.getSecret(term, version, region, table, context=context, **kwargs_pass))
version = kwargs.pop('version', '')
region = kwargs.pop('region', None)
table = kwargs.pop('table', 'credential-store')
profile_name = kwargs.pop('profile_name', os.getenv('AWS_PROFILE', None))
aws_access_key_id = kwargs.pop('aws_access_key_id', os.getenv('AWS_ACCESS_KEY_ID', None))
aws_secret_access_key = kwargs.pop('aws_secret_access_key', os.getenv('AWS_SECRET_ACCESS_KEY', None))
aws_session_token = kwargs.pop('aws_session_token', os.getenv('AWS_SESSION_TOKEN', None))
kwargs_pass = {'profile_name': profile_name, 'aws_access_key_id': aws_access_key_id,
'aws_secret_access_key': aws_secret_access_key, 'aws_session_token': aws_session_token}
val = credstash.getSecret(term, version, region, table, context=kwargs, **kwargs_pass)
except credstash.ItemNotFound:
raise AnsibleError('Key {0} not found'.format(term))
except Exception as e:
raise AnsibleError('Encountered exception while fetching {0}: {1}'.format(term, e))
ret.append(val)
return ret

View File

@@ -173,6 +173,7 @@ class LookupModule(LookupBase):
"""
def run(self, terms, variables=None, **kwargs):
display.vvvv("%s" % terms)
if isinstance(terms, list):
return_values = []

View File

@@ -16,7 +16,7 @@ description:
or template expressions which evaluate to lists or dicts, composed of the elements of
the input evaluated lists and dictionaries."
options:
_terms:
_raw:
description:
- A list where the elements are one-element dictionaries, mapping a name to a string, list, or dictionary.
The name is the index that is used in the result object. The value is iterated over as described below.
@@ -191,8 +191,6 @@ class LookupModule(LookupBase):
def run(self, terms, variables=None, **kwargs):
"""Generate list."""
self.set_options(var_options=variables, direct=kwargs)
result = []
if len(terms) > 0:
templar = Templar(loader=self._templar._loader)

View File

@@ -21,27 +21,22 @@ DOCUMENTATION = '''
- 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 such cases you may want to pass option I(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.
In such cases you may want to pass option wantlist=True to the plugin, 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 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:
_terms:
description: Domain(s) to query.
type: list
elements: str
qtype:
description:
- Record type to query.
- C(DLV) has been removed in community.general 6.0.0.
- C(CAA) has been added in community.general 6.3.0.
type: str
- C(DLV) is deprecated and will be removed in community.general 6.0.0.
default: 'A'
choices: [A, ALL, AAAA, CAA, CNAME, DNAME, DNSKEY, DS, HINFO, LOC, MX, NAPTR, NS, NSEC3PARAM, PTR, RP, RRSIG, SOA, SPF, SRV, SSHFP, TLSA, TXT]
choices: [A, ALL, AAAA, CNAME, DNAME, DLV, DNSKEY, DS, HINFO, LOC, MX, NAPTR, NS, NSEC3PARAM, PTR, RP, RRSIG, SOA, SPF, SRV, SSHFP, TLSA, TXT]
flat:
description: If 0 each record is returned as a dictionary, otherwise a string.
type: int
default: 1
retry_servfail:
description: Retry a nameserver if it returns SERVFAIL.
@@ -57,18 +52,6 @@ DOCUMENTATION = '''
default: false
type: bool
version_added: 5.4.0
real_empty:
description:
- Return empty result without empty strings, and return empty list instead of C(NXDOMAIN).
- The default for this option will likely change to C(true) in the future.
default: false
type: bool
version_added: 6.0.0
class:
description:
- "Class."
type: str
default: 'IN'
notes:
- ALL is not a record per-se, merely the listed fields are available for any record results you retrieve in the form of a dictionary.
- While the 'dig' lookup plugin supports anything which dnspython supports out of the box, only a subset can be converted into a dictionary.
@@ -84,7 +67,7 @@ EXAMPLES = """
- name: "The TXT record for example.org."
ansible.builtin.debug:
msg: "{{ lookup('community.general.dig', 'example.org.', qtype='TXT') }}"
msg: "{{ lookup('community.general.dig', 'example.org.', 'qtype=TXT') }}"
- name: "The TXT record for example.org, alternative syntax."
ansible.builtin.debug:
@@ -93,24 +76,24 @@ EXAMPLES = """
- name: use in a loop
ansible.builtin.debug:
msg: "MX record for gmail.com {{ item }}"
with_items: "{{ lookup('community.general.dig', 'gmail.com./MX', wantlist=true) }}"
with_items: "{{ lookup('community.general.dig', 'gmail.com./MX', wantlist=True) }}"
- ansible.builtin.debug:
msg: "Reverse DNS for 192.0.2.5 is {{ lookup('community.general.dig', '192.0.2.5/PTR') }}"
- ansible.builtin.debug:
msg: "Reverse DNS for 192.0.2.5 is {{ lookup('community.general.dig', '5.2.0.192.in-addr.arpa./PTR') }}"
- ansible.builtin.debug:
msg: "Reverse DNS for 192.0.2.5 is {{ lookup('community.general.dig', '5.2.0.192.in-addr.arpa.', qtype='PTR') }}"
msg: "Reverse DNS for 192.0.2.5 is {{ lookup('community.general.dig', '5.2.0.192.in-addr.arpa.', 'qtype=PTR') }}"
- ansible.builtin.debug:
msg: "Querying 198.51.100.23 for IPv4 address for example.com. produces {{ lookup('dig', 'example.com', '@198.51.100.23') }}"
- ansible.builtin.debug:
msg: "XMPP service for gmail.com. is available at {{ item.target }} on port {{ item.port }}"
with_items: "{{ lookup('community.general.dig', '_xmpp-server._tcp.gmail.com./SRV', flat=0, wantlist=true) }}"
with_items: "{{ lookup('community.general.dig', '_xmpp-server._tcp.gmail.com./SRV', 'flat=0', wantlist=True) }}"
- name: Retry nameservers that return SERVFAIL
ansible.builtin.debug:
msg: "{{ lookup('community.general.dig', 'example.org./A', retry_servfail=true) }}"
msg: "{{ lookup('community.general.dig', 'example.org./A', 'retry_servfail=True') }}"
"""
RETURN = """
@@ -130,18 +113,15 @@ RETURN = """
AAAA:
description:
- address
CAA:
description:
- flags
- tag
- value
version_added: 6.3.0
CNAME:
description:
- target
DNAME:
description:
- target
DLV:
description:
- algorithm, digest_type, key_tag, digest
DNSKEY:
description:
- flags, algorithm, protocol, key
@@ -205,7 +185,7 @@ try:
import dns.resolver
import dns.reversename
import dns.rdataclass
from dns.rdatatype import (A, AAAA, CAA, CNAME, DNAME, DNSKEY, DS, HINFO, LOC,
from dns.rdatatype import (A, AAAA, CNAME, DLV, DNAME, DNSKEY, DS, HINFO, LOC,
MX, NAPTR, NS, NSEC3PARAM, PTR, RP, SOA, SPF, SRV, SSHFP, TLSA, TXT)
HAVE_DNS = True
except ImportError:
@@ -225,9 +205,9 @@ def make_rdata_dict(rdata):
supported_types = {
A: ['address'],
AAAA: ['address'],
CAA: ['flags', 'tag', 'value'],
CNAME: ['target'],
DNAME: ['target'],
DLV: ['algorithm', 'digest_type', 'key_tag', 'digest'],
DNSKEY: ['flags', 'algorithm', 'protocol', 'key'],
DS: ['algorithm', 'digest_type', 'key_tag', 'digest'],
HINFO: ['cpu', 'os'],
@@ -257,6 +237,8 @@ def make_rdata_dict(rdata):
if isinstance(val, dns.name.Name):
val = dns.name.Name.to_text(val)
if rdata.rdtype == DLV and f == 'digest':
val = dns.rdata._hexify(rdata.digest).replace(' ', '')
if rdata.rdtype == DS and f == 'digest':
val = dns.rdata._hexify(rdata.digest).replace(' ', '')
if rdata.rdtype == DNSKEY and f == 'algorithm':
@@ -298,26 +280,20 @@ class LookupModule(LookupBase):
... flat=0 # returns a dict; default is 1 == string
'''
if HAVE_DNS is False:
raise AnsibleError("The dig lookup requires the python 'dnspython' library and it is not installed")
self.set_options(var_options=variables, direct=kwargs)
# Create Resolver object so that we can set NS if necessary
myres = dns.resolver.Resolver(configure=True)
edns_size = 4096
myres.use_edns(0, ednsflags=dns.flags.DO, payload=edns_size)
domain = None
qtype = self.get_option('qtype')
flat = self.get_option('flat')
fail_on_error = self.get_option('fail_on_error')
real_empty = self.get_option('real_empty')
try:
rdclass = dns.rdataclass.from_text(self.get_option('class'))
except Exception as e:
raise AnsibleError("dns lookup illegal CLASS: %s" % to_native(e))
myres.retry_servfail = self.get_option('retry_servfail')
qtype = 'A'
flat = True
fail_on_error = False
rdclass = dns.rdataclass.from_text('IN')
for t in terms:
if t.startswith('@'): # e.g. "@10.0.1.2,192.0.2.1" is ok.
@@ -340,7 +316,7 @@ class LookupModule(LookupBase):
continue
if '=' in t:
try:
opt, arg = t.split('=', 1)
opt, arg = t.split('=')
except Exception:
pass
@@ -357,8 +333,6 @@ class LookupModule(LookupBase):
myres.retry_servfail = boolean(arg)
elif opt == 'fail_on_error':
fail_on_error = boolean(arg)
elif opt == 'real_empty':
real_empty = boolean(arg)
continue
@@ -374,6 +348,11 @@ class LookupModule(LookupBase):
ret = []
if qtype.upper() == 'DLV':
display.deprecated('The DLV record type has been decommissioned in 2017 and support for'
' it will be removed from community.general 6.0.0',
version='6.0.0', collection_name='community.general')
if qtype.upper() == 'PTR':
try:
n = dns.reversename.from_address(domain)
@@ -409,18 +388,15 @@ class LookupModule(LookupBase):
except dns.resolver.NXDOMAIN as err:
if fail_on_error:
raise AnsibleError("Lookup failed: %s" % str(err))
if not real_empty:
ret.append('NXDOMAIN')
ret.append('NXDOMAIN')
except dns.resolver.NoAnswer as err:
if fail_on_error:
raise AnsibleError("Lookup failed: %s" % str(err))
if not real_empty:
ret.append("")
ret.append("")
except dns.resolver.Timeout as err:
if fail_on_error:
raise AnsibleError("Lookup failed: %s" % str(err))
if not real_empty:
ret.append("")
ret.append('')
except dns.exception.DNSException as err:
raise AnsibleError("dns.resolver unhandled exception %s" % to_native(err))

View File

@@ -20,13 +20,6 @@ DOCUMENTATION = '''
required: true
type: list
elements: string
real_empty:
description:
- Return empty result without empty strings, and return empty list instead of C(NXDOMAIN).
- The default for this option will likely change to C(true) in the future.
default: false
type: bool
version_added: 6.0.0
'''
EXAMPLES = """
@@ -78,13 +71,10 @@ from ansible.plugins.lookup import LookupBase
class LookupModule(LookupBase):
def run(self, terms, variables=None, **kwargs):
self.set_options(var_options=variables, direct=kwargs)
if HAVE_DNS is False:
raise AnsibleError("Can't LOOKUP(dnstxt): module dns.resolver is not installed")
real_empty = self.get_option('real_empty')
ret = []
for term in terms:
domain = term.split()[0]
@@ -96,16 +86,10 @@ class LookupModule(LookupBase):
string.append(s[1:-1]) # Strip outside quotes on TXT rdata
except dns.resolver.NXDOMAIN:
if real_empty:
continue
string = 'NXDOMAIN'
except dns.resolver.Timeout:
if real_empty:
continue
string = ''
except dns.resolver.NoAnswer:
if real_empty:
continue
string = ''
except DNSException as e:
raise AnsibleError("dns.resolver unhandled exception %s" % to_native(e))

View File

@@ -201,8 +201,6 @@ def file_props(root, path):
class LookupModule(LookupBase):
def run(self, terms, variables=None, **kwargs):
self.set_options(var_options=variables, direct=kwargs)
basedir = self.get_basedir(variables)
ret = []

View File

@@ -11,17 +11,14 @@ DOCUMENTATION = '''
author: Serge van Ginderachter (!UNKNOWN) <serge@vanginderachter.be>
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 will flatten any list elements found recursively until only 1 list is left.
options:
_terms:
description: lists to flatten
type: list
elements: raw
required: true
notes:
- Unlike the R(items lookup,ansible_collections.ansible.builtin.items_lookup) which only flattens 1 level,
this plugin will continue to flatten until it cannot find lists anymore.
- Aka highlander plugin, there can only be one (list).
- unlike 'items' which only flattens 1 level, this plugin will continue to flatten until it cannot find lists anymore.
- aka highlander plugin, there can only be one (list).
'''
EXAMPLES = """
@@ -86,10 +83,9 @@ class LookupModule(LookupBase):
return ret
def run(self, terms, variables=None, **kwargs):
def run(self, terms, variables, **kwargs):
if not isinstance(terms, list):
raise AnsibleError("with_flattened expects a list")
self.set_options(var_options=variables, direct=kwargs)
return self._do_flatten(terms, variables)

View File

@@ -14,23 +14,23 @@ DOCUMENTATION = '''
requirements:
- hiera (command line utility)
description:
- Retrieves data from an Puppetmaster node using Hiera as ENC.
- Retrieves data from an Puppetmaster node using Hiera as ENC
options:
_terms:
_hiera_key:
description:
- The list of keys to lookup on the Puppetmaster.
- The list of keys to lookup on the Puppetmaster
type: list
elements: string
required: true
executable:
_bin_file:
description:
- Binary file to execute Hiera.
- Binary file to execute Hiera
default: '/usr/bin/hiera'
env:
- name: ANSIBLE_HIERA_BIN
config_file:
_hierarchy_file:
description:
- File that describes the hierarchy of Hiera.
- File that describes the hierarchy of Hiera
default: '/etc/hiera.yaml'
env:
- name: ANSIBLE_HIERA_CFG
@@ -61,32 +61,31 @@ RETURN = """
elements: str
"""
import os
from ansible.plugins.lookup import LookupBase
from ansible.utils.cmd_functions import run_cmd
from ansible.module_utils.common.text.converters import to_text
ANSIBLE_HIERA_CFG = os.getenv('ANSIBLE_HIERA_CFG', '/etc/hiera.yaml')
ANSIBLE_HIERA_BIN = os.getenv('ANSIBLE_HIERA_BIN', '/usr/bin/hiera')
class Hiera(object):
def __init__(self, hiera_cfg, hiera_bin):
self.hiera_cfg = hiera_cfg
self.hiera_bin = hiera_bin
def get(self, hiera_key):
pargs = [self.hiera_bin]
pargs.extend(['-c', self.hiera_cfg])
pargs = [ANSIBLE_HIERA_BIN]
pargs.extend(['-c', ANSIBLE_HIERA_CFG])
pargs.extend(hiera_key)
rc, output, err = run_cmd("{0} -c {1} {2}".format(
self.hiera_bin, self.hiera_cfg, hiera_key[0]))
ANSIBLE_HIERA_BIN, ANSIBLE_HIERA_CFG, hiera_key[0]))
return to_text(output.strip())
class LookupModule(LookupBase):
def run(self, terms, variables=None, **kwargs):
self.set_options(var_options=variables, direct=kwargs)
hiera = Hiera(self.get_option('config_file'), self.get_option('executable'))
def run(self, terms, variables=''):
hiera = Hiera()
ret = [hiera.get(terms)]
return ret

View File

@@ -26,9 +26,7 @@ EXAMPLES = """
- 'servicename username'
- name: access mysql with password from keyring
community.mysql.mysql_db:
login_password: "{{ lookup('community.general.keyring', 'mysql joe') }}"
login_user: joe
mysql_db: login_password={{lookup('community.general.keyring','mysql joe')}} login_user=joe
"""
RETURN = """
@@ -55,12 +53,10 @@ display = Display()
class LookupModule(LookupBase):
def run(self, terms, variables=None, **kwargs):
def run(self, terms, **kwargs):
if not HAS_KEYRING:
raise AnsibleError(u"Can't LOOKUP(keyring): missing required python library 'keyring'")
self.set_options(var_options=variables, direct=kwargs)
display.vvvv(u"keyring: %s" % keyring.get_keyring())
ret = []
for term in terms:

View File

@@ -13,20 +13,15 @@ DOCUMENTATION = '''
version_added: '0.2.0'
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.
- This lookup returns a list of results from an LMDB DB corresponding to a list of items given to it
requirements:
- lmdb (python library https://lmdb.readthedocs.io/en/release/)
options:
_terms:
description: List of keys to query.
type: list
elements: str
description: list of keys to query
db:
description: Path to LMDB database.
type: str
description: path to LMDB database
default: 'ansible.mdb'
vars:
- name: lmdb_kv_db
'''
EXAMPLES = """
@@ -48,8 +43,8 @@ EXAMPLES = """
- item == 'Belgium'
vars:
- lmdb_kv_db: jp.mdb
with_community.general.lmdb_kv:
- be
with_community.general.lmdb_kv:
- be
"""
RETURN = """
@@ -63,7 +58,6 @@ _raw:
from ansible.errors import AnsibleError
from ansible.plugins.lookup import LookupBase
from ansible.module_utils.common.text.converters import to_native, to_text
HAVE_LMDB = True
try:
import lmdb
@@ -73,7 +67,8 @@ except ImportError:
class LookupModule(LookupBase):
def run(self, terms, variables=None, **kwargs):
def run(self, terms, variables, **kwargs):
'''
terms contain any number of keys to be retrieved.
If terms is None, all keys from the database are returned
@@ -86,15 +81,17 @@ class LookupModule(LookupBase):
vars:
- lmdb_kv_db: "jp.mdb"
'''
if HAVE_LMDB is False:
raise AnsibleError("Can't LOOKUP(lmdb_kv): this module requires lmdb to be installed")
self.set_options(var_options=variables, direct=kwargs)
db = self.get_option('db')
db = variables.get('lmdb_kv_db', None)
if db is None:
db = kwargs.get('db', 'ansible.mdb')
db = str(db)
try:
env = lmdb.open(str(db), readonly=True)
env = lmdb.open(db, readonly=True)
except Exception as e:
raise AnsibleError("LMDB can't open database %s: %s" % (db, to_native(e)))

View File

@@ -68,6 +68,7 @@ from ansible.module_utils import six
from ansible.utils.display import Display
from traceback import format_exception
import json
import os
import sys
display = Display()
@@ -206,7 +207,7 @@ class ManifoldApiClient(object):
class LookupModule(LookupBase):
def run(self, terms, variables=None, **kwargs):
def run(self, terms, variables=None, api_token=None, project=None, team=None):
"""
:param terms: a list of resources lookups to run.
:param variables: ansible variables active at the time of the lookup
@@ -216,11 +217,10 @@ class LookupModule(LookupBase):
:return: a dictionary of resources credentials
"""
self.set_options(var_options=variables, direct=kwargs)
api_token = self.get_option('api_token')
project = self.get_option('project')
team = self.get_option('team')
if not api_token:
api_token = os.getenv('MANIFOLD_API_TOKEN')
if not api_token:
raise AnsibleError('API token is required. Please set api_token parameter or MANIFOLD_API_TOKEN env var')
try:
labels = terms

View File

@@ -32,7 +32,7 @@ DOCUMENTATION = '''
section:
description: Item section containing the field to retrieve (case-insensitive). If absent will return first match from any section.
domain:
description: Domain of 1Password.
description: Domain of 1Password. Default is U(1password.com).
version_added: 3.2.0
default: '1password.com'
type: str
@@ -55,7 +55,7 @@ DOCUMENTATION = '''
- This lookup stores potentially sensitive data from 1Password as Ansible facts.
Facts are subject to caching if enabled, which means this data could be stored in clear text
on disk or in a database.
- Tested with C(op) version 2.7.2
- Tested with C(op) version 0.5.3
'''
EXAMPLES = """
@@ -74,18 +74,18 @@ EXAMPLES = """
- name: Retrieve password for HAL when not signed in to 1Password
ansible.builtin.debug:
var: lookup('community.general.onepassword'
'HAL 9000'
subdomain='Discovery'
var: lookup('community.general.onepassword',
'HAL 9000',
subdomain='Discovery',
master_password=vault_master_password)
- name: Retrieve password for HAL when never signed in to 1Password
ansible.builtin.debug:
var: lookup('community.general.onepassword'
'HAL 9000'
subdomain='Discovery'
master_password=vault_master_password
username='tweety@acme.com'
var: lookup('community.general.onepassword',
'HAL 9000',
subdomain='Discovery',
master_password=vault_master_password,
username='tweety@acme.com',
secret_key=vault_secret_key)
"""
@@ -96,123 +96,106 @@ RETURN = """
elements: str
"""
import abc
import os
import errno
import json
import subprocess
import os
from subprocess import Popen, PIPE
from ansible.plugins.lookup import LookupBase
from ansible.errors import AnsibleLookupError
from ansible.module_utils.common.process import get_bin_path
from ansible.module_utils.common.text.converters import to_bytes, to_text
from ansible.module_utils.six import with_metaclass
from ansible_collections.community.general.plugins.module_utils.onepassword import OnePasswordConfig
class OnePassCLIBase(with_metaclass(abc.ABCMeta, object)):
bin = "op"
class OnePass(object):
def __init__(self, path='op'):
self.cli_path = path
self.logged_in = False
self.token = None
self.subdomain = None
self.domain = None
self.username = None
self.secret_key = None
self.master_password = None
def __init__(self, subdomain=None, domain="1password.com", username=None, secret_key=None, master_password=None):
self.subdomain = subdomain
self.domain = domain
self.username = username
self.master_password = master_password
self.secret_key = secret_key
self._config = OnePasswordConfig()
self._path = None
self._version = None
def get_token(self):
# If the config file exists, assume an initial signin has taken place and try basic sign in
if os.path.isfile(self._config.config_file_path):
def _check_required_params(self, required_params):
non_empty_attrs = dict((param, getattr(self, param, None)) for param in required_params if getattr(self, param, None))
missing = set(required_params).difference(non_empty_attrs)
if missing:
prefix = "Unable to sign in to 1Password. Missing required parameter"
plural = ""
suffix = ": {params}.".format(params=", ".join(missing))
if len(missing) > 1:
plural = "s"
if not self.master_password:
raise AnsibleLookupError('Unable to sign in to 1Password. master_password is required.')
msg = "{prefix}{plural}{suffix}".format(prefix=prefix, plural=plural, suffix=suffix)
raise AnsibleLookupError(msg)
try:
args = ['signin', '--output=raw']
@abc.abstractmethod
def _parse_field(self, data_json, field_name, section_title):
"""Main method for parsing data returned from the op command line tool"""
if self.subdomain:
args = ['signin', self.subdomain, '--output=raw']
def _run(self, args, expected_rc=0, command_input=None, ignore_errors=False, environment_update=None):
command = [self.path] + args
call_kwargs = {
"stdout": subprocess.PIPE,
"stderr": subprocess.PIPE,
"stdin": subprocess.PIPE,
}
rc, out, err = self._run(args, command_input=to_bytes(self.master_password))
self.token = out.strip()
if environment_update:
env = os.environ.copy()
env.update(environment_update)
call_kwargs["env"] = env
except AnsibleLookupError:
self.full_login()
p = subprocess.Popen(command, **call_kwargs)
else:
# Attempt a full sign in since there appears to be no existing sign in
self.full_login()
def assert_logged_in(self):
try:
rc, out, err = self._run(['get', 'account'], ignore_errors=True)
if rc == 0:
self.logged_in = True
if not self.logged_in:
self.get_token()
except OSError as e:
if e.errno == errno.ENOENT:
raise AnsibleLookupError("1Password CLI tool '%s' not installed in path on control machine" % self.cli_path)
raise e
def get_raw(self, item_id, vault=None):
args = ["get", "item", item_id]
if vault is not None:
args += ['--vault={0}'.format(vault)]
if not self.logged_in:
args += [to_bytes('--session=') + self.token]
rc, output, dummy = self._run(args)
return output
def get_field(self, item_id, field, section=None, vault=None):
output = self.get_raw(item_id, vault)
return self._parse_field(output, field, section) if output != '' else ''
def full_login(self):
if None in [self.subdomain, self.username, self.secret_key, self.master_password]:
raise AnsibleLookupError('Unable to perform initial sign in to 1Password. '
'subdomain, username, secret_key, and master_password are required to perform initial sign in.')
args = [
'signin',
'{0}.{1}'.format(self.subdomain, self.domain),
to_bytes(self.username),
to_bytes(self.secret_key),
'--output=raw',
]
rc, out, err = self._run(args, command_input=to_bytes(self.master_password))
self.token = out.strip()
def _run(self, args, expected_rc=0, command_input=None, ignore_errors=False):
command = [self.cli_path] + args
p = Popen(command, stdout=PIPE, stderr=PIPE, stdin=PIPE)
out, err = p.communicate(input=command_input)
rc = p.wait()
if not ignore_errors and rc != expected_rc:
raise AnsibleLookupError(to_text(err))
return rc, out, err
@abc.abstractmethod
def assert_logged_in(self):
"""Check whether a login session exists"""
@abc.abstractmethod
def full_signin(self):
"""Performa full login"""
@abc.abstractmethod
def get_raw(self, item_id, vault=None, token=None):
"""Gets the specified item from the vault"""
@abc.abstractmethod
def signin(self):
"""Sign in using the master password"""
@property
def path(self):
if self._path is None:
self._path = get_bin_path(self.bin)
return self._path
@property
def version(self):
if self._version is None:
self._version = self.get_current_version()
return self._version
@classmethod
def get_current_version(cls):
"""Standalone method to get the op CLI version. Useful when determining which class to load
based on the current version."""
try:
bin_path = get_bin_path(cls.bin)
except ValueError:
raise AnsibleLookupError("Unable to locate '%s' command line tool" % cls.bin)
try:
b_out = subprocess.check_output([bin_path, "--version"], stderr=subprocess.PIPE)
except subprocess.CalledProcessError as cpe:
raise AnsibleLookupError("Unable to get the op version: %s" % cpe)
return to_text(b_out).strip()
class OnePassCLIv1(OnePassCLIBase):
supports_version = "1"
def _parse_field(self, data_json, field_name, section_title):
def _parse_field(self, data_json, field_name, section_title=None):
"""
Retrieves the desired field from the `op` response payload
@@ -266,356 +249,36 @@ class OnePassCLIv1(OnePassCLIBase):
# check the details dictionary for `field_name` and return it immediately if it exists
# when the entry is a "password" instead of a "login" item, the password field is a key
# in the `details` dictionary:
if field_name in data["details"]:
return data["details"][field_name]
if field_name in data['details']:
return data['details'][field_name]
# when the field is not found above, iterate through the fields list in the object details
for field_data in data["details"].get("fields", []):
if field_data.get("name", "").lower() == field_name.lower():
return field_data.get("value", "")
for section_data in data["details"].get("sections", []):
if section_title is not None and section_title.lower() != section_data["title"].lower():
for field_data in data['details'].get('fields', []):
if field_data.get('name', '').lower() == field_name.lower():
return field_data.get('value', '')
for section_data in data['details'].get('sections', []):
if section_title is not None and section_title.lower() != section_data['title'].lower():
continue
for field_data in section_data.get("fields", []):
if field_data.get("t", "").lower() == field_name.lower():
return field_data.get("v", "")
return ""
def assert_logged_in(self):
args = ["get", "account"]
if self.subdomain:
account = "{subdomain}.{domain}".format(subdomain=self.subdomain, domain=self.domain)
args.extend(["--account", account])
rc, out, err = self._run(args, ignore_errors=True)
return not bool(rc)
def full_signin(self):
required_params = [
"subdomain",
"username",
"secret_key",
"master_password",
]
self._check_required_params(required_params)
args = [
"signin",
"{0}.{1}".format(self.subdomain, self.domain),
to_bytes(self.username),
to_bytes(self.secret_key),
"--raw",
]
return self._run(args, command_input=to_bytes(self.master_password))
def get_raw(self, item_id, vault=None, token=None):
args = ["get", "item", item_id]
if vault is not None:
args += ["--vault={0}".format(vault)]
if token is not None:
args += [to_bytes("--session=") + token]
return self._run(args)
def signin(self):
self._check_required_params(['master_password'])
args = ["signin", "--raw"]
if self.subdomain:
args.append(self.subdomain)
return self._run(args, command_input=to_bytes(self.master_password))
class OnePassCLIv2(OnePassCLIBase):
"""
CLIv2 Syntax Reference: https://developer.1password.com/docs/cli/upgrade#step-2-update-your-scripts
"""
supports_version = "2"
def _parse_field(self, data_json, field_name, section_title=None):
"""
Schema reference: https://developer.1password.com/docs/cli/item-template-json
Example Data:
# Password item
{
"id": "ywvdbojsguzgrgnokmcxtydgdv",
"title": "Authy Backup",
"version": 1,
"vault": {
"id": "bcqxysvcnejjrwzoqrwzcqjqxc",
"name": "Personal"
},
"category": "PASSWORD",
"last_edited_by": "7FUPZ8ZNE02KSHMAIMKHIVUE17",
"created_at": "2015-01-18T13:13:38Z",
"updated_at": "2016-02-20T16:23:54Z",
"additional_information": "Jan 18, 2015, 08:13:38",
"fields": [
{
"id": "password",
"type": "CONCEALED",
"purpose": "PASSWORD",
"label": "password",
"value": "OctoberPoppyNuttyDraperySabbath",
"reference": "op://Personal/Authy Backup/password",
"password_details": {
"strength": "FANTASTIC"
}
},
{
"id": "notesPlain",
"type": "STRING",
"purpose": "NOTES",
"label": "notesPlain",
"value": "Backup password to restore Authy",
"reference": "op://Personal/Authy Backup/notesPlain"
}
]
}
# Login item
{
"id": "awk4s2u44fhnrgppszcsvc663i",
"title": "Dummy Login",
"version": 2,
"vault": {
"id": "stpebbaccrq72xulgouxsk4p7y",
"name": "Personal"
},
"category": "LOGIN",
"last_edited_by": "LSGPJERUYBH7BFPHMZ2KKGL6AU",
"created_at": "2018-04-25T21:55:19Z",
"updated_at": "2018-04-25T21:56:06Z",
"additional_information": "agent.smith",
"urls": [
{
"primary": true,
"href": "https://acme.com"
}
],
"sections": [
{
"id": "linked items",
"label": "Related Items"
}
],
"fields": [
{
"id": "username",
"type": "STRING",
"purpose": "USERNAME",
"label": "username",
"value": "agent.smith",
"reference": "op://Personal/Dummy Login/username"
},
{
"id": "password",
"type": "CONCEALED",
"purpose": "PASSWORD",
"label": "password",
"value": "Q7vFwTJcqwxKmTU]Dzx7NW*wrNPXmj",
"entropy": 159.6083697084228,
"reference": "op://Personal/Dummy Login/password",
"password_details": {
"entropy": 159,
"generated": true,
"strength": "FANTASTIC"
}
},
{
"id": "notesPlain",
"type": "STRING",
"purpose": "NOTES",
"label": "notesPlain",
"reference": "op://Personal/Dummy Login/notesPlain"
}
]
}
"""
data = json.loads(data_json)
for field in data.get("fields", []):
if section_title is None:
# If the field name exists in the section, return that value
if field.get(field_name):
return field.get(field_name)
# If the field name doesn't exist in the section, match on the value of "label"
# then "id" and return "value"
if field.get("label") == field_name:
return field["value"]
if field.get("id") == field_name:
return field["value"]
# Look at the section data and get an indentifier. The value of 'id' is either a unique ID
# or a human-readable string. If a 'label' field exists, prefer that since
# it is the value visible in the 1Password UI when both 'id' and 'label' exist.
section = field.get("section", {})
current_section_title = section.get("label", section.get("id"))
if section_title == current_section_title:
# In the correct section. Check "label" then "id" for the desired field_name
if field.get("label") == field_name:
return field["value"]
if field.get("id") == field_name:
return field["value"]
return ""
def assert_logged_in(self):
args = ["account", "list"]
if self.subdomain:
account = "{subdomain}.{domain}".format(subdomain=self.subdomain, domain=self.domain)
args.extend(["--account", account])
rc, out, err = self._run(args)
if out:
# Running 'op account get' if there are no accounts configured on the system drops into
# an interactive prompt. Only run 'op account get' after first listing accounts to see
# if there are any previously configured accounts.
args = ["account", "get"]
if self.subdomain:
account = "{subdomain}.{domain}".format(subdomain=self.subdomain, domain=self.domain)
args.extend(["--account", account])
rc, out, err = self._run(args, ignore_errors=True)
return not bool(rc)
return False
def full_signin(self):
required_params = [
"subdomain",
"username",
"secret_key",
"master_password",
]
self._check_required_params(required_params)
args = [
"account", "add", "--raw",
"--address", "{0}.{1}".format(self.subdomain, self.domain),
"--email", to_bytes(self.username),
"--signin",
]
environment_update = {"OP_SECRET_KEY": self.secret_key}
return self._run(args, command_input=to_bytes(self.master_password), environment_update=environment_update)
def get_raw(self, item_id, vault=None, token=None):
args = ["item", "get", item_id, "--format", "json"]
if vault is not None:
args += ["--vault={0}".format(vault)]
if token is not None:
args += [to_bytes("--session=") + token]
return self._run(args)
def signin(self):
self._check_required_params(['master_password'])
args = ["signin", "--raw"]
if self.subdomain:
args.extend(["--account", self.subdomain])
return self._run(args, command_input=to_bytes(self.master_password))
class OnePass(object):
def __init__(self, subdomain=None, domain="1password.com", username=None, secret_key=None, master_password=None):
self.subdomain = subdomain
self.domain = domain
self.username = username
self.secret_key = secret_key
self.master_password = master_password
self.logged_in = False
self.token = None
self._config = OnePasswordConfig()
self._cli = self._get_cli_class()
def _get_cli_class(self):
version = OnePassCLIBase.get_current_version()
for cls in OnePassCLIBase.__subclasses__():
if cls.supports_version == version.split(".")[0]:
try:
return cls(self.subdomain, self.domain, self.username, self.secret_key, self.master_password)
except TypeError as e:
raise AnsibleLookupError(e)
raise AnsibleLookupError("op version %s is unsupported" % version)
def set_token(self):
if self._config.config_file_path and os.path.isfile(self._config.config_file_path):
# If the config file exists, assume an initial sign in has taken place and try basic sign in
try:
rc, out, err = self._cli.signin()
except AnsibleLookupError as exc:
test_strings = (
"missing required parameters",
"unauthorized",
)
if any(string in exc.message.lower() for string in test_strings):
# A required parameter is missing, or a bad master password was supplied
# so don't bother attempting a full signin
raise
rc, out, err = self._cli.full_signin()
self.token = out.strip()
else:
# Attempt a full signin since there appears to be no existing signin
rc, out, err = self._cli.full_signin()
self.token = out.strip()
def assert_logged_in(self):
logged_in = self._cli.assert_logged_in()
if logged_in:
self.logged_in = logged_in
pass
else:
self.set_token()
def get_raw(self, item_id, vault=None):
rc, out, err = self._cli.get_raw(item_id, vault, self.token)
return out
def get_field(self, item_id, field, section=None, vault=None):
output = self.get_raw(item_id, vault)
if output:
return self._cli._parse_field(output, field, section)
return ""
for field_data in section_data.get('fields', []):
if field_data.get('t', '').lower() == field_name.lower():
return field_data.get('v', '')
return ''
class LookupModule(LookupBase):
def run(self, terms, variables=None, **kwargs):
self.set_options(var_options=variables, direct=kwargs)
op = OnePass()
field = self.get_option("field")
section = self.get_option("section")
vault = self.get_option("vault")
subdomain = self.get_option("subdomain")
domain = self.get_option("domain")
username = self.get_option("username")
secret_key = self.get_option("secret_key")
master_password = self.get_option("master_password")
field = kwargs.get('field', 'password')
section = kwargs.get('section')
vault = kwargs.get('vault')
op.subdomain = kwargs.get('subdomain')
op.domain = kwargs.get('domain', '1password.com')
op.username = kwargs.get('username')
op.secret_key = kwargs.get('secret_key')
op.master_password = kwargs.get('master_password', kwargs.get('vault_password'))
op = OnePass(subdomain, domain, username, secret_key, master_password)
op.assert_logged_in()
values = []

View File

@@ -30,11 +30,6 @@ DOCUMENTATION = '''
description: Item section containing the field to retrieve (case-insensitive). If absent will return first match from any section.
subdomain:
description: The 1Password subdomain to authenticate against.
domain:
description: Domain of 1Password.
version_added: 6.0.0
default: '1password.com'
type: str
username:
description: The username used to sign in.
secret_key:
@@ -52,7 +47,7 @@ DOCUMENTATION = '''
- This lookup stores potentially sensitive data from 1Password as Ansible facts.
Facts are subject to caching if enabled, which means this data could be stored in clear text
on disk or in a database.
- Tested with C(op) version 2.7.0
- Tested with C(op) version 0.5.3
'''
EXAMPLES = """
@@ -81,21 +76,18 @@ from ansible.plugins.lookup import LookupBase
class LookupModule(LookupBase):
def run(self, terms, variables=None, **kwargs):
self.set_options(var_options=variables, direct=kwargs)
op = OnePass()
vault = self.get_option("vault")
subdomain = self.get_option("subdomain")
domain = self.get_option("domain", "1password.com")
username = self.get_option("username")
secret_key = self.get_option("secret_key")
master_password = self.get_option("master_password")
vault = kwargs.get('vault')
op.subdomain = kwargs.get('subdomain')
op.username = kwargs.get('username')
op.secret_key = kwargs.get('secret_key')
op.master_password = kwargs.get('master_password', kwargs.get('vault_password'))
op = OnePass(subdomain, domain, username, secret_key, master_password)
op.assert_logged_in()
values = []
for term in terms:
data = json.loads(op.get_raw(term, vault))
values.append(data)
return values

View File

@@ -21,15 +21,17 @@ DOCUMENTATION = '''
_terms:
description: query key.
required: true
directory:
passwordstore:
description:
- The directory of the password store.
- If I(backend=pass), the default is C(~/.password-store) is used.
- If I(backend=gopass), then the default is the C(path) field in C(~/.config/gopass/config.yml),
falling back to C(~/.local/share/gopass/stores/root) if C(path) is not defined in the gopass config.
type: path
vars:
- name: passwordstore
- Location of the password store.
- 'The value is decided by checking the following in order:'
- If set, this value is used.
- If C(directory) is set, that value will be used.
- If I(backend=pass), then C(~/.password-store) is used.
- If I(backend=gopass), then the C(path) field in C(~/.config/gopass/config.yml) is used,
falling back to C(~/.local/share/gopass/stores/root) if not defined.
directory:
description: The directory of the password store.
env:
- name: PASSWORD_STORE_DIR
create:
@@ -53,11 +55,9 @@ DOCUMENTATION = '''
default: false
subkey:
description: Return a specific subkey of the password. When set to C(password), always returns the first line.
type: str
default: password
userpass:
description: Specify a password to save, instead of a generated one.
type: str
length:
description: The length of the generated password.
type: integer
@@ -67,7 +67,7 @@ DOCUMENTATION = '''
type: bool
default: false
nosymbols:
description: Use alphanumeric characters.
description: use alphanumeric characters.
type: bool
default: false
missing:
@@ -129,8 +129,6 @@ DOCUMENTATION = '''
- pass
- gopass
version_added: 5.2.0
notes:
- The lookup supports passing all options as lookup parameters since community.general 6.0.0.
'''
EXAMPLES = """
ansible.cfg: |
@@ -138,7 +136,7 @@ ansible.cfg: |
lock=readwrite
locktimeout=45s
tasks.yml: |
playbook.yml: |
---
# Debug is used for examples, BAD IDEA to show passwords on screen
@@ -148,49 +146,45 @@ tasks.yml: |
- name: Basic lookup. Warns if example/test does not exist and returns empty string
ansible.builtin.debug:
msg: "{{ lookup('community.general.passwordstore', 'example/test', missing='warn')}}"
msg: "{{ lookup('community.general.passwordstore', 'example/test missing=warn')}}"
- name: Create pass with random 16 character password. If password exists just give the password
ansible.builtin.debug:
var: mypassword
vars:
mypassword: "{{ lookup('community.general.passwordstore', 'example/test', create=true)}}"
mypassword: "{{ lookup('community.general.passwordstore', 'example/test create=true')}}"
- name: Create pass with random 16 character password. If password exists just give the password
ansible.builtin.debug:
var: mypassword
vars:
mypassword: "{{ lookup('community.general.passwordstore', 'example/test', missing='create')}}"
mypassword: "{{ lookup('community.general.passwordstore', 'example/test missing=create')}}"
- name: Prints 'abc' if example/test does not exist, just give the password otherwise
ansible.builtin.debug:
var: mypassword
vars:
mypassword: >-
{{ lookup('community.general.passwordstore', 'example/test', missing='empty')
| default('abc', true) }}
mypassword: "{{ lookup('community.general.passwordstore', 'example/test missing=empty') | default('abc', true) }}"
- name: Different size password
ansible.builtin.debug:
msg: "{{ lookup('community.general.passwordstore', 'example/test', create=true, length=42)}}"
msg: "{{ lookup('community.general.passwordstore', 'example/test create=true length=42')}}"
- name: >-
Create password and overwrite the password if it exists.
As a bonus, this module includes the old password inside the pass file
- name: Create password and overwrite the password if it exists. As a bonus, this module includes the old password inside the pass file
ansible.builtin.debug:
msg: "{{ lookup('community.general.passwordstore', 'example/test', create=true, overwrite=true)}}"
msg: "{{ lookup('community.general.passwordstore', 'example/test create=true overwrite=true')}}"
- name: Create an alphanumeric password
ansible.builtin.debug:
msg: "{{ lookup('community.general.passwordstore', 'example/test', create=true, nosymbols=true) }}"
msg: "{{ lookup('community.general.passwordstore', 'example/test create=true nosymbols=true') }}"
- name: Return the value for user in the KV pair user, username
ansible.builtin.debug:
msg: "{{ lookup('community.general.passwordstore', 'example/test', subkey='user')}}"
msg: "{{ lookup('community.general.passwordstore', 'example/test subkey=user')}}"
- name: Return the entire password file content
ansible.builtin.set_fact:
passfilecontent: "{{ lookup('community.general.passwordstore', 'example/test', returnall=true)}}"
passfilecontent: "{{ lookup('community.general.passwordstore', 'example/test returnall=true')}}"
"""
RETURN = """
@@ -209,7 +203,6 @@ import time
import yaml
from ansible.errors import AnsibleError, AnsibleAssertionError
from ansible.module_utils.common.file import FileLock
from ansible.module_utils.common.text.converters import to_bytes, to_native, to_text
from ansible.module_utils.parsing.convert_bool import boolean
from ansible.utils.display import Display
@@ -217,6 +210,8 @@ from ansible.utils.encrypt import random_password
from ansible.plugins.lookup import LookupBase
from ansible import constants as C
from ansible_collections.community.general.plugins.module_utils._filelock import FileLock
display = Display()
@@ -326,7 +321,7 @@ class LookupModule(LookupBase):
raise AnsibleError('Passwordstore directory \'{0}\' does not exist'.format(self.paramvals['directory']))
# Set PASSWORD_STORE_UMASK if umask is set
if self.paramvals.get('umask') is not None:
if 'umask' in self.paramvals:
if len(self.paramvals['umask']) != 3:
raise AnsibleError('Passwordstore umask must have a length of 3.')
elif int(self.paramvals['umask'][0]) > 3:
@@ -441,7 +436,8 @@ class LookupModule(LookupBase):
unit_to_seconds = {"s": 1, "m": 60, "h": 3600}
self.lock_timeout = int(timeout[:-1]) * unit_to_seconds[timeout[-1]]
directory = self.get_option('directory')
directory = variables.get('passwordstore', os.environ.get('PASSWORD_STORE_DIR', None))
if directory is None:
if self.backend == 'gopass':
try:
@@ -453,17 +449,16 @@ class LookupModule(LookupBase):
directory = os.path.expanduser('~/.password-store')
self.paramvals = {
'subkey': self.get_option('subkey'),
'subkey': 'password',
'directory': directory,
'create': self.get_option('create'),
'returnall': self.get_option('returnall'),
'overwrite': self.get_option('overwrite'),
'nosymbols': self.get_option('nosymbols'),
'userpass': self.get_option('userpass') or '',
'length': self.get_option('length'),
'backup': self.get_option('backup'),
'missing': self.get_option('missing'),
'umask': self.get_option('umask'),
'create': False,
'returnall': False,
'overwrite': False,
'nosymbols': False,
'userpass': '',
'length': 16,
'backup': False,
'missing': 'error',
}
def run(self, terms, variables, **kwargs):

View File

@@ -14,24 +14,23 @@ DOCUMENTATION = '''
- Read keys from Python shelve file.
options:
_terms:
description: Sets of key value pairs of parameters.
description: sets of key value pairs of parameters
key:
description: Key to query.
description: key to query
required: true
file:
description: Path to shelve file.
description: path to shelve file
required: true
'''
EXAMPLES = """
- name: Retrieve a string value corresponding to a key inside a Python shelve file
ansible.builtin.debug:
msg: "{{ lookup('community.general.shelvefile', 'file=path_to_some_shelve_file.db key=key_to_retrieve') }}"
- name: retrieve a string value corresponding to a key inside a Python shelve file
ansible.builtin.debug: msg="{{ lookup('community.general.shelvefile', 'file=path_to_some_shelve_file.db key=key_to_retrieve') }}
"""
RETURN = """
_list:
description: Value(s) of key(s) in shelve file(s).
description: value(s) of key(s) in shelve file(s)
type: list
elements: str
"""
@@ -54,6 +53,7 @@ class LookupModule(LookupBase):
return res
def run(self, terms, variables=None, **kwargs):
if not isinstance(terms, list):
terms = [terms]

View File

@@ -0,0 +1,109 @@
# Copyright (c) 2018, Ansible Project
# Simplified BSD License (see licenses/simplified_bsd.txt or https://opensource.org/licenses/BSD-2-Clause)
# SPDX-License-Identifier: BSD-2-Clause
# NOTE:
# This has been vendored from ansible.module_utils.common.file. This code has been removed from there for ansible-core 2.16.
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
import os
import stat
import time
import fcntl
import sys
from contextlib import contextmanager
class LockTimeout(Exception):
pass
class FileLock:
'''
Currently FileLock is implemented via fcntl.flock on a lock file, however this
behaviour may change in the future. Avoid mixing lock types fcntl.flock,
fcntl.lockf and module_utils.common.file.FileLock as it will certainly cause
unwanted and/or unexpected behaviour
'''
def __init__(self):
self.lockfd = None
@contextmanager
def lock_file(self, path, tmpdir, lock_timeout=None):
'''
Context for lock acquisition
'''
try:
self.set_lock(path, tmpdir, lock_timeout)
yield
finally:
self.unlock()
def set_lock(self, path, tmpdir, lock_timeout=None):
'''
Create a lock file based on path with flock to prevent other processes
using given path.
Please note that currently file locking only works when it's executed by
the same user, I.E single user scenarios
:kw path: Path (file) to lock
:kw tmpdir: Path where to place the temporary .lock file
:kw lock_timeout:
Wait n seconds for lock acquisition, fail if timeout is reached.
0 = Do not wait, fail if lock cannot be acquired immediately,
Default is None, wait indefinitely until lock is released.
:returns: True
'''
lock_path = os.path.join(tmpdir, 'ansible-{0}.lock'.format(os.path.basename(path)))
l_wait = 0.1
r_exception = IOError
if sys.version_info[0] == 3:
r_exception = BlockingIOError
self.lockfd = open(lock_path, 'w')
if lock_timeout <= 0:
fcntl.flock(self.lockfd, fcntl.LOCK_EX | fcntl.LOCK_NB)
os.chmod(lock_path, stat.S_IWRITE | stat.S_IREAD)
return True
if lock_timeout:
e_secs = 0
while e_secs < lock_timeout:
try:
fcntl.flock(self.lockfd, fcntl.LOCK_EX | fcntl.LOCK_NB)
os.chmod(lock_path, stat.S_IWRITE | stat.S_IREAD)
return True
except r_exception:
time.sleep(l_wait)
e_secs += l_wait
continue
self.lockfd.close()
raise LockTimeout('{0} sec'.format(lock_timeout))
fcntl.flock(self.lockfd, fcntl.LOCK_EX)
os.chmod(lock_path, stat.S_IWRITE | stat.S_IREAD)
return True
def unlock(self):
'''
Make sure lock file is available for everyone and Unlock the file descriptor
locked by set_lock
:returns: True
'''
if not self.lockfd:
return True
try:
fcntl.flock(self.lockfd, fcntl.LOCK_UN)
self.lockfd.close()
except ValueError: # file wasn't opened, let context manager fail gracefully
pass
return True

View File

@@ -103,13 +103,8 @@ class _ArgFormat(object):
class _Format(object):
@staticmethod
def as_bool(args_true, args_false=None, ignore_none=None):
if args_false is not None:
if ignore_none is None:
ignore_none = False
else:
args_false = []
return _ArgFormat(lambda value: _ensure_list(args_true) if value else _ensure_list(args_false), ignore_none=ignore_none)
def as_bool(args):
return _ArgFormat(lambda value: _ensure_list(args) if value else [])
@staticmethod
def as_bool_not(args):

View File

@@ -1,90 +0,0 @@
# -*- coding: utf-8 -*-
# (c) 2022, Alexei Znamensky <russoz@gmail.com>
# Copyright (c) 2022, Ansible Project
# Simplified BSD License (see LICENSES/BSD-2-Clause.txt or https://opensource.org/licenses/BSD-2-Clause)
# SPDX-License-Identifier: BSD-2-Clause
from __future__ import absolute_import, division, print_function
__metaclass__ = type
import traceback
from contextlib import contextmanager
from ansible.module_utils.common.text.converters import to_native
from ansible.module_utils.basic import missing_required_lib
_deps = dict()
class _Dependency(object):
_states = ["pending", "failure", "success"]
def __init__(self, name, reason=None, url=None, msg=None):
self.name = name
self.reason = reason
self.url = url
self.msg = msg
self.state = 0
self.trace = None
self.exc = None
def succeed(self):
self.state = 2
def fail(self, exc, trace):
self.state = 1
self.exc = exc
self.trace = trace
@property
def message(self):
if self.msg:
return to_native(self.msg)
else:
return missing_required_lib(self.name, reason=self.reason, url=self.url)
@property
def failed(self):
return self.state == 1
def verify(self, module):
if self.failed:
module.fail_json(msg=self.message, exception=self.trace)
def __str__(self):
return "<dependency: {0} [{1}]>".format(self.name, self._states[self.state])
@contextmanager
def declare(name, *args, **kwargs):
dep = _Dependency(name, *args, **kwargs)
try:
yield dep
except Exception as e:
dep.fail(e, traceback.format_exc())
else:
dep.succeed()
finally:
_deps[name] = dep
def validate(module, spec=None):
dep_names = sorted(_deps)
if spec is not None:
if spec.startswith("-"):
spec_split = spec[1:].split(":")
for d in spec_split:
dep_names.remove(d)
else:
spec_split = spec[1:].split(":")
dep_names = []
for d in spec_split:
_deps[d] # ensure it exists
dep_names.append(d)
for dep in dep_names:
_deps[dep].verify(module)

View File

@@ -6,14 +6,7 @@
from __future__ import absolute_import, division, print_function
__metaclass__ = type
from ansible_collections.community.general.plugins.module_utils.cmd_runner import CmdRunner, cmd_runner_fmt
_state_map = {
"present": "--set",
"absent": "--unset",
"get": "--get",
}
from ansible_collections.community.general.plugins.module_utils.cmd_runner import CmdRunner, cmd_runner_fmt as fmt
def gconftool2_runner(module, **kwargs):
@@ -21,12 +14,14 @@ def gconftool2_runner(module, **kwargs):
module,
command='gconftool-2',
arg_formats=dict(
state=cmd_runner_fmt.as_map(_state_map),
key=cmd_runner_fmt.as_list(),
value_type=cmd_runner_fmt.as_opt_val("--type"),
value=cmd_runner_fmt.as_list(),
direct=cmd_runner_fmt.as_bool("--direct"),
config_source=cmd_runner_fmt.as_opt_val("--config-source"),
key=fmt.as_list(),
value_type=fmt.as_opt_val("--type"),
value=fmt.as_list(),
direct=fmt.as_bool("--direct"),
config_source=fmt.as_opt_val("--config-source"),
get=fmt.as_bool("--get"),
set_arg=fmt.as_bool("--set"),
unset=fmt.as_bool("--unset"),
),
**kwargs
)

View File

@@ -42,7 +42,6 @@ URL_CLIENTTEMPLATE = "{url}/admin/realms/{realm}/client-templates/{id}"
URL_CLIENTTEMPLATES = "{url}/admin/realms/{realm}/client-templates"
URL_GROUPS = "{url}/admin/realms/{realm}/groups"
URL_GROUP = "{url}/admin/realms/{realm}/groups/{groupid}"
URL_GROUP_CHILDREN = "{url}/admin/realms/{realm}/groups/{groupid}/children"
URL_CLIENTSCOPES = "{url}/admin/realms/{realm}/client-scopes"
URL_CLIENTSCOPE = "{url}/admin/realms/{realm}/client-scopes/{id}"
@@ -59,8 +58,6 @@ URL_CLIENT_USER_ROLEMAPPINGS = "{url}/admin/realms/{realm}/users/{id}/role-mappi
URL_CLIENT_USER_ROLEMAPPINGS_AVAILABLE = "{url}/admin/realms/{realm}/users/{id}/role-mappings/clients/{client}/available"
URL_CLIENT_USER_ROLEMAPPINGS_COMPOSITE = "{url}/admin/realms/{realm}/users/{id}/role-mappings/clients/{client}/composite"
URL_CLIENTSECRET = "{url}/admin/realms/{realm}/clients/{id}/client-secret"
URL_AUTHENTICATION_FLOWS = "{url}/admin/realms/{realm}/authentication/flows"
URL_AUTHENTICATION_FLOW = "{url}/admin/realms/{realm}/authentication/flows/{id}"
URL_AUTHENTICATION_FLOW_COPY = "{url}/admin/realms/{realm}/authentication/flows/{copyfrom}/copy"
@@ -1163,52 +1160,6 @@ class KeycloakAPI(object):
self.module.fail_json(msg='Could not update protocolmappers for clientscope %s in realm %s: %s'
% (mapper_rep, realm, str(e)))
def create_clientsecret(self, id, realm="master"):
""" Generate a new client secret by id
:param id: id (not clientId) of client to be queried
:param realm: client from this realm
:return: dict of credential representation
"""
clientsecret_url = URL_CLIENTSECRET.format(url=self.baseurl, realm=realm, id=id)
try:
return json.loads(to_native(open_url(clientsecret_url, method='POST', headers=self.restheaders, timeout=self.connection_timeout,
validate_certs=self.validate_certs).read()))
except HTTPError as e:
if e.code == 404:
return None
else:
self.module.fail_json(msg='Could not obtain clientsecret of client %s for realm %s: %s'
% (id, realm, str(e)))
except Exception as e:
self.module.fail_json(msg='Could not obtain clientsecret of client %s for realm %s: %s'
% (id, realm, str(e)))
def get_clientsecret(self, id, realm="master"):
""" Obtain client secret by id
:param id: id (not clientId) of client to be queried
:param realm: client from this realm
:return: dict of credential representation
"""
clientsecret_url = URL_CLIENTSECRET.format(url=self.baseurl, realm=realm, id=id)
try:
return json.loads(to_native(open_url(clientsecret_url, method='GET', headers=self.restheaders, timeout=self.connection_timeout,
validate_certs=self.validate_certs).read()))
except HTTPError as e:
if e.code == 404:
return None
else:
self.module.fail_json(msg='Could not obtain clientsecret of client %s for realm %s: %s'
% (id, realm, str(e)))
except Exception as e:
self.module.fail_json(msg='Could not obtain clientsecret of client %s for realm %s: %s'
% (id, realm, str(e)))
def get_groups(self, realm="master"):
""" Fetch the name and ID of all groups on the Keycloak server.
@@ -1250,7 +1201,7 @@ class KeycloakAPI(object):
self.module.fail_json(msg="Could not fetch group %s in realm %s: %s"
% (gid, realm, str(e)))
def get_group_by_name(self, name, realm="master", parents=None):
def get_group_by_name(self, name, realm="master"):
""" Fetch a keycloak group within a realm based on its name.
The Keycloak API does not allow filtering of the Groups resource by name.
@@ -1260,19 +1211,10 @@ class KeycloakAPI(object):
If the group does not exist, None is returned.
:param name: Name of the group to fetch.
:param realm: Realm in which the group resides; default 'master'
:param parents: Optional list of parents when group to look for is a subgroup
"""
groups_url = URL_GROUPS.format(url=self.baseurl, realm=realm)
try:
if parents:
parent = self.get_subgroup_direct_parent(parents, realm)
if not parent:
return None
all_groups = parent['subGroups']
else:
all_groups = self.get_groups(realm=realm)
all_groups = self.get_groups(realm=realm)
for group in all_groups:
if group['name'] == name:
@@ -1284,102 +1226,6 @@ class KeycloakAPI(object):
self.module.fail_json(msg="Could not fetch group %s in realm %s: %s"
% (name, realm, str(e)))
def _get_normed_group_parent(self, parent):
""" Converts parent dict information into a more easy to use form.
:param parent: parent describing dict
"""
if parent['id']:
return (parent['id'], True)
return (parent['name'], False)
def get_subgroup_by_chain(self, name_chain, realm="master"):
""" Access a subgroup API object by walking down a given name/id chain.
Groups can be given either as by name or by ID, the first element
must either be a toplvl group or given as ID, all parents must exist.
If the group cannot be found, None is returned.
:param name_chain: Topdown ordered list of subgroup parent (ids or names) + its own name at the end
:param realm: Realm in which the group resides; default 'master'
"""
cp = name_chain[0]
# for 1st parent in chain we must query the server
cp, is_id = self._get_normed_group_parent(cp)
if is_id:
tmp = self.get_group_by_groupid(cp, realm=realm)
else:
# given as name, assume toplvl group
tmp = self.get_group_by_name(cp, realm=realm)
if not tmp:
return None
for p in name_chain[1:]:
for sg in tmp['subGroups']:
pv, is_id = self._get_normed_group_parent(p)
if is_id:
cmpkey = "id"
else:
cmpkey = "name"
if pv == sg[cmpkey]:
tmp = sg
break
if not tmp:
return None
return tmp
def get_subgroup_direct_parent(self, parents, realm="master", children_to_resolve=None):
""" Get keycloak direct parent group API object for a given chain of parents.
To succesfully work the API for subgroups we actually dont need
to "walk the whole tree" for nested groups but only need to know
the ID for the direct predecessor of current subgroup. This
method will guarantee us this information getting there with
as minimal work as possible.
Note that given parent list can and might be incomplete at the
upper levels as long as it starts with an ID instead of a name
If the group does not exist, None is returned.
:param parents: Topdown ordered list of subgroup parents
:param realm: Realm in which the group resides; default 'master'
"""
if children_to_resolve is None:
# start recursion by reversing parents (in optimal cases
# we dont need to walk the whole tree upwarts)
parents = list(reversed(parents))
children_to_resolve = []
if not parents:
# walk complete parents list to the top, all names, no id's,
# try to resolve it assuming list is complete and 1st
# element is a toplvl group
return self.get_subgroup_by_chain(list(reversed(children_to_resolve)), realm=realm)
cp = parents[0]
unused, is_id = self._get_normed_group_parent(cp)
if is_id:
# current parent is given as ID, we can stop walking
# upwards searching for an entry point
return self.get_subgroup_by_chain([cp] + list(reversed(children_to_resolve)), realm=realm)
else:
# current parent is given as name, it must be resolved
# later, try next parent (recurse)
children_to_resolve.append(cp)
return self.get_subgroup_direct_parent(
parents[1:],
realm=realm, children_to_resolve=children_to_resolve
)
def create_group(self, grouprep, realm="master"):
""" Create a Keycloak group.
@@ -1394,34 +1240,6 @@ class KeycloakAPI(object):
self.module.fail_json(msg="Could not create group %s in realm %s: %s"
% (grouprep['name'], realm, str(e)))
def create_subgroup(self, parents, grouprep, realm="master"):
""" Create a Keycloak subgroup.
:param parents: list of one or more parent groups
:param grouprep: a GroupRepresentation of the group to be created. Must contain at minimum the field name.
:return: HTTPResponse object on success
"""
parent_id = "---UNDETERMINED---"
try:
parent_id = self.get_subgroup_direct_parent(parents, realm)
if not parent_id:
raise Exception(
"Could not determine subgroup parent ID for given"
" parent chain {0}. Assure that all parents exist"
" already and the list is complete and properly"
" ordered, starts with an ID or starts at the"
" top level".format(parents)
)
parent_id = parent_id["id"]
url = URL_GROUP_CHILDREN.format(url=self.baseurl, realm=realm, groupid=parent_id)
return open_url(url, method='POST', http_agent=self.http_agent, headers=self.restheaders, timeout=self.connection_timeout,
data=json.dumps(grouprep), validate_certs=self.validate_certs)
except Exception as e:
self.module.fail_json(msg="Could not create subgroup %s for parent group %s in realm %s: %s"
% (grouprep['name'], parent_id, realm, str(e)))
def update_group(self, grouprep, realm="master"):
""" Update an existing group.

View File

@@ -1,77 +0,0 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Copyright (c) 2022, John Cant <a.johncant@gmail.com>
# GNU General Public License v3.0+ (see COPYING 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.module_utils.basic import AnsibleModule
from ansible_collections.community.general.plugins.module_utils.identity.keycloak.keycloak import \
keycloak_argument_spec
def keycloak_clientsecret_module():
"""
Returns an AnsibleModule definition for modules that interact with a client
secret.
:return: argument_spec dict
"""
argument_spec = keycloak_argument_spec()
meta_args = dict(
realm=dict(default='master'),
id=dict(type='str'),
client_id=dict(type='str', aliases=['clientId']),
)
argument_spec.update(meta_args)
module = AnsibleModule(
argument_spec=argument_spec,
supports_check_mode=True,
required_one_of=([['id', 'client_id'],
['token', 'auth_realm', 'auth_username', 'auth_password']]),
required_together=([['auth_realm', 'auth_username', 'auth_password']]),
mutually_exclusive=[
['token', 'auth_realm'],
['token', 'auth_username'],
['token', 'auth_password']
])
return module
def keycloak_clientsecret_module_resolve_params(module, kc):
"""
Given an AnsibleModule definition for keycloak_clientsecret_*, and a
KeycloakAPI client, resolve the params needed to interact with the Keycloak
client secret, looking up the client by clientId if necessary via an API
call.
:return: tuple of id, realm
"""
realm = module.params.get('realm')
id = module.params.get('id')
client_id = module.params.get('client_id')
# only lookup the client_id if id isn't provided.
# in the case that both are provided, prefer the ID, since it's one
# less lookup.
if id is None:
# Due to the required_one_of spec, client_id is guaranteed to not be None
client = kc.get_client_by_clientid(client_id, realm=realm)
if client is None:
module.fail_json(
msg='Client does not exist {client_id}'.format(client_id=client_id)
)
id = client['id']
return id, realm

View File

@@ -85,16 +85,17 @@ class iLORedfishUtils(RedfishUtils):
datetime_uri = self.manager_uri + "DateTime"
listofips = mgr_attributes['mgr_attr_value'].split(" ")
if len(listofips) > 2:
return {'ret': False, 'changed': False, 'msg': "More than 2 NTP Servers mentioned"}
response = self.get_request(self.root_uri + datetime_uri)
if not response['ret']:
return response
ntp_list = []
for ips in listofips:
ntp_list.append(ips)
data = response['data']
while len(ntp_list) < 2:
ntp_list.append("0.0.0.0")
ntp_list = data[setkey]
if len(ntp_list) == 2:
ntp_list.pop(0)
ntp_list.append(mgr_attributes['mgr_attr_value'])
payload = {setkey: ntp_list}
@@ -136,16 +137,18 @@ class iLORedfishUtils(RedfishUtils):
nic_info = self.get_manager_ethernet_uri()
uri = nic_info["nic_addr"]
listofips = attr['mgr_attr_value'].split(" ")
if len(listofips) > 3:
return {'ret': False, 'changed': False, 'msg': "More than 3 DNS Servers mentioned"}
response = self.get_request(self.root_uri + uri)
if not response['ret']:
return response
dns_list = []
for ips in listofips:
dns_list.append(ips)
data = response['data']
while len(dns_list) < 3:
dns_list.append("0.0.0.0")
dns_list = data["Oem"]["Hpe"]["IPv4"][key]
if len(dns_list) == 3:
dns_list.pop(0)
dns_list.append(attr['mgr_attr_value'])
payload = {
"Oem": {

View File

@@ -1,35 +0,0 @@
# -*- coding: utf-8 -*-
# Copyright (c) 2022, Alexei Znamensky <russoz@gmail.com>
#
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
# SPDX-License-Identifier: GPL-3.0-or-later
from __future__ import absolute_import, division, print_function
__metaclass__ = type
import os
import time
def download_updates_file(updates_expiration):
updates_filename = 'jenkins-plugin-cache.json'
updates_dir = os.path.expanduser('~/.ansible/tmp')
updates_file = os.path.join(updates_dir, updates_filename)
download_updates = True
# Make sure the destination directory exists
if not os.path.isdir(updates_dir):
os.makedirs(updates_dir, 0o700)
# Check if we need to download new updates file
if os.path.isfile(updates_file):
# Get timestamp when the file was changed last time
ts_file = os.stat(updates_file).st_mtime
ts_now = time.time()
if ts_now - ts_file < updates_expiration:
download_updates = False
return updates_file, download_updates

View File

@@ -10,14 +10,11 @@
from __future__ import absolute_import, division, print_function
__metaclass__ = type
import re
import traceback
from ansible.module_utils.common.text.converters import to_native
try:
import ldap
import ldap.dn
import ldap.filter
import ldap.sasl
HAS_LDAP = True
@@ -40,7 +37,6 @@ def gen_specs(**specs):
'start_tls': dict(default=False, type='bool'),
'validate_certs': dict(default=True, type='bool'),
'sasl_class': dict(choices=['external', 'gssapi'], default='external', type='str'),
'xorder_discovery': dict(choices=['enable', 'auto', 'disable'], default='auto', type='str'),
})
return specs
@@ -52,22 +48,16 @@ class LdapGeneric(object):
self.module = module
self.bind_dn = self.module.params['bind_dn']
self.bind_pw = self.module.params['bind_pw']
self.dn = self.module.params['dn']
self.referrals_chasing = self.module.params['referrals_chasing']
self.server_uri = self.module.params['server_uri']
self.start_tls = self.module.params['start_tls']
self.verify_cert = self.module.params['validate_certs']
self.sasl_class = self.module.params['sasl_class']
self.xorder_discovery = self.module.params['xorder_discovery']
# Establish connection
self.connection = self._connect_to_ldap()
if self.xorder_discovery == "enable" or (self.xorder_discovery == "auto" and not self._xorder_dn()):
# Try to find the X_ORDERed version of the DN
self.dn = self._find_dn()
else:
self.dn = self.module.params['dn']
def fail(self, msg, exn):
self.module.fail_json(
msg=msg,
@@ -75,24 +65,6 @@ class LdapGeneric(object):
exception=traceback.format_exc()
)
def _find_dn(self):
dn = self.module.params['dn']
explode_dn = ldap.dn.explode_dn(dn)
if len(explode_dn) > 1:
try:
escaped_value = ldap.filter.escape_filter_chars(explode_dn[0])
filterstr = "(%s)" % escaped_value
dns = self.connection.search_s(','.join(explode_dn[1:]),
ldap.SCOPE_ONELEVEL, filterstr)
if len(dns) == 1:
dn, dummy = dns[0]
except Exception:
pass
return dn
def _connect_to_ldap(self):
if not self.verify_cert:
ldap.set_option(ldap.OPT_X_TLS_REQUIRE_CERT, ldap.OPT_X_TLS_NEVER)
@@ -119,8 +91,3 @@ class LdapGeneric(object):
self.fail("Cannot bind to the server.", e)
return connection
def _xorder_dn(self):
# match X_ORDERed DNs
regex = r"\w+=\{\d+\}.+"
return re.match(regex, self.module.params['dn']) is not None

View File

@@ -8,10 +8,8 @@ from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
import os
import socket
import ssl
import json
from ansible.module_utils.urls import generic_urlparse
from ansible.module_utils.six.moves.urllib.parse import urlparse
@@ -22,6 +20,8 @@ from ansible.module_utils.common.text.converters import to_text
HTTPConnection = http_client.HTTPConnection
HTTPSConnection = http_client.HTTPSConnection
import json
class UnixHTTPConnection(HTTPConnection):
def __init__(self, path):
@@ -124,11 +124,3 @@ class LXDClient(object):
if err is None:
err = resp_json.get('error', None)
return err
def default_key_file():
return os.path.expanduser('~/.config/lxc/client.key')
def default_cert_file():
return os.path.expanduser('~/.config/lxc/client.crt')

View File

@@ -26,6 +26,7 @@ class Response(object):
def __init__(self):
self.content = None
self.status_code = None
self.stderr = None
def json(self):
return json.loads(self.content)
@@ -75,6 +76,10 @@ def memset_api_call(api_key, api_method, payload=None):
msg = "Memset API returned a {0} response ({1}, {2})." . format(response.status_code, response.json()['error_type'], response.json()['error'])
else:
msg = "Memset API returned an error ({0}, {1})." . format(response.json()['error_type'], response.json()['error'])
except urllib_error.URLError as e:
has_failed = True
msg = "An URLError occured ({0})." . format(type(e))
response.stderr = "{0}" . format(e)
if msg is None:
msg = response.json()

View File

@@ -37,17 +37,8 @@ def cause_changes(on_success=None, on_failure=None):
def module_fails_on_exception(func):
conflict_list = ('msg', 'exception', 'output', 'vars', 'changed')
@wraps(func)
def wrapper(self, *args, **kwargs):
def fix_var_conflicts(output):
result = dict([
(k if k not in conflict_list else "_" + k, v)
for k, v in output.items()
])
return result
try:
func(self, *args, **kwargs)
except SystemExit:
@@ -55,16 +46,12 @@ def module_fails_on_exception(func):
except ModuleHelperException as e:
if e.update_output:
self.update_output(e.update_output)
# patchy solution to resolve conflict with output variables
output = fix_var_conflicts(self.output)
self.module.fail_json(msg=e.msg, exception=traceback.format_exc(),
output=self.output, vars=self.vars.output(), **output)
output=self.output, vars=self.vars.output(), **self.output)
except Exception as e:
# patchy solution to resolve conflict with output variables
output = fix_var_conflicts(self.output)
msg = "Module failed with exception: {0}".format(str(e).strip())
self.module.fail_json(msg=msg, exception=traceback.format_exc(),
output=self.output, vars=self.vars.output(), **output)
output=self.output, vars=self.vars.output(), **self.output)
return wrapper

View File

@@ -14,17 +14,20 @@ from ansible_collections.community.general.plugins.module_utils.mh.base import M
from ansible_collections.community.general.plugins.module_utils.mh.mixins.cmd import CmdMixin
from ansible_collections.community.general.plugins.module_utils.mh.mixins.state import StateMixin
from ansible_collections.community.general.plugins.module_utils.mh.mixins.deps import DependencyMixin
from ansible_collections.community.general.plugins.module_utils.mh.mixins.vars import VarsMixin
from ansible_collections.community.general.plugins.module_utils.mh.mixins.vars import VarsMixin, VarDict as _VD
from ansible_collections.community.general.plugins.module_utils.mh.mixins.deprecate_attrs import DeprecateAttrsMixin
class ModuleHelper(DeprecateAttrsMixin, VarsMixin, DependencyMixin, ModuleHelperBase):
_output_conflict_list = ('msg', 'exception', 'output', 'vars', 'changed')
facts_name = None
output_params = ()
diff_params = ()
change_params = ()
facts_params = ()
VarDict = _VD # for backward compatibility, will be deprecated at some point
def __init__(self, module=None):
super(ModuleHelper, self).__init__(module)
for name, value in self.module.params.items():
@@ -36,6 +39,16 @@ class ModuleHelper(DeprecateAttrsMixin, VarsMixin, DependencyMixin, ModuleHelper
fact=name in self.facts_params,
)
self._deprecate_attr(
attr="VarDict",
msg="ModuleHelper.VarDict attribute is deprecated, use VarDict from "
"the ansible_collections.community.general.plugins.module_utils.mh.mixins.vars module instead",
version="6.0.0",
collection_name="community.general",
target=ModuleHelper,
module=self.module,
)
def update_output(self, **kwargs):
self.update_vars(meta={"output": True}, **kwargs)
@@ -60,6 +73,10 @@ class ModuleHelper(DeprecateAttrsMixin, VarsMixin, DependencyMixin, ModuleHelper
vars_diff = self.vars.diff() or {}
result['diff'] = dict_merge(dict(diff), vars_diff)
for varname in list(result):
if varname in self._output_conflict_list:
result["_" + varname] = result[varname]
del result[varname]
return result

View File

@@ -1,502 +0,0 @@
# -*- coding: utf-8 -*-
# Copyright (c) 2022 Western Digital Corporation
# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt)
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
# SPDX-License-Identifier: GPL-3.0-or-later
from __future__ import absolute_import, division, print_function
__metaclass__ = type
import json
import os
import uuid
from ansible.module_utils.urls import open_url
from ansible.module_utils.common.text.converters import to_native
from ansible.module_utils.common.text.converters import to_text
from ansible.module_utils.six.moves.urllib.error import URLError, HTTPError
from ansible.module_utils.six.moves.urllib.parse import urlparse
GET_HEADERS = {'accept': 'application/json'}
PUT_HEADERS = {'content-type': 'application/json', 'accept': 'application/json'}
POST_HEADERS = {'content-type': 'application/json', 'accept': 'application/json'}
DELETE_HEADERS = {'accept': 'application/json'}
HEALTH_OK = 5
class OcapiUtils(object):
def __init__(self, creds, base_uri, proxy_slot_number, timeout, module):
self.root_uri = base_uri
self.proxy_slot_number = proxy_slot_number
self.creds = creds
self.timeout = timeout
self.module = module
def _auth_params(self):
"""
Return tuple of required authentication params based on the username and password.
:return: tuple of username, password
"""
username = self.creds['user']
password = self.creds['pswd']
force_basic_auth = True
return username, password, force_basic_auth
def get_request(self, uri):
req_headers = dict(GET_HEADERS)
username, password, basic_auth = self._auth_params()
try:
resp = open_url(uri, method="GET", headers=req_headers,
url_username=username, url_password=password,
force_basic_auth=basic_auth, validate_certs=False,
follow_redirects='all',
use_proxy=True, timeout=self.timeout)
data = json.loads(to_native(resp.read()))
headers = dict((k.lower(), v) for (k, v) in resp.info().items())
except HTTPError as e:
return {'ret': False,
'msg': "HTTP Error %s on GET request to '%s'"
% (e.code, uri),
'status': e.code}
except URLError as e:
return {'ret': False, 'msg': "URL Error on GET request to '%s': '%s'"
% (uri, e.reason)}
# Almost all errors should be caught above, but just in case
except Exception as e:
return {'ret': False,
'msg': "Failed GET request to '%s': '%s'" % (uri, to_text(e))}
return {'ret': True, 'data': data, 'headers': headers}
def delete_request(self, uri, etag=None):
req_headers = dict(DELETE_HEADERS)
if etag is not None:
req_headers['If-Match'] = etag
username, password, basic_auth = self._auth_params()
try:
resp = open_url(uri, method="DELETE", headers=req_headers,
url_username=username, url_password=password,
force_basic_auth=basic_auth, validate_certs=False,
follow_redirects='all',
use_proxy=True, timeout=self.timeout)
if resp.status != 204:
data = json.loads(to_native(resp.read()))
else:
data = ""
headers = dict((k.lower(), v) for (k, v) in resp.info().items())
except HTTPError as e:
return {'ret': False,
'msg': "HTTP Error %s on DELETE request to '%s'"
% (e.code, uri),
'status': e.code}
except URLError as e:
return {'ret': False, 'msg': "URL Error on DELETE request to '%s': '%s'"
% (uri, e.reason)}
# Almost all errors should be caught above, but just in case
except Exception as e:
return {'ret': False,
'msg': "Failed DELETE request to '%s': '%s'" % (uri, to_text(e))}
return {'ret': True, 'data': data, 'headers': headers}
def put_request(self, uri, payload, etag=None):
req_headers = dict(PUT_HEADERS)
if etag is not None:
req_headers['If-Match'] = etag
username, password, basic_auth = self._auth_params()
try:
resp = open_url(uri, data=json.dumps(payload),
headers=req_headers, method="PUT",
url_username=username, url_password=password,
force_basic_auth=basic_auth, validate_certs=False,
follow_redirects='all',
use_proxy=True, timeout=self.timeout)
headers = dict((k.lower(), v) for (k, v) in resp.info().items())
except HTTPError as e:
return {'ret': False,
'msg': "HTTP Error %s on PUT request to '%s'"
% (e.code, uri),
'status': e.code}
except URLError as e:
return {'ret': False, 'msg': "URL Error on PUT request to '%s': '%s'"
% (uri, e.reason)}
# Almost all errors should be caught above, but just in case
except Exception as e:
return {'ret': False,
'msg': "Failed PUT request to '%s': '%s'" % (uri, to_text(e))}
return {'ret': True, 'headers': headers, 'resp': resp}
def post_request(self, uri, payload, content_type="application/json", timeout=None):
req_headers = dict(POST_HEADERS)
if content_type != "application/json":
req_headers["content-type"] = content_type
username, password, basic_auth = self._auth_params()
if content_type == "application/json":
request_data = json.dumps(payload)
else:
request_data = payload
try:
resp = open_url(uri, data=request_data,
headers=req_headers, method="POST",
url_username=username, url_password=password,
force_basic_auth=basic_auth, validate_certs=False,
follow_redirects='all',
use_proxy=True, timeout=self.timeout if timeout is None else timeout)
headers = dict((k.lower(), v) for (k, v) in resp.info().items())
except HTTPError as e:
return {'ret': False,
'msg': "HTTP Error %s on POST request to '%s'"
% (e.code, uri),
'status': e.code}
except URLError as e:
return {'ret': False, 'msg': "URL Error on POST request to '%s': '%s'"
% (uri, e.reason)}
# Almost all errors should be caught above, but just in case
except Exception as e:
return {'ret': False,
'msg': "Failed POST request to '%s': '%s'" % (uri, to_text(e))}
return {'ret': True, 'headers': headers, 'resp': resp}
def get_uri_with_slot_number_query_param(self, uri):
"""Return the URI with proxy slot number added as a query param, if there is one.
If a proxy slot number is provided, to access it, we must append it as a query parameter.
This method returns the given URI with the slotnumber query param added, if there is one.
If there is not a proxy slot number, it just returns the URI as it was passed in.
"""
if self.proxy_slot_number is not None:
parsed_url = urlparse(uri)
return parsed_url._replace(query="slotnumber=" + str(self.proxy_slot_number)).geturl()
else:
return uri
def manage_system_power(self, command):
"""Process a command to manage the system power.
:param str command: The Ansible command being processed.
"""
if command == "PowerGracefulRestart":
resource_uri = self.root_uri
resource_uri = self.get_uri_with_slot_number_query_param(resource_uri)
# Get the resource so that we have the Etag
response = self.get_request(resource_uri)
if 'etag' not in response['headers']:
return {'ret': False, 'msg': 'Etag not found in response.'}
etag = response['headers']['etag']
if response['ret'] is False:
return response
# Issue the PUT to do the reboot (unless we are in check mode)
if self.module.check_mode:
return {
'ret': True,
'changed': True,
'msg': 'Update not performed in check mode.'
}
payload = {'Reboot': True}
response = self.put_request(resource_uri, payload, etag)
if response['ret'] is False:
return response
elif command.startswith("PowerMode"):
return self.manage_power_mode(command)
else:
return {'ret': False, 'msg': 'Invalid command: ' + command}
return {'ret': True}
def manage_chassis_indicator_led(self, command):
"""Process a command to manage the chassis indicator LED.
:param string command: The Ansible command being processed.
"""
return self.manage_indicator_led(command, self.root_uri)
def manage_indicator_led(self, command, resource_uri=None):
"""Process a command to manage an indicator LED.
:param string command: The Ansible command being processed.
:param string resource_uri: URI of the resource whose indicator LED is being managed.
"""
key = "IndicatorLED"
if resource_uri is None:
resource_uri = self.root_uri
resource_uri = self.get_uri_with_slot_number_query_param(resource_uri)
payloads = {
'IndicatorLedOn': {
'ID': 2
},
'IndicatorLedOff': {
'ID': 4
}
}
response = self.get_request(resource_uri)
if 'etag' not in response['headers']:
return {'ret': False, 'msg': 'Etag not found in response.'}
etag = response['headers']['etag']
if response['ret'] is False:
return response
data = response['data']
if key not in data:
return {'ret': False, 'msg': "Key %s not found" % key}
if 'ID' not in data[key]:
return {'ret': False, 'msg': 'IndicatorLED for resource has no ID.'}
if command in payloads.keys():
# See if the LED is already set as requested.
current_led_status = data[key]['ID']
if current_led_status == payloads[command]['ID']:
return {'ret': True, 'changed': False}
# Set the LED (unless we are in check mode)
if self.module.check_mode:
return {
'ret': True,
'changed': True,
'msg': 'Update not performed in check mode.'
}
payload = {'IndicatorLED': payloads[command]}
response = self.put_request(resource_uri, payload, etag)
if response['ret'] is False:
return response
else:
return {'ret': False, 'msg': 'Invalid command'}
return {'ret': True}
def manage_power_mode(self, command):
key = "PowerState"
resource_uri = self.get_uri_with_slot_number_query_param(self.root_uri)
payloads = {
"PowerModeNormal": 2,
"PowerModeLow": 4
}
response = self.get_request(resource_uri)
if 'etag' not in response['headers']:
return {'ret': False, 'msg': 'Etag not found in response.'}
etag = response['headers']['etag']
if response['ret'] is False:
return response
data = response['data']
if key not in data:
return {'ret': False, 'msg': "Key %s not found" % key}
if 'ID' not in data[key]:
return {'ret': False, 'msg': 'PowerState for resource has no ID.'}
if command in payloads.keys():
# See if the PowerState is already set as requested.
current_power_state = data[key]['ID']
if current_power_state == payloads[command]:
return {'ret': True, 'changed': False}
# Set the Power State (unless we are in check mode)
if self.module.check_mode:
return {
'ret': True,
'changed': True,
'msg': 'Update not performed in check mode.'
}
payload = {'PowerState': {"ID": payloads[command]}}
response = self.put_request(resource_uri, payload, etag)
if response['ret'] is False:
return response
else:
return {'ret': False, 'msg': 'Invalid command: ' + command}
return {'ret': True}
def prepare_multipart_firmware_upload(self, filename):
"""Prepare a multipart/form-data body for OCAPI firmware upload.
:arg filename: The name of the file to upload.
:returns: tuple of (content_type, body) where ``content_type`` is
the ``multipart/form-data`` ``Content-Type`` header including
``boundary`` and ``body`` is the prepared bytestring body
Prepares the body to include "FirmwareFile" field with the contents of the file.
Because some OCAPI targets do not support Base-64 encoding for multipart/form-data,
this method sends the file as binary.
"""
boundary = str(uuid.uuid4()) # Generate a random boundary
body = "--" + boundary + '\r\n'
body += 'Content-Disposition: form-data; name="FirmwareFile"; filename="%s"\r\n' % to_native(os.path.basename(filename))
body += 'Content-Type: application/octet-stream\r\n\r\n'
body_bytes = bytearray(body, 'utf-8')
with open(filename, 'rb') as f:
body_bytes += f.read()
body_bytes += bytearray("\r\n--%s--" % boundary, 'utf-8')
return ("multipart/form-data; boundary=%s" % boundary,
body_bytes)
def upload_firmware_image(self, update_image_path):
"""Perform Firmware Upload to the OCAPI storage device.
:param str update_image_path: The path/filename of the firmware image, on the local filesystem.
"""
if not (os.path.exists(update_image_path) and os.path.isfile(update_image_path)):
return {'ret': False, 'msg': 'File does not exist.'}
url = self.root_uri + "OperatingSystem"
url = self.get_uri_with_slot_number_query_param(url)
content_type, b_form_data = self.prepare_multipart_firmware_upload(update_image_path)
# Post the firmware (unless we are in check mode)
if self.module.check_mode:
return {
'ret': True,
'changed': True,
'msg': 'Update not performed in check mode.'
}
result = self.post_request(url, b_form_data, content_type=content_type, timeout=300)
if result['ret'] is False:
return result
return {'ret': True}
def update_firmware_image(self):
"""Perform a Firmware Update on the OCAPI storage device."""
resource_uri = self.root_uri
resource_uri = self.get_uri_with_slot_number_query_param(resource_uri)
# We have to do a GET to obtain the Etag. It's required on the PUT.
response = self.get_request(resource_uri)
if response['ret'] is False:
return response
if 'etag' not in response['headers']:
return {'ret': False, 'msg': 'Etag not found in response.'}
etag = response['headers']['etag']
# Issue the PUT (unless we are in check mode)
if self.module.check_mode:
return {
'ret': True,
'changed': True,
'msg': 'Update not performed in check mode.'
}
payload = {'FirmwareUpdate': True}
response = self.put_request(resource_uri, payload, etag)
if response['ret'] is False:
return response
return {'ret': True, 'jobUri': response["headers"]["location"]}
def activate_firmware_image(self):
"""Perform a Firmware Activate on the OCAPI storage device."""
resource_uri = self.root_uri
resource_uri = self.get_uri_with_slot_number_query_param(resource_uri)
# We have to do a GET to obtain the Etag. It's required on the PUT.
response = self.get_request(resource_uri)
if 'etag' not in response['headers']:
return {'ret': False, 'msg': 'Etag not found in response.'}
etag = response['headers']['etag']
if response['ret'] is False:
return response
# Issue the PUT (unless we are in check mode)
if self.module.check_mode:
return {
'ret': True,
'changed': True,
'msg': 'Update not performed in check mode.'
}
payload = {'FirmwareActivate': True}
response = self.put_request(resource_uri, payload, etag)
if response['ret'] is False:
return response
return {'ret': True, 'jobUri': response["headers"]["location"]}
def get_job_status(self, job_uri):
"""Get the status of a job.
:param str job_uri: The URI of the job's status monitor.
"""
job_uri = self.get_uri_with_slot_number_query_param(job_uri)
response = self.get_request(job_uri)
if response['ret'] is False:
if response.get('status') == 404:
# Job not found -- assume 0%
return {
"ret": True,
"percentComplete": 0,
"operationStatus": "Not Available",
"operationStatusId": 1,
"operationHealth": None,
"operationHealthId": None,
"details": "Job does not exist.",
"jobExists": False
}
else:
return response
details = response["data"]["Status"].get("Details")
if type(details) is str:
details = [details]
health_list = response["data"]["Status"]["Health"]
return_value = {
"ret": True,
"percentComplete": response["data"]["PercentComplete"],
"operationStatus": response["data"]["Status"]["State"]["Name"],
"operationStatusId": response["data"]["Status"]["State"]["ID"],
"operationHealth": health_list[0]["Name"] if len(health_list) > 0 else None,
"operationHealthId": health_list[0]["ID"] if len(health_list) > 0 else None,
"details": details,
"jobExists": True
}
return return_value
def delete_job(self, job_uri):
"""Delete the OCAPI job referenced by the specified job_uri."""
job_uri = self.get_uri_with_slot_number_query_param(job_uri)
# We have to do a GET to obtain the Etag. It's required on the DELETE.
response = self.get_request(job_uri)
if response['ret'] is True:
if 'etag' not in response['headers']:
return {'ret': False, 'msg': 'Etag not found in response.'}
else:
etag = response['headers']['etag']
if response['data']['PercentComplete'] != 100:
return {
'ret': False,
'changed': False,
'msg': 'Cannot delete job because it is in progress.'
}
if response['ret'] is False:
if response['status'] == 404:
return {
'ret': True,
'changed': False,
'msg': 'Job already deleted.'
}
return response
if self.module.check_mode:
return {
'ret': True,
'changed': True,
'msg': 'Update not performed in check mode.'
}
# Do the DELETE (unless we are in check mode)
response = self.delete_request(job_uri, etag)
if response['ret'] is False:
if response['status'] == 404:
return {
'ret': True,
'changed': False
}
elif response['status'] == 409:
return {
'ret': False,
'changed': False,
'msg': 'Cannot delete job because it is in progress.'
}
return response
return {
'ret': True,
'changed': True
}

View File

@@ -26,36 +26,6 @@ except ImportError:
HAS_PYONE = False
# A helper function to mitigate https://github.com/OpenNebula/one/issues/6064.
# It allows for easily handling lists like "NIC" or "DISK" in the JSON-like template representation.
# There are either lists of dictionaries (length > 1) or just dictionaries.
def flatten(to_flatten, extract=False):
"""Flattens nested lists (with optional value extraction)."""
def recurse(to_flatten):
return sum(map(recurse, to_flatten), []) if isinstance(to_flatten, list) else [to_flatten]
value = recurse(to_flatten)
if extract and len(value) == 1:
return value[0]
return value
# A helper function to mitigate https://github.com/OpenNebula/one/issues/6064.
# It renders JSON-like template representation into OpenNebula's template syntax (string).
def render(to_render):
"""Converts dictionary to OpenNebula template."""
def recurse(to_render):
for key, value in sorted(to_render.items()):
if isinstance(value, dict):
yield '{0:}=[{1:}]'.format(key, ','.join(recurse(value)))
continue
if isinstance(value, list):
for item in value:
yield '{0:}=[{1:}]'.format(key, ','.join(recurse(item)))
continue
yield '{0:}="{1:}"'.format(key, value)
return '\n'.join(recurse(to_render))
class OpenNebulaModule:
"""
Base class for all OpenNebula Ansible Modules.

View File

@@ -1,114 +0,0 @@
# -*- coding: utf-8 -*-
# Copyright (c) 2022, Alexei Znamensky <russoz@gmail.com>
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
# SPDX-License-Identifier: GPL-3.0-or-later
from __future__ import absolute_import, division, print_function
__metaclass__ = type
import os
from ansible_collections.community.general.plugins.module_utils.cmd_runner import CmdRunner, cmd_runner_fmt
_PUPPET_PATH_PREFIX = ["/opt/puppetlabs/bin"]
def get_facter_dir():
if os.getuid() == 0:
return '/etc/facter/facts.d'
else:
return os.path.expanduser('~/.facter/facts.d')
def _puppet_cmd(module):
return module.get_bin_path("puppet", False, _PUPPET_PATH_PREFIX)
# If the `timeout` CLI command feature is removed,
# Then we could add this as a fixed param to `puppet_runner`
def ensure_agent_enabled(module):
runner = CmdRunner(
module,
command="puppet",
path_prefix=_PUPPET_PATH_PREFIX,
arg_formats=dict(
_agent_disabled=cmd_runner_fmt.as_fixed(['config', 'print', 'agent_disabled_lockfile']),
),
check_rc=False,
)
rc, stdout, stderr = runner("_agent_disabled").run()
if os.path.exists(stdout.strip()):
module.fail_json(
msg="Puppet agent is administratively disabled.",
disabled=True)
elif rc != 0:
module.fail_json(
msg="Puppet agent state could not be determined.")
def puppet_runner(module):
# Keeping backward compatibility, allow for running with the `timeout` CLI command.
# If this can be replaced with ansible `timeout` parameter in playbook,
# then this function could be removed.
def _prepare_base_cmd():
_tout_cmd = module.get_bin_path("timeout", False)
if _tout_cmd:
cmd = ["timeout", "-s", "9", module.params["timeout"], _puppet_cmd(module)]
else:
cmd = ["puppet"]
return cmd
def noop_func(v):
_noop = cmd_runner_fmt.as_map({
True: "--noop",
False: "--no-noop",
})
return _noop(module.check_mode or v)
_logdest_map = {
"syslog": ["--logdest", "syslog"],
"all": ["--logdest", "syslog", "--logdest", "console"],
}
@cmd_runner_fmt.unpack_args
def execute_func(execute, manifest):
if execute:
return ["--execute", execute]
else:
return [manifest]
runner = CmdRunner(
module,
command=_prepare_base_cmd(),
path_prefix=_PUPPET_PATH_PREFIX,
arg_formats=dict(
_agent_fixed=cmd_runner_fmt.as_fixed([
"agent", "--onetime", "--no-daemonize", "--no-usecacheonfailure",
"--no-splay", "--detailed-exitcodes", "--verbose", "--color", "0",
]),
_apply_fixed=cmd_runner_fmt.as_fixed(["apply", "--detailed-exitcodes"]),
puppetmaster=cmd_runner_fmt.as_opt_val("--server"),
show_diff=cmd_runner_fmt.as_bool("--show-diff"),
confdir=cmd_runner_fmt.as_opt_val("--confdir"),
environment=cmd_runner_fmt.as_opt_val("--environment"),
tags=cmd_runner_fmt.as_func(lambda v: ["--tags", ",".join(v)]),
certname=cmd_runner_fmt.as_opt_eq_val("--certname"),
noop=cmd_runner_fmt.as_func(noop_func),
use_srv_records=cmd_runner_fmt.as_map({
True: "--usr_srv_records",
False: "--no-usr_srv_records",
}),
logdest=cmd_runner_fmt.as_map(_logdest_map, default=[]),
modulepath=cmd_runner_fmt.as_opt_eq_val("--modulepath"),
_execute=cmd_runner_fmt.as_func(execute_func),
summarize=cmd_runner_fmt.as_bool("--summarize"),
debug=cmd_runner_fmt.as_bool("--debug"),
verbose=cmd_runner_fmt.as_bool("--verbose"),
),
check_rc=False,
)
return runner

View File

@@ -314,21 +314,3 @@ def setup_rax_module(module, rax_module, region_required=True):
(region, ','.join(rax_module.regions)))
return rax_module
def rax_scaling_group_personality_file(module, files):
if not files:
return []
results = []
for rpath, lpath in files.items():
lpath = os.path.expanduser(lpath)
try:
with open(lpath, 'r') as f:
results.append({
'path': rpath,
'contents': f.read(),
})
except Exception as e:
module.fail_json(msg='Failed to load %s: %s' % (lpath, str(e)))
return results

File diff suppressed because it is too large Load Diff

View File

@@ -11,21 +11,11 @@ import re
import sys
import datetime
import time
import traceback
from ansible.module_utils.basic import env_fallback, missing_required_lib
from ansible.module_utils.basic import env_fallback
from ansible.module_utils.urls import fetch_url
from ansible.module_utils.six.moves.urllib.parse import urlencode
SCALEWAY_SECRET_IMP_ERR = None
try:
from passlib.hash import argon2
HAS_SCALEWAY_SECRET_PACKAGE = True
except Exception:
argon2 = None
SCALEWAY_SECRET_IMP_ERR = traceback.format_exc()
HAS_SCALEWAY_SECRET_PACKAGE = False
def scaleway_argument_spec():
return dict(
@@ -84,54 +74,12 @@ def parse_pagination_link(header):
def filter_sensitive_attributes(container, attributes):
'''
WARNING: This function is effectively private, **do not use it**!
It will be removed or renamed once changing its name no longer triggers a pylint bug.
'''
for attr in attributes:
container[attr] = "SENSITIVE_VALUE"
return container
class SecretVariables(object):
@staticmethod
def ensure_scaleway_secret_package(module):
if not HAS_SCALEWAY_SECRET_PACKAGE:
module.fail_json(
msg=missing_required_lib("passlib[argon2]", url='https://passlib.readthedocs.io/en/stable/'),
exception=SCALEWAY_SECRET_IMP_ERR
)
@staticmethod
def dict_to_list(source_dict):
return [
dict(key=var[0], value=var[1])
for var in source_dict.items()
]
@staticmethod
def list_to_dict(source_list, hashed=False):
key_value = 'hashed_value' if hashed else 'value'
return dict(
(var['key'], var[key_value])
for var in source_list
)
@classmethod
def decode(cls, secrets_list, values_list):
secrets_dict = cls.list_to_dict(secrets_list, hashed=True)
values_dict = cls.list_to_dict(values_list, hashed=False)
for key in values_dict:
if key in secrets_dict:
if argon2.verify(values_dict[key], secrets_dict[key]):
secrets_dict[key] = values_dict[key]
else:
secrets_dict[key] = secrets_dict[key]
return cls.dict_to_list(secrets_dict)
def resource_attributes_should_be_changed(target, wished, verifiable_mutable_attributes, mutable_attributes):
diff = dict()
for attr in verifiable_mutable_attributes:

View File

@@ -28,7 +28,7 @@ class BitbucketHelper:
# TODO:
# - Rename user to username once current usage of username is removed
# - Alias user to username and deprecate it
user=dict(type='str', aliases=['username'], fallback=(env_fallback, ['BITBUCKET_USERNAME'])),
user=dict(type='str', fallback=(env_fallback, ['BITBUCKET_USERNAME'])),
password=dict(type='str', no_log=True, fallback=(env_fallback, ['BITBUCKET_PASSWORD'])),
)

View File

@@ -1,21 +0,0 @@
# -*- coding: utf-8 -*-
# Copyright (c) 2015, Björn Andersson
# Copyright (c) 2021, Ansible Project
# Copyright (c) 2021, Abhijeet Kasurde <akasurde@redhat.com>
# Copyright (c) 2022, Alexei Znamensky <russoz@gmail.com>
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
# SPDX-License-Identifier: GPL-3.0-or-later
from __future__ import absolute_import, division, print_function
__metaclass__ = type
import os
def determine_config_file(user, config_file):
if user:
config_file = os.path.join(os.path.expanduser('~%s' % user), '.ssh', 'config')
elif config_file is None:
config_file = '/etc/ssh/ssh_config'
return config_file

View File

@@ -31,11 +31,6 @@ short_description: Create, Start, Stop, Restart or Terminate an Instance in ECS;
description:
- Create, start, stop, restart, modify or terminate ecs instances.
- Add or remove ecs instances to/from security group.
attributes:
check_mode:
support: none
diff_mode:
support: none
options:
state:
description:
@@ -257,7 +252,6 @@ requirements:
- "footmark >= 1.19.0"
extends_documentation_fragment:
- community.general.alicloud
- community.general.attributes
'''
EXAMPLES = '''

View File

@@ -33,11 +33,6 @@ description:
The module must be called from within the ECS instance itself.
- This module was called C(ali_instance_facts) before Ansible 2.9. The usage did not change.
attributes:
check_mode:
version_added: 3.3.0
# This was backported to 2.5.4 and 1.3.11 as well, since this was a bugfix
options:
name_prefix:
description:
@@ -65,8 +60,6 @@ requirements:
- "footmark >= 1.13.0"
extends_documentation_fragment:
- community.general.alicloud
- community.general.attributes
- community.general.attributes.info_module
'''
EXAMPLES = '''

View File

@@ -22,13 +22,6 @@ notes:
requirements:
- atomic
- "python >= 2.6"
extends_documentation_fragment:
- community.general.attributes
attributes:
check_mode:
support: none
diff_mode:
support: none
options:
backend:
description:

View File

@@ -22,13 +22,6 @@ notes:
requirements:
- atomic
- python >= 2.6
extends_documentation_fragment:
- community.general.attributes
attributes:
check_mode:
support: none
diff_mode:
support: none
options:
revision:
description:

View File

@@ -22,13 +22,6 @@ notes:
requirements:
- atomic
- python >= 2.6
extends_documentation_fragment:
- community.general.attributes
attributes:
check_mode:
support: none
diff_mode:
support: none
options:
backend:
description:

View File

@@ -14,13 +14,6 @@ module: clc_aa_policy
short_description: Create or Delete Anti Affinity Policies at CenturyLink Cloud
description:
- An Ansible module to Create or Delete Anti Affinity Policies at CenturyLink Cloud.
extends_documentation_fragment:
- community.general.attributes
attributes:
check_mode:
support: full
diff_mode:
support: none
options:
name:
description:

View File

@@ -15,13 +15,6 @@ module: clc_alert_policy
short_description: Create or Delete Alert Policies at CenturyLink Cloud
description:
- An Ansible module to Create or Delete Alert Policies at CenturyLink Cloud.
extends_documentation_fragment:
- community.general.attributes
attributes:
check_mode:
support: full
diff_mode:
support: none
options:
alias:
description:

View File

@@ -14,13 +14,6 @@ module: clc_blueprint_package
short_description: Deploys a blue print package on a set of servers in CenturyLink Cloud
description:
- An Ansible module to deploy blue print package on a set of servers in CenturyLink Cloud.
extends_documentation_fragment:
- community.general.attributes
attributes:
check_mode:
support: full
diff_mode:
support: none
options:
server_ids:
description:

View File

@@ -14,13 +14,6 @@ module: clc_firewall_policy
short_description: Create/delete/update firewall policies
description:
- Create or delete or update firewall policies on Centurylink Cloud
extends_documentation_fragment:
- community.general.attributes
attributes:
check_mode:
support: full
diff_mode:
support: none
options:
location:
description:

View File

@@ -15,13 +15,6 @@ module: clc_group
short_description: Create/delete Server Groups at Centurylink Cloud
description:
- Create or delete Server Groups at Centurylink Centurylink Cloud
extends_documentation_fragment:
- community.general.attributes
attributes:
check_mode:
support: full
diff_mode:
support: none
options:
name:
description:

View File

@@ -15,13 +15,6 @@ module: clc_loadbalancer
short_description: Create, Delete shared loadbalancers in CenturyLink Cloud
description:
- An Ansible module to Create, Delete shared loadbalancers in CenturyLink Cloud.
extends_documentation_fragment:
- community.general.attributes
attributes:
check_mode:
support: full
diff_mode:
support: none
options:
name:
description:

View File

@@ -14,13 +14,6 @@ module: clc_modify_server
short_description: Modify servers in CenturyLink Cloud
description:
- An Ansible module to modify servers in CenturyLink Cloud.
extends_documentation_fragment:
- community.general.attributes
attributes:
check_mode:
support: full
diff_mode:
support: none
options:
server_ids:
description:

View File

@@ -14,13 +14,6 @@ module: clc_publicip
short_description: Add and Delete public ips on servers in CenturyLink Cloud
description:
- An Ansible module to add or delete public ip addresses on an existing server or servers in CenturyLink Cloud.
extends_documentation_fragment:
- community.general.attributes
attributes:
check_mode:
support: full
diff_mode:
support: none
options:
protocol:
description:

View File

@@ -14,13 +14,6 @@ module: clc_server
short_description: Create, Delete, Start and Stop servers in CenturyLink Cloud
description:
- An Ansible module to Create, Delete, Start and Stop servers in CenturyLink Cloud.
extends_documentation_fragment:
- community.general.attributes
attributes:
check_mode:
support: full
diff_mode:
support: none
options:
additional_disks:
description:

View File

@@ -14,13 +14,6 @@ module: clc_server_snapshot
short_description: Create, Delete and Restore server snapshots in CenturyLink Cloud
description:
- An Ansible module to Create, Delete and Restore server snapshots in CenturyLink Cloud.
extends_documentation_fragment:
- community.general.attributes
attributes:
check_mode:
support: full
diff_mode:
support: none
options:
server_ids:
description:

View File

@@ -19,18 +19,12 @@ DOCUMENTATION = '''
module: dimensiondata_network
short_description: Create, update, and delete MCP 1.0 & 2.0 networks
extends_documentation_fragment:
- community.general.dimensiondata
- community.general.dimensiondata_wait
- community.general.attributes
- community.general.dimensiondata
- community.general.dimensiondata_wait
description:
- Create, update, and delete MCP 1.0 & 2.0 networks
author: 'Aimon Bustardo (@aimonb)'
attributes:
check_mode:
support: none
diff_mode:
support: none
options:
name:
description:

View File

@@ -15,18 +15,12 @@ DOCUMENTATION = '''
module: dimensiondata_vlan
short_description: Manage a VLAN in a Cloud Control network domain
extends_documentation_fragment:
- community.general.dimensiondata
- community.general.dimensiondata_wait
- community.general.attributes
- community.general.dimensiondata
- community.general.dimensiondata_wait
description:
- Manage VLANs in Cloud Control network domains.
author: 'Adam Friedman (@tintoy)'
attributes:
check_mode:
support: none
diff_mode:
support: none
options:
name:
description:

View File

@@ -21,13 +21,6 @@ author:
- Marcel Arns (@marns93)
requirements:
- heroku3
extends_documentation_fragment:
- community.general.attributes
attributes:
check_mode:
support: full
diff_mode:
support: none
options:
api_key:
type: str

View File

@@ -22,11 +22,6 @@ version_added: '0.2.0'
author: Huawei Inc. (@huaweicloud)
requirements:
- keystoneauth1 >= 3.6.0
attributes:
check_mode:
support: full
diff_mode:
support: none
options:
state:
description:
@@ -230,8 +225,7 @@ options:
type: str
required: false
extends_documentation_fragment:
- community.general.hwc
- community.general.attributes
- community.general.hwc
'''

View File

@@ -22,11 +22,6 @@ version_added: '0.2.0'
author: Huawei Inc. (@huaweicloud)
requirements:
- keystoneauth1 >= 3.6.0
attributes:
check_mode:
support: full
diff_mode:
support: none
options:
state:
description:
@@ -155,8 +150,7 @@ options:
type: str
required: false
extends_documentation_fragment:
- community.general.hwc
- community.general.attributes
- community.general.hwc
'''

View File

@@ -22,11 +22,6 @@ author: Huawei Inc. (@huaweicloud)
requirements:
- requests >= 2.18.4
- keystoneauth1 >= 3.6.0
attributes:
check_mode:
support: full
diff_mode:
support: none
options:
state:
description:
@@ -66,8 +61,7 @@ options:
type: str
required: true
extends_documentation_fragment:
- community.general.hwc
- community.general.attributes
- community.general.hwc
'''

View File

@@ -22,11 +22,6 @@ author: Huawei Inc. (@huaweicloud)
requirements:
- requests >= 2.18.4
- keystoneauth1 >= 3.6.0
attributes:
check_mode:
support: full
diff_mode:
support: none
options:
state:
description:
@@ -50,8 +45,7 @@ options:
type: str
required: true
extends_documentation_fragment:
- community.general.hwc
- community.general.attributes
- community.general.hwc
'''

View File

@@ -22,11 +22,6 @@ version_added: '0.2.0'
author: Huawei Inc. (@huaweicloud)
requirements:
- keystoneauth1 >= 3.6.0
attributes:
check_mode:
support: full
diff_mode:
support: none
options:
state:
description:
@@ -126,8 +121,7 @@ options:
type: str
required: false
extends_documentation_fragment:
- community.general.hwc
- community.general.attributes
- community.general.hwc
'''

View File

@@ -23,11 +23,6 @@ version_added: '0.2.0'
author: Huawei Inc. (@huaweicloud)
requirements:
- keystoneauth1 >= 3.6.0
attributes:
check_mode:
support: full
diff_mode:
support: none
options:
state:
description:
@@ -80,8 +75,7 @@ options:
type: str
required: false
extends_documentation_fragment:
- community.general.hwc
- community.general.attributes
- community.general.hwc
'''

View File

@@ -22,11 +22,6 @@ version_added: '0.2.0'
author: Huawei Inc. (@huaweicloud)
requirements:
- keystoneauth1 >= 3.6.0
attributes:
check_mode:
support: full
diff_mode:
support: none
options:
state:
description:
@@ -110,8 +105,7 @@ options:
elements: str
required: false
extends_documentation_fragment:
- community.general.hwc
- community.general.attributes
- community.general.hwc
'''

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