Compare commits

...

348 Commits

Author SHA1 Message Date
Felix Fontein
ddc8c4e26f 0.3.0-experimental.meta.redirects.2 -> 0.3.0-experimental.meta.redirects-3 2020-07-06 14:03:20 +02:00
Felix Fontein
d0786678aa Add changelog. 2020-07-06 13:38:13 +02:00
Felix Fontein
7418ff8e80 Bump version in galaxy.yml. 2020-07-06 13:29:04 +02:00
Felix Fontein
5d565ae2f7 Add release summary 2020-07-06 13:28:44 +02:00
Felix Fontein
50b0b9df6c master -> main 2020-07-06 13:23:58 +02:00
Felix Fontein
436023be95 Update changelog. 2020-06-29 15:02:58 +02:00
Felix Fontein
ffe16f5fd1 Next release is 0.3.0-experimental.meta.redirects 2020-06-29 15:02:23 +02:00
Felix Fontein
0ec76242c6 Convert symlinks to meta/runtime.yml redirects. 2020-06-29 15:02:12 +02:00
Felix Fontein
097aebadb0 Fix M(). (#591)
* Fix M().

* Break long line.

* Fix the remaining M(...).

* Break long line.
2020-06-29 14:59:15 +02:00
Mikael Davranche
e3d36a3408 [log_plays] Add playbook, task name and action (#442)
* [log_plays] Use v2 methods

* [log_plays] Add playbook, task name and action
2020-06-29 11:31:07 +03:00
Abhijeet Kasurde
22c04d54f2 kubevirt: Add aliases 'interface_name' for 'network_name' (#536)
Fixes: ansible/ansible#55903

Signed-off-by: Abhijeet Kasurde <akasurde@redhat.com>
2020-06-29 07:37:41 +02:00
Daniel Poggenpohl
11300507d0 - removed danowar2k from team_solaris (no time) (#595) 2020-06-28 09:01:44 +02:00
David M. Lee
53c0c83522 airbrake_deployment: Add types to the argument_spec (#592)
As suggested in #583.
2020-06-27 09:16:30 +02:00
David M. Lee
35cee20a6c airbrake_deployment: Add version param (#583)
* airbrake_deployment: Add version param

The aibrake v4 API allows for distinct `version` and `revision` params.
The `revision` param is meant to indicate a revision from the version
control system (such as a Git hash), whereas the `version` param is
meant to be a version number (such as 1.2.3). This is especially
noticeable in the Airbrake UI where revisions are truncated to 7
characters, and used to build GitHub style diff links (such as
689a25edcf...e54dd3a01f).

* Add link to PR in changelog

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

* Add version_added to version param

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

* Add type to version's argument_spec

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

Co-authored-by: Felix Fontein <felix@fontein.de>
2020-06-26 23:05:55 +02:00
Amin Vakil
72ca27a6ae Reduce ignored packaging sanity tests (#568)
* Remove all packaging sanity tests to see errors

* fix

* Fix

* Minor fixes

* Fix

* Fix redhat

* Fix redhat_subscription

* Fix redhat_subscription

* Fix redhat_subscription

* Ignore redhat_subscription return-syntax-error

* Remove more ignored sanity tests

* Remove force from xbps argument_spec as it doesn't do anything(?)

* Remove unnecessary sanity test for xbps

* Fix suggestions made by felixfontein

* Better changelog description, fix portage wrong default values

* Fix

* Fix

* Remove root default from urpmi doc

* Fix wrong type of default for booleans

* Add default value as suggested by felixfontein

* Fix changelog
2020-06-26 15:17:11 +02:00
Andrew Klychkov
99b7573dfb archive: fix seealso (#586) 2020-06-26 13:52:01 +02:00
Felix Fontein
1f61ccc80c Add missing symlinks. 2020-06-26 09:17:51 +02:00
Jon Dufresne
16cd8e49d2 Fix typo in fatpak tests: state=preset → state=present (#585) 2020-06-26 08:31:53 +02:00
Robert Kaussow
114bd75c89 docker_compose: dont start the service if parameter stopped is true (#547)
* dont start the service it parameter stopped is true

* add missing changelog fragment

* fix formatting of the changelog fragment

* add condition to disallow the usage of stopped and restarted at the same time

* fix changelog
2020-06-26 08:30:40 +02:00
Andrew Klychkov
21681daa01 modules: fix seealso sections (#581) 2020-06-25 13:34:46 +02:00
Andrew Klychkov
ebb4600618 mysql and postgresql modules: fix seealso section (#580) 2020-06-25 12:09:13 +03:00
Alan Rominger
60c9642e6b Point to correct location in kubernetes plugin import (#577) 2020-06-25 08:15:36 +02:00
Abhijeet Kasurde
832dd55144 sanity: Add future boilerplate (#573)
* sanity: Add future boilerplate

Signed-off-by: Abhijeet Kasurde <akasurde@redhat.com>

* Module Utils

Signed-off-by: Abhijeet Kasurde <akasurde@redhat.com>

* Scripts

Signed-off-by: Abhijeet Kasurde <akasurde@redhat.com>

* sanity: Add future boilerplate

* Tests

Signed-off-by: Abhijeet Kasurde <akasurde@redhat.com>

* CI failure

Signed-off-by: Abhijeet Kasurde <akasurde@redhat.com>
2020-06-24 21:50:36 +02:00
Davíð Steinn Geirsson
9142c75c84 pkgng: Add stdout and stderr to response object (#560)
* pkgng: Add stdout and stderr to response object

To ease debugging if something goes wrong during pkg run.

* pkgng: Fix crash when run with autoremove

Fix crash when run with "autoremove: yes" but no packages
need to be autoremoved.

* Add changelog fragment for pull request 560

* Formatting changes for changelogs/fragments/560-pkgng-add-stdout-and-stderr.yaml

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

Co-authored-by: Davíð Steinn Geirsson <david@isnic.is>
Co-authored-by: Felix Fontein <felix@fontein.de>
2020-06-23 19:55:40 +02:00
Felix Fontein
5269213907 Deprecate logicmonitor and logicmonitor_facts (#541)
* Deprecate logicmonitor and logicmonitor_facts.

* Remove modules instead of deprecating them.

* Remove bad entry from BOTMETA.

* Remove ignore.txt entries.
2020-06-23 15:55:59 +02:00
Alex
ae3fde2647 filesystem.py: fix xfs growfs (#137)
* filesystem.py: fix xfs growfs

xfs needs to be mounted to be expanted.

Add function to get mountpoint of filesystem.

* Fail if xfs filesystem is not mounted

xfs growfs needs to be executed on a mountpoint. That will be enforced
now by xfsprogs-4.12.
https://bugzilla.redhat.com/show_bug.cgi?id=1477192

* Update changelogs/fragments/33979-xfs_growfs.yml

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

Co-authored-by: Felix Fontein <felix@fontein.de>
2020-06-23 14:04:55 +01:00
Amin Vakil
7e17b55884 apk: Add no-cache option (#548)
* apk: add no_cache option

* Fix indentation
2020-06-23 14:10:05 +02:00
Denis
4c42d0971f Fix for lookup/consul_kv environment varibles handling (#303)
* suppress exceptions for optional env variables

* Options handling switched to "get_option" approach

* Put back _raw option for documentation purposes

* Fix url option description

* remove ini section

* Docs fixed

* force rebuild to fix aix tests

* Point returned in order to have full sentence in description

* Add general arguments fix information to changelog fragments

* Add PR link to changelog fragments

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

* Fix port/scheme handlng in case they weren't provided in URL argument

* Add argument type for url

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

Co-authored-by: Denis Savenko <denis.savenko@tonicforhealth.com>
Co-authored-by: Felix Fontein <felix@fontein.de>
2020-06-23 14:08:38 +02:00
Robert Osowiecki
ced14746a8 parted: Allow passing negative numbers to specify partition boundary relative to disk end (#129)
* Allow passing negative numbers to specify partition boundary relative to disk end
Fixes: https://github.com/ansible/ansible/issues/43369

* parted: unit test case, create partition with part_start: -1GiB

* fs_type parameter is not really optional for negative part_start parameter

* Revert "fs_type parameter is not really optional for negative part_start parameter"

This reverts commit 800b1cb00b.

Instead: added notes and documentation about netagive part_start and fs_type.

* include fs_type in negative part_start example
2020-06-23 14:02:35 +02:00
Abhijeet Kasurde
4399759cf3 aix_filesystem - fix module_util pathing issue for ansible 2.9 (#567)
* Bump ansible.posix requirement to 1.0.0

Signed-off-by: Abhijeet Kasurde <akasurde@redhat.com>
2020-06-23 13:42:32 +02:00
Felix Fontein
a33d0a55e7 Commented out wrong link. 2020-06-23 08:06:32 +02:00
Amin Vakil
650ae65f24 collection: Change default='no's and 'yes's to default=False and default=True (#556)
* Change default={'no','yes'} to default={False,True}

* Add changelog

* Remove changelog
2020-06-22 15:56:35 +02:00
Amin Vakil
004eb6992f Change default={'no','yes'} to default={False,True} in packaging/os modules (#554) 2020-06-22 07:37:47 +02:00
Felix Fontein
72e5a7dba2 Enable flatmapping for changelog generator. (#551)
Needs next version of antsibull-changelog.
2020-06-21 17:00:49 +02:00
Felix Fontein
a6c225e4a0 Fix docker_container tests (#549)
* Stop using ansible.netcommon.next_nth_usable.

It requires netaddr to be installed before running the playbook, which isn't the case in CI.
This undoes cf61474c3b.

* Use own filter to avoid needing netaddr installed.
2020-06-21 16:28:58 +02:00
Felix Fontein
c3595abcf0 Next release will be 1.0.0. 2020-06-20 12:52:52 +02:00
Felix Fontein
e54dd3a01f Release 0.2.0 of community.general (#546)
* Comment out dead documentation link.

* Move changelog into root.

* Link to generated changelog in README.

* Fix changelog entry categories (bugfixes -> security_fixes).

* Add release summary.

* Geneate changelog.

* Add basic release information.

* Require Ansible(-base) 2.9.10 or newer.

Needed for deprecation syntax support.
2020-06-20 12:49:50 +02:00
Adam Miller
42c5cdf01a firewalld: add zone target set (#526)
* firewalld: add zone target set

Fixes https://github.com/ansible/ansible/issues/49232

Signed-off-by: Adam Miller <admiller@redhat.com>

* fix sanity tests, add example of zone target setting

Signed-off-by: Adam Miller <admiller@redhat.com>

* test different zone/target combination as we're not hitting default settings

Signed-off-by: Adam Miller <admiller@redhat.com>

* fix enabled values for zone operations

Signed-off-by: Adam Miller <admiller@redhat.com>

* Apply suggestions from code review

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

Co-authored-by: Felix Fontein <felix@fontein.de>
2020-06-19 23:04:17 +02:00
Adam Miller
42a43586f1 fix and enable firewalld tests (#499)
* fix and enable firewalld tests

Signed-off-by: Adam Miller <admiller@redhat.com>

* skip docker for firewalld tests

Signed-off-by: Adam Miller <admiller@redhat.com>
2020-06-19 22:36:03 +02:00
Steven Michaels
8b773e13ff digital_ocean_droplet: Add new vpc_uuid option (#475)
* Add vpc_uuid option to droplet creation

* Include new vpc_uuid option digital_ocean_droplet

* Remove required, add type for vpc_uuid

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

* Create changelog fragment file

* Include version_added

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

Co-authored-by: Felix Fontein <felix@fontein.de>
2020-06-19 20:54:00 +02:00
Andreas Olsson
e78ac2849f Remove andreaso from cloudflare_dns maintainership (#542)
Lack of time, motivation, etc
2020-06-19 16:35:56 +02:00
Abhijeet Kasurde
67ae100cee hashi_vault: Handle equal sign in secret name value (#537)
Fixes: ansible/ansible#55658

Signed-off-by: Abhijeet Kasurde <akasurde@redhat.com>
2020-06-19 14:10:11 +02:00
Robert Osowiecki
9e28f3cceb parted option align: undefined to maintain parted 1.8.3 compatibility (#405)
* option align: undefined to maintain parted 1.8.3 compatibility

* modified argument_spec

* changelog fragment for #405

* Update changelogs/fragments/405-parted_align_undefined.yml

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

Co-authored-by: Felix Fontein <felix@fontein.de>
2020-06-19 08:41:59 +02:00
Felix Fontein
ab5533022e Add Ansible 2.10 runs. (#531)
Running all sanity tests with 2.10, as well as one unit test target.
2020-06-18 11:20:05 +02:00
Andrew Klychkov
498ace1210 CI tests: fix setup_postgresql_db (#533)
* CI tests: fix setup_postgresql_db

* fix

* fix

* fix

* fix

* fix

* fix
2020-06-18 12:11:40 +03:00
Andrew Klychkov
1d1f7ec582 mysql_db: add config_overrides_defaults parameter (#513)
* mysql_db: add config_overrides_defaults parameter

* Add CI tests

* Add changelog fragment

* add more tests

* improve tests

* fix CI

* fix feature
2020-06-18 11:24:23 +03:00
Grzegorz Grasza
25123eafc7 Fix the behavior of ipa modules in case IPA_HOST is empty (#241)
* Fix the behavior of ipa modules in case IPA_HOST is empty

The expected behavior, when the env is empty, is to
fallback on DNS. Without this fix, if IPA_HOST is empty,
there are different errors, depending on urllib version,
which additionally confuses the user. Example errors:
 * host_find: Request failed: <urlopen error no host given>
 * Failed to connect to None at port 443: [Errno 111]
   Connection refused", "status": -1, "url":
   "https:///ipa/session/json

* Add a changelog fragment for IPA_HOST fix

* Update changelogs/fragments/241-fix-ipa-modules-when-ipa_host-empty.yml

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

Co-authored-by: John R Barker <john@johnrbarker.com>
Co-authored-by: Sandra McCann <samccann@redhat.com>
2020-06-17 18:45:37 +01:00
amleshkov
16ce942448 apt_rpm: support installing a list of packages (Fixes #143) (#169)
* Fixes #143, change package parameter from str to list

* remove uneccessary splitting

* add changelog fragment

* fix parameter-list-no-elements validation

* fix documentation

* Fix changelog

* Fix documetation, add example with list of packages

* Update changelogs/fragments/apt_rpm_typefix.yml

Co-authored-by: Alexander Leshkov <lam@arenadata.io>
Co-authored-by: Felix Fontein <felix@fontein.de>
2020-06-17 18:04:27 +02:00
Jose Angel Munoz
54014529bd Return correct values when running yarn in check mode (#153)
* Fixes Check Mode

* Adds parenthesis

* Adds changelog and tests
2020-06-17 17:39:24 +02:00
tchernomax
02a032aa45 Pear - Add prompt parameter on pear module that allows to specify one or more prompts (#530)
* Add "prompt" parameter that allows to specify one or more prompts and optionnally their answer

* Documentation backslash fixes as well as file structure

* Add r prefix to documentation

* Fixed documentation indentation

* Fixed various trailing whitespaces and file structure

* Doc description string fix, the tests thought it was an AnsibleMapping object

* Added elements parameter to argument_spec definition.

* Complete documentation.

* Add bool instead of if else expression

Co-Authored-By: tchernomax <maxime.deroucy@gmail.com>

* Replace _item by a shorter expression as suggested

Co-Authored-By: tchernomax <maxime.deroucy@gmail.com>

* Commit suggestion

Co-Authored-By: Felix Fontein <felix@fontein.de>

* Commit documentation suggestion

Co-Authored-By: Felix Fontein <felix@fontein.de>

* Update changelogs/fragments/29253-pear_add_prompts_parameter.yml

Co-Authored-By: Felix Fontein <felix@fontein.de>

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

Co-Authored-By: tchernomax <maxime.deroucy@gmail.com>

* Add case where "null" is specified in a list. Improved documentation as well

* Too much caracter removed in documentation

* We now always specify a prompt and a data parameter

* minor documentation change

* Update changelogs/fragments/29253-pear_add_prompts_parameter.yml

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

* pear: fix version_added

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

* pear: fix description

Co-authored-by: Veltarn <dante161@gmail.com>
Co-authored-by: Felix Fontein <felix@fontein.de>
2020-06-17 16:34:26 +02:00
Andrew Klychkov
09e2b89d5b modules: improve documentation (#528)
* modules: improve documentation

* Update plugins/modules/cloud/digital_ocean/digital_ocean_tag.py

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

* Update plugins/modules/database/postgresql/postgresql_privs.py

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

* Update plugins/modules/notification/slack.py

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

Co-authored-by: Felix Fontein <felix@fontein.de>
2020-06-17 14:14:19 +03:00
majekw
736f2ecac0 slackpkg: fix matching some special cases in package names. (#505)
* slackpkg: fix matching some special cases in package names.

* Add chagelog/fragments file

* Update changelogs/fragments/505-slackpkg_fix_matching_some_special_cases_in_package_names.yml

Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>

Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>
2020-06-17 09:38:30 +02:00
Robert Osowiecki
a3953106e6 parted: update documentation, warn about possible loss of partition label (#522) (#525) 2020-06-17 07:57:35 +02:00
Felix Fontein
9f9d160ad1 [WIP] Prepare for stable-2.10 branching of ansible-base (#524)
* Allow to use multiple different ansible versions in CI.

* Fix script.
2020-06-16 22:51:38 +01:00
Felix Fontein
f16a93f976 Adjust removal versions (#521)
* Adjust 2.11 and later Ansible versions to collection versions.

* Remove unnecessary changelog.

* Adjust Ansible 2.10 to community.general 0.2.0 (first 'proper' release).

* Caught some non-properly prefixed versions.

* Update plugins/modules/database/mysql/mysql_replication.py
2020-06-16 21:24:42 +02:00
Felix Fontein
7ef43c60df Prepare for devel version bump. (#523) 2020-06-16 21:20:52 +02:00
René Moser
ffd107db4d dedicated collection for exoscale.com related plugins (#519) 2020-06-16 19:19:06 +02:00
René Moser
e5bb9dab9d cloudscale migrated to cloudscale_ch.cloud (#517) 2020-06-16 17:12:47 +02:00
John R Barker
e4522e1517 Update settings.yml 2020-06-16 15:32:32 +01:00
John R Barker
18f5d53078 inherit settings.yml from .github repo 2020-06-16 14:31:50 +01:00
John R Barker
287abb749c settings.yml extend gh/a-c/.github repo 2020-06-16 14:26:12 +01:00
Felix Fontein
1c97afd40a Remove sops lookup (moved to https://github.com/ansible-collections/community.sops). (#518) 2020-06-16 14:24:31 +02:00
Felix Fontein
b54ddaa28c Clean up deprecations (#504)
* Adjust deprecation versions.

* Remove redirects that are already made in ansible/ansible's ansible_builtin_runtime.yml

* Remove modules that were moved to the google.cloud collection according to ansible/ansible's ansible_builtin_runtime.yml.

* The _info module is in google.cloud.

* The gcp doc_fragment is a copy of the one in google.cloud and is only used by one lookup. Mark as deprecated/internal.

* Remove entries of modules that no longer exist.

* Update ignore.txt.

* Try to fix test.

* Remove debug output.
2020-06-16 13:15:19 +02:00
Felix Fontein
5324b98e8f Change back to 0.2.0, after the 0.1.4 release showed that releasing with Zuul works. 2020-06-15 21:32:36 +02:00
Felix Fontein
682d48e721 Add changelog fragments for community.general related things from ansible/ansible's 2.10 porting guide. (#512) 2020-06-15 21:20:08 +02:00
Jonas
6c59811bf9 Be more verbose on unexpected failure. (#511)
I spent some time debugging an error, where the unexpected HTTP return code was
reported to be -1. Digging deeper, I found the cause using this patch:
"An unknown error occurred: ~/.netrc access too permissive: access permissions
must restrict access to only the owner"
2020-06-15 20:53:04 +02:00
John Barker
689a25edcf 0.1.4 2020-06-15 19:15:55 +01:00
Trevor Highfill
c718a610cf Added DIY callback plugin (#432)
* Added diy callback plugin

* Update plugins/callback/diy.py

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

* Update plugins/callback/diy.py

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

* Update plugins/callback/diy.py

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

* Update plugins/callback/diy.py

Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>

* Update plugins/callback/diy.py

Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>

* Update plugins/callback/diy.py

Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>

* Update plugins/callback/diy.py

Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>

* Update plugins/callback/diy.py

Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>

* Update plugins/callback/diy.py

Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>

* Update plugins/callback/diy.py

Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>

* Update plugins/callback/diy.py

Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>

* Update plugins/callback/diy.py

Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>

* Update plugins/callback/diy.py

Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>

* Update plugins/callback/diy.py

Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>

* Update plugins/callback/diy.py

Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>

* Update plugins/callback/diy.py

Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>

* Update plugins/callback/diy.py

Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>

* Update plugins/callback/diy.py

Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>

* Update plugins/callback/diy.py

Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>

* Update plugins/callback/diy.py

Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>

* Update plugins/callback/diy.py

Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>

* Update plugins/callback/diy.py

* Update plugins/callback/diy.py

* Update plugins/callback/diy.py

* Update plugins/callback/diy.py

* Update plugins/callback/diy.py

* Update plugins/callback/diy.py

* Update plugins/callback/diy.py

* Update plugins/callback/diy.py

* Update plugins/callback/diy.py

* Update plugins/callback/diy.py

* Update plugins/callback/diy.py

* Update plugins/callback/diy.py

* Update plugins/callback/diy.py

* Update plugins/callback/diy.py

* Update plugins/callback/diy.py

* Add diy callback plugin integration tests

* Update tests\integration\targets\callback_diy\tasks\main.yml

* Update tests\integration\targets\callback_diy\tasks\main.yml

* Add tests/integration/targets/callback_diy/handlers/main.yml

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

* Update plugins/callback/diy.py

* Update plugins/callback/diy.py

* Update plugins/callback/diy.py

* Update plugins/callback/diy.py

Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>

* Update plugins/callback/diy.py

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

Co-authored-by: Felix Fontein <felix@fontein.de>
Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>
2020-06-15 21:06:52 +03:00
Abhijeet Kasurde
58eba98de9 nmcli: Fix documentation example (#515)
Migrated from https://github.com/ansible/ansible/pull/68259

This is based upon the work done by https://github.com/cdomingos

Signed-off-by: Abhijeet Kasurde <akasurde@redhat.com>
2020-06-15 17:04:17 +05:30
Abhijeet Kasurde
2aaab59d04 nmcli: Typecast parameter values to string as required (#477) 2020-06-15 17:02:55 +05:30
Andrew Klychkov
8d80ffd8ca mysql_user: fix cursor-related host_all arguments conversion string formatting error (#490)
* mysql_user: fix cursor-related host_all arguments conversion string formatting error

* add changelog fragment
2020-06-15 09:12:20 +03:00
Felix Fontein
94ee25cace Since ansible-test now includes the changelog test, it is no longer needed separately. (#510) 2020-06-14 17:06:36 +02:00
Felix Fontein
fafcd5f755 Update unit test requirements. (#509) 2020-06-14 16:34:09 +02:00
Felix Fontein
f9589d78a8 Add version_added for all new features (#214)
* Add version_added: 1.0.0 for all new features added before pre-ansible-base.

* Add version_added: 1.0.0 for all new features.

* Next release will be 0.2.0

* Fix error.

* Remove unnecessary warnings.
2020-06-13 15:01:19 +02:00
Felix Fontein
c081bb6c9c Fix CI (#503)
* 'Fix' nosh's return value documentation by adding an empty description (ansible/ansible#70046).

* Disable runtime-metadata test.

ci_complete
2020-06-13 10:49:47 +02:00
Felix Fontein
31ffc68980 Added missing changelog fragment for https://github.com/ansible-collections/community.general/pull/457. 2020-06-13 10:13:47 +02:00
FatMinMin
2aa84f07f1 Do domain resolution for portal (#461)
* Do domain resolution for portal

iscsiadm support domain resolution (ex: iscsiadm -m discovery -t sendtargets -p iscsi.chiehmin.com).
However, open_iscsi module will try to match the portal with discovered results which will never
matched cause the discovered results use IP to represent node.

This patch do portal DNS resolution first to solve this situation.

Signed-off-by: Chieh-Min Wang <chiehminw@synology.com>

* Update changelogs/fragments/461-resolve-domain-for-iscsi-portal.yml

Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>

Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>
2020-06-12 14:38:41 +03:00
Bill Dodd
48409f6584 add Redfish VirtualMediaInsert and VirtualMediaEject commands (#494)
* add Redfish VirtualMediaInsert and VirtualMediaEject commands

* add changelog fragment
2020-06-11 20:24:41 +02:00
Olof Johansson
3044c0288f scaleway_compute: When removing node, wait for transition (#444)
To remove a scaleway compute node, one needs to stop it first. This is
handled internally within the module by shutting down before removing.
Shutting down the node transitions it to a "stopping" state, which is
not the "stopped" state we expect. We thus need the transition to
complete so that we can put it in the actual target state (absent, i.e.
delete it).

The mechanism for waiting for such transitions today is controlled by
module parameters, with default to not being enabled at all, which
includes the transition from ([running] -(stopping)-> [stopped]).

Without this chage, in case of a running node, we would shut it down
(transition it to "stopping"), not wait for it complete the transition,
realize that it's not yet stopped and issue a second shut down command
to the api. This would fail with a 400 Bad Request error, "already
stopped".

Reference: https://github.com/ansible/ansible/issues/45740
Reported-by: zwindler
2020-06-11 11:34:15 +03:00
Giovanni Sciortino
7bdd78b053 rshm_repository: reduce execution time when changed == False (#458)
Co-authored-by: Giovanni Sciortino <gsciorti@redhat.com>
2020-06-11 11:00:48 +03:00
majekw
519162443f slackpkg: fix name matching in package installation (#450) (#454)
* slackpkg: fix name matching in package installation (#450)

* Escape re parameters and optimize matching as suggested in code review.

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

* Update changelogs/fragments/450-slackpkg-package-matching.yml

Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>

Co-authored-by: Felix Fontein <felix@fontein.de>
Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>
2020-06-11 10:48:10 +03:00
Baptiste Mille-Mathias
7fd989f7f0 Fix README Badge urls (#496) 2020-06-11 07:20:02 +02:00
Abhijeet Kasurde
cc3c9cb35b Update README.md and LICENSE (#70)
Signed-off-by: Abhijeet Kasurde <akasurde@redhat.com>
2020-06-10 23:57:23 +02:00
Sloane Hertel
e2b6a71079 Remove extra field (#492) 2020-06-10 21:52:18 +02:00
quidame
8635cd84d4 New module: dpkg_divert (#417)
* feature: module dpkg_divert + tests

* try to skip non-deb linux distrib

* use collection namespace in EXAMPLES

* skip unsupported OS/distrib in tasks instead

* tests: remove unskipped distribs

* apply changes suggested by Andersson007

* Remove ANSIBLE_METADATA (no more needed).
* Normalize docstrings (capitalize descriptions, fix styling, use yes/no
  booleans).

* fix descriptions

* update DOCUMENTATION

* Drop field 'version_added' (no more needed).
* Add a note about check_mode support.

* use list comprehension

* support diff mode

* Move 'before'/'after' dicts into 'diff' dictionary.
* Set 'diversion' as the actual state (or the state that would be
  reached, when in check mode).
* Always return 'diversion' on handled exits (exit_json & fail_json).

* enable 'diff' mode in tests, add missing 'become'
2020-06-10 21:01:16 +03:00
Andrew Klychkov
e47da0f512 mysql_db: add check_implicit_admin parameter (#486)
* mysql_db: add check_implicit_admin parameter

* add CI tests

* add changelog fragment

* fix
2020-06-10 12:46:44 +03:00
Felix Fontein
5552c6e94f Fix CI (#487)
* Adjust tests/sanity/ignore-2.10.txt to deprecation changes.

ci_complete

* Install requirements for MySQL modules.

ci_complete

* Disable firewalld test.

ci_complete

* Try PyMySQL instead.

ci_complete
2020-06-10 10:29:08 +02:00
networkers.pl
ab26dc8fa1 cisco_spark -> cisco_webex rename and message option fix (#457)
* This is a modified copy of the cisco_spark.py file. The name change is associated with the change of the product name from Cisco Spark to Cisco Webex Teams. In addition, the current version (cisco_spark) does not work due to a name collision with MESSAGE. I had to modify the name from "message" to "webexmsg" in many places in cisco_webex. It works fine in this version.

    The original author has been preserved and copied from cisco_spark to cisco_webex.
    @drew-russell

    The current version of cisco_spark module does not work due to a name collision with MESSAGE. I had to modify the name from "message" to "webexmsg" in many places in cisco_webex.py file. It works fine in this version.

    The name change is associated with the change of the product name from Cisco Spark to Cisco Webex Teams.

* cisco_spark rm

* suggested change

* aliases added to in def main funcitons

* sanity check corrections

* addess aliases type to msg_type

* felixfontein requested changes on this pull request.

* Return value change from msg to message.

* plugins/modules/notification/cisco_webex.py validate-modules:invalid-argument-name
added to tests/sanity/ignore-2.10.txt
2020-06-09 09:38:06 +03:00
Petr Klejch
423a7f122a Add 'init' option for docker_swarm_service. (#476)
* Add 'init' option for docker_swarm_service.

* Add changelog fragment.

* CR fixes.
2020-06-09 08:23:32 +02:00
Andrew Klychkov
8d6d292358 mysql_db: add restrict_config_file parameter (#468)
* mysql_db: add restrict_config_file parameter

* add CI tests

* add changelog fragment
2020-06-09 09:10:06 +03:00
Felix Fontein
42c3d3aac7 Restrict python-gitlab to versions before 2.3.0 to avoid gitlab_runner unit tests to fail on Pyton 3.6 or newer. (#483) 2020-06-09 07:48:49 +02:00
majekw
647abcb390 Fix modules/packaging/os/pkg5 authors/maintainers in BOTMETA.yml (#471) 2020-06-07 12:37:15 +01:00
Mike Hume
1a13287788 Add sops lookup plugin (#374)
* add sops lookup plugin

* fix pylint

* fix undefined encrypted_file variable

* decode sops output as text by default

* add variable to control decrypted content print in logs

* use Sops class decryption method

* lookup should return text, use appropriate ansible facility

* use ansible.module_utils._text.to_native

As required by Ansible documentation on [raising errors][raising-errors]
from plugins, use to_native to wrap errors to ensure string compatibility
between Python versions.

[raising-errors]: https://docs.ansible.com/ansible/latest/dev_guide/developing_plugins.html#id3

* use with_items instead of with_file in sops lookup documentation

[with_file][with-file], per Ansible documentation, returns the content of
the file. As sops is not able to decrypt a string by itself but requires
the file is passed as argument, passing the content breaks the lookup
plugin as reported by [here][bug-report].

[with_items][with-items] should be used instead.

[with-file]: https://docs.ansible.com/ansible/2.4/playbooks_loops.html#looping-over-files
[with-items]: https://docs.ansible.com/ansible/2.4/playbooks_loops.html#standard-loops
[bug-report]: https://github.com/ansible/ansible/pull/59639#issuecomment-540803722

* uniform sops exception handling between plugins

* Apply suggestions from code review

Co-Authored-By: Felix Fontein <felix@fontein.de>

* remove sops lookup plugin print option

Is no longer possible to print the decrypted secrets directly from this
plugin, but `debug` module can be used instead.

* add github handle to author

* add setup_sops integration target

* extract sops module

* add lookup_sops integration tests

* use sops module

* Update plugins/module_utils/sops.py

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

* Update plugins/module_utils/sops.py

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

* Update plugins/lookup/sops.py

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

* Update plugins/module_utils/sops.py

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

* Update plugins/module_utils/sops.py

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

* Update test/integration/targets/lookup_sops/tasks/ubuntu.yml

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

* Update plugins/module_utils/sops.py

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

* Update test/integration/targets/lookup_sops/files/simple.sops.yaml

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

* Adding aliases file

* Emtpy spaces

* Update plugins/lookup/sops.py

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

* Update plugins/lookup/sops.py

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

* Update plugins/lookup/sops.py

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

* Update test/integration/targets/lookup_sops/tasks/ubuntu.yml

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

* Update plugins/lookup/sops.py

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

* Update test/integration/targets/lookup_sops/tasks/ubuntu.yml

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

* Update test/integration/targets/lookup_sops/tasks/ubuntu.yml

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

* gpg -> gnupg2

* with_items -> loop

* Move error logic to module_utils.

* Make Sops.decrypt() also handle errors and decode output.

* Improve error handling.

* Improve example formatting.

* Reorganize tests.

* Add test.

* Remove version_added.

Co-authored-by: Edoardo Tenani <edoardo.tenani@protonmail.com>
Co-authored-by: Edoardo Tenani <edoardo.tenani@gmail.com>
Co-authored-by: Edoardo T <endorama@users.noreply.github.com>
Co-authored-by: Felix Fontein <felix@fontein.de>
2020-06-06 21:36:28 +02:00
Martin Budsjö
77c29a1542 Added 'extra_install_args' module option to allow extra upgrade/install specific zypper arguments (#382)
* Added 'extra_install_args' option to allow extra upgrade/install

Example zypper args for this is

* --allow-vendor-change
* --replacefiles and
* --force-resolution

* Fix comment issue..

* Change extra_install_args option to a list.

Improved doc.

* Update plugins/modules/packaging/os/zypper.py

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

* Update plugins/modules/packaging/os/zypper.py

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

* Switch from using extra_install_args to individual module options.

* Fix syntax errors and limit 'allow-vendor-change' to 'dist-upgrade'

* Removed un-needed import

* Added changelog fragment

* Added tests for zypper replacefiles and allow_vendor_change options

* Removed dist-upgrade as it changes the test environment.

And it is hard to undo.

* Added proper test of replacefiles zypper option

Buiding two rpm packages containing same file path but with different content.
Making sure we fail to install them without the replacefiles options and that we succeed
using it.

* Make sure to create directory before writing files

* Fix indentation of ignore_errors

* Correct genereated rpm file name

* Improved duplicate file assertions

* Ensure no previous netcat package still exists.

* Corrected naming of example task.

* Fix variable name typo.

* Fix proper duplicate_content access

* Make sure to clean up duplicate rpms after tests.

* Removed debug

* Removed version_added of option allow_vendor_change and replacefiles

Co-authored-by: Felix Fontein <felix@fontein.de>
2020-06-05 08:01:21 +02:00
Andrew Klychkov
a0c5580fc3 mysql_db: remove version_added for the option (#455) 2020-06-03 20:02:44 +03:00
Mohammad Yosefpor
116978abca terraform module: Added backend_config_file and multiple variables_file (#394)
* added backend_config_file, multiple variables_file

* typo

* sanity check

* 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

specify type

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

* change log, fixes

* polural form of option names

* typo

* another typo

* Update changelogs/fragments/394-terraform-add-config_file.yml

Added PR URL.

Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>

Co-authored-by: Felix Fontein <felix@fontein.de>
Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>
2020-06-03 15:23:00 +03:00
Diane Wang
13c0639d9d files: add a new module iso_create (#397)
* add a new module iso_create

* add elements in argument spec

* remove changelog for new module

* change the path of test file

* comment out pip check task in test case

* comment out install pip in test case

* move pip install task and add skip python2.6
2020-06-03 10:00:07 +03:00
Olof Johansson
1a0a185ac3 scaleway: Fix case mismatch causing key lookup failure (#445)
The common http api client class used by the scaleway modules only
enables automatic jsonification of the request body if the
"Content-Type" header is application/json. The client only included
"Content-type" in its default set of headers (notice the case
variation).

This caused a KeyError on send() if the caller relied on the default
content-type value.
2020-06-02 14:09:58 +01:00
Andrew Klychkov
c2bf9ea9fb Mysql db unsafe passwd (#428)
* mysql_db: add new parameter unsafe_login_password

* add CI tests

* add changelog fragment
2020-06-02 09:17:54 +03:00
Brian Scholer
f81e562301 redis cache - add support for TLS/encryption in transit (#410)
* Add encryption in transit support for redis cache

* Fix missed connection/uri switch

* Add changelog

* Update changelogs/fragments/410-redis_cache-add_tls_support.yaml

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

Co-authored-by: Felix Fontein <felix@fontein.de>
2020-05-30 12:26:37 +02:00
Felix Fontein
3a75f85bdd antsibull-changelog moved to its own repo. (#435) 2020-05-30 01:29:49 +02:00
cassio-santos
9de5c0c53c LVG: add new parameter pvresize (#422)
* enabling resize in pv.

* change pvresize default behavior to false

* includes changelog on pvresize

* punctuation fix

Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>

* fixes typo and changes pvresize_cmd location

* Update changelogs/fragments/442-add-new-parameter-pvresize.yaml

Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>

* Update plugins/modules/system/lvg.py

Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>

* rebase and add EXAMPLE for pvresize

* fix wrongly submited merge conflict

* Update plugins/modules/system/lvg.py

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

* adding tests

* add test for check_mode

* fix identation

* Update tests/integration/targets/lvg/tasks/test_pvresize.yml

Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>

* Update tests/integration/targets/lvg/tasks/test_pvresize.yml

Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>

* fix identation

Co-authored-by: CASSIO ALVES <cassioalves@bocombbm.com.br>
Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>
Co-authored-by: Felix Fontein <felix@fontein.de>
Co-authored-by: cassio alves <cassio@localhost.localdomain>
2020-05-29 22:16:23 +03:00
Andrew Kiselev
317532f8bd packet_device - add tags parameter (#418) 2020-05-29 16:51:07 +03:00
Abhijeet Kasurde
5cfb9b2807 Update dependency versions in galaxy.yml (#433)
Updated minimum version required for ansible.netcommon and google.cloud
in community.general collection.

This is required since ansible.posix collection CI is failing to download
non-existing versions of ansible.netcommon and google.cloud collection.

Signed-off-by: Abhijeet Kasurde <akasurde@redhat.com>
2020-05-29 11:45:56 +02:00
Felix Fontein
599fc7f17b Adjust to stricter ansible-test sanity tests. (#431) 2020-05-29 07:57:31 +02:00
lospatchos
7c6d22efba Update sesu.py: use defined prompt (#227)
* Update sesu.py: use defined prompt

* add changelog

Co-authored-by: Alexandros Zachos <alexandros.zachos@cz.ibm.com>
2020-05-28 23:09:11 +01:00
Charles C
694546d784 datadog_monitor: kwargs for _update_monitor used message vs notification_message (#389)
* kwargs for _update_monitor wasn't corrected to new notification_message param

* forgot to bump a changelog fragment

* Update changelogs/fragments/389-datadog_monitor-corrects-deprecated-message-param.yml

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

Co-authored-by: Felix Fontein <felix@fontein.de>
2020-05-28 23:04:19 +01:00
Felix Fontein
15a7248550 Prepare for action groups PR (ansible/ansible#67291). (#430) 2020-05-28 23:57:24 +02:00
Jairo Llopis
07a141fc85 Do not say you delete what you don't (#426)
I hope these docs are lying, and this fix makes them say the truth.
2020-05-28 20:51:14 +02:00
Felix Fontein
fcca0fdfc2 Re-enable xfs_quota test. (#429) 2020-05-28 20:48:55 +02:00
Felix Fontein
b5459d6316 Fix OSX hack no longer necessary (#421)
ci_complete
2020-05-27 08:14:20 +02:00
Felix Fontein
ba2d97f067 Use pypi antsibull package. (#420) 2020-05-27 01:15:14 +02:00
Felix Fontein
9e62a0abb9 ansibulled -> antsibull. (#416) 2020-05-26 23:05:05 +02:00
Felix Fontein
e65efba8b2 Rename meta/routing.yml -> meta/runtime.yml. (#415) 2020-05-26 23:03:40 +02:00
ximon18
3ff7a0baf2 Add validity check for [Driver][IPAddress] else use docker-machine ip command. (#412)
* Add validity check for [Driver][IPAddress] else use docker-machine ip command.

* Note why we fallback to the `docker-machine ip <machine name>` command.

* Add changelog fragment.

* Corrected module name in changelog fragment.

Co-authored-by: Ben Roose <ben.roose@wichita.edu>
2020-05-25 23:04:09 +02:00
Robert Osowiecki
b00ee3b807 parted: fix return value documentation (#406)
* parted: fix return value documentation (#362)

* changelog entry not necessary for documentation fixes, removed
2020-05-25 12:35:46 +02:00
Alvaro A
ece18b756b gitlab_project_variable: added support for variable_type (#181)
* gitlab_project_variable: added support for variable_type

* gitlab_project_variable: Added integration tests for variable_type file.

* Changed test case variable name, ansible was masking the output.
2020-05-25 03:18:19 -07:00
Fernando Giorgetti
1774352313 java_keystore - Added support for private key pass phrase (#276) (#276)
* This fixes (#275)
* Migrated PR from https://github.com/ansible/ansible/pull/47768
* Applied requested changes
* Fixed issue with load_file_common_arguments
* Using args list when calling run_commands
* Keytool now reads passwords from stdin
* Fixed PEP8 indentation issues
2020-05-25 11:09:18 +03:00
Jose Angel Munoz
d1798d3056 Bug/syslog json exception (#408)
* Adds fix setting options

* Adds changelog
2020-05-25 07:47:01 +02:00
Robert Osowiecki
eb941c30b4 parted: consider current partition state even in check_mode (#247)
* parted: consider current partition state even in check_mode

* Update changelogs/fragments/183-parted_check_mode.yml

Co-Authored-By: Andrew Klychkov <aaklychkov@mail.ru>

* Test check_mode considers get_device_info

* fixed pep8 E302: expected 2 blank lines

Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>
2020-05-23 10:15:20 +03:00
Jeffrey Cutter
4e7732586f Fix NetworkManager-libnm typo in nmcli.py documentation. (#403) 2020-05-22 22:14:04 +02:00
Felix Fontein
6bb6089999 Remove more remains of intersight_info. (#396) 2020-05-22 07:59:41 +02:00
Felix Fontein
7bb36d62d0 intersight_info has been moved to cisco.intersight. (#395) 2020-05-21 22:12:25 +02:00
Sam Doran
f585aa065a inventory_docker_swarm test - Remove exit code from trap (#391)
Setting the exit code in a trap overrides the exit code that caused the
trap to be called. This means if the test failed and called the trap,
the test will exit with 0 rather than the failure exit code.
2020-05-21 21:48:41 +02:00
Toshio Kuratomi
651065bc03 Fix the docs for dig and nios.
The return docs for both of these didn't follow what the docs build
would understand.  Changed them so that they are properly formatted.
2020-05-20 13:16:51 -07:00
Felix Fontein
820eea3d19 Enable dependencies. 2020-05-20 21:02:56 +02:00
Andrew Klychkov
bf5856b10c postgresql_db: add an example (#387) 2020-05-20 21:07:21 +03:00
Anatoly Pugachev
b41b46593e Use 'xargs -r' in pipe, instead of plain 'xargs' (#383) 2020-05-20 12:59:35 +02:00
René Moser
7b2ad8a80c time_filter: improve hints in error message (#368) 2020-05-20 09:22:56 +02:00
Felix Fontein
6fca49f445 Don't die when docker CLI doesn't want to work with docker daemon (#366)
* Don't die when docker CLI doesn't want to work with docker daemon.

* Allow more 'docker volume ls' failures

* More.

* Fix more failures.

* Forgot ignore_errors.

* Another one.

* More places.

* Try to install newer docker on RHEL8.

* Also restrict docker-ce-cli.
2020-05-20 06:40:04 +00:00
Toshio Kuratomi
49f56697bb Env var case (#379)
* changelog for the oc envvar fix

* Update changelogs/fragments/fix-oc-conn-plugin-envvar.yml

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

Co-authored-by: Felix Fontein <felix@fontein.de>
2020-05-20 08:22:25 +02:00
Toshio Kuratomi
1a87822704 Fix the environment variable
This was using k8S_AUTH_CONTEXT with a lowercase k.  That doesn't match
with any of the other K8s stuff so users would probably be confused why
their envvar wasn't working.
2020-05-19 22:37:17 -07:00
Felix Fontein
72fe304b8f gcp_storage_file: error gracefully when google.cloud is not there (#372)
* Error gracefully when google.cloud is not there.

* Add changelog fragment.
2020-05-19 23:06:40 +02:00
John R Barker
b52a6010b6 galaxy.yml should only have license_file 2020-05-19 20:10:05 +01:00
Felix Fontein
c5b2954c30 Clean up google modules (#351)
* Clean up google modules.

* Forgot links, and to update ignore-2.10.txt.

* Fully remove _facts modules.

* Forgot to remove ignore.txt entries.
2020-05-19 20:40:43 +02:00
Felix Fontein
397920c7a2 Forgot to update ignore.txt. (#370) 2020-05-19 19:55:38 +02:00
Felix Fontein
0399127d11 Time filter improvements (#359)
* Adjust target directory so that ansible-test knows what to run when filters change.

* Divide by multiple instead of multiplying with product of 1/factor to improve numerical robustness.

* Allow to say what a year or month is (in days).

* Add changelog fragment announcing the time filters.

* Make sure unknown keyword args result in errors.

* Fix formatting screw-up.
2020-05-19 11:18:49 +02:00
Felix Fontein
801b1edcbe Move unit test to right place. (#365) 2020-05-19 11:15:43 +02:00
Felix Fontein
edfbb40731 Moved to google.cloud in ansible-collections/google.cloud#228. (#364) 2020-05-19 11:15:11 +02:00
Felix Fontein
df5b73a21f Smoketests are not needed in collections, and none exist in this collection anyway. (#363)
Also remove scripts for aws, azure and hcloud tests that aren't needed anyway.
2020-05-19 09:14:33 +02:00
Felix Fontein
a0a534508a Un-remove wrongly removed ovirt modules and adjust deprecation to Ansible 2.14 (#353)
* Un-remove wrongly removed ovirt modules and adjust deprecation to Ansible 2.14 (regular 4 version deprecation cycle).

* Update sanity-2.10.txt

* Vendor dependencies from ovirt.ovirt as deprecated, and remove dependency on ovirt.ovirt.

* Use ovirt_facts doc_fragment, and don't add _ovirt_info doc_fragment.
2020-05-18 20:43:50 +01:00
Felix Fontein
dee1e71796 Add extra sanity tests and changelog config. (#352) 2020-05-18 19:36:35 +02:00
LucasBoisserie
aadc6cd66d Deprecated Helm module (#115)
Helm module is deprecated in favor of a new helm module from community.kubernetes.
2020-05-18 14:15:40 +05:30
René Moser
945296f314 filter: add new time convert filter (#347)
* filter: add new time convert filters

The plugin include:
- to_seconds
- to_minutes
- to_hours

* refactor and extend

* more UX improvements

* Apply suggestions from code review

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

* even more UX improvments

* fix indentation

* fix for py3

* enable aix in ci

* simplify

* add to_months, use 360d as year.

* rearrange tests

* year back to 365 days

Co-authored-by: Felix Fontein <felix@fontein.de>
2020-05-18 09:54:23 +02:00
Markus
cd5e3e2d85 add description and hookscript parameters to proxmox LXC container (#245)
* add description and hookscript parameters to proxmox LXC container

* fix pep8 E128

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

Co-Authored-By: Andrew Klychkov <aaklychkov@mail.ru>

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

Co-Authored-By: Andrew Klychkov <aaklychkov@mail.ru>

* add example for proxmox hookscript and description

* add changelogs fragment for PR #245

* set hookscript type

Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>
2020-05-18 08:17:11 +03:00
Patrick Humpal
196d3205ca Use api v4 for airbrake deploy notices (#124)
* Use api v4 for airbrake deploy notices

* fix invalid deprecated version

changes 2.14 to 2.12

* revert

* ignore it
2020-05-17 09:42:08 +02:00
Andrew Klychkov
a7c830f49d Fix examples formatting (#345) 2020-05-16 15:07:51 +02:00
Felix Fontein
31ba39cac4 Add Fedora 32 to CI; drop Fedora 30 which is soon EOL (#327)
* Add Fedora 32 to CI; drop Fedora 30 which is soon EOL.

* Docker only supports Fedora up to 31; fortunately the 31 package seems to work for 32 too.

* Also skip for Fedora 32, as it apparently has a similar problem to Fedora 31.

ci_complete
2020-05-15 18:51:49 +02:00
Felix Fontein
772bfe9936 Fix linting errors. (#343) 2020-05-15 13:35:41 +02:00
Andrew Klychkov
327832dcbb Fix Ansible documentation in part of example formatting. Part 2 (#333)
* Fix Ansible documentation in part of example formatting

* fix

* Revert osx_defaults.py
2020-05-15 13:27:06 +03:00
Andrew Klychkov
328319b926 Fix Ansible documentation in part of example formatting. Part 1 (#332)
* Fix Ansible documentation in part of example formatting

* Fix
2020-05-15 13:13:45 +03:00
Andrew Klychkov
983d937b7b Fix Ansible documentation in part of example formatting (#334) 2020-05-15 13:12:41 +03:00
Abhijeet Kasurde
58ed77e851 syslogger: new parameter 'ident' (#340)
Added new parameter ident to specify the name of the application
which is sending the message to Syslog using syslogger module.
2020-05-15 14:35:32 +05:30
Andrew Klychkov
5d226f86b6 Remove ANSIBLE_METADATA (#339)
* Remove ANSIBLE_METADATA

* remove from other modules

* remove from plugins and scripts
2020-05-14 14:03:42 +01:00
Felix Fontein
1bbc88af92 Ignore invalid deprecation version numbers. (#337) 2020-05-14 00:02:44 +02:00
Kenyon Ralph
4dad1ee6fe linode inventory plugin: fix parsing of access_token (#318)
Read config before trying to use the config.

Original issue: https://github.com/ansible/ansible/issues/66874
2020-05-13 12:37:23 +01:00
Jürgen Hötzel
43c805f7db Improve package state detection speed (#326)
Don't query for full details of a package. It is sufficient to output
the name and version. This also simplifies parsing the output.
2020-05-13 08:46:05 +02:00
Łukasz Tomaszkiewicz
91d4d9d8c6 Remove tomaszkiewicz from ansibullbot notifications (#242)
* Remove tomaszkiewicz from ansibullbot notifications

* Move ignore to correct position, remove from authors list in BOTMETA.

Co-authored-by: Felix Fontein <felix@fontein.de>
2020-05-13 08:36:14 +02:00
Felix Fontein
e528474054 Disable AIX in CI. (#329) 2020-05-12 22:54:40 +02:00
Pavlo Bashynskyi
80d41583d1 Add info command to redis module (#286)
* Add info command to redis module

* Fix sanity test

* Create a separate redis_info module

* Type of arguments in documentation was determined

* Add redis_info test

* Fix sanity test

* Add integration test

* Add integration platforms (centos7/8,fedora30/31,opensuse15+py2,ubuntu1604/1804)

* Add centos6 support

* Fix suggestions

* Add contact email
2020-05-12 20:18:24 +03:00
Joshua Conner
2e60bdcdfe BOTMETA: ignore joshuaconner for docker_container module (#321)
* BOTMETA: ignore joshuaconner for docker_container module

* Apply suggestions from code review

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

Co-authored-by: John R Barker <john@johnrbarker.com>
Co-authored-by: Felix Fontein <felix@fontein.de>
2020-05-12 15:16:31 +01:00
Andrew Klychkov
afe2946cce postgresql_set: add trust_input parameter (#302)
* postgresql_set: add trust_input parameter

* add changelog fragment

* fix CI
2020-05-12 10:03:40 +03:00
Andrew Klychkov
31085fffb7 postgresql_ping: add session_role and trust_input parameters (#312)
* postgresql_ping: add session_role and trust_input parameters

* add changelog fragment
2020-05-12 09:34:28 +03:00
Andrew Klychkov
fce150fcf7 postgresql_copy: add trust_input parameter (#313)
* postgresql_copy: add trust_input parameter

* add changelog fragment
2020-05-12 09:33:42 +03:00
Thomas O'Donnell
51b8e79203 Refactor postgresql modules (#291)
* Refactor postgresql_idx to simplify code

Have refactored the postgresql_idx module to:
* Use the class schema in the drop function rather than a passed in one
* Remove the if/else and just return the bool in the drop and create
  functions

* Refactor postgresql_ext module

Have refactored the postgresql_ext module to:
* Remove an unused exception
* Simplify logic in the create and update functions
* Use list comprehension to simplify getting the available version

* Refactor postgresql_user_obj_stat_info module

Have refactored the postgresql_user_obj_stat_info module to:
* Simplify the logic in some of the functions
* Reduce duplicate code

* Add changelog fragment
2020-05-12 09:32:06 +03:00
Felix Fontein
2319d928c4 Disable etcd3 tests. (#323) 2020-05-11 21:37:04 +02:00
Thomas O'Donnell
571837b199 Add trust_input to postgresql_user_obj_stat_info (#310)
Have added a trust_input option to the postgresql_user_obj_stat_info
module. This only checks the session_role since all other options are
passed as parameters.
2020-05-10 15:56:19 +03:00
Jon Dufresne
159e2bb734 flatpak: Build commands as lists instead of strings (#269)
Using a list ensures that all subprocess arguments are correctly
escaped. By building strings and then calling .split(), potential
arguments with a space will be incorrectly split over two arguments.
When a string is needed for presentation, join to the list to build the
string.
2020-05-10 14:46:10 +02:00
Ulf Tigerstedt
06769c4e69 Fixes for ipa_group and ipa_user to show that uidnumber/gidnumber needs to be strings not numbers (#300) 2020-05-10 14:45:35 +02:00
Sven Anders
dae5472206 Fix udm_dns_record example, fixing #315 (#316) 2020-05-10 14:40:12 +02:00
Felix Fontein
d2b6857cd1 Update tests/unit/requirements.txt for maven_artifact (#314) 2020-05-09 11:03:33 +02:00
Andrew Klychkov
acc7bc1ea6 postgresql_info: add the trust_input parameter (#308)
* postgresql_info: add the trust_input parameter

* add changelog fragment
2020-05-09 11:24:20 +03:00
Andrew Klychkov
156d90ce90 postgresql_table: add the trust_input parameter (#307)
* postgresql_table: add the trust_input parameter

* add changelog fragment
2020-05-09 11:23:33 +03:00
Jon Dufresne
f2af41d842 flatpak: Change use of Popen to module.run_command() (#274)
* flatpak: Change use of Popen to module.run_command()

* Update changelogs/fragments/274-flatpak-run-command.yaml

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

Co-authored-by: Felix Fontein <felix@fontein.de>
2020-05-09 10:03:04 +02:00
Andrew Klychkov
55c1ece888 postgresql modules: improve trust_input parameter's documentation, improve CI tests (#309)
* postgresql modules: improve trust_input parameter's documentation, improve CI tests

* fix CI
2020-05-09 09:25:12 +03:00
Felix Fontein
85cbc27427 Improve Ansible 2.9 compatibility (#306)
* Adjust ignore-2.9.txt.

* Workaround for load_file_common_arguments's path option (similar to ansible-collections/community.crypto#14).

* Add changelog.
2020-05-08 14:38:23 +01:00
Abhijeet Kasurde
5cdb646ab7 Updated listen_ports_facts documentation (#301)
Updated listen_ports_facts module documentation to reflect
- Linux only support
- Required netstat command

Fixes: ansible/ansible#68077

Signed-off-by: Abhijeet Kasurde <akasurde@redhat.com>
2020-05-07 19:31:40 +01:00
John R Barker
3552db1cac Update BOTMETA.yml 2020-05-07 19:29:52 +01:00
John R Barker
a23e531bdb BOTMETA: Add team_networking 2020-05-07 19:29:00 +01:00
John R Barker
b1308f3404 BOTMETA: Remove aruba 2020-05-07 19:26:38 +01:00
Thomas O'Donnell
f887aff159 Add trust_input option to postgresql_slot module (#298)
* Add trust_input option to postgresql_slot module

Have added a trust_input option to the postgresql_slot module. This
only checks the session_role since all other options are passed as
parameters.

* Add Changelog fragment

* Update docs following PR review
2020-05-07 18:26:15 +03:00
John R Barker
f340b39bb9 Tidyup deprecations (#195)
* Tidyup deprecations

* Collections don't use a leading `_` for deprecation, they use
routing.yml instead
* Remove left over network entries

* ignore.txt

* botmeta

* review feedback

* ignore:check_matrix

* remove duplicated keys
2020-05-07 14:22:47 +02:00
Andrew Klychkov
c47a2128ca postgresql_query: add trust_input parameter (#294)
* postgresql_query: add trust_input parameter

* add changelog fragment

* fix CI
2020-05-07 12:49:53 +03:00
Thomas O'Donnell
e4dd15a746 postgresql_sequence: add trust_input option (#295)
* Add trust_input option to postgresql_sequence

Have added the trust_input option to the postgresql_sequence module.

* Add changelog fragment

Have added a changelog fragment for these changes.
2020-05-07 09:07:49 +03:00
Matt Davis
9ff2c7685f move jsonfile cache plugin back to ansible-base (#287)
* move jsonfile cache plugin back to ansible-base

* Delete remove_jsonfile.yml

No needed as we haven't released `community.general` yet

Co-authored-by: John R Barker <john@johnrbarker.com>
2020-05-06 18:37:03 +01:00
Christopher May-Townsend
043e2e969a Update documentation for example of redis connection string (#288)
* Update documentation for example of redis connection string

* Update plugins/cache/redis.py

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

* updated example on a single line

Co-authored-by: Felix Fontein <felix@fontein.de>
2020-05-06 08:30:39 +01:00
Charles C
3599b8afdc datadog_monitor: adds missing 'log alert' type to supported types (#277)
* adds missing 'log alert' type to supported types

* added changelog fragment

* Update changelogs/fragments/277-datadog_monitor-adds-missing-log-alert-type.yml

Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>

Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>
2020-05-06 08:15:37 +03:00
Andrew Klychkov
4af49abd00 mysql_user: add invoke lambda privilege support (#285)
* mysql_user: add invoke lambda privilege support

* add changelog fragment
2020-05-05 16:40:27 +03:00
Andrew Klychkov
19cad71f25 postgresql_lang: add trust_input parameter (#272)
* postgresql_lan: add trust_input parameter

* add changelog fragment
2020-05-05 16:37:08 +03:00
Andrew Klychkov
e6b6c05bf7 postgresql_publication: add trust_input and session_role parameters (#279)
* postgresql_publication: add trust_input and session_role parameters

* add changelog fragment
2020-05-05 16:36:14 +03:00
Andrew Klychkov
30e84111f0 postgresql_subscription: add trust_input and session_role parameters (#280)
* postgresql_subscription: add trust_input and session_role parameters

* add changelog fragment
2020-05-05 16:35:34 +03:00
Andrew Klychkov
4c14956280 postgresql_idx: add trust_input parameter (#264)
* postgresql_idx: add trust_input parameter

* add changelog fragment
2020-05-05 16:33:06 +03:00
Andrew Klychkov
2bc89b56e8 java_keystore: fix doc format (#281) 2020-05-05 15:09:33 +03:00
Thomas O'Donnell
6c1c1604fb Add optional input check to postgresql_ext (#282)
* Add optional input check to postgresql_ext

Have added a new trust_input check to the postgresql_ext module that
allows for checking the input that is passed to the module.

* Add changelog fragment

* Update tests/integration/targets/postgresql_ext/tasks/postgresql_ext_initial.yml

Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>

Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>
2020-05-05 15:04:33 +03:00
Andrew Klychkov
177314321b zfs_delegate_admin: fix example (#284) 2020-05-05 16:57:41 +05:30
Lauri Tirkkonen
75107c807c zfs_delegate_admin: add diff,hold,release to list of permissions (#278)
Co-authored-by: Lauri Tirkkonen <lauri@tuxera.com>
2020-05-05 14:02:14 +03:00
Jon Dufresne
385d03a629 Document argument types for flatpak and flatpak_remote (#270) 2020-05-04 16:42:15 +02:00
Felix Fontein
a85b169a0e Fix invalid 'sample' value (not a JSON value, since dictionary has non-string key). (#262) 2020-05-02 16:36:20 +03:00
Felix Fontein
77fe9c82fb Avoid sanity excludes so that users can run ansible-test sanity --docker and it usually passes. (#260) 2020-05-01 13:45:22 +02:00
Andrew Klychkov
01eee507f2 postgresql_tablespace: add trust_input parameter (#240)
* postgresql_tablespace: add trust_input parameter

* add changelog fragment
2020-05-01 14:10:13 +03:00
Andrew Klychkov
c68f17f09b postgresql_schema: add trust_input parameter (#259)
* postgresql_schema: add trust_input parameter

* add changelog fragment
2020-05-01 14:09:23 +03:00
Felix Fontein
d6b368e63f Update CI from RHEL 8.1 to 8.2. (#257) 2020-04-30 23:22:59 +02:00
Felix Fontein
72eed6a4b6 Fix bad boolean. (#258)
Triggered by ansible/ansible#67625.
2020-04-30 22:56:46 +02:00
Lucas Basquerotto
055c18c892 cloudflare_dns: fix KeyError (#243)
Fix errors of the type KeyError: 'success' to show a more meaningful message

Fixes: #236
2020-04-29 11:58:10 +05:30
Andrew Klychkov
8a45044ea7 postgresql_owner: fix CI test formatting, return some disappeared comments to place (#246) 2020-04-29 09:07:28 +03:00
Andrew Klychkov
d386506728 proxmox: fix examples formatting (#248)
* proxmox: fix examples formatting

* fix
2020-04-28 17:22:02 +03:00
Brian Scholer
eaa484eb37 hashi_vault refresh - Add AWS login methods, bugfixes, cleanup (#23)
* hashi_vault refresh from PR in ansible/ansible/#66735

* Duplicate AWS doc fragments, remove version_added

* Restore FQCNames

* Fully qualify examples

* Add changelog for #23 hash_vault refresh

* Reduce examples below 160 chars

* Address review feedback

* Update changelogs/fragments/23-hashi-vault-lookup-refresh.yaml

Use review suggestion

Co-Authored-By: flowerysong <junk+github@flowerysong.com>

Co-authored-by: flowerysong <junk+github@flowerysong.com>
2020-04-28 11:27:37 +00:00
Andrew Klychkov
5febbca503 postgresql_owner: add trust_input parameter (#198)
* postgresql_owner: add trust_input parameter, allow to pass values containing dots to some parameters

* add changelog fragment

* fix CI

* fix CI
2020-04-28 10:42:08 +03:00
Eric Belhomme
da4e5d3592 fix broken etcd3 module integration test (#239)
* fix broken etcd3 module integration test

* rewrite etcd3 test role as role-only integration test

* etcd3 module integration test changes:
- add setup_etcd3 as dependency in meta
- skip python2.6 target as etcd3 won't install

* fix aliases
2020-04-28 08:51:10 +02:00
Andrea Scarpino
c2e37d202a parted: support fs_type (#221)
* parted: support fs_type

Closes #135

* Update plugins/modules/system/parted.py

Co-Authored-By: Andrew Klychkov <aaklychkov@mail.ru>

* Update plugins/modules/system/parted.py

Co-Authored-By: Andrew Klychkov <aaklychkov@mail.ru>

Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>
2020-04-27 18:30:48 +03:00
Felix Fontein
61ecc1fee4 Fix repo name. 2020-04-25 11:31:10 +02:00
Eric Belhomme
695eed943b add etcd3 lookup plugin (#127)
* add etcd3 lookup plugin

* retire version_added tag

Co-Authored-By: Felix Fontein <felix@fontein.de>

* typo fixes

Co-Authored-By: Felix Fontein <felix@fontein.de>

* fix YAML syntax in example

Co-Authored-By: Felix Fontein <felix@fontein.de>

* typo fixes

Co-Authored-By: Felix Fontein <felix@fontein.de>

* remove python shebang as it is useless in Ansible lookup module

Co-Authored-By: Felix Fontein <felix@fontein.de>

* Update plugins/lookup/etcd3.py typo

Co-Authored-By: Felix Fontein <felix@fontein.de>

* fixes:
- replaced LookupBase._display by ansible.utils.display.Display
- add regex to retrieve host and port from ETCDCTL_ENDPOINTS env
- add env support for user, password, timeout

* fixes:
- use short form for types
- update doc section with envs
- catch exceptions between etcd3 api calls

* etcd3 lookup pass ansible sanity checks
introduce ansible integration tests for etcd3 lookup

* extract etcd3 setup from existing etcd3 module integration test

* fix etcd3 module/lookup integration tests

* fixes:
- fix port option in docstring
- raise connecttion error
- fix display format issues
- fix ETCDCTL_ENDPOINTS regex
adds:
- basic unit tests

* fix sanity issues

* add etcd3 lookup plugin

* retire version_added tag

Co-Authored-By: Felix Fontein <felix@fontein.de>

* typo fixes

Co-Authored-By: Felix Fontein <felix@fontein.de>

* fix YAML syntax in example

Co-Authored-By: Felix Fontein <felix@fontein.de>

* typo fixes

Co-Authored-By: Felix Fontein <felix@fontein.de>

* remove python shebang as it is useless in Ansible lookup module

Co-Authored-By: Felix Fontein <felix@fontein.de>

* Update plugins/lookup/etcd3.py typo

Co-Authored-By: Felix Fontein <felix@fontein.de>

* fixes:
- replaced LookupBase._display by ansible.utils.display.Display
- add regex to retrieve host and port from ETCDCTL_ENDPOINTS env
- add env support for user, password, timeout

* fixes:
- use short form for types
- update doc section with envs
- catch exceptions between etcd3 api calls

* etcd3 lookup pass ansible sanity checks
introduce ansible integration tests for etcd3 lookup

* extract etcd3 setup from existing etcd3 module integration test

* fix etcd3 module/lookup integration tests

* fixes:
- fix port option in docstring
- raise connecttion error
- fix display format issues
- fix ETCDCTL_ENDPOINTS regex
adds:
- basic unit tests

* fix sanity issues

* changes:
- replace kwargs lookups with get_option()
- add 'entpoint' option for correct handling of ETCDCTL_ENDPOINTS env
- code simplification

* fix etcd3 lookup unit test:
replace LookupModule instanciation with lookup_loader

* fix sanity checks

* etcd3 changes:
- docstring documentation fixes/updates
- create etcd3 cnx object with a get_option() loop instead of copying 'private' class object
- set 'endpoints' option mutually exclusive with 'host' and 'port' (raises an AnsibleError exception)

* etcd3 changes:
- added ANSIBLE_METADATA,
- added default value for 'endpoints' option,
- removed defaults for options 'host' and 'port',
- fixed docstring links,
- added 'notes' and 'seealso' sections in doctring
- updated options code handling to reflect docstring's updates

* etcd3 changes:
- fix descriptions for endpoints, host, and port options
- update notes sections
- fix reference to etcd lookup plugin in seealso section
- fix return docstring
- remove useless logging
- obfuscates password in connection logging

* more pythonic lookup on dict keys

Co-Authored-By: Felix Fontein <felix@fontein.de>

* Update password obfuscation

Co-Authored-By: Felix Fontein <felix@fontein.de>

Co-authored-by: Felix Fontein <felix@fontein.de>
2020-04-25 10:58:06 +02:00
Felix Fontein
61cf2b74c4 Fix module._name comparisons to also consider FQCNs. (#230) 2020-04-24 18:55:31 +01:00
Felix Fontein
d31b9dfa99 Reenable consul test, fix issues with a hack (#231)
* Re-enable consul integration tests.

* Add hack workaround for https://github.com/ansible/ansible/issues/68701

* Fix typo.

ci_complete
2020-04-24 08:42:44 +02:00
kenchrcum
81bf52047a fix "TypeError: Object of type map is not JSON serializable" (#223)
Fix TypeError for manageiq_provider module.
2020-04-24 11:26:12 +05:30
Paul Fariello
546acdaac7 Add option to choose a specific make executable (#212)
* Add option to choose a specific make executable

* Add changelog fragment

* Fix pep8 issues

* Add ending dot to make option description

Co-Authored-By: Felix Fontein <felix@fontein.de>

Co-authored-by: Felix Fontein <felix@fontein.de>
2020-04-23 20:10:36 +01:00
Andrew Klychkov
cb535e9718 mysql_user: improve check_implicit_admin parameter's documentation (#220) 2020-04-23 15:40:32 +01:00
Andrew Klychkov
5874c89cf7 mysql_user: fix error No database selected (#225)
* mysql_user: fix error No database selected

* add changelog
2020-04-23 16:42:20 +03:00
Felix Fontein
703daa9500 Add small unit test framework for testing fetch_url() based modules (#171)
* Convert integrated simple fetch_url() checking framework from hetzner_firewall tests to proper framework which can also be used by other modules.

* Linting.

* One more.

* Use community.internal_test_tools collection.
2020-04-23 14:50:44 +02:00
John R Barker
23de3feedd cisco.intersight:1.0.4 2020-04-22 15:15:09 +01:00
John R Barker
2d764264c3 cisco.intersight:1.04
Workaround for https://github.com/CiscoDevNet/ansible-intersight/issues/9
2020-04-22 15:00:04 +01:00
Andrew Klychkov
bb459cb014 postgresql_user: add scram-sha-256 password support (#100)
* postgresql_user: add support for scram-sha-256 passwords

* postgresql_user: add support for scram-sha-256 passwords

* add changelog fragment

* fix
2020-04-22 12:45:14 +01:00
Andrew Klychkov
dee5de23d7 postgresql_db: add changelog fragment for PR #184 (#213) 2020-04-20 18:40:28 +02:00
Andrew Klychkov
3b5520ebf7 mysql_db: add use_shell parameter to prevent Broken pipe errors (#151)
* mysql_db: prevent broken pipe errors by using an intermediate shell process

* use module.run_command()

* mysql_db: add use_shell parameter

* add changelog fragment
2020-04-20 18:46:54 +03:00
Simon Baird
281549cadc jira: Fix incompatible pathname2url import (#204) (#205)
The call to pathname2url was broken in Python 2. Fix it by importing
from module_utils.six instead of importing urllib and calling it
from there.
2020-04-20 14:05:57 +03:00
Marcelo Ricardo Leitner
dab16b8783 ip_netns: fix module name in example (#207)
* ip_netns: fix module name in example

Was referenced as 'namespace' while it should have been 'ip_netns'.

Closes: #203
Signed-off-by: Marcelo Ricardo Leitner <marcelo.leitner@gmail.com>

* Update plugins/modules/net_tools/ip_netns.py

* Update plugins/modules/net_tools/ip_netns.py

Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>
2020-04-20 09:40:35 +03:00
Andrew Klychkov
5b1652e8fa postgresql_db: add trust_input parameter (#184) 2020-04-20 09:38:35 +03:00
Andrew Klychkov
764cae9f33 postgresql_privs: add trust_input parameter (#177)
* postgresql_privs: add trust_input parameter

* add changelog fragment
2020-04-20 09:01:42 +03:00
John R Barker
25684ce2d7 botmeta nios lookup (#206) 2020-04-18 10:15:46 +01:00
Felix Fontein
2eee9f78a6 Fix CI and jenkins_plugin module (#202)
* Don't import text_type and binary_type from ansible.module_utils._text, but from ansible.module_utils.six.

* Add changelog fragment.
2020-04-17 20:46:51 +02:00
Michal Middleton
0c0490298f Slack: Add bot/user token support, correct thread_ts support (#123)
* Slack: Add bot/user token support, correct thread_ts support

Add support for user/bot/application tokens (and Slack WebAPI).
Fix input type for thread_id, which needs to be string.
Return thread_ts/thread_id when user/bot tokens are used, so they can be reused later

* Slack: Add changelog fragment, fix YAML syntax

Co-authored-by: Middleton, Michal <Michal.Middleton@concur.com>
2020-04-17 12:44:55 +01:00
John R Barker
5424c47d2f changelogs, units & integration tests are community 2020-04-17 11:40:53 +01:00
John R Barker
afcf87d21f Enable bot automerge 2020-04-17 11:34:29 +01:00
eryx12o45
e3e6c6167e Added ldap_search module for searching in LDAP servers (#126)
* fix CI

* Added ldap_search module for searching in LDAP servers

* Fixes from pipeline

* Fixed second script as well

* fix DOCUMENTATION block

* fix DOCUMENTATION block

* fix DOCUMENTATION block

* fix examples and remove changelog fragment

* Added integration tests for ldap_search

* fixes

Co-authored-by: Sebastian Pfahl <sebastian.pfahl@dcso.de>
2020-04-17 10:53:37 +02:00
Abhijeet Kasurde
2639d4c023 maven_artifact: Convert MD5 values to lowercase before comparison (#197)
Fixes: ansible-collections/community.general#186

Signed-off-by: Abhijeet Kasurde <akasurde@redhat.com>
2020-04-17 11:54:34 +05:30
Felix Fontein
406d3250c4 Fix changelog fragment. (#194) 2020-04-16 22:07:59 +02:00
Sven Meeus
22787e03d4 Fixes for comments from PR #188 (#191) 2020-04-16 15:48:33 +03:00
Jacob
15e961c2ef redfish_config: fix support for boolean BIOS attributes (#189)
Currently the redfish_config module will convert boolean bios_attribute_value
settings to strings (type str). This will cause BMCs expecting booleans to
error out.

This PR will change the default type of bios_attribute_value to 'raw' in order
to support strings and booleans.

Fixes #68251
2020-04-16 09:56:24 +03:00
Sven Meeus
d54581dddc gitlab_user: add support to block / unblock user (#188) 2020-04-16 11:50:39 +05:30
Andrew Klychkov
3c24d1c03c postgresql_user: add session_role parameter to check (#179) 2020-04-15 08:16:16 +03:00
Jesse Pretorius
f0391bd58a Remove remaining libvirt content (#180)
This content has been moved to:
https://github.com/ansible-collections/libvirt

ref:
https://github.com/ansible/ansible/issues/67344
https://github.com/ansible-collections/overview/issues/8
2020-04-14 17:46:51 +02:00
Andrew Klychkov
4ad6ff50cd postgresql_membership: add trust_input parameter (#158)
* postgresql_membership: add trust_input parameter

* add changelog fragment

* add session_role to check
2020-04-14 16:45:36 +03:00
Andrew Klychkov
2250e47de7 postgresql_membership: remove unused import of exec_sql function (#178)
* postgresql_membership: remove unused import of exec_sql function

* add changelog fragment
2020-04-14 11:15:53 +03:00
Felix Fontein
fd64cde84a Remove rabbitmq-related changelog fragments. (#174) 2020-04-14 07:27:13 +01:00
René Moser
ec52007c8d cloudstack migrated to dedicated collection ngine_io.cloudstack (#173)
* cloudstack migrated to dedicated collection ngine_io.cloudstack

* remove leftovers

* remove more leftovers
2020-04-14 07:33:10 +02:00
René Moser
6ccf3682ac vultr migrated to dedicated collection ngine_io.vultr (#172)
* vultr migrated to dedicated collection ngine_io.vultr

* remove leftover dead symlink
2020-04-13 20:35:34 +02:00
Sylvain Monné
b0b376fce2 Fix warning message in dense callback plugin (#83)
* fix dense callback plugin class name
* add changelogs
2020-04-13 19:01:57 +05:30
Abhijeet Kasurde
dccd998be0 Moved OpenStack inventory script to OpenStack collection (#160)
Moved Openstack inventory script to OpenStack Collection at
https://opendev.org/openstack/ansible-collections-openstack

Signed-off-by: Abhijeet Kasurde <akasurde@redhat.com>
2020-04-13 12:44:25 +02:00
Felix Fontein
b161c59a05 Remove version_added from return values and docs fragments. (#150) 2020-04-13 08:19:41 +01:00
Felix Fontein
fab6b980d2 Add changelog fragments for this collection from ansible/ansible. (#156) 2020-04-13 08:14:50 +01:00
lx
4ebb65e6f6 Add param for doc/fragments/alicloud (#108) 2020-04-13 08:23:38 +02:00
Andrew Klychkov
6d7f66539c postgresql_user: add trust_input parameter (#116)
* postgresql: add input checks for potentially dangerous substrings

* postgresql_user: add trust_input parameter

* add CI, add changelog fragment

* fix CI

* moved input patterns outside is_input_dangerous function

* Update plugins/module_utils/database.py

Co-Authored-By: Thomas O'Donnell <andytom@users.noreply.github.com>

* Update plugins/module_utils/database.py

Co-Authored-By: Thomas O'Donnell <andytom@users.noreply.github.com>

* fix

Co-authored-by: Thomas O'Donnell <andytom@users.noreply.github.com>
2020-04-12 13:16:44 +02:00
Andrew Klychkov
dd1bb708d3 mysql_user: add resource_limits parameter (#142)
* mysql_user: add resource_limits parameter
* add CI test
* added changelog fragment
* skip opensuse
* remove skip/suse
2020-04-12 09:43:56 +05:30
lyvivian0077
5fbe8a1f9d mysql_info: Add parameter for __collect method (#136)
* [Add] Add parameter for __collect method

Add parameter for `__collect` method

By default the class `MySQL_Info` get all MySQL instance information,
add  parameter for `__collect` to  get only what wants to know(information)

Feature Pull Request

lib/ansible/modules/database/mysql/mysql_info.py

* typo

* [add] add changelog

- bugfixes:
  - mysql_info - add parameter for __collect to get only what are wanted (https://github.com/ansible-collections/community.general/pull/136).
2020-04-11 12:12:09 +03:00
Abhijeet Kasurde
eb485c5f6f Move gcp_kms_filters to google.cloud collection (#140)
gcp_kms_filters is a part of google.cloud collection

Signed-off-by: Abhijeet Kasurde <akasurde@redhat.com>
2020-04-10 19:22:39 +01:00
Esa Varemo
20aa1ef55e Fix command line construction in the puppet module (#114)
* puppet: fix check-mode

Commit 69ead0ba78 in the ansible/ansible
repository introduced another if-statement in the middle of a if/elif pair,
which causes the elif to execute together with the original if
which created '--noop --no-noop' commands

* puppet: fix manifest whitespace

There was a space missing before the manifest path causing
issues like: "invalid option: --noop/test.pp"

* puppet: Add a changelog entry for 8d7c830 and 6ed7f06
2020-04-10 19:21:07 +01:00
Cameron Nemo
45b171a064 Xbps various changes (#95)
* fix(modules/xbps): do not upgrade in check mode

Ensure that while in check mode, this module does not upgrade all
packages on the system.

* chore(modules/xbps): refactor update_cache

Pull out the update_cache logic from the main function.

* feat(modules/xbps): upgrade xbps package itself

Perform an upgrade of the xbps package itself, when necessary.
Otherwise, users' playbooks will fail to install or upgrade packages
when the xbps version is out of date.
See https://github.com/void-linux/xbps/issues/229 for more information.
2020-04-10 19:15:02 +01:00
Felix Fontein
63b6b8a9d3 Update testing (#147)
* Remove superfluous requirements file.

* Update RHEL 7.6 to RHEL 7.8 in CI.

* Fix docker install.

* ci_complete
2020-04-10 16:26:24 +01:00
John R Barker
c006eb8a5f BOTMETA labels 2020-04-10 13:33:40 +01:00
Andrew Klychkov
758561070a mysql_info: added spaces to CI tests (#146)
* mysql_info: added spaces to CI tests

* added comments

* added comments
2020-04-10 11:30:39 +03:00
Rick Elrod
6dd5cb5dea Fix tests for OpenSUSE 15.1 (#139)
* [zypper] Fix tests for OpenSUSE 15.1

Signed-off-by: Rick Elrod <rick@elrod.me>

* [setup_mysql_db] Fix tests for OpenSUSE 15.1

Signed-off-by: Rick Elrod <rick@elrod.me>

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

* Re-enable zypper_repository tests.

Co-authored-by: Felix Fontein <felix@fontein.de>
2020-04-09 15:24:23 +02:00
John R Barker
1acb4d18e6 BOTMETA: team_ftd 2020-04-09 13:04:58 +01:00
John R Barker
2f6156b4f5 BOTMETA: team_aruba 2020-04-09 13:03:36 +01:00
Felix Fontein
a415ed9b1f Stop using custom branch to avoid full CI run on changelog fragments. (#141) 2020-04-09 12:21:27 +02:00
Per Abildgaard Toft
9d1880f29e Added search function to jira module and bugfixes (#22)
* Added search function to jira module

* Added jira Operations in update function

* Fixed Whitepsaces

* Fixed Author header

* Update plugins/modules/web_infrastructure/jira.py

Co-Authored-By: John R Barker <john@johnrbarker.com>

* Update plugins/modules/web_infrastructure/jira.py

Co-Authored-By: John R Barker <john@johnrbarker.com>

* Update plugins/modules/web_infrastructure/jira.py

Co-Authored-By: John R Barker <john@johnrbarker.com>

* Update plugins/modules/web_infrastructure/jira.py

Co-Authored-By: John R Barker <john@johnrbarker.com>

* Update plugins/modules/web_infrastructure/jira.py

Co-Authored-By: John R Barker <john@johnrbarker.com>

* Update plugins/modules/web_infrastructure/jira.py

Co-Authored-By: John R Barker <john@johnrbarker.com>

* Update plugins/modules/web_infrastructure/jira.py

Co-Authored-By: Andrew Klychkov <aaklychkov@mail.ru>

* Update plugins/modules/web_infrastructure/jira.py

Co-Authored-By: Andrew Klychkov <aaklychkov@mail.ru>

* Update plugins/modules/web_infrastructure/jira.py

Co-Authored-By: Andrew Klychkov <aaklychkov@mail.ru>

* Added changelog framgents and update with review comments

* Resolved https://github.com/ansible-collections/community.general/issues/109

* Added example for Transsition with comments

* Fixed Whitespaces

* Fixed whitepsaces again

* Update changelogs/fragments/22-jira.yaml

Co-Authored-By: Andrew Klychkov <aaklychkov@mail.ru>

* Update plugins/modules/web_infrastructure/jira.py

Co-Authored-By: Andrew Klychkov <aaklychkov@mail.ru>

* Added changes from Andersson007

* Update changelogs/fragments/22-jira.yaml

Co-Authored-By: Andrew Klychkov <aaklychkov@mail.ru>

* Updated Changelog framgnets as per reviews

* Update changelogs/fragments/22-jira.yaml

Co-Authored-By: Andrew Klychkov <aaklychkov@mail.ru>

* Added max results per review request, which supports limiting number of resuted searches from the Jira API.

* Removed whitespace

* Removed version_added per request

* Update plugins/modules/web_infrastructure/jira.py

Co-Authored-By: Andrew Klychkov <aaklychkov@mail.ru>

Co-authored-by: Per Abildgaard Toft <pto@netic.dk>
Co-authored-by: John R Barker <john@johnrbarker.com>
Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>
2020-04-09 10:29:26 +03:00
Felix Fontein
1625429f74 Adjust name of ovirt dependency (#132)
* Adjust name of ovirt dependency.

* Fix module imports.

* Add ovirt.ovirt dependency with version 1.0.0 (released today).
2020-04-08 11:32:36 +01:00
Felix Fontein
78b628725a Remove changelog fragments moved to community.network. (#130) 2020-04-08 08:47:21 +01:00
Felix Fontein
439492c379 Temporarily disable consul test. (#128) 2020-04-07 21:56:51 +01:00
Sloane Hertel
11ef03e9dd Remove the params module option from ldap_attr and ldap_entry (#113)
* Remove the params module option from ldap_attr and ldap_entry

Module options that circumvent Ansible's option handling were disallowed
in:
https://meetbot.fedoraproject.org/ansible-meeting/2017-09-28/ansible_dev_meeting.2017-09-28-15.00.log.html

Additionally, this particular usage can be insecure if bind_pw is set
this way as the password could end up in a logfile or displayed on
stdout.

Fixes CVE-2020-1746

* Remove checking the version of Ansible

Fix fail_json

* Apply suggestions from code review

Co-Authored-By: Felix Fontein <felix@fontein.de>

Co-authored-by: Toshio Kuratomi <a.badger@gmail.com>
Co-authored-by: Felix Fontein <felix@fontein.de>
2020-04-06 18:13:04 +02:00
Abhijeet Kasurde
645fe91fa3 homebrew: Honor update_homebrew value (#112)
Added environment variable to honor update_homebrew argument specified
by user.

Fixes: ansible/ansible#56650

Signed-off-by: Abhijeet Kasurde <akasurde@redhat.com>
2020-04-05 09:23:56 +01:00
Abhijeet Kasurde
e33893869a Add missing libvirt_lxc connection plugin (#111)
Signed-off-by: Abhijeet Kasurde <akasurde@redhat.com>
2020-04-03 14:39:04 +01:00
vtdat
7cec9cc972 improve docs in keep_volumes (#105) 2020-04-03 07:52:13 +02:00
Matt Martz
d9420f88bc Migrate apt_repo to community.general (#102)
* Migrate apt_repo to community.general

* nuke version_added

Co-Authored-By: Felix Fontein <felix@fontein.de>

Co-authored-by: Felix Fontein <felix@fontein.de>
2020-04-02 17:50:13 +02:00
Felix Fontein
3b1bca1f71 Network removal cleanup (#92)
* Reduce requirements.

* Remove unit test group 2.

* Reduce to four sanity groups.

* Fix paths.
2020-04-02 10:56:38 +01:00
Felix Fontein
76b26de108 Fix ignore.txt (#97) 2020-04-02 09:24:30 +02:00
Felix Fontein
e2af49efa4 Temporarily disable zypper_repository tests. (#96) 2020-04-02 09:12:41 +02:00
Felix Fontein
422014860b Add validate-module ignores until ansible/ansible#67684 is merged and metadata updated. (#94) 2020-04-02 08:54:06 +02:00
John R Barker
c313c825f4 [wip] Remove network content (#84)
* rebase

* remove broken symlinks

* more deletes

* restore cs_* integration tests

* More deletes - from Felix

* cs_common

* Remove some more ignores
2020-04-01 21:34:05 +02:00
Florian Apolloner
8d203225d3 Fixed mysql_user idempotency for long privilege lists. (Fixes ansible/#68044) (#58) 2020-04-01 17:31:53 +02:00
Abhijeet Kasurde
d921968504 homebrew: Add info about changed packages (#31)
homebrew now returns details about changed and unchanged packages
after performing the operations.

Fixes: ansible/ansible#59376

Signed-off-by: Abhijeet Kasurde <akasurde@redhat.com>
2020-04-01 17:32:25 +05:30
Abhijeet Kasurde
de0409e793 ipa: Remove redundant encoding in json.loads (#87)
Fixes: ansible/ansible#66592

Signed-off-by: Abhijeet Kasurde <akasurde@redhat.com>
2020-04-01 17:09:38 +05:30
Ruheena Ansari
07e8911fd8 Update docker connection plugin (#80)
* Update docker.py

#67832 fixes the need to run powershell modules on windows containers via docker connection. However, while running win_copy on windows containers, destination path is prefixed, which doesn't work in the case of windows. The changes in this PR take care of bypassing that while running the ansible role on windows containers.

* Update plugins/connection/docker.py

Co-Authored-By: Felix Fontein <felix@fontein.de>

* Create 80-update_docker_connection_plugin.yml

Add changelog fragment

* Update changelogs/fragments/80-update_docker_connection_plugin.yml

Co-Authored-By: Felix Fontein <felix@fontein.de>

Co-authored-by: Felix Fontein <felix@fontein.de>
2020-03-31 20:42:16 +02:00
René Moser
0205adef24 cloudstack: ci: wait for sys template available (#78)
* cloudstack: ci: wait for sys template available

* gather all templates

* smoke test VM
2020-03-31 16:08:51 +02:00
Felix Fontein
74d83d8e94 supervisorctl tests: shorten path to .sock file to make OSX happy. (#77) 2020-03-31 10:52:24 +02:00
Felix Fontein
e92f288d5b Add changelog fragments for #17, #18, #19, #24, #26, #36, #37, #39. (#74) 2020-03-31 09:50:48 +01:00
Felix Fontein
be191cce6c Move modules and module_utils unit tests to correct place (#81)
* Move modules and module_utils unit tests to correct place.

* Update ignore.txt

* Fix imports.

* Fix typos.

* Fix more typos.
2020-03-31 10:42:38 +02:00
Felix Fontein
ab3c2120fb Fix sanity test failures for _netapp.py. (#82) 2020-03-31 10:27:23 +02:00
Felix Fontein
6172e56b62 Fix netapp modules (#76)
* Replace missing netapp parts with own copy.

* Localize final fragment.

* Mark netapps docs fragment as deprecated.

* Drop dependency on netapp.ontap.

* Remove all netapp_e_* modules.

* Remove docs fragment.
2020-03-31 09:41:29 +02:00
Abhijeet Kasurde
50f8477dbc rhn_channel: Add validate_certs parameter (#79)
Provide parameter to override HTTPS verification.

Fixes: ansible/ansible#68374

Signed-off-by: Abhijeet Kasurde <akasurde@redhat.com>
2020-03-31 08:47:20 +02:00
Abhijeet Kasurde
273a678771 homebrew_cask: Follow up changes (#32)
Follow up changes recommended in code review

Signed-off-by: Abhijeet Kasurde <akasurde@redhat.com>
2020-03-30 19:15:17 +02:00
Felix Fontein
0026c9f5b2 Fix become plugins (#50)
* Fix become plugins.

* Fix become unit tests to avoid play_context.make_become_cmd.

* Remove hack.

* Remove explicit defaults. Adjust tests to be more like Ansible itself.

* Forgot two lines.

* Rewrite tests (again).

* Rename play_context -> task, add possibility to pass var_options.

* Add var_options variants.

* Properly test overwriting.
2020-03-30 19:09:45 +02:00
Felix Fontein
7d8ca8bdbb Revert "Don't run CI on Master (#73)" (#75)
This reverts commit f2418d343d.
2020-03-30 14:20:04 +02:00
Felix Fontein
6632c87bb0 Add folder for changelog fragments. (#72) 2020-03-30 12:49:40 +02:00
John R Barker
f2418d343d Don't run CI on Master (#73)
We are blocking CI too much.
2020-03-30 11:38:21 +01:00
Felix Fontein
2cb3605617 Use ansible/ansible#68550 instead of devel branch of Ansible to prevent full CI runs for docs/ and changelogs/ changes. (#71) 2020-03-30 12:24:45 +02:00
Abhijeet Kasurde
cc2b1e7b6d influxdb_user: Don't grant admin privilege in check mode (#26)
influxdb_user module don't change the admin flag for existing
user

Fixes: ansible/ansible#68139

Signed-off-by: Abhijeet Kasurde <akasurde@redhat.com>
2020-03-30 15:38:50 +05:30
Felix Fontein
027ffcae56 Fix more tests (#66)
* Fix permissions.

* Fix more FQCNs.

* Adjust more ansible_pkg_mgr usages.

* Fix plugin FQCN.

* Change port 12345 -> 12347.

* Print port usage first.

* Support both short and long name.

* Revert "Print port usage first."

This reverts commit ea1dbc60f08a2664a8b01abba7aa7610bc2a23f1.

* Revert "Change port 12345 -> 12347."

This reverts commit cbc13510ee9f855110b4134517b2a548745a1fb0.

* Fix cleanup.

* Add more FQCNs.

* Allow short name as well.

ci_complete

* Add remaining ignore.txt entries for ipaddress.

* Remove kubevirt ignore.txt entries.

* Added missing entries, and sorted.

* Remove superfluous fact gathering.

* Fix FQCNs.

* Temporarily disable supervisorctl (fails on OSX because socket path is too long)

* Add missing file.

* Fix permissions.

ci_complete
2020-03-30 11:06:48 +02:00
Felix Fontein
14731bf485 Fix even more tests (#69)
* Remove meraki unit tests.

* Reenable disabled tests.

* Re-disable xfs_quota tests - depend on ansible/ansible#68223.

* Fix FQCNs.

* More FQCNs.

* Fix typo.
2020-03-30 08:24:27 +01:00
Felix Fontein
775ab35ddd Set pkg_mgr facts manually for FreeBSD and OpenSUSE (#60)
* Set pkg_mgr facts manually for FreeBSD and OpenSUSE.

ci_complete

* Make pkg_mgr fact work everywhere.
2020-03-29 21:34:10 +02:00
Felix Fontein
8c76619799 Fix docker_swarm, docker_machine and gitlab_runners inventory plugins' verify method. (#67) 2020-03-29 20:14:22 +02:00
Felix Fontein
897c6ad0f2 Remove patch tests. (#65) 2020-03-29 13:32:09 +02:00
Felix Fontein
6ab9f071c6 Fix FQCRs. (#64) 2020-03-29 13:02:28 +02:00
Felix Fontein
3c4e98cce2 Fix retry on shippable setup. (#61) 2020-03-29 11:20:29 +02:00
Felix Fontein
66267a50b3 Forgot entry in ignore.txt for module_utils/compat/ipaddress.py (#62) 2020-03-29 11:19:16 +02:00
Jesse Pretorius
67bea39474 Remove residual rabbitmq integration test targets (#59)
In [a] These should have been removed, but they weren't.

[a] https://github.com/ansible-collections/community.general/pull/13
2020-03-28 19:34:40 +00:00
Abhijeet Kasurde
c874089d1d homebrew: Add upgrade_options in upgrade_all (#24)
Handle upgrade options in upgrade_all state in homebrew module.

Fixes: #54541

Signed-off-by: Abhijeet Kasurde <akasurde@redhat.com>
2020-03-27 10:11:27 +00:00
Egor Zaitsev
4fba692c1b routeros_facts: fix crash when ipv6 is disabled (#39)
* routeros_facts: fix crash when ipv6 is disabled

* chore: rename fixture file
2020-03-27 07:10:42 +00:00
Abhijeet Kasurde
5c372e0a7c homebrew_tap: Doc fixes (#37)
Signed-off-by: Abhijeet Kasurde <akasurde@redhat.com>
2020-03-26 20:45:21 +00:00
Felix Fontein
01ae744aa6 Add copy of ipaddress.py from ansible.netcommon (#49)
* Add copy of ipaddress.py from ansible.netcommon, use that one in non-network modules.

* Copy required functions from ansible.netcommon. Simpler than using compat.ipaddress to do this.
2020-03-26 20:44:26 +00:00
Konstantin Gribov
f799aa8356 Fix example since lookup/query is not filter (#55)
See also ansible/ansible#68478
2020-03-26 13:24:06 +00:00
Felix Fontein
76880e2403 Fix more plugin unit tests. (#51) 2020-03-25 22:37:34 +00:00
John R Barker
a5627744f1 galaxy.yml - Do not add anymore dependencies (#48)
We really don't want any more run-time dependencies adding to `community.general`, so lets document that

I will go through remove as many of these as we can.
2020-03-25 19:28:15 +00:00
Felix Fontein
7fa0c20d5d Run commands which fetch stuff over network for CI setup up to three times. (#47) 2020-03-25 16:59:11 +00:00
John R Barker
eb7d3b2273 Delete tower.sh (#45)
No longer needed
2020-03-25 13:11:52 +00:00
John R Barker
32a90e59ac Remove unused Tower tests from Shippable (#44)
community.general doesn' have any Ansible Tower tests, so remove them
2020-03-25 11:48:35 +00:00
Andrew Klychkov
1c550cd4ef postgres: make interfaces of exec_sql clearer (#43)
(cherry picked from commit fb6583a15c1f7fd8e48f4f3ef214ed4e74c3d8c6)
2020-03-25 11:44:28 +00:00
Felix Fontein
07ecfc940c Fix imports, part 2 (#42)
* Recover missing netapp.ontap module doc fragments from ansible/ansible@pre-ansible-base.

* Fix PEP8 issues.

* Remove netbox empty files, and test which shouldn't be here.

* Add forgotten file for kubevirt tests.

* Fix unit test imports.

* ansible/ansible#68415 has been fixed.

* Clean up/rearrange imports.

* Update ignore.txt, fix boilerplate.

* Netapp docs fragment: fix spacing

* Forgot to adjust kubevirt tests.
2020-03-25 11:43:51 +00:00
Felix Fontein
25394eeafb Fix imports and installing dependencies in CI, part 1 (#41)
* Fix ovirt collection name (ovirt.ovirt_collection, not ovirt.ovirt).

* Fix kubernetes module_utils references.

* Fix broken f5 imports on community.general side. The imports in that collection are still broken and will still cause failures.

* Fix Cisco ACI and MSO modules imports.

* Fix check_point.mgmt dependency, fix imports.

* Fix fortimanager imports.

* Fix cisco intersight imports.

* Fix ovirt module docs fragments.

* Fix usage of _ in unit tests to avoid sanity failures.

* Fix Cisco module docs fragments.

* Fix netapp.ontap module docs fragment name.

* Fix documentation.

* Fix some boilerplate (the ones not mentioned in ignore.txt).
2020-03-24 22:14:53 +00:00
Felix Fontein
927d91f35f Fix unit test paths in tests/utils/shippable/units.sh, removing fallaxy targets (#40)
* Fix unit test paths.

* Remove fallaxy targets.

* Remove unit test group 3.

* Avoid sanity tests to fail because they validate something in tests/utils/.
2020-03-24 22:12:55 +00:00
Felix Fontein
a91ebb4e97 [WIP] Removed windows dep and unify shippable.sh (#38)
* Removed windows dep and unify shippable.sh

* Removed uneeded -p

* Fix chmod.

* Update tests/utils/shippable/shippable.sh

Co-Authored-By: John R Barker <john@johnrbarker.com>

* Distribute sanity tests into groups.

* Remove docs-build test, which doesn't yet exist for collections.

* Remove package-data.

* Remove unsupported option.

* Fix paths.

Co-authored-by: Jordan Borean <jborean93@gmail.com>
Co-authored-by: John R Barker <john@johnrbarker.com>
2020-03-24 16:09:30 +00:00
Abhijeet Kasurde
7ead1c14fc homebrew: Doc fixes (#36)
Signed-off-by: Abhijeet Kasurde <akasurde@redhat.com>
2020-03-24 08:29:03 +00:00
John R Barker
0a710c2a03 CI should use devel (#33)
* CI should use devel

* Update shippable.sh
2020-03-24 08:27:57 +00:00
Felix Fontein
c012d0fba7 Fix unit test relative imports, and permissions for included collection requirements (#29)
* Fix Hetzner firewall unit test imports.

* Make sure tests can actually access collections.

* Fix more relative imports.

* Fix more relative imports.

* Fix more includes.

* Fix more tests.

* One more.

* Fix syntax error in sanity import tests (invalid escape sequence "\$" caused by non-raw docs block)

* Fix permissions of ansible-test parts for sanity tests.

* Revert "Fix permissions of ansible-test parts for sanity tests."

This reverts commit c2713f0a12.
2020-03-24 08:27:28 +00:00
CWollinger
676bec5484 use module required_if so if statements not needed (#28)
Co-authored-by: cwollinger <cwollinger@localhost.localdomain>
2020-03-23 14:41:49 +00:00
Andrew Klychkov
76e72c44cd postgresql_info: remove unnecessary spaces (#30) 2020-03-23 12:51:13 +00:00
Felix Fontein
7e60763ab3 Fix unit test imports. (#27) 2020-03-22 18:59:18 +00:00
John R Barker
344b48c2bf ignore-2.10 action plugins (#25) 2020-03-20 17:44:31 +00:00
John R Barker
bbc96ebb99 ignore.txt: timing.py 2020-03-19 16:39:07 +00:00
John R Barker
b7f1f080d6 Patch is in ansible.posix 2020-03-19 16:21:17 +00:00
John R Barker
d21e7bd81c Add interfaces_file unit tests (#21) 2020-03-17 17:15:18 +00:00
John R Barker
63ebaab51c Remove broken link (#20) 2020-03-17 17:11:16 +00:00
Thomas O'Donnell
c6a2559719 Fix false positive warnings for PostgreSQL User (#17)
This stops a the false positive warnings that the `no_password_changes`
doesn't have the `no_log` set.
2020-03-17 14:23:27 +00:00
Thomas O'Donnell
fdc09fa3fd Fix false positive for MySQL user module (#18)
This stops a false positive warnings that the `update_password` param
doesn't have the `no_log` set.
2020-03-17 14:23:03 +00:00
Abhijeet Kasurde
5dbdf14908 passwordstore: Honor equal sign in userpass (#19)
passwordstore lookup plugin now can handle equal sign in user input

Fixes: ansible/ansible#68265

Signed-off-by: Abhijeet Kasurde <akasurde@redhat.com>
2020-03-17 14:20:39 +00:00
Jesse Pretorius
5d47ab7096 Remove rabbitmq content (#13)
This content has been moved to:
https://github.com/ansible-collections/rabbitmq
2020-03-17 09:01:39 +00:00
John R Barker
1f06a02043 Shippable: community/general (#12)
* Shippable: community/general
2020-03-17 08:59:17 +00:00
Jesse Pretorius
fe111b8577 Remove virt/libvirt sanity ignore entries (#16)
This was left out of https://github.com/ansible-collections/community.general/pull/14
by mistake.
2020-03-16 15:30:25 +00:00
Dusan Matejka
24405289fe removing zabbix modules and their references due to migration to a dedicated collection (#11) 2020-03-16 10:55:34 +00:00
Monty Taylor
2728cfe59d Remove openstack modules (#15)
These went to the openstack collection instead.
2020-03-16 10:52:50 +00:00
Jesse Pretorius
0ffe9fa6c4 Remove libvirt/virt content (#14)
This content has been moved to:
https://github.com/ansible-collections/libvirt
2020-03-13 15:50:53 +00:00
John Barker
8532c595fd Authors 2020-03-12 15:34:17 +00:00
John R Barker
133fe8c573 bump to 0.1.1 2020-03-12 15:30:27 +00:00
John R Barker
337846a1dd Shippable (#8)
* Shippable

* build ansible.windows from source

* build ansible.windows from source
2020-03-11 18:46:18 +00:00
John R Barker
be7e0892b9 Correct non-module paths (#10) 2020-03-11 14:46:22 +00:00
Brian Coca
8f90360d49 make collection usable with current ansible vers (#9) 2020-03-11 14:10:38 +00:00
John R Barker
60853a87de Initial BOTMETA (#7)
* Initial BOTMETA
2020-03-10 14:33:59 +00:00
John R Barker
1ee35ed761 Patch should be in ansible.posix (#6) 2020-03-10 10:27:16 +00:00
Jeff Geerling
86e8790573 Fixes #4: Remove mistakenly-added kubectl connection plugin. (#5) 2020-03-10 09:59:13 +00:00
4047 changed files with 35104 additions and 466793 deletions

1395
.github/BOTMETA.yml vendored Normal file

File diff suppressed because it is too large Load Diff

61
.github/settings.yml vendored
View File

@@ -1,61 +1,6 @@
###
# https://probot.github.io/apps/settings/
#
# DO NOT MODIFY
# this is a copy of https://github.com/gundalow-collection/.github/blob/master/.github/settings.yml
# Work around till https://github.com/probot/settings/pull/179 is merged
# Settings: https://probot.github.io/apps/settings/
# Pull settings from https://github.com/ansible-collections/.github/blob/master/.github/settings.yml
repository:
# See https://developer.github.com/v3/repos/#edit for all available settings.
has_issues: true
has_wiki: false
has_pages: false
default_branch: master
allow_squash_merge: true
allow_merge_commit: false
allow_rebase_merge: true
# Labels: define labels for Issues and Pull Requests
labels:
- name: bug
color: fbca04
description: This issue/PR relates to a bug.
- name: feature
description: This issue/PR relates to a feature request.
color: 006b75
- name: migrated_from_ansible_ansible
color: 5319e7
description: This issue/PR was moved from gh/ansible/ansible
branches:
- name: master
# https://developer.github.com/v3/repos/branches/#update-branch-protection
# Branch Protection settings. Set to null to disable
protection:
# Required. Require at least one approving review on a pull request, before merging. Set to null to disable.
required_pull_request_reviews:
# The number of approvals required. (1-6)
required_approving_review_count: 1
# Dismiss approved reviews automatically when a new commit is pushed.
dismiss_stale_reviews: true
# Blocks merge until code owners have reviewed.
require_code_owner_reviews: true
# Specify which users and teams can dismiss pull request reviews. Pass an empty dismissal_restrictions object to disable. User and team dismissal_restrictions are only available for organization-owned repositories. Omit this parameter for personal repositories.
dismissal_restrictions:
users: []
teams: []
# Required. Require status checks to pass before merging. Set to null to disable
required_status_checks:
# Required. Require branches to be up to date before merging.
strict: true
# Required. The list of status checks to require in order to merge into this branch
contexts: []
# Required. Enforce all configured restrictions for administrators. Set to true to enforce required status checks for repository administrators. Set to null to disable.
enforce_admins: true
# Required. Restrict who can push to this branch. Team and user restrictions are only available for organization-owned repositories. Set to null to disable.
#restrictions:
# users: []
# teams: []
_extends: ".github"

520
CHANGELOG.rst Normal file
View File

@@ -0,0 +1,520 @@
===============================
Community General Release Notes
===============================
.. contents:: Topics
v0.3.0-experimental.meta.redirects-3
====================================
Release Summary
---------------
Maintenance release where the ``master`` branch was renamed to ``main``. Contains no other change.
v0.3.0-experimental.meta.redirects
==================================
Release Summary
---------------
This is a experimental release to test whether ``meta/runtime.yml`` redirects work as expected for flatmapping. There will be no final 0.3.0 release; the next release will be 1.0.0. This experimental pre-release will not appear in the versioning history of 0.3.0, it is solely for testing certain technical aspects of ansible-base and antsibull.
Minor Changes
-------------
- apk - added ``no_cache`` option (https://github.com/ansible-collections/community.general/pull/548).
- parted - accept negative numbers in ``part_start`` and ``part_end``
- pkgng - added ``stdout`` and ``stderr`` attributes to the result (https://github.com/ansible-collections/community.general/pull/560).
Deprecated Features
-------------------
- xbps - the ``force`` option never had any effect. It is now deprecated, and will be removed in 3.0.0 (https://github.com/ansible-collections/community.general/pull/568).
Removed Features (previously deprecated)
----------------------------------------
- logicmonitor - the module has been removed in 1.0.0 since it is unmaintained and the API used by the module has been turned off in 2017 (https://github.com/ansible-collections/community.general/issues/539, https://github.com/ansible-collections/community.general/pull/541).
- logicmonitor_facts - the module has been removed in 1.0.0 since it is unmaintained and the API used by the module has been turned off in 2017 (https://github.com/ansible-collections/community.general/issues/539, https://github.com/ansible-collections/community.general/pull/541).
Bugfixes
--------
- aix_filesystem - fix issues with ismount module_util pathing for Ansible 2.9 (https://github.com/ansible-collections/community.general/pull/567).
- consul_kv lookup - fix ``ANSIBLE_CONSUL_URL`` environment variable handling (https://github.com/ansible/ansible/issues/51960).
- consul_kv lookup - fix arguments handling (https://github.com/ansible-collections/community.general/pull/303).
- docker_compose - add a condition to prevent service startup if parameter ``stopped`` is true. Otherwise, the service will be started on each play and stopped again immediately due to the ``stopped`` parameter and breaks the idempotency of the module (https://github.com/ansible-collections/community.general/issues/532).
- docker_compose - disallow usage of the parameters ``stopped`` and ``restarted`` at the same time. This breaks also the idempotency (https://github.com/ansible-collections/community.general/issues/532).
- filesystem - resizefs of xfs filesystems is fixed. Filesystem needs to be mounted.
v0.2.0
======
Release Summary
---------------
This is the first proper release of the ``community.general`` collection on 2020-06-20.
The changelog describes all changes made to the modules and plugins included in this
collection since Ansible 2.9.0.
Major Changes
-------------
- docker_container - the ``network_mode`` option will be set by default to the name of the first network in ``networks`` if at least one network is given and ``networks_cli_compatible`` is ``true`` (will be default from community.general 2.0.0 on). Set to an explicit value to avoid deprecation warnings if you specify networks and set ``networks_cli_compatible`` to ``true``. The current default (not specifying it) is equivalent to the value ``default``.
- docker_container - the module has a new option, ``container_default_behavior``, whose default value will change from ``compatibility`` to ``no_defaults``. Set to an explicit value to avoid deprecation warnings.
- gitlab_user - no longer requires ``name``, ``email`` and ``password`` arguments when ``state=absent``.
- zabbix_action - no longer requires ``esc_period`` and ``event_source`` arguments when ``state=absent``.
Minor Changes
-------------
- A new filter ``to_time_unit`` with specializations ``to_milliseconds``, ``to_seconds``, ``to_minutes``, ``to_hours``, ``to_days``, ``to_weeks``, ``to_months`` and ``to_years`` has been added. For example ``'2d 4h' | community.general.to_hours`` evaluates to 52.
- Add a make option to the make module to be able to choose a specific make executable
- Add information about changed packages in homebrew returned facts (https://github.com/ansible/ansible/issues/59376).
- Follow up changes in homebrew_cask (https://github.com/ansible/ansible/issues/34696).
- Moved OpenStack dynamic inventory script to Openstack Collection.
- Remove redundant encoding in json.load call in ipa module_utils (https://github.com/ansible/ansible/issues/66592).
- Updated documentation about netstat command requirement for listen_ports_facts module (https://github.com/ansible/ansible/issues/68077).
- airbrake_deployment - Allow passing ``project_id`` and ``project_key`` for v4 api deploy compatibility
- ali_instance - Add params ``unique_suffix``, ``tags``, ``purge_tags``, ``ram_role_name``, ``spot_price_limit``, ``spot_strategy``, ``period_unit``, ``dry_run``, ``include_data_disks``
- ali_instance and ali_instance_info - the required package footmark needs a version higher than 1.19.0
- ali_instance_info - Add params ``name_prefix``, ``filters``
- alicloud modules - Add authentication params to all modules
- alicloud modules - now only support Python 3.6, not support Python 2.x
- cisco_spark - the module has been renamed to ``cisco_webex`` (https://github.com/ansible-collections/community.general/pull/457).
- cloudflare_dns - Report unexpected failure with more detail (https://github.com/ansible-collections/community.general/pull/511).
- database - add support to unique indexes in postgresql_idx
- digital_ocean_droplet - add support for new vpc_uuid parameter
- docker connection plugin - run Powershell modules on Windows containers.
- docker_container - add ``cpus`` option (https://github.com/ansible/ansible/issues/34320).
- docker_container - add new ``container_default_behavior`` option (PR https://github.com/ansible/ansible/pull/63419).
- docker_container - allow to configure timeout when the module waits for a container's removal.
- docker_container - only passes anonymous volumes to docker daemon as ``Volumes``. This increases compatibility with the ``docker`` CLI program. Note that if you specify ``volumes: strict`` in ``comparisons``, this could cause existing containers created with docker_container from Ansible 2.9 or earlier to restart.
- docker_container - support for port ranges was adjusted to be more compatible to the ``docker`` command line utility: a one-port container range combined with a multiple-port host range will no longer result in only the first host port be used, but the whole range being passed to Docker so that a free port in that range will be used.
- docker_container.py - update a containers restart_policy without restarting the container (https://github.com/ansible/ansible/issues/65993)
- docker_stack - Added ``stdout``, ``stderr``, and ``rc`` to return values.
- docker_swarm_service - Added support for ``init`` option.
- docker_swarm_service - Sort lists when checking for changes.
- firewalld - new feature, can now set ``target`` for a ``zone`` (https://github.com/ansible-collections/community.general/pull/526).
- flatpak and flatpak_remote - use ``module.run_command()`` instead of ``subprocess.Popen()``.
- gitlab_project_variable - implement masked and protected attributes
- gitlab_project_variable - implemented variable_type attribute.
- hashi_vault - AWS IAM auth method added. Accepts standard ansible AWS params and only loads AWS libraries when needed.
- hashi_vault - INI and additional ENV sources made available for some new and old options.
- hashi_vault - ``secret`` can now be an unnamed argument if it's specified first in the term string (see examples).
- hashi_vault - ``token`` is now an explicit option (and the default) in the choices for ``auth_method``. This matches previous behavior (``auth_method`` omitted resulted in token auth) but makes the value clearer and allows it to be explicitly specified.
- hashi_vault - new option ``return_format`` added to control how secrets are returned, including options for multiple secrets and returning raw values with metadata.
- hashi_vault - previous (undocumented) behavior was to attempt to read token from ``~/.vault-token`` if not specified. This is now controlled through ``token_path`` and ``token_file`` options (defaults will mimic previous behavior).
- hashi_vault - previously all options had to be supplied via key=value pairs in the term string; now a mix of string and parameters can be specified (see examples).
- hashi_vault - uses newer authentication calls in the HVAC library and falls back to older ones with deprecation warnings.
- homebrew - Added environment variable to honor update_homebrew setting (https://github.com/ansible/ansible/issues/56650).
- homebrew - New option ``upgrade_options`` allows to pass flags to upgrade
- homebrew - ``install_options`` is now validated to be a list of strings.
- homebrew_tap - ``name`` is now validated to be a list of strings.
- idrac_redfish_config - Support for multiple manager attributes configuration
- java_keystore - add the private_key_passphrase parameter (https://github.com/ansible-collections/community.general/pull/276).
- jira - added search function with support for Jira JQL (https://github.com/ansible-collections/community.general/pull/22).
- jira - added update function which can update Jira Selects etc (https://github.com/ansible-collections/community.general/pull/22).
- lvg - add ``pvresize`` new parameter (https://github.com/ansible/ansible/issues/29139).
- mysql_db - add ``master_data`` parameter (https://github.com/ansible/ansible/pull/66048).
- mysql_db - add ``skip_lock_tables`` option (https://github.com/ansible/ansible/pull/66688).
- mysql_db - add the ``check_implicit_admin`` parameter (https://github.com/ansible/ansible/issues/24418).
- mysql_db - add the ``config_overrides_defaults`` parameter (https://github.com/ansible/ansible/issues/26919).
- mysql_db - add the ``dump_extra_args`` parameter (https://github.com/ansible/ansible/pull/67747).
- mysql_db - add the ``executed_commands`` returned value (https://github.com/ansible/ansible/pull/65498).
- mysql_db - add the ``force`` parameter (https://github.com/ansible/ansible/pull/65547).
- mysql_db - add the ``restrict_config_file`` parameter (https://github.com/ansible/ansible/issues/34488).
- mysql_db - add the ``unsafe_login_password`` parameter (https://github.com/ansible/ansible/issues/63955).
- mysql_db - add the ``use_shell`` parameter (https://github.com/ansible/ansible/issues/20196).
- mysql_info - add ``exclude_fields`` parameter (https://github.com/ansible/ansible/issues/63319).
- mysql_info - add ``global_status`` filter parameter option and return (https://github.com/ansible/ansible/pull/63189).
- mysql_info - add ``return_empty_dbs`` parameter to list empty databases (https://github.com/ansible/ansible/issues/65727).
- mysql_replication - add ``channel`` parameter (https://github.com/ansible/ansible/issues/29311).
- mysql_replication - add ``connection_name`` parameter (https://github.com/ansible/ansible/issues/46243).
- mysql_replication - add ``fail_on_error`` parameter (https://github.com/ansible/ansible/pull/66252).
- mysql_replication - add ``master_delay`` parameter (https://github.com/ansible/ansible/issues/51326).
- mysql_replication - add ``master_use_gtid`` parameter (https://github.com/ansible/ansible/pull/62648).
- mysql_replication - add ``queries`` return value (https://github.com/ansible/ansible/pull/63036).
- mysql_replication - add support of ``resetmaster`` choice to ``mode`` parameter (https://github.com/ansible/ansible/issues/42870).
- mysql_user - ``priv`` parameter can be string or dictionary (https://github.com/ansible/ansible/issues/57533).
- mysql_user - add ``plugin_auth_string`` parameter (https://github.com/ansible/ansible/pull/44267).
- mysql_user - add ``plugin_hash_string`` parameter (https://github.com/ansible/ansible/pull/44267).
- mysql_user - add ``plugin`` parameter (https://github.com/ansible/ansible/pull/44267).
- mysql_user - add the resource_limits parameter (https://github.com/ansible-collections/community.general/issues/133).
- mysql_variables - add ``mode`` parameter (https://github.com/ansible/ansible/issues/60119).
- nagios module - a start parameter has been added, allowing the time a Nagios outage starts to be set. It defaults to the current time if not provided, preserving the previous behavior and ensuring compatibility with existing playbooks.
- nsupdate - Use provided TSIG key to not only sign update queries but also lookup queries
- open_iscsi - allow ``portal`` parameter to be a domain name by resolving the portal ip address beforehand (https://github.com/ansible-collections/community.general/pull/461).
- packet_device - add ``tags`` parameter on device creation (https://github.com/ansible-collections/community.general/pull/418)
- pacman - Improve package state detection speed: Don't query for full details of a package.
- parted - add the ``fs_type`` parameter (https://github.com/ansible-collections/community.general/issues/135).
- pear - added ``prompts`` parameter to allow users to specify expected prompt that could hang Ansible execution (https://github.com/ansible-collections/community.general/pull/530).
- postgresql_copy - add the ``trust_input`` parameter (https://github.com/ansible-collections/community.general/pull/313).
- postgresql_db - add ``dump_extra_args`` parameter (https://github.com/ansible/ansible/pull/66717).
- postgresql_db - add support for .pgc file format for dump and restores.
- postgresql_db - add the ``executed_commands`` returned value (https://github.com/ansible/ansible/pull/65542).
- postgresql_db - add the ``trust_input`` parameter (https://github.com/ansible-collections/community.general/issues/106).
- postgresql_ext - add the ``trust_input`` parameter (https://github.com/ansible-collections/community.general/pull/282).
- postgresql_ext - refactor to simplify and remove dead code (https://github.com/ansible-collections/community.general/pull/291)
- postgresql_ext - use query parameters with cursor object (https://github.com/ansible/ansible/pull/64994).
- postgresql_idx - add the ``trust_input`` parameter (https://github.com/ansible-collections/community.general/pull/264).
- postgresql_idx - refactor to simplify code (https://github.com/ansible-collections/community.general/pull/291)
- postgresql_info - add collecting info about logical replication publications in databases (https://github.com/ansible/ansible/pull/67614).
- postgresql_info - add collection info about replication subscriptions (https://github.com/ansible/ansible/pull/67464).
- postgresql_info - add the ``trust_input`` parameter (https://github.com/ansible-collections/community.general/pull/308).
- postgresql_lang - add ``owner`` parameter (https://github.com/ansible/ansible/pull/62999).
- postgresql_lang - add the ``trust_input`` parameter (https://github.com/ansible-collections/community.general/pull/272).
- postgresql_membership - add the ``trust_input`` parameter (https://github.com/ansible-collections/community.general/pull/158).
- postgresql_owner - add the ``trust_input`` parameter (https://github.com/ansible-collections/community.general/pull/198).
- postgresql_ping - add the ``session_role`` parameter (https://github.com/ansible-collections/community.general/pull/312).
- postgresql_ping - add the ``trust_input`` parameter (https://github.com/ansible-collections/community.general/pull/312).
- postgresql_privs - add support for TYPE as object types in postgresql_privs module (https://github.com/ansible/ansible/issues/62432).
- postgresql_privs - add the ``trust_input`` parameter (https://github.com/ansible-collections/community.general/pull/177).
- postgresql_publication - add the ``session_role`` parameter (https://github.com/ansible-collections/community.general/pull/279).
- postgresql_publication - add the ``trust_input`` parameter (https://github.com/ansible-collections/community.general/pull/279).
- postgresql_query - add the ``encoding`` parameter (https://github.com/ansible/ansible/issues/65367).
- postgresql_query - add the ``trust_input`` parameter (https://github.com/ansible-collections/community.general/pull/294).
- postgresql_schema - add the ``trust_input`` parameter (https://github.com/ansible-collections/community.general/pull/259).
- postgresql_sequence - add the ``trust_input`` parameter (https://github.com/ansible-collections/community.general/pull/295).
- postgresql_set - add the ``trust_input`` parameter (https://github.com/ansible-collections/community.general/pull/302).
- postgresql_slot - add the ``trust_input`` parameter (https://github.com/ansible-collections/community.general/pull/298).
- postgresql_subscription - add the ``session_role`` parameter (https://github.com/ansible-collections/community.general/pull/280).
- postgresql_subscription - add the ``trust_input`` parameter (https://github.com/ansible-collections/community.general/pull/280).
- postgresql_table - add the ``trust_input`` parameter (https://github.com/ansible-collections/community.general/pull/307).
- postgresql_tablespace - add the ``trust_input`` parameter (https://github.com/ansible-collections/community.general/pull/240).
- postgresql_user - add scram-sha-256 support (https://github.com/ansible/ansible/issues/49878).
- postgresql_user - add the ``trust_input`` parameter (https://github.com/ansible-collections/community.general/pull/116).
- postgresql_user - add the comment parameter (https://github.com/ansible/ansible/pull/66711).
- postgresql_user_obj_stat_info - add the ``trust_input`` parameter (https://github.com/ansible-collections/community.general/pull/310).
- postgresql_user_obj_stat_info - refactor to simplify code (https://github.com/ansible-collections/community.general/pull/291)
- proxmox - add the ``description`` and ``hookscript`` parameter (https://github.com/ansible-collections/community.general/pull/245).
- redfish_command - Support for virtual media insert and eject commands (https://github.com/ansible-collections/community.general/issues/493)
- redfish_config - New ``bios_attributes`` option to allow setting multiple BIOS attributes in one command.
- redfish_config, redfish_command - Add ``resource_id`` option to specify which System, Manager, or Chassis resource to modify.
- redis - add TLS support to redis cache plugin (https://github.com/ansible-collections/community.general/pull/410).
- rhn_channel - Added ``validate_certs`` option (https://github.com/ansible/ansible/issues/68374).
- rundeck modules - added new options ``client_cert``, ``client_key``, ``force``, ``force_basic_auth``, ``http_agent``, ``url_password``, ``url_username``, ``use_proxy``, ``validate_certs`` to allow changing fetch_url parameters.
- slack - Add support for user/bot/application tokens (using Slack WebAPI)
- slack - Return ``thread_id`` with thread timestamp when user/bot/application tokens are used
- syslogger - added new parameter ident to specify the name of application which is sending the message to syslog (https://github.com/ansible-collections/community.general/issues/319).
- terraform - Adds option ``backend_config_files``. This can accept a list of paths to multiple configuration files (https://github.com/ansible-collections/community.general/pull/394).
- terraform - Adds option ``variables_files`` for multiple var-files (https://github.com/ansible-collections/community.general/issues/224).
- ufw - accept ``interface_in`` and ``interface_out`` as parameters.
- zabbix_action - allow str values for ``esc_period`` options (https://github.com/ansible/ansible/pull/66841).
- zabbix_host - now supports configuring user macros and host tags on the managed host (see https://github.com/ansible/ansible/pull/66777)
- zabbix_host_info - ``host_name`` based search results now include host groups.
- zabbix_hostmacro - ``macro_name`` now accepts macros in zabbix native format as well (e.g. ``{$MACRO}``)
- zabbix_hostmacro - ``macro_value`` is no longer required when ``state=absent``
- zabbix_proxy - ``interface`` sub-options ``type`` and ``main`` are now deprecated and will be removed in community.general 3.0.0. Also, the values passed to ``interface`` are now checked for correct types and unexpected keys.
- zabbix_proxy - added option proxy_address for comma-delimited list of IP/CIDR addresses or DNS names to accept active proxy requests from
- zabbix_template - add new option omit_date to remove date from exported/dumped template (https://github.com/ansible/ansible/pull/67302)
- zabbix_template - adding new update rule templateLinkage.deleteMissing for newer zabbix versions (https://github.com/ansible/ansible/pull/66747).
- zabbix_template_info - add new option omit_date to remove date from exported/dumped template (https://github.com/ansible/ansible/pull/67302)
- zypper - Added ``allow_vendor_change`` and ``replacefiles`` zypper options (https://github.com/ansible-collections/community.general/issues/381)
Breaking Changes / Porting Guide
--------------------------------
- The environment variable for the auth context for the oc.py connection plugin has been corrected (K8S_CONTEXT). It was using an initial lowercase k by mistake. (https://github.com/ansible-collections/community.general/pull/377).
- bigpanda - the parameter ``message`` was renamed to ``deployment_message`` since ``message`` is used by Ansible Core engine internally.
- cisco_spark - the module option ``message`` was renamed to ``msg``, as ``message`` is used internally in Ansible Core engine (https://github.com/ansible/ansible/issues/39295)
- datadog - the parameter ``message`` was renamed to ``notification_message`` since ``message`` is used by Ansible Core engine internally.
- docker_container - no longer passes information on non-anonymous volumes or binds as ``Volumes`` to the Docker daemon. This increases compatibility with the ``docker`` CLI program. Note that if you specify ``volumes: strict`` in ``comparisons``, this could cause existing containers created with docker_container from Ansible 2.9 or earlier to restart.
- docker_container - support for port ranges was adjusted to be more compatible to the ``docker`` command line utility: a one-port container range combined with a multiple-port host range will no longer result in only the first host port be used, but the whole range being passed to Docker so that a free port in that range will be used.
- hashi_vault lookup - now returns the latest version when using the KV v2 secrets engine. Previously, it returned all versions of the secret which required additional steps to extract and filter the desired version.
Deprecated Features
-------------------
- airbrake_deployment - Add deprecation notice for ``token`` parameter and v2 api deploys. This feature will be removed in community.general 3.0.0.
- clc_aa_policy - The ``wait`` option had no effect and will be removed in community.general 3.0.0.
- clc_aa_policy - the ``wait`` parameter will be removed. It has always been ignored by the module.
- docker_container - the ``trust_image_content`` option is now deprecated and will be removed in community.general 3.0.0. It has never been used by the module.
- docker_container - the ``trust_image_content`` option will be removed. It has always been ignored by the module.
- docker_container - the default of ``container_default_behavior`` will change from ``compatibility`` to ``no_defaults`` in community.general 3.0.0. Set the option to an explicit value to avoid a deprecation warning.
- docker_container - the default value for ``network_mode`` will change in community.general 3.0.0, provided at least one network is specified and ``networks_cli_compatible`` is ``true``. See porting guide, module documentation or deprecation warning for more details.
- docker_stack - Return values ``out`` and ``err`` have been deprecated and will be removed in community.general 3.0.0. Use ``stdout`` and ``stderr`` instead.
- docker_stack - the return values ``err`` and ``out`` have been deprecated. Use ``stdout`` and ``stderr`` from now on instead.
- helm - Put ``helm`` module to deprecated. New implementation is available in community.kubernetes collection.
- redfish_config - Deprecate ``bios_attribute_name`` and ``bios_attribute_value`` in favor of new `bios_attributes`` option.
- redfish_config - the ``bios_attribute_name`` and ``bios_attribute_value`` options will be removed. To maintain the existing behavior use the ``bios_attributes`` option instead.
- redfish_config and redfish_command - the behavior to select the first System, Manager, or Chassis resource to modify when multiple are present will be removed. Use the new ``resource_id`` option to specify target resource to modify.
- redfish_config, redfish_command - Behavior to modify the first System, Mananger, or Chassis resource when multiple are present is deprecated. Use the new ``resource_id`` option to specify target resource to modify.
- zabbix_proxy - deprecates ``interface`` sub-options ``type`` and ``main`` when proxy type is set to passive via ``status=passive``. Make sure these suboptions are removed from your playbook as they were never supported by Zabbix in the first place.
Removed Features (previously deprecated)
----------------------------------------
- core - remove support for ``check_invalid_arguments`` in ``UTMModule``.
- pacman - Removed deprecated ``recurse`` option, use ``extra_args=--recursive`` instead
Security Fixes
--------------
- **SECURITY** - CVE-2019-14904 - solaris_zone module accepts zone name and performs actions related to that. However, there is no user input validation done while performing actions. A malicious user could provide a crafted zone name which allows executing commands into the server manipulating the module behaviour. Adding user input validation as per Solaris Zone documentation fixes this issue.
- **security issue** - Ansible: Splunk and Sumologic callback plugins leak sensitive data in logs (CVE-2019-14864)
- ldap_attr, ldap_entry - The ``params`` option has been removed in Ansible-2.10 as it circumvents Ansible's option handling. Setting ``bind_pw`` with the ``params`` option was disallowed in Ansible-2.7, 2.8, and 2.9 as it was insecure. For information about this policy, see the discussion at: https://meetbot.fedoraproject.org/ansible-meeting/2017-09-28/ansible_dev_meeting.2017-09-28-15.00.log.html This fixes CVE-2020-1746
Bugfixes
--------
- Convert MD5SUM to lowercase before comparison in maven_artifact module (https://github.com/ansible-collections/community.general/issues/186).
- Fix GitLab modules authentication by handling `python-gitlab` library version >= 1.13.0 (https://github.com/ansible/ansible/issues/64770)
- Fix SSL protocol references in the ``mqtt`` module to prevent failures on Python 2.6.
- Fix the ``xml`` module to use ``list(elem)`` instead of ``elem.getchildren()`` since it is being removed in Python 3.9
- Fix to return XML as a string even for python3 (https://github.com/ansible/ansible/pull/64032).
- Fixes the url handling in lxd_container module that url cannot be specified in lxd environment created by snap.
- Fixes the url handling in lxd_profile module that url cannot be specified in lxd environment created by snap.
- Redact GitLab Project variables which might include sensetive information such as password, api_keys and other project related details.
- Run command in absent state in atomic_image module.
- While deleting gitlab user, name, email and password is no longer required ini gitlab_user module (https://github.com/ansible/ansible/issues/61921).
- airbrake_deployment - Allow deploy notifications for Airbrake compatible v2 api (e.g. Errbit)
- apt_rpm - fix ``package`` type from ``str`` to ``list`` to fix invoking with list of packages (https://github.com/ansible-collections/community.general/issues/143).
- archive - make module compatible with older Ansible versions (https://github.com/ansible-collections/community.general/pull/306).
- become - Fix various plugins that still used play_context to get the become password instead of through the plugin - https://github.com/ansible/ansible/issues/62367
- cloudflare_dns - fix KeyError 'success' (https://github.com/ansible-collections/community.general/issues/236).
- cronvar - only run ``get_bin_path()`` once
- cronvar - use correct binary name (https://github.com/ansible/ansible/issues/63274)
- cronvar - use get_bin_path utility to locate the default crontab executable instead of the hardcoded /usr/bin/crontab. (https://github.com/ansible/ansible/pull/59765)
- cyberarkpassword - fix invalid attribute access (https://github.com/ansible/ansible/issues/66268)
- datadog_monitor - Corrects ``_update_monitor`` to use ``notification_message`` insteade of deprecated ``message`` (https://github.com/ansible-collections/community.general/pull/389).
- datadog_monitor - added missing ``log alert`` type to ``type`` choices (https://github.com/ansible-collections/community.general/issues/251).
- dense callback - fix plugin access to its configuration variables and remove a warning message (https://github.com/ansible/ansible/issues/64628).
- digital_ocean_droplet - Fix creation of DigitalOcean droplets using digital_ocean_droplet module (https://github.com/ansible/ansible/pull/61655)
- docker connection plugin - do not prefix remote path if running on Windows containers.
- docker_compose - fix issue where docker deprecation warning results in ansible erroneously reporting a failure
- docker_container - fix idempotency for IP addresses for networks. The old implementation checked the effective IP addresses assigned by the Docker daemon, and not the specified ones. This causes idempotency issues for containers which are not running, since they have no effective IP addresses assigned.
- docker_container - fix network idempotence comparison error.
- docker_container - improve error behavior when parsing port ranges fails.
- docker_container - make sure that when image is missing, check mode indicates a change (image will be pulled).
- docker_container - passing ``test: [NONE]`` now actually disables the image's healthcheck, as documented.
- docker_container - wait for removal of container if docker API returns early (https://github.com/ansible/ansible/issues/65811).
- docker_image - fix validation of build options.
- docker_image - improve file handling when loading images from disk.
- docker_image - make sure that deprecated options also emit proper deprecation warnings next to warnings which indicate how to replace them.
- docker_login - Use ``with`` statement when accessing files, to prevent that invalid JSON output is produced.
- docker_login - correct broken fix for https://github.com/ansible/ansible/pull/60381 which crashes for Python 3.
- docker_login - fix error handling when ``username`` or ``password`` is not specified when ``state`` is ``present``.
- docker_login - make sure that ``~/.docker/config.json`` is created with permissions ``0600``.
- docker_machine - fallback to ip subcommand output if IPAddress is missing (https://github.com/ansible-collections/community.general/issues/412).
- docker_network - fix idempotence comparison error.
- docker_network - fix idempotency for multiple IPAM configs of the same IP version (https://github.com/ansible/ansible/issues/65815).
- docker_network - validate IPAM config subnet CIDR notation on module setup and not during idempotence checking.
- docker_node_info - improve error handling when service inspection fails, for example because node name being ambiguous (https://github.com/ansible/ansible/issues/63353, PR https://github.com/ansible/ansible/pull/63418).
- docker_swarm_service - ``source`` must no longer be specified for ``tmpfs`` mounts.
- docker_swarm_service - fix task always reporting as changed when using ``healthcheck.start_period``.
- docker_swarm_service - passing ``test: [NONE]`` now actually disables the image's healthcheck, as documented.
- firewalld - enable the firewalld module to function offline with firewalld version 0.7.0 and newer (https://github.com/ansible/ansible/issues/63254)
- flatpak and flatpak_remote - fix command line construction to build commands as lists instead of strings.
- gcp_storage_file lookup - die gracefully when the ``google.cloud`` collection is not installed, or changed in an incompatible way.
- github_deploy_key - added support for pagination
- gitlab_user - Fix adding ssh key to new/changed user and adding group membership for new/changed user
- hashi_vault - Fix KV v2 lookup to always return latest version
- hashi_vault - Handle equal sign in key=value (https://github.com/ansible/ansible/issues/55658).
- hashi_vault - error messages are now user friendly and don't contain the secret name ( https://github.com/ansible-collections/community.general/issues/54 )
- hashi_vault - if used via ``with_hashi_vault`` and a list of n secrets to retrieve, only the first one would be retrieved and returned n times.
- hashi_vault - when a non-token authentication method like ldap or userpass failed, but a valid token was loaded anyway (via env or token file), the token was used to attempt authentication, hiding the failure of the requested auth method.
- homebrew - fix Homebrew module's some functions ignored check_mode option (https://github.com/ansible/ansible/pull/65387).
- influxdb_user - Don't grant admin privilege in check mode
- ipa modules - fix error when IPA_HOST is empty and fallback on DNS (https://github.com/ansible-collections/community.general/pull/241)
- java_keystore - make module compatible with older Ansible versions (https://github.com/ansible-collections/community.general/pull/306).
- jira - printing full error message from jira server (https://github.com/ansible-collections/community.general/pull/22).
- jira - transition issue not working (https://github.com/ansible-collections/community.general/issues/109).
- linode inventory plugin - fix parsing of access_token (https://github.com/ansible/ansible/issues/66874)
- manageiq_provider - fix serialization error when running on python3 environment.
- maven_artifact - make module compatible with older Ansible versions (https://github.com/ansible-collections/community.general/pull/306).
- mysql - dont mask ``mysql_connect`` function errors from modules (https://github.com/ansible/ansible/issues/64560).
- mysql_db - fix Broken pipe error appearance when state is import and the target file is compressed (https://github.com/ansible/ansible/issues/20196).
- mysql_db - fix bug in the ``db_import`` function introduced by https://github.com/ansible/ansible/pull/56721 (https://github.com/ansible/ansible/issues/65351).
- mysql_info - add parameter for __collect to get only what are wanted (https://github.com/ansible-collections/community.general/pull/136).
- mysql_replication - allow to pass empty values to parameters (https://github.com/ansible/ansible/issues/23976).
- mysql_user - Fix idempotence when long grant lists are used (https://github.com/ansible/ansible/issues/68044)
- mysql_user - Remove false positive ``no_log`` warning for ``update_password`` option
- mysql_user - add ``INVOKE LAMBDA`` privilege support (https://github.com/ansible-collections/community.general/issues/283).
- mysql_user - fix ``host_all`` arguments conversion string formatting error (https://github.com/ansible/ansible/issues/29644).
- mysql_user - fix support privileges with underscore (https://github.com/ansible/ansible/issues/66974).
- mysql_user - fix the error No database selected (https://github.com/ansible/ansible/issues/68070).
- mysql_user - make sure current_pass_hash is a string before using it in comparison (https://github.com/ansible/ansible/issues/60567).
- mysql_variable - fix the module doesn't support variables name with dot (https://github.com/ansible/ansible/issues/54239).
- nmcli - typecast parameters to string as required (https://github.com/ansible/ansible/issues/59095).
- nsupdate - Do not try fixing non-existing TXT values (https://github.com/ansible/ansible/issues/63364)
- nsupdate - Fix zone name lookup of internal/private zones (https://github.com/ansible/ansible/issues/62052)
- one_vm - improve file handling by using a context manager.
- ovirt - don't ignore ``instance_cpus`` parameter
- pacman - Fix pacman output parsing on localized environment. (https://github.com/ansible/ansible/issues/65237)
- pacman - fix module crash with ``IndexError: list index out of range`` (https://github.com/ansible/ansible/issues/63077)
- pamd - Bugfix for attribute error when removing the first or last line
- parted - added 'undefined' align option to support parted versions < 2.1 (https://github.com/ansible-collections/community.general/pull/405).
- parted - consider current partition state even in check mode (https://github.com/ansible-collections/community.general/issues/183).
- passwordstore lookup - Honor equal sign in userpass
- pmrun plugin - The success_command string was no longer quoted. This caused unusual use-cases like ``become_flags=su - root -c`` to fail.
- postgres - use query params with cursor.execute in module_utils.postgres.PgMembership class (https://github.com/ansible/ansible/pull/65164).
- postgres.py - add a new keyword argument ``query_params`` (https://github.com/ansible/ansible/pull/64661).
- postgres_user - Remove false positive ``no_log`` warning for ``no_password_changes`` option
- postgresql_db - Removed exception for 'LibraryError' (https://github.com/ansible/ansible/issues/65223).
- postgresql_db - allow to pass users names which contain dots (https://github.com/ansible/ansible/issues/63204).
- postgresql_idx.py - use the ``query_params`` arg of exec_sql function (https://github.com/ansible/ansible/pull/64661).
- postgresql_lang - use query params with cursor.execute (https://github.com/ansible/ansible/pull/65093).
- postgresql_membership - make the ``groups`` and ``target_roles`` parameters required (https://github.com/ansible/ansible/pull/67046).
- postgresql_membership - remove unused import of exec_sql function (https://github.com/ansible-collections/community.general/pull/178).
- postgresql_owner - use query_params with cursor object (https://github.com/ansible/ansible/pull/65310).
- postgresql_privs - fix sorting lists with None elements for python3 (https://github.com/ansible/ansible/issues/65761).
- postgresql_privs - sort results before comparing so that the values are compared and not the result of ``.sort()`` (https://github.com/ansible/ansible/pull/65125)
- postgresql_privs.py - fix reports as changed behavior of module when using ``type=default_privs`` (https://github.com/ansible/ansible/issues/64371).
- postgresql_publication - fix typo in module.warn method name (https://github.com/ansible/ansible/issues/64582).
- postgresql_publication - use query params arg with cursor object (https://github.com/ansible/ansible/issues/65404).
- postgresql_query - improve file handling by using a context manager.
- postgresql_query - the module doesn't support non-ASCII characters in SQL files with Python3 (https://github.com/ansible/ansible/issues/65367).
- postgresql_schema - use query parameters with cursor object (https://github.com/ansible/ansible/pull/65679).
- postgresql_sequence - use query parameters with cursor object (https://github.com/ansible/ansible/pull/65787).
- postgresql_set - fix converting value to uppercase (https://github.com/ansible/ansible/issues/67377).
- postgresql_set - use query parameters with cursor object (https://github.com/ansible/ansible/pull/65791).
- postgresql_slot - make the ``name`` parameter required (https://github.com/ansible/ansible/pull/67046).
- postgresql_slot - use query parameters with cursor object (https://github.com/ansible/ansible/pull/65791).
- postgresql_subscription - fix typo in module.warn method name (https://github.com/ansible/ansible/pull/64583).
- postgresql_subscription - use query parameters with cursor object (https://github.com/ansible/ansible/pull/65791).
- postgresql_table - use query parameters with cursor object (https://github.com/ansible/ansible/pull/65862).
- postgresql_tablespace - make the ``tablespace`` parameter required (https://github.com/ansible/ansible/pull/67046).
- postgresql_tablespace - use query parameters with cursor object (https://github.com/ansible/ansible/pull/65862).
- postgresql_user - allow to pass user name which contains dots (https://github.com/ansible/ansible/issues/63204).
- postgresql_user - use query parameters with cursor object (https://github.com/ansible/ansible/pull/65862).
- proxmox - fix version detection of proxmox 6 and up (Fixes https://github.com/ansible/ansible/issues/59164)
- proxysql - fixed mysql dictcursor
- pulp_repo - the ``client_cert`` and ``client_key`` options were used for both requests to the Pulp instance and for the repo to sync with, resulting in errors when they were used. Use the new options ``feed_client_cert`` and ``feed_client_key`` for client certificates that should only be used for repo synchronisation, and not for communication with the Pulp instance. (https://github.com/ansible/ansible/issues/59513)
- puppet - fix command line construction for check mode and ``manifest:``
- pure - fix incorrect user_string setting in module_utils file (https://github.com/ansible/ansible/pull/66914)
- redfish_command - fix EnableAccount if Enabled property is not present in Account resource (https://github.com/ansible/ansible/issues/59822)
- redfish_command - fix error when deleting a disabled Redfish account (https://github.com/ansible/ansible/issues/64684)
- redfish_command - fix power ResetType mapping logic (https://github.com/ansible/ansible/issues/59804)
- redfish_config - fix support for boolean bios attrs (https://github.com/ansible/ansible/pull/68251)
- redfish_facts - fix KeyError exceptions in GetLogs (https://github.com/ansible/ansible/issues/59797)
- redhat_subscription - do not set the default quantity to ``1`` when no quantity is provided (https://github.com/ansible/ansible/issues/66478)
- replace use of deprecated functions from ``ansible.module_utils.basic``.
- rshm_repository - reduce execution time when changed is False (https://github.com/ansible-collections/community.general/pull/458).
- runas - Fix the ``runas`` ``become_pass`` variable fallback from ``ansible_runas_runas`` to ``ansible_runas_pass``
- scaleway - Fix bug causing KeyError exception on JSON http requests. (https://github.com/ansible-collections/community.general/pull/444)
- scaleway: use jsonify unmarshaller only for application/json requests to avoid breaking the multiline configuration with requests in text/plain (https://github.com/ansible/ansible/issues/65036)
- scaleway_compute - fix transition handling that could cause errors when removing a node (https://github.com/ansible-collections/community.general/pull/444).
- scaleway_compute(check_image_id): use get image instead loop on first page of images results
- sesu - make use of the prompt specified in the code
- slack - Fix ``thread_id`` data type
- slackpkg - fix matching some special cases in package names (https://github.com/ansible-collections/community.general/pull/505).
- slackpkg - fix name matching in package installation (https://github.com/ansible-collections/community.general/issues/450).
- spacewalk inventory - improve file handling by using a context manager.
- syslog_json callback - fix plugin exception when running (https://github.com/ansible-collections/community.general/issues/407).
- syslogger callback plugin - remove check mode support since it did nothing anyway
- terraform - adding support for absolute paths additionally to the relative path within project_path (https://github.com/ansible/ansible/issues/58578)
- terraform - reset out and err before plan creation (https://github.com/ansible/ansible/issues/64369)
- terraform module - fixes usage for providers not supporting workspaces
- yarn - Return correct values when running yarn in check mode (https://github.com/ansible-collections/community.general/pull/153).
- yarn - handle no version when installing module by name (https://github.com/ansible/ansible/issues/55097)
- zabbix_action - arguments ``event_source`` and ``esc_period`` no longer required when ``state=absent``
- zabbix_host - fixed inventory_mode key error, which occurs with Zabbix 4.4.1 or more (https://github.com/ansible/ansible/issues/65304).
- zabbix_host - was not possible to update a host where visible_name was not set in zabbix
- zabbix_mediatype - Fixed to support zabbix 4.4 or more and python3 (https://github.com/ansible/ansible/pull/67693)
- zabbix_template - fixed error when providing empty ``link_templates`` to the module (see https://github.com/ansible/ansible/issues/66417)
- zabbix_template - fixed invalid (non-importable) output provided by exporting XML (see https://github.com/ansible/ansible/issues/66466)
- zabbix_user - Fixed an issue where module failed with zabbix 4.4 or above (see https://github.com/ansible/ansible/pull/67475)
- zfs_delegate_admin - add missing choices diff/hold/release to the permissions parameter (https://github.com/ansible-collections/community.general/pull/278)
New Plugins
-----------
Callback
~~~~~~~~
- diy - Customize the output
Lookup
~~~~~~
- etcd3 - Get key values from etcd3 server
- lmdb_kv - fetch data from LMDB
New Modules
-----------
Cloud
~~~~~
huawei
^^^^^^
- hwc_ecs_instance - Creates a resource of Ecs/Instance in Huawei Cloud
- hwc_evs_disk - Creates a resource of Evs/Disk in Huawei Cloud
- hwc_vpc_eip - Creates a resource of Vpc/EIP in Huawei Cloud
- hwc_vpc_peering_connect - Creates a resource of Vpc/PeeringConnect in Huawei Cloud
- hwc_vpc_port - Creates a resource of Vpc/Port in Huawei Cloud
- hwc_vpc_private_ip - Creates a resource of Vpc/PrivateIP in Huawei Cloud
- hwc_vpc_route - Creates a resource of Vpc/Route in Huawei Cloud
- hwc_vpc_security_group - Creates a resource of Vpc/SecurityGroup in Huawei Cloud
- hwc_vpc_security_group_rule - Creates a resource of Vpc/SecurityGroupRule in Huawei Cloud
- hwc_vpc_subnet - Creates a resource of Vpc/Subnet in Huawei Cloud
ovh
^^^
- ovh_monthly_billing - Manage OVH monthly billing
packet
^^^^^^
- packet_ip_subnet - Assign IP subnet to a bare metal server.
- packet_project - Create/delete a project in Packet host.
- packet_volume - Create/delete a volume in Packet host.
- packet_volume_attachment - Attach/detach a volume to a device in the Packet host.
Database
~~~~~~~~
misc
^^^^
- redis_info - Gather information about Redis servers
mysql
^^^^^
- mysql_query - Run MySQL queries
postgresql
^^^^^^^^^^
- postgresql_subscription - Add, update, or remove PostgreSQL subscription
- postgresql_user_obj_stat_info - Gather statistics about PostgreSQL user objects
Files
~~~~~
- iso_create - Generate ISO file with specified files or folders
Net Tools
~~~~~~~~~
- hetzner_firewall - Manage Hetzner's dedicated server firewall
- hetzner_firewall_info - Manage Hetzner's dedicated server firewall
- ipwcli_dns - Manage DNS Records for Ericsson IPWorks via ipwcli
ldap
^^^^
- ldap_attrs - Add or remove multiple LDAP attribute values
- ldap_search - Search for entries in a LDAP server
Packaging
~~~~~~~~~
os
^^
- mas - Manage Mac App Store applications with mas-cli
System
~~~~~~
- dpkg_divert - Override a debian package's version of a file
- lbu - Local Backup Utility for Alpine Linux

View File

@@ -1,4 +1,69 @@
[![GitHub Actions CI/CD build status — Collection test suite](https://github.com/ansible-collection-migration/community.general/workflows/Collection%20test%20suite/badge.svg?branch=master)](https://github.com/ansible-collection-migration/community.general/actions?query=workflow%3A%22Collection%20test%20suite%22)
# Community General Collection
Ansible Collection: community.general
=================================================
[![Run Status](https://api.shippable.com/projects/5e664a167c32620006c9fa50/badge?branch=main)](https://app.shippable.com/github/ansible-collections/community.general/dashboard) [![Codecov](https://img.shields.io/codecov/c/github/ansible-collections/community.general)](https://codecov.io/gh/ansible-collections/community.general)
This repo contains the `community.general` Ansible Collection.
The collection includes the modules and plugins supported by Ansible community.
## Installation and Usage
### Installing the Collection from Ansible Galaxy
Before using the General community collection, you need to install the collection with the `ansible-galaxy` CLI:
ansible-galaxy collection install community.general
You can also include it in a `requirements.yml` file and install it via `ansible-galaxy collection install -r requirements.yml` using the format:
```yaml
collections:
- name: community.general
```
## Testing and Development
If you want to develop new content for this collection or improve what is already here, the easiest way to work on the collection is to clone it into one of the configured [`COLLECTIONS_PATHS`](https://docs.ansible.com/ansible/latest/reference_appendices/config.html#collections-paths), and work on it there.
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)
### Testing with `ansible-test`
See [here](https://docs.ansible.com/ansible/devel/dev_guide/developing_collections.html#testing-collections).
## Release notes
See [here](https://github.com/ansible-collections/community.general/tree/main/CHANGELOG.rst).
## Publishing New Version
Basic instructions without release branches:
1. Create `changelogs/fragments/<version>.yml` with `release_summary:` section (which must be a string, not a list).
2. Run `antsibull-changelog release --collection-flatmap yes`
3. Make sure `CHANGELOG.rst` and `changelogs/changelog.yaml` are added to git, and the deleted fragments have been removed.
4. Tag the commit with `<version>`. Push changes and tag to the main repository.
## More Information
TBD
## Communication
We have a dedicated Working Group for Ansible development.
You can find other people interested on the following Freenode IRC channels -
- `#ansible` - For general use questions and support.
- `#ansible-devel` - For discussions on developer topics and code related to features or bugs.
- `#ansible-community` - For discussions on community topics and community meetings.
For more information about communities, meetings and agendas see [Community Wiki](https://github.com/ansible/community/wiki/Community).
For more information about [communication](https://docs.ansible.com/ansible/latest/community/communication.html)
## License
GNU General Public License v3.0 or later
See [LICENSE](COPYING) to see the full text.

1
changelogs/.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
/.plugin-cache.yaml

963
changelogs/changelog.yaml Normal file
View File

@@ -0,0 +1,963 @@
ancestor: null
releases:
0.2.0:
changes:
breaking_changes:
- The environment variable for the auth context for the oc.py connection plugin
has been corrected (K8S_CONTEXT). It was using an initial lowercase k by
mistake. (https://github.com/ansible-collections/community.general/pull/377).
- bigpanda - the parameter ``message`` was renamed to ``deployment_message``
since ``message`` is used by Ansible Core engine internally.
- cisco_spark - the module option ``message`` was renamed to ``msg``, as ``message``
is used internally in Ansible Core engine (https://github.com/ansible/ansible/issues/39295)
- datadog - the parameter ``message`` was renamed to ``notification_message``
since ``message`` is used by Ansible Core engine internally.
- 'docker_container - no longer passes information on non-anonymous volumes
or binds as ``Volumes`` to the Docker daemon. This increases compatibility
with the ``docker`` CLI program. Note that if you specify ``volumes: strict``
in ``comparisons``, this could cause existing containers created with docker_container
from Ansible 2.9 or earlier to restart.'
- 'docker_container - support for port ranges was adjusted to be more compatible
to the ``docker`` command line utility: a one-port container range combined
with a multiple-port host range will no longer result in only the first host
port be used, but the whole range being passed to Docker so that a free port
in that range will be used.'
- hashi_vault lookup - now returns the latest version when using the KV v2 secrets
engine. Previously, it returned all versions of the secret which required
additional steps to extract and filter the desired version.
bugfixes:
- Convert MD5SUM to lowercase before comparison in maven_artifact module (https://github.com/ansible-collections/community.general/issues/186).
- Fix GitLab modules authentication by handling `python-gitlab` library version
>= 1.13.0 (https://github.com/ansible/ansible/issues/64770)
- Fix SSL protocol references in the ``mqtt`` module to prevent failures on
Python 2.6.
- Fix the ``xml`` module to use ``list(elem)`` instead of ``elem.getchildren()``
since it is being removed in Python 3.9
- Fix to return XML as a string even for python3 (https://github.com/ansible/ansible/pull/64032).
- Fixes the url handling in lxd_container module that url cannot be specified
in lxd environment created by snap.
- Fixes the url handling in lxd_profile module that url cannot be specified
in lxd environment created by snap.
- Redact GitLab Project variables which might include sensetive information
such as password, api_keys and other project related details.
- Run command in absent state in atomic_image module.
- While deleting gitlab user, name, email and password is no longer required
ini gitlab_user module (https://github.com/ansible/ansible/issues/61921).
- airbrake_deployment - Allow deploy notifications for Airbrake compatible v2
api (e.g. Errbit)
- apt_rpm - fix ``package`` type from ``str`` to ``list`` to fix invoking with
list of packages (https://github.com/ansible-collections/community.general/issues/143).
- archive - make module compatible with older Ansible versions (https://github.com/ansible-collections/community.general/pull/306).
- become - Fix various plugins that still used play_context to get the become
password instead of through the plugin - https://github.com/ansible/ansible/issues/62367
- cloudflare_dns - fix KeyError 'success' (https://github.com/ansible-collections/community.general/issues/236).
- cronvar - only run ``get_bin_path()`` once
- cronvar - use correct binary name (https://github.com/ansible/ansible/issues/63274)
- cronvar - use get_bin_path utility to locate the default crontab executable
instead of the hardcoded /usr/bin/crontab. (https://github.com/ansible/ansible/pull/59765)
- cyberarkpassword - fix invalid attribute access (https://github.com/ansible/ansible/issues/66268)
- datadog_monitor - Corrects ``_update_monitor`` to use ``notification_message``
insteade of deprecated ``message`` (https://github.com/ansible-collections/community.general/pull/389).
- datadog_monitor - added missing ``log alert`` type to ``type`` choices (https://github.com/ansible-collections/community.general/issues/251).
- dense callback - fix plugin access to its configuration variables and remove
a warning message (https://github.com/ansible/ansible/issues/64628).
- digital_ocean_droplet - Fix creation of DigitalOcean droplets using digital_ocean_droplet
module (https://github.com/ansible/ansible/pull/61655)
- docker connection plugin - do not prefix remote path if running on Windows
containers.
- docker_compose - fix issue where docker deprecation warning results in ansible
erroneously reporting a failure
- docker_container - fix idempotency for IP addresses for networks. The old
implementation checked the effective IP addresses assigned by the Docker daemon,
and not the specified ones. This causes idempotency issues for containers
which are not running, since they have no effective IP addresses assigned.
- docker_container - fix network idempotence comparison error.
- docker_container - improve error behavior when parsing port ranges fails.
- docker_container - make sure that when image is missing, check mode indicates
a change (image will be pulled).
- 'docker_container - passing ``test: [NONE]`` now actually disables the image''s
healthcheck, as documented.'
- docker_container - wait for removal of container if docker API returns early
(https://github.com/ansible/ansible/issues/65811).
- docker_image - fix validation of build options.
- docker_image - improve file handling when loading images from disk.
- docker_image - make sure that deprecated options also emit proper deprecation
warnings next to warnings which indicate how to replace them.
- docker_login - Use ``with`` statement when accessing files, to prevent that
invalid JSON output is produced.
- docker_login - correct broken fix for https://github.com/ansible/ansible/pull/60381
which crashes for Python 3.
- docker_login - fix error handling when ``username`` or ``password`` is not
specified when ``state`` is ``present``.
- docker_login - make sure that ``~/.docker/config.json`` is created with permissions
``0600``.
- docker_machine - fallback to ip subcommand output if IPAddress is missing
(https://github.com/ansible-collections/community.general/issues/412).
- docker_network - fix idempotence comparison error.
- docker_network - fix idempotency for multiple IPAM configs of the same IP
version (https://github.com/ansible/ansible/issues/65815).
- docker_network - validate IPAM config subnet CIDR notation on module setup
and not during idempotence checking.
- docker_node_info - improve error handling when service inspection fails, for
example because node name being ambiguous (https://github.com/ansible/ansible/issues/63353,
PR https://github.com/ansible/ansible/pull/63418).
- docker_swarm_service - ``source`` must no longer be specified for ``tmpfs``
mounts.
- docker_swarm_service - fix task always reporting as changed when using ``healthcheck.start_period``.
- 'docker_swarm_service - passing ``test: [NONE]`` now actually disables the
image''s healthcheck, as documented.'
- firewalld - enable the firewalld module to function offline with firewalld
version 0.7.0 and newer (https://github.com/ansible/ansible/issues/63254)
- flatpak and flatpak_remote - fix command line construction to build commands
as lists instead of strings.
- gcp_storage_file lookup - die gracefully when the ``google.cloud`` collection
is not installed, or changed in an incompatible way.
- github_deploy_key - added support for pagination
- gitlab_user - Fix adding ssh key to new/changed user and adding group membership
for new/changed user
- hashi_vault - Fix KV v2 lookup to always return latest version
- hashi_vault - Handle equal sign in key=value (https://github.com/ansible/ansible/issues/55658).
- hashi_vault - error messages are now user friendly and don't contain the secret
name ( https://github.com/ansible-collections/community.general/issues/54
)
- hashi_vault - if used via ``with_hashi_vault`` and a list of n secrets to
retrieve, only the first one would be retrieved and returned n times.
- hashi_vault - when a non-token authentication method like ldap or userpass
failed, but a valid token was loaded anyway (via env or token file), the token
was used to attempt authentication, hiding the failure of the requested auth
method.
- homebrew - fix Homebrew module's some functions ignored check_mode option
(https://github.com/ansible/ansible/pull/65387).
- influxdb_user - Don't grant admin privilege in check mode
- ipa modules - fix error when IPA_HOST is empty and fallback on DNS (https://github.com/ansible-collections/community.general/pull/241)
- java_keystore - make module compatible with older Ansible versions (https://github.com/ansible-collections/community.general/pull/306).
- jira - printing full error message from jira server (https://github.com/ansible-collections/community.general/pull/22).
- jira - transition issue not working (https://github.com/ansible-collections/community.general/issues/109).
- linode inventory plugin - fix parsing of access_token (https://github.com/ansible/ansible/issues/66874)
- manageiq_provider - fix serialization error when running on python3 environment.
- maven_artifact - make module compatible with older Ansible versions (https://github.com/ansible-collections/community.general/pull/306).
- mysql - dont mask ``mysql_connect`` function errors from modules (https://github.com/ansible/ansible/issues/64560).
- mysql_db - fix Broken pipe error appearance when state is import and the target
file is compressed (https://github.com/ansible/ansible/issues/20196).
- mysql_db - fix bug in the ``db_import`` function introduced by https://github.com/ansible/ansible/pull/56721
(https://github.com/ansible/ansible/issues/65351).
- mysql_info - add parameter for __collect to get only what are wanted (https://github.com/ansible-collections/community.general/pull/136).
- mysql_replication - allow to pass empty values to parameters (https://github.com/ansible/ansible/issues/23976).
- mysql_user - Fix idempotence when long grant lists are used (https://github.com/ansible/ansible/issues/68044)
- mysql_user - Remove false positive ``no_log`` warning for ``update_password``
option
- mysql_user - add ``INVOKE LAMBDA`` privilege support (https://github.com/ansible-collections/community.general/issues/283).
- mysql_user - fix ``host_all`` arguments conversion string formatting error
(https://github.com/ansible/ansible/issues/29644).
- mysql_user - fix support privileges with underscore (https://github.com/ansible/ansible/issues/66974).
- mysql_user - fix the error No database selected (https://github.com/ansible/ansible/issues/68070).
- mysql_user - make sure current_pass_hash is a string before using it in comparison
(https://github.com/ansible/ansible/issues/60567).
- mysql_variable - fix the module doesn't support variables name with dot (https://github.com/ansible/ansible/issues/54239).
- nmcli - typecast parameters to string as required (https://github.com/ansible/ansible/issues/59095).
- nsupdate - Do not try fixing non-existing TXT values (https://github.com/ansible/ansible/issues/63364)
- nsupdate - Fix zone name lookup of internal/private zones (https://github.com/ansible/ansible/issues/62052)
- one_vm - improve file handling by using a context manager.
- ovirt - don't ignore ``instance_cpus`` parameter
- pacman - Fix pacman output parsing on localized environment. (https://github.com/ansible/ansible/issues/65237)
- 'pacman - fix module crash with ``IndexError: list index out of range`` (https://github.com/ansible/ansible/issues/63077)'
- pamd - Bugfix for attribute error when removing the first or last line
- parted - added 'undefined' align option to support parted versions < 2.1 (https://github.com/ansible-collections/community.general/pull/405).
- parted - consider current partition state even in check mode (https://github.com/ansible-collections/community.general/issues/183).
- passwordstore lookup - Honor equal sign in userpass
- pmrun plugin - The success_command string was no longer quoted. This caused
unusual use-cases like ``become_flags=su - root -c`` to fail.
- postgres - use query params with cursor.execute in module_utils.postgres.PgMembership
class (https://github.com/ansible/ansible/pull/65164).
- postgres.py - add a new keyword argument ``query_params`` (https://github.com/ansible/ansible/pull/64661).
- postgres_user - Remove false positive ``no_log`` warning for ``no_password_changes``
option
- postgresql_db - Removed exception for 'LibraryError' (https://github.com/ansible/ansible/issues/65223).
- postgresql_db - allow to pass users names which contain dots (https://github.com/ansible/ansible/issues/63204).
- postgresql_idx.py - use the ``query_params`` arg of exec_sql function (https://github.com/ansible/ansible/pull/64661).
- postgresql_lang - use query params with cursor.execute (https://github.com/ansible/ansible/pull/65093).
- postgresql_membership - make the ``groups`` and ``target_roles`` parameters
required (https://github.com/ansible/ansible/pull/67046).
- postgresql_membership - remove unused import of exec_sql function (https://github.com/ansible-collections/community.general/pull/178).
- postgresql_owner - use query_params with cursor object (https://github.com/ansible/ansible/pull/65310).
- postgresql_privs - fix sorting lists with None elements for python3 (https://github.com/ansible/ansible/issues/65761).
- postgresql_privs - sort results before comparing so that the values are compared
and not the result of ``.sort()`` (https://github.com/ansible/ansible/pull/65125)
- postgresql_privs.py - fix reports as changed behavior of module when using
``type=default_privs`` (https://github.com/ansible/ansible/issues/64371).
- postgresql_publication - fix typo in module.warn method name (https://github.com/ansible/ansible/issues/64582).
- postgresql_publication - use query params arg with cursor object (https://github.com/ansible/ansible/issues/65404).
- postgresql_query - improve file handling by using a context manager.
- postgresql_query - the module doesn't support non-ASCII characters in SQL
files with Python3 (https://github.com/ansible/ansible/issues/65367).
- postgresql_schema - use query parameters with cursor object (https://github.com/ansible/ansible/pull/65679).
- postgresql_sequence - use query parameters with cursor object (https://github.com/ansible/ansible/pull/65787).
- postgresql_set - fix converting value to uppercase (https://github.com/ansible/ansible/issues/67377).
- postgresql_set - use query parameters with cursor object (https://github.com/ansible/ansible/pull/65791).
- postgresql_slot - make the ``name`` parameter required (https://github.com/ansible/ansible/pull/67046).
- postgresql_slot - use query parameters with cursor object (https://github.com/ansible/ansible/pull/65791).
- postgresql_subscription - fix typo in module.warn method name (https://github.com/ansible/ansible/pull/64583).
- postgresql_subscription - use query parameters with cursor object (https://github.com/ansible/ansible/pull/65791).
- postgresql_table - use query parameters with cursor object (https://github.com/ansible/ansible/pull/65862).
- postgresql_tablespace - make the ``tablespace`` parameter required (https://github.com/ansible/ansible/pull/67046).
- postgresql_tablespace - use query parameters with cursor object (https://github.com/ansible/ansible/pull/65862).
- postgresql_user - allow to pass user name which contains dots (https://github.com/ansible/ansible/issues/63204).
- postgresql_user - use query parameters with cursor object (https://github.com/ansible/ansible/pull/65862).
- proxmox - fix version detection of proxmox 6 and up (Fixes https://github.com/ansible/ansible/issues/59164)
- proxysql - fixed mysql dictcursor
- pulp_repo - the ``client_cert`` and ``client_key`` options were used for both
requests to the Pulp instance and for the repo to sync with, resulting in
errors when they were used. Use the new options ``feed_client_cert`` and ``feed_client_key``
for client certificates that should only be used for repo synchronisation,
and not for communication with the Pulp instance. (https://github.com/ansible/ansible/issues/59513)
- puppet - fix command line construction for check mode and ``manifest:``
- pure - fix incorrect user_string setting in module_utils file (https://github.com/ansible/ansible/pull/66914)
- redfish_command - fix EnableAccount if Enabled property is not present in
Account resource (https://github.com/ansible/ansible/issues/59822)
- redfish_command - fix error when deleting a disabled Redfish account (https://github.com/ansible/ansible/issues/64684)
- redfish_command - fix power ResetType mapping logic (https://github.com/ansible/ansible/issues/59804)
- redfish_config - fix support for boolean bios attrs (https://github.com/ansible/ansible/pull/68251)
- redfish_facts - fix KeyError exceptions in GetLogs (https://github.com/ansible/ansible/issues/59797)
- redhat_subscription - do not set the default quantity to ``1`` when no quantity
is provided (https://github.com/ansible/ansible/issues/66478)
- replace use of deprecated functions from ``ansible.module_utils.basic``.
- rshm_repository - reduce execution time when changed is False (https://github.com/ansible-collections/community.general/pull/458).
- runas - Fix the ``runas`` ``become_pass`` variable fallback from ``ansible_runas_runas``
to ``ansible_runas_pass``
- scaleway - Fix bug causing KeyError exception on JSON http requests. (https://github.com/ansible-collections/community.general/pull/444)
- 'scaleway: use jsonify unmarshaller only for application/json requests to
avoid breaking the multiline configuration with requests in text/plain (https://github.com/ansible/ansible/issues/65036)'
- scaleway_compute - fix transition handling that could cause errors when removing
a node (https://github.com/ansible-collections/community.general/pull/444).
- 'scaleway_compute(check_image_id): use get image instead loop on first page
of images results'
- sesu - make use of the prompt specified in the code
- slack - Fix ``thread_id`` data type
- slackpkg - fix matching some special cases in package names (https://github.com/ansible-collections/community.general/pull/505).
- slackpkg - fix name matching in package installation (https://github.com/ansible-collections/community.general/issues/450).
- spacewalk inventory - improve file handling by using a context manager.
- syslog_json callback - fix plugin exception when running (https://github.com/ansible-collections/community.general/issues/407).
- syslogger callback plugin - remove check mode support since it did nothing
anyway
- terraform - adding support for absolute paths additionally to the relative
path within project_path (https://github.com/ansible/ansible/issues/58578)
- terraform - reset out and err before plan creation (https://github.com/ansible/ansible/issues/64369)
- terraform module - fixes usage for providers not supporting workspaces
- yarn - Return correct values when running yarn in check mode (https://github.com/ansible-collections/community.general/pull/153).
- yarn - handle no version when installing module by name (https://github.com/ansible/ansible/issues/55097)
- zabbix_action - arguments ``event_source`` and ``esc_period`` no longer required
when ``state=absent``
- zabbix_host - fixed inventory_mode key error, which occurs with Zabbix 4.4.1
or more (https://github.com/ansible/ansible/issues/65304).
- zabbix_host - was not possible to update a host where visible_name was not
set in zabbix
- zabbix_mediatype - Fixed to support zabbix 4.4 or more and python3 (https://github.com/ansible/ansible/pull/67693)
- zabbix_template - fixed error when providing empty ``link_templates`` to the
module (see https://github.com/ansible/ansible/issues/66417)
- zabbix_template - fixed invalid (non-importable) output provided by exporting
XML (see https://github.com/ansible/ansible/issues/66466)
- zabbix_user - Fixed an issue where module failed with zabbix 4.4 or above
(see https://github.com/ansible/ansible/pull/67475)
- zfs_delegate_admin - add missing choices diff/hold/release to the permissions
parameter (https://github.com/ansible-collections/community.general/pull/278)
deprecated_features:
- airbrake_deployment - Add deprecation notice for ``token`` parameter and v2
api deploys. This feature will be removed in community.general 3.0.0.
- clc_aa_policy - The ``wait`` option had no effect and will be removed in community.general
3.0.0.
- clc_aa_policy - the ``wait`` parameter will be removed. It has always been
ignored by the module.
- docker_container - the ``trust_image_content`` option is now deprecated and
will be removed in community.general 3.0.0. It has never been used by the
module.
- docker_container - the ``trust_image_content`` option will be removed. It
has always been ignored by the module.
- docker_container - the default of ``container_default_behavior`` will change
from ``compatibility`` to ``no_defaults`` in community.general 3.0.0. Set
the option to an explicit value to avoid a deprecation warning.
- docker_container - the default value for ``network_mode`` will change in community.general
3.0.0, provided at least one network is specified and ``networks_cli_compatible``
is ``true``. See porting guide, module documentation or deprecation warning
for more details.
- docker_stack - Return values ``out`` and ``err`` have been deprecated and
will be removed in community.general 3.0.0. Use ``stdout`` and ``stderr``
instead.
- docker_stack - the return values ``err`` and ``out`` have been deprecated.
Use ``stdout`` and ``stderr`` from now on instead.
- helm - Put ``helm`` module to deprecated. New implementation is available
in community.kubernetes collection.
- redfish_config - Deprecate ``bios_attribute_name`` and ``bios_attribute_value``
in favor of new `bios_attributes`` option.
- redfish_config - the ``bios_attribute_name`` and ``bios_attribute_value``
options will be removed. To maintain the existing behavior use the ``bios_attributes``
option instead.
- redfish_config and redfish_command - the behavior to select the first System,
Manager, or Chassis resource to modify when multiple are present will be removed.
Use the new ``resource_id`` option to specify target resource to modify.
- redfish_config, redfish_command - Behavior to modify the first System, Mananger,
or Chassis resource when multiple are present is deprecated. Use the new ``resource_id``
option to specify target resource to modify.
- zabbix_proxy - deprecates ``interface`` sub-options ``type`` and ``main``
when proxy type is set to passive via ``status=passive``. Make sure these
suboptions are removed from your playbook as they were never supported by
Zabbix in the first place.
major_changes:
- docker_container - the ``network_mode`` option will be set by default to the
name of the first network in ``networks`` if at least one network is given
and ``networks_cli_compatible`` is ``true`` (will be default from community.general
2.0.0 on). Set to an explicit value to avoid deprecation warnings if you specify
networks and set ``networks_cli_compatible`` to ``true``. The current default
(not specifying it) is equivalent to the value ``default``.
- docker_container - the module has a new option, ``container_default_behavior``,
whose default value will change from ``compatibility`` to ``no_defaults``.
Set to an explicit value to avoid deprecation warnings.
- gitlab_user - no longer requires ``name``, ``email`` and ``password`` arguments
when ``state=absent``.
- zabbix_action - no longer requires ``esc_period`` and ``event_source`` arguments
when ``state=absent``.
minor_changes:
- A new filter ``to_time_unit`` with specializations ``to_milliseconds``, ``to_seconds``,
``to_minutes``, ``to_hours``, ``to_days``, ``to_weeks``, ``to_months`` and
``to_years`` has been added. For example ``'2d 4h' | community.general.to_hours``
evaluates to 52.
- Add a make option to the make module to be able to choose a specific make
executable
- Add information about changed packages in homebrew returned facts (https://github.com/ansible/ansible/issues/59376).
- Follow up changes in homebrew_cask (https://github.com/ansible/ansible/issues/34696).
- Moved OpenStack dynamic inventory script to Openstack Collection.
- Remove redundant encoding in json.load call in ipa module_utils (https://github.com/ansible/ansible/issues/66592).
- Updated documentation about netstat command requirement for listen_ports_facts
module (https://github.com/ansible/ansible/issues/68077).
- airbrake_deployment - Allow passing ``project_id`` and ``project_key`` for
v4 api deploy compatibility
- ali_instance - Add params ``unique_suffix``, ``tags``, ``purge_tags``, ``ram_role_name``,
``spot_price_limit``, ``spot_strategy``, ``period_unit``, ``dry_run``, ``include_data_disks``
- ali_instance and ali_instance_info - the required package footmark needs a
version higher than 1.19.0
- ali_instance_info - Add params ``name_prefix``, ``filters``
- alicloud modules - Add authentication params to all modules
- alicloud modules - now only support Python 3.6, not support Python 2.x
- cisco_spark - the module has been renamed to ``cisco_webex`` (https://github.com/ansible-collections/community.general/pull/457).
- cloudflare_dns - Report unexpected failure with more detail (https://github.com/ansible-collections/community.general/pull/511).
- database - add support to unique indexes in postgresql_idx
- digital_ocean_droplet - add support for new vpc_uuid parameter
- docker connection plugin - run Powershell modules on Windows containers.
- docker_container - add ``cpus`` option (https://github.com/ansible/ansible/issues/34320).
- docker_container - add new ``container_default_behavior`` option (PR https://github.com/ansible/ansible/pull/63419).
- docker_container - allow to configure timeout when the module waits for a
container's removal.
- 'docker_container - only passes anonymous volumes to docker daemon as ``Volumes``.
This increases compatibility with the ``docker`` CLI program. Note that if
you specify ``volumes: strict`` in ``comparisons``, this could cause existing
containers created with docker_container from Ansible 2.9 or earlier to restart.'
- 'docker_container - support for port ranges was adjusted to be more compatible
to the ``docker`` command line utility: a one-port container range combined
with a multiple-port host range will no longer result in only the first host
port be used, but the whole range being passed to Docker so that a free port
in that range will be used.'
- docker_container.py - update a containers restart_policy without restarting
the container (https://github.com/ansible/ansible/issues/65993)
- docker_stack - Added ``stdout``, ``stderr``, and ``rc`` to return values.
- docker_swarm_service - Added support for ``init`` option.
- docker_swarm_service - Sort lists when checking for changes.
- firewalld - new feature, can now set ``target`` for a ``zone`` (https://github.com/ansible-collections/community.general/pull/526).
- flatpak and flatpak_remote - use ``module.run_command()`` instead of ``subprocess.Popen()``.
- gitlab_project_variable - implement masked and protected attributes
- gitlab_project_variable - implemented variable_type attribute.
- hashi_vault - AWS IAM auth method added. Accepts standard ansible AWS params
and only loads AWS libraries when needed.
- hashi_vault - INI and additional ENV sources made available for some new and
old options.
- hashi_vault - ``secret`` can now be an unnamed argument if it's specified
first in the term string (see examples).
- hashi_vault - ``token`` is now an explicit option (and the default) in the
choices for ``auth_method``. This matches previous behavior (``auth_method``
omitted resulted in token auth) but makes the value clearer and allows it
to be explicitly specified.
- hashi_vault - new option ``return_format`` added to control how secrets are
returned, including options for multiple secrets and returning raw values
with metadata.
- hashi_vault - previous (undocumented) behavior was to attempt to read token
from ``~/.vault-token`` if not specified. This is now controlled through ``token_path``
and ``token_file`` options (defaults will mimic previous behavior).
- hashi_vault - previously all options had to be supplied via key=value pairs
in the term string; now a mix of string and parameters can be specified (see
examples).
- hashi_vault - uses newer authentication calls in the HVAC library and falls
back to older ones with deprecation warnings.
- homebrew - Added environment variable to honor update_homebrew setting (https://github.com/ansible/ansible/issues/56650).
- homebrew - New option ``upgrade_options`` allows to pass flags to upgrade
- homebrew - ``install_options`` is now validated to be a list of strings.
- homebrew_tap - ``name`` is now validated to be a list of strings.
- idrac_redfish_config - Support for multiple manager attributes configuration
- java_keystore - add the private_key_passphrase parameter (https://github.com/ansible-collections/community.general/pull/276).
- jira - added search function with support for Jira JQL (https://github.com/ansible-collections/community.general/pull/22).
- jira - added update function which can update Jira Selects etc (https://github.com/ansible-collections/community.general/pull/22).
- lvg - add ``pvresize`` new parameter (https://github.com/ansible/ansible/issues/29139).
- mysql_db - add ``master_data`` parameter (https://github.com/ansible/ansible/pull/66048).
- mysql_db - add ``skip_lock_tables`` option (https://github.com/ansible/ansible/pull/66688).
- mysql_db - add the ``check_implicit_admin`` parameter (https://github.com/ansible/ansible/issues/24418).
- mysql_db - add the ``config_overrides_defaults`` parameter (https://github.com/ansible/ansible/issues/26919).
- mysql_db - add the ``dump_extra_args`` parameter (https://github.com/ansible/ansible/pull/67747).
- mysql_db - add the ``executed_commands`` returned value (https://github.com/ansible/ansible/pull/65498).
- mysql_db - add the ``force`` parameter (https://github.com/ansible/ansible/pull/65547).
- mysql_db - add the ``restrict_config_file`` parameter (https://github.com/ansible/ansible/issues/34488).
- mysql_db - add the ``unsafe_login_password`` parameter (https://github.com/ansible/ansible/issues/63955).
- mysql_db - add the ``use_shell`` parameter (https://github.com/ansible/ansible/issues/20196).
- mysql_info - add ``exclude_fields`` parameter (https://github.com/ansible/ansible/issues/63319).
- mysql_info - add ``global_status`` filter parameter option and return (https://github.com/ansible/ansible/pull/63189).
- mysql_info - add ``return_empty_dbs`` parameter to list empty databases (https://github.com/ansible/ansible/issues/65727).
- mysql_replication - add ``channel`` parameter (https://github.com/ansible/ansible/issues/29311).
- mysql_replication - add ``connection_name`` parameter (https://github.com/ansible/ansible/issues/46243).
- mysql_replication - add ``fail_on_error`` parameter (https://github.com/ansible/ansible/pull/66252).
- mysql_replication - add ``master_delay`` parameter (https://github.com/ansible/ansible/issues/51326).
- mysql_replication - add ``master_use_gtid`` parameter (https://github.com/ansible/ansible/pull/62648).
- mysql_replication - add ``queries`` return value (https://github.com/ansible/ansible/pull/63036).
- mysql_replication - add support of ``resetmaster`` choice to ``mode`` parameter
(https://github.com/ansible/ansible/issues/42870).
- mysql_user - ``priv`` parameter can be string or dictionary (https://github.com/ansible/ansible/issues/57533).
- mysql_user - add ``plugin_auth_string`` parameter (https://github.com/ansible/ansible/pull/44267).
- mysql_user - add ``plugin_hash_string`` parameter (https://github.com/ansible/ansible/pull/44267).
- mysql_user - add ``plugin`` parameter (https://github.com/ansible/ansible/pull/44267).
- mysql_user - add the resource_limits parameter (https://github.com/ansible-collections/community.general/issues/133).
- mysql_variables - add ``mode`` parameter (https://github.com/ansible/ansible/issues/60119).
- nagios module - a start parameter has been added, allowing the time a Nagios
outage starts to be set. It defaults to the current time if not provided,
preserving the previous behavior and ensuring compatibility with existing
playbooks.
- nsupdate - Use provided TSIG key to not only sign update queries but also
lookup queries
- open_iscsi - allow ``portal`` parameter to be a domain name by resolving the
portal ip address beforehand (https://github.com/ansible-collections/community.general/pull/461).
- packet_device - add ``tags`` parameter on device creation (https://github.com/ansible-collections/community.general/pull/418)
- 'pacman - Improve package state detection speed: Don''t query for full details
of a package.'
- parted - add the ``fs_type`` parameter (https://github.com/ansible-collections/community.general/issues/135).
- pear - added ``prompts`` parameter to allow users to specify expected prompt
that could hang Ansible execution (https://github.com/ansible-collections/community.general/pull/530).
- postgresql_copy - add the ``trust_input`` parameter (https://github.com/ansible-collections/community.general/pull/313).
- postgresql_db - add ``dump_extra_args`` parameter (https://github.com/ansible/ansible/pull/66717).
- postgresql_db - add support for .pgc file format for dump and restores.
- postgresql_db - add the ``executed_commands`` returned value (https://github.com/ansible/ansible/pull/65542).
- postgresql_db - add the ``trust_input`` parameter (https://github.com/ansible-collections/community.general/issues/106).
- postgresql_ext - add the ``trust_input`` parameter (https://github.com/ansible-collections/community.general/pull/282).
- postgresql_ext - refactor to simplify and remove dead code (https://github.com/ansible-collections/community.general/pull/291)
- postgresql_ext - use query parameters with cursor object (https://github.com/ansible/ansible/pull/64994).
- postgresql_idx - add the ``trust_input`` parameter (https://github.com/ansible-collections/community.general/pull/264).
- postgresql_idx - refactor to simplify code (https://github.com/ansible-collections/community.general/pull/291)
- postgresql_info - add collecting info about logical replication publications
in databases (https://github.com/ansible/ansible/pull/67614).
- postgresql_info - add collection info about replication subscriptions (https://github.com/ansible/ansible/pull/67464).
- postgresql_info - add the ``trust_input`` parameter (https://github.com/ansible-collections/community.general/pull/308).
- postgresql_lang - add ``owner`` parameter (https://github.com/ansible/ansible/pull/62999).
- postgresql_lang - add the ``trust_input`` parameter (https://github.com/ansible-collections/community.general/pull/272).
- postgresql_membership - add the ``trust_input`` parameter (https://github.com/ansible-collections/community.general/pull/158).
- postgresql_owner - add the ``trust_input`` parameter (https://github.com/ansible-collections/community.general/pull/198).
- postgresql_ping - add the ``session_role`` parameter (https://github.com/ansible-collections/community.general/pull/312).
- postgresql_ping - add the ``trust_input`` parameter (https://github.com/ansible-collections/community.general/pull/312).
- postgresql_privs - add support for TYPE as object types in postgresql_privs
module (https://github.com/ansible/ansible/issues/62432).
- postgresql_privs - add the ``trust_input`` parameter (https://github.com/ansible-collections/community.general/pull/177).
- postgresql_publication - add the ``session_role`` parameter (https://github.com/ansible-collections/community.general/pull/279).
- postgresql_publication - add the ``trust_input`` parameter (https://github.com/ansible-collections/community.general/pull/279).
- postgresql_query - add the ``encoding`` parameter (https://github.com/ansible/ansible/issues/65367).
- postgresql_query - add the ``trust_input`` parameter (https://github.com/ansible-collections/community.general/pull/294).
- postgresql_schema - add the ``trust_input`` parameter (https://github.com/ansible-collections/community.general/pull/259).
- postgresql_sequence - add the ``trust_input`` parameter (https://github.com/ansible-collections/community.general/pull/295).
- postgresql_set - add the ``trust_input`` parameter (https://github.com/ansible-collections/community.general/pull/302).
- postgresql_slot - add the ``trust_input`` parameter (https://github.com/ansible-collections/community.general/pull/298).
- postgresql_subscription - add the ``session_role`` parameter (https://github.com/ansible-collections/community.general/pull/280).
- postgresql_subscription - add the ``trust_input`` parameter (https://github.com/ansible-collections/community.general/pull/280).
- postgresql_table - add the ``trust_input`` parameter (https://github.com/ansible-collections/community.general/pull/307).
- postgresql_tablespace - add the ``trust_input`` parameter (https://github.com/ansible-collections/community.general/pull/240).
- postgresql_user - add scram-sha-256 support (https://github.com/ansible/ansible/issues/49878).
- postgresql_user - add the ``trust_input`` parameter (https://github.com/ansible-collections/community.general/pull/116).
- postgresql_user - add the comment parameter (https://github.com/ansible/ansible/pull/66711).
- postgresql_user_obj_stat_info - add the ``trust_input`` parameter (https://github.com/ansible-collections/community.general/pull/310).
- postgresql_user_obj_stat_info - refactor to simplify code (https://github.com/ansible-collections/community.general/pull/291)
- proxmox - add the ``description`` and ``hookscript`` parameter (https://github.com/ansible-collections/community.general/pull/245).
- redfish_command - Support for virtual media insert and eject commands (https://github.com/ansible-collections/community.general/issues/493)
- redfish_config - New ``bios_attributes`` option to allow setting multiple
BIOS attributes in one command.
- redfish_config, redfish_command - Add ``resource_id`` option to specify which
System, Manager, or Chassis resource to modify.
- redis - add TLS support to redis cache plugin (https://github.com/ansible-collections/community.general/pull/410).
- rhn_channel - Added ``validate_certs`` option (https://github.com/ansible/ansible/issues/68374).
- rundeck modules - added new options ``client_cert``, ``client_key``, ``force``,
``force_basic_auth``, ``http_agent``, ``url_password``, ``url_username``,
``use_proxy``, ``validate_certs`` to allow changing fetch_url parameters.
- slack - Add support for user/bot/application tokens (using Slack WebAPI)
- slack - Return ``thread_id`` with thread timestamp when user/bot/application
tokens are used
- syslogger - added new parameter ident to specify the name of application which
is sending the message to syslog (https://github.com/ansible-collections/community.general/issues/319).
- terraform - Adds option ``backend_config_files``. This can accept a list of
paths to multiple configuration files (https://github.com/ansible-collections/community.general/pull/394).
- terraform - Adds option ``variables_files`` for multiple var-files (https://github.com/ansible-collections/community.general/issues/224).
- ufw - accept ``interface_in`` and ``interface_out`` as parameters.
- zabbix_action - allow str values for ``esc_period`` options (https://github.com/ansible/ansible/pull/66841).
- zabbix_host - now supports configuring user macros and host tags on the managed
host (see https://github.com/ansible/ansible/pull/66777)
- zabbix_host_info - ``host_name`` based search results now include host groups.
- zabbix_hostmacro - ``macro_name`` now accepts macros in zabbix native format
as well (e.g. ``{$MACRO}``)
- zabbix_hostmacro - ``macro_value`` is no longer required when ``state=absent``
- zabbix_proxy - ``interface`` sub-options ``type`` and ``main`` are now deprecated
and will be removed in community.general 3.0.0. Also, the values passed to
``interface`` are now checked for correct types and unexpected keys.
- zabbix_proxy - added option proxy_address for comma-delimited list of IP/CIDR
addresses or DNS names to accept active proxy requests from
- zabbix_template - add new option omit_date to remove date from exported/dumped
template (https://github.com/ansible/ansible/pull/67302)
- zabbix_template - adding new update rule templateLinkage.deleteMissing for
newer zabbix versions (https://github.com/ansible/ansible/pull/66747).
- zabbix_template_info - add new option omit_date to remove date from exported/dumped
template (https://github.com/ansible/ansible/pull/67302)
- zypper - Added ``allow_vendor_change`` and ``replacefiles`` zypper options
(https://github.com/ansible-collections/community.general/issues/381)
release_summary: 'This is the first proper release of the ``community.general``
collection on 2020-06-20.
The changelog describes all changes made to the modules and plugins included
in this
collection since Ansible 2.9.0.
'
removed_features:
- core - remove support for ``check_invalid_arguments`` in ``UTMModule``.
- pacman - Removed deprecated ``recurse`` option, use ``extra_args=--recursive``
instead
security_fixes:
- '**SECURITY** - CVE-2019-14904 - solaris_zone module accepts zone name and
performs actions related to that. However, there is no user input validation
done while performing actions. A malicious user could provide a crafted zone
name which allows executing commands into the server manipulating the module
behaviour. Adding user input validation as per Solaris Zone documentation
fixes this issue.'
- '**security issue** - Ansible: Splunk and Sumologic callback plugins leak
sensitive data in logs (CVE-2019-14864)'
- 'ldap_attr, ldap_entry - The ``params`` option has been removed in Ansible-2.10
as it circumvents Ansible''s option handling. Setting ``bind_pw`` with the
``params`` option was disallowed in Ansible-2.7, 2.8, and 2.9 as it was insecure. For
information about this policy, see the discussion at: https://meetbot.fedoraproject.org/ansible-meeting/2017-09-28/ansible_dev_meeting.2017-09-28-15.00.log.html
This fixes CVE-2020-1746'
fragments:
- 0.2.0.yml
- 100-postgresql_user_scram_sha_256_support.yml
- 114-puppet-commandline-construction.yml
- 115-deprecated-helm-module.yaml
- 116-postgresql_user_add_trust_input_parameter.yml
- 123-slack-add_bot_token_support_thread_id.yml
- 124-airbrake_deployments-api_v4_for_deploy_notices.yml
- 142-mysql_user_add_resource_limit_parameter.yml
- 151-mysql_db_add_use_shell_parameter.yml
- 153-yarn_fix_checkmode-ec61975fc65df7f0.yaml
- 158-postgresql_membership_add_trust_input_parameter.yml
- 17-postgres_user-no_password_changes-no_log.yml
- 177-postgresql_privs_add_trust_input_parameter.yml
- 178-postgresql_membership_remove_unused_import.yml
- 18-mysql_user-update_password-no_log.yml
- 183-parted_check_mode.yml
- 184-postgresql_db_add_trust_input_parameter.yml
- 186-maven_artifact.yml
- 19-passwordstore-equal-sign.yml
- 198-postgresql_owner_add_trust_input_parameter.yml
- 212-make-path-option.yml
- 22-jira.yaml
- 221-parted-fs_type-parameter.yml
- 223-manageiq_provider-fix-serialization.yml
- 225-mysql_user_fix_no_database_selected.yml
- 227-sesu-use-defined-prompt.yaml
- 23-hashi-vault-lookup-refresh.yaml
- 24-homebrew-upgrade_options.yml
- 240-postgresql_tablespace_add_trust_input_parameter.yml
- 241-fix-ipa-modules-when-ipa_host-empty.yml
- 243-cloudflare_dns_fix_keyerror.yml
- 245-proxmox.yml
- 259-postgresql_schema_add_trust_input_parameter.yml
- 26-influxdb_user-admin-check-mode.yml
- 264-postgresql_idx_add_trust_input_parameter.yml
- 269-flatpak-command-list.yaml
- 272-postgresql_lang_add_trust_input_parameter.yml
- 274-flatpak-run-command.yaml
- 276-java_keystore-private_key_passphrase.yaml
- 277-datadog_monitor-adds-missing-log-alert-type.yml
- 278-zfs_delegate_admin_add_diff_hold_release.yml
- 279-postgresql_publication_add_trust_input_session_role.yml
- 280-postgresql_subscription_add_trust_input_session_role.yml
- 282-postgresql_ext_add_trust_input.yml
- 285-mysql_user_invoke_lambda_support.yml
- 291-postgresql_refactor_modules.yml
- 29253-pear_add_prompts_parameter.yml
- 294-postgresql_query_add_trust_input_parameter.yml
- 295-postgresql_sequence_add_trust_input.yml
- 298-postgresql_slot_add_trust_input.yml
- 302-postgresql_set_add_trust_input_parameter.yml
- 306-ansible-2.9-compatibility.yml
- 307-postgresql_table_add_trust_input_parameter.yml
- 308-postgresql_info_add_trust_input_parameter.yml
- 310-postgresql_user_obj_stat_info_add_trust_input.yml
- 312-postgresql_ping_add_trust_input_session_role.yml
- 313-postgresql_copy_add_trust_input_session_role.yml
- 318-linode-inventory-access_token-fix.yaml
- 319-syslogger.yml
- 326-pacman_improve_package_state_detection_speed.yml
- 34696-homebrew_cask.yml
- 36-homebrew-elements.yml
- 36876-github-deploy-key-fix-pagination.yaml
- 37-homebrew_tap-elements.yml
- 372-gcp_storage_file-gracefully.yml
- 382-install_upgrade_specific_args.yaml
- 389-datadog_monitor-corrects-deprecated-message-param.yml
- 394-terraform-add-config_file.yml
- 405-parted_align_undefined.yml
- 407-syslogjson-callback-exception.yml
- 410-redis_cache-add_tls_support.yaml
- 412-docker-machine-add-ip-fallback.yaml
- 418-add-tags-parameter-to-packet-device.yaml
- 428-mysql_db_add_unsafe_login_password_param.yml
- 442-add-new-parameter-pvresize.yaml
- 444-scaleway-improve_removal_handling.yml
- 444-scaleway_fix_http_header_casing.yml
- 450-slackpkg-package-matching.yml
- 457-cisco_webex_spark-rename.yml
- 458-rshm_repository-reduce_execution_time_when_changed_is_false.yml
- 461-resolve-domain-for-iscsi-portal.yml
- 468-mysql_db_add_restrict_config_file_param.yml
- 475-digital_ocean_droplet-add-vpcuuid.yaml
- 476-docker_swarm_service_add_init_option.yml
- 486-mysql_db_add_check_implicit_admin_parameter.yml
- 490-mysql_user_fix_cursor_errors.yml
- 494-add-redfish-virtual-media-commands.yml
- 505-slackpkg_fix_matching_some_special_cases_in_package_names.yml
- 511-cloudflare_dns-verbose-failure.yml
- 513-mysql_db_config_overrides_defaults.yml
- 55658_hashi_vault.yml
- 56650-homebrew-update_brew.yml
- 58115_nmcli.yml
- 58812-support_absolute_paths_additionally.yml
- 59376-homebrew_fix.yml
- 59522-renamed-module-tls-client-auth-params-to-avoid-overlaping-with-fetch_url.yaml
- 59765-cron-cronvar-use-get-bin-path.yaml
- 59877-fix-keyerror-in-redfish-getlogs.yaml
- 59927-fix-redfish-power-reset-type-mapping.yaml
- 60201-idrac-redfish-config-attributes-support.yml
- 60961-docker_compose-fix-deprecation-warning.yml
- 61562-nagios-start.yaml
- 61655-fix-digital-ocean-droplet-create.yaml
- 61740-docker_container-port-range-parsing.yml
- 61921-gitlab_user.yml
- 61961-pacman_remove_recurse_option.yaml
- 62329-nsupdate-lookup-internal-zones.yaml
- 62348-yarn-no_version_install_fix.yml
- 62617-fix-redfish-enable-account-if-enabled-prop-missing.yaml
- 62621-docker_login-fix-60381.yaml
- 62648-mysql_replication_add_master_use_gtid_param.yml
- 62928-docker_container-ip-address-idempotency.yml
- 62971-docker_container-image-finding.yml
- 62999-postgresql_lang_add_owner_parameter.yml
- 63036-mysql_replication_add_return_value.yml
- 63130-mysql_replication_add_master_delay_parameter.yml
- 63174-nsupdate-tsig-all-the-queries.yaml
- 63189-mysql_info-global-status.yml
- 63229-mysql_replication_add_connection_name_parameter.yml
- 63271-mysql_replication_add_channel_parameter.yml
- 63321-mysql_replication_add_resetmaster_to_mode.yml
- 63345-docker_image-deprecation-warnings.yml
- 63371-mysql_info_add_exclude_fields_parameter.yml
- 63408-nsupdate-dont-fix-none-txt-value.yaml
- 63418-docker_node_info-errors.yml
- 63419-docker_container-defaults.yml
- 63420-docker_container-trust_image_content.yml
- 63467-docker-stack-return-fix.yml
- 63522-remove-args-from-sumologic-and-splunk-callbacks.yml
- 63546-mysql_replication_allow_to_pass_empty_values.yml
- 63547-mysql_variables_add_mode_param.yml
- 63555-postgresql_privs_typy_obj_types.yaml
- 63565-postgresql_user_allow_user_name_with_dots.yml
- 63621-gitlab_user-fix-sshkey-and-user.yml
- 63629-postgresql_db_pgc_support.yaml
- 63887-docker_swarm_service-sort-lists-when-checking-changes.yml
- 63903-ufw.yaml
- 63969-zabbix_action_argsfix.yml
- 63990-replace-deprecated-basic-functions.yml
- 64007-postgresql_db_allow_user_name_with_dots.yml
- 64032-zabbix_template_fix_return_XML_as_a_string_even_python3.yml
- 64059-mysql_user_fix_password_comparison.yaml
- 64288-fix-hashi-vault-kv-v2.yaml
- 64371-postgresql_privs-always-reports-as-changed-when-using-default_privs.yml
- 64382-docker_login-fix-invalid-json.yml
- 64582-postgresql_publication_fix_typo_in_module_warn.yml
- 64583-postgresql_subscription_fix_typo_in_module_warn.yml
- 64585-mysql_dont_mask_mysql_connect_errors_from_modules.yml
- 64635-docker_container-network_mode.yml
- 64637-docker_swarm_service-tmpfs-source.yml
- 64661-postgres_py_add_query_params_arg.yml
- 64683-docker_container-cpus.yml
- 64797-fix-error-deleting-redfish-acct.yaml
- 64989-gitlab-handle-lib-new-version.yml
- 64994-postgresql_ext_use_query_params.yml
- 65018-docker-none-errors.yml
- 65044-fix-terraform-no-workspace.yaml
- 65093-postgresql_lang_use_query_params_with_cursor.yml
- 65164-postgres_use_query_params_with_cursor.yml
- 65223-postgresql_db-exception-added.yml
- 65238-fix_pacman_stdout_parsing.yml
- 65304-fix_zabbix_host_inventory_mode_key_error.yml
- 65310-postgresql_owner_use_query_params.yml
- 65372-misc-context-manager.yml
- 65387-homebrew_check_mode_option.yml
- 65404-postgresql_publication_user_query_params_with_cursor.yml
- 65498-mysql_db_add_executed_commands_return_val.yml
- 65542-postgresql_db_add_executed_commands_return_val.yml
- 65547-mysql_db_add_force_param.yml
- 65609-docker-context-manager.yml
- 65632-docker-argspec-fixup.yml
- 65679-postgresql_schema_use_query_params_with_cursor.yml
- 65750-pacman.yml
- 65755-mysql_info_doesnt_list_empty_dbs.yml
- 65787-postgresql_sequence_use_query_params_with_cursor.yml
- 65789-mysql_user_add_plugin_authentication_parameters.yml
- 65791-postgresql_modules_use_query_params_with_cursor.yml
- 65839-docker_network-idempotence.yml
- 65854-docker_container-wait-for-removal.yml
- 65862-postgresql_modules_use_query_params_with_cursor.yml
- 65894-redfish-bios-attributes.yaml
- 65903-postgresql_privs_sort_lists_with_none_elements.yml
- 65993-restart-docker_container-on-restart-policy-updates.yaml
- 66026-zabbix_host_info.yml
- 66048-mysql_add_master_data_parameter.yml
- 66060-redfish-new-resource-id-option.yaml
- 66144-docker_container-removal-timeout.yml
- 66151-docker_swarm_service-healthcheck-start-period.yml
- 66157-postgresql-create-unique-indexes.yml
- 66247-zabbix_proxy-address-field.yaml
- 66252-mysql_replication_fail_on_error.yml
- 66268-cyberarkpassword-fix-invalid-attr.yaml
- 66322-moved_line_causing_terraform_output_suppression.yml
- 66331-postgresql_query_fix_unable_to_handle_non_ascii_chars_when_python3.yml
- 66357-support-changing-fetch_url-settings-for-rundeck-modules.yaml
- 66382-docker_container-port-range.yml
- 66398-pamd_fix-attributeerror-when-removing-first-line.yml
- 66463-zabbix_template-fix-error-linktemplate-and-importdump.yml
- 66592_ipa_encoding_fix.yml
- 66599-docker-healthcheck.yml
- 66600-docker_container-volumes.yml
- 66688-mysql_db_add_skip_lock_tables_option.yml
- 66711-postgresql_user_add_comment_parameter.yml
- 66717-postgresql_db_add_dump_extra_args_param.yml
- 66747-zabbix_template-newupdaterule-deletemissinglinkedtemplate.yml
- 66777-zabbix_host_tags_macros_support.yml
- 66801-mysql_user_priv_can_be_dict.yml
- 66806-mysql_variables_not_support_variables_with_dot.yml
- 66807-redhat_subscription-no-default-quantity.yaml
- 66837-zabbix-proxy-interface.yml
- 66841-zabbix_action-allowstrfor-esc_period.yml
- 66914-purefa_user_string.yaml
- 66929-pmrun-quote-entire-success-command-string.yml
- 66957-scaleway-jsonify-only-for-json-requests.yml
- 66974-mysql_user_doesnt_support_privs_with_underscore.yml
- 67046-postgresql_modules_make_params_required.yml
- 67302-zabbix_template_info-add-omit_date-field.yml
- 67337-fix-proxysql-mysql-cursor.yaml
- 67353-docker_login-permissions.yml
- 67418-postgresql_set_converts_value_to_uppercase.yml
- 67461-gitlab-project-variable-masked-protected.yml
- 67464-postgresql_info_add_collecting_subscription_info.yml
- 67614-postgresql_info_add_collecting_publication_info.yml
- 67655-scaleway_compute-get-image-instead-loop-on-list.yml
- 67693-zabbix_mediatype.yml
- 67747-mysql_db_add_dump_extra_args_param.yml
- 67767-mysql_db_fix_bug_introduced_by_56721.yml
- 67832-run_powershell_modules_on_windows_containers.yml
- 68251-redfish_config-fix-boolean-bios-attr-support.yaml
- 68374_rhn_channel.yml
- 80-update_docker_connection_plugin.yml
- 83-dense-callback-warning.yml
- alicloud_params_add.yml
- apt_rpm_typefix.yml
- atomic_image_absent.yml
- become-pass-precedence.yaml
- clc_aa_policy-remove-unused-wait-parameter.yaml
- cron-only-get-bin-path-once.yaml
- cronvar-correct-binary-name.yaml
- filter-time.yml
- firewalld-version-0_7_0.yml
- firewalld_zone_target.yml
- fix-oc-conn-plugin-envvar.yml
- fix_zabbix_host_visible_name.yml
- gitlab-project-variable-variable-type.yml
- gitlab_project_variable.yml
- ldap-params-removal.yml
- listen_ports_facts_doc.yml
- lxd_container_url.yaml
- lxd_profile_url.yaml
- mqtt-ssl-protocols.yml
- mysql_info_add_parameter.yml
- mysql_user_idempotency.yml
- openstack_inventory_move.yml
- ovirt-dont-ignore-instance_cpus-parameter.yaml
- porting-guide.yml
- postgresol_privs-fix-status-sorting.yaml
- proxmox-6-version-detection.yaml
- remove-2.9-deprecations.yml
- solaris_zone_name_fix.yml
- syslogger-disable-check-mode.yaml
- xml-deprecated-functions.yml
- zabbix-hostmacro.yml
- zabbix_user-mediatype-error.yml
modules:
- description: Override a debian package's version of a file
name: dpkg_divert
namespace: system
- description: Manage Hetzner's dedicated server firewall
name: hetzner_firewall
namespace: net_tools
- description: Manage Hetzner's dedicated server firewall
name: hetzner_firewall_info
namespace: net_tools
- description: Creates a resource of Ecs/Instance in Huawei Cloud
name: hwc_ecs_instance
namespace: cloud.huawei
- description: Creates a resource of Evs/Disk in Huawei Cloud
name: hwc_evs_disk
namespace: cloud.huawei
- description: Creates a resource of Vpc/EIP in Huawei Cloud
name: hwc_vpc_eip
namespace: cloud.huawei
- description: Creates a resource of Vpc/PeeringConnect in Huawei Cloud
name: hwc_vpc_peering_connect
namespace: cloud.huawei
- description: Creates a resource of Vpc/Port in Huawei Cloud
name: hwc_vpc_port
namespace: cloud.huawei
- description: Creates a resource of Vpc/PrivateIP in Huawei Cloud
name: hwc_vpc_private_ip
namespace: cloud.huawei
- description: Creates a resource of Vpc/Route in Huawei Cloud
name: hwc_vpc_route
namespace: cloud.huawei
- description: Creates a resource of Vpc/SecurityGroup in Huawei Cloud
name: hwc_vpc_security_group
namespace: cloud.huawei
- description: Creates a resource of Vpc/SecurityGroupRule in Huawei Cloud
name: hwc_vpc_security_group_rule
namespace: cloud.huawei
- description: Creates a resource of Vpc/Subnet in Huawei Cloud
name: hwc_vpc_subnet
namespace: cloud.huawei
- description: Manage DNS Records for Ericsson IPWorks via ipwcli
name: ipwcli_dns
namespace: net_tools
- description: Generate ISO file with specified files or folders
name: iso_create
namespace: files
- description: Local Backup Utility for Alpine Linux
name: lbu
namespace: system
- description: Add or remove multiple LDAP attribute values
name: ldap_attrs
namespace: net_tools.ldap
- description: Search for entries in a LDAP server
name: ldap_search
namespace: net_tools.ldap
- description: Manage Mac App Store applications with mas-cli
name: mas
namespace: packaging.os
- description: Run MySQL queries
name: mysql_query
namespace: database.mysql
- description: Manage OVH monthly billing
name: ovh_monthly_billing
namespace: cloud.ovh
- description: Assign IP subnet to a bare metal server.
name: packet_ip_subnet
namespace: cloud.packet
- description: Create/delete a project in Packet host.
name: packet_project
namespace: cloud.packet
- description: Create/delete a volume in Packet host.
name: packet_volume
namespace: cloud.packet
- description: Attach/detach a volume to a device in the Packet host.
name: packet_volume_attachment
namespace: cloud.packet
- description: Add, update, or remove PostgreSQL subscription
name: postgresql_subscription
namespace: database.postgresql
- description: Gather statistics about PostgreSQL user objects
name: postgresql_user_obj_stat_info
namespace: database.postgresql
- description: Gather information about Redis servers
name: redis_info
namespace: database.misc
plugins:
callback:
- description: Customize the output
name: diy
namespace: null
lookup:
- description: Get key values from etcd3 server
name: etcd3
namespace: null
- description: fetch data from LMDB
name: lmdb_kv
namespace: null
release_date: '2020-06-20'
0.3.0-experimental.meta.redirects:
changes:
bugfixes:
- aix_filesystem - fix issues with ismount module_util pathing for Ansible 2.9
(https://github.com/ansible-collections/community.general/pull/567).
- consul_kv lookup - fix ``ANSIBLE_CONSUL_URL`` environment variable handling
(https://github.com/ansible/ansible/issues/51960).
- consul_kv lookup - fix arguments handling (https://github.com/ansible-collections/community.general/pull/303).
- docker_compose - add a condition to prevent service startup if parameter ``stopped``
is true. Otherwise, the service will be started on each play and stopped again
immediately due to the ``stopped`` parameter and breaks the idempotency of
the module (https://github.com/ansible-collections/community.general/issues/532).
- docker_compose - disallow usage of the parameters ``stopped`` and ``restarted``
at the same time. This breaks also the idempotency (https://github.com/ansible-collections/community.general/issues/532).
- filesystem - resizefs of xfs filesystems is fixed. Filesystem needs to be
mounted.
deprecated_features:
- xbps - the ``force`` option never had any effect. It is now deprecated, and
will be removed in 3.0.0 (https://github.com/ansible-collections/community.general/pull/568).
minor_changes:
- apk - added ``no_cache`` option (https://github.com/ansible-collections/community.general/pull/548).
- parted - accept negative numbers in ``part_start`` and ``part_end``
- pkgng - added ``stdout`` and ``stderr`` attributes to the result (https://github.com/ansible-collections/community.general/pull/560).
release_summary: 'This is a experimental release to test whether ``meta/runtime.yml``
redirects work as expected for flatmapping. There will be no final 0.3.0 release;
the next release will be 1.0.0. This experimental pre-release will not appear
in the versioning history of 0.3.0, it is solely for testing certain technical
aspects of ansible-base and antsibull.
'
removed_features:
- logicmonitor - the module has been removed in 1.0.0 since it is unmaintained
and the API used by the module has been turned off in 2017 (https://github.com/ansible-collections/community.general/issues/539,
https://github.com/ansible-collections/community.general/pull/541).
- logicmonitor_facts - the module has been removed in 1.0.0 since it is unmaintained
and the API used by the module has been turned off in 2017 (https://github.com/ansible-collections/community.general/issues/539,
https://github.com/ansible-collections/community.general/pull/541).
fragments:
- 0.3.0-experimental-meta-redirects.yml
- 303-consul_kv-fix-env-variables-handling.yaml
- 33979-xfs_growfs.yml
- 547-start-service-condition.yaml
- 548_apk.yml
- 560-pkgng-add-stdout-and-stderr.yaml
- 568_packaging.yml
- aix_filesystem-module_util-routing-issue.yml
- logicmonitor-removal.yml
- parted_negative_numbers.yml
release_date: '2020-06-27'
0.3.0-experimental.meta.redirects-3:
changes:
release_summary: Maintenance release where the ``master`` branch was renamed
to ``main``. Contains no other change.
fragments:
- 0.3.0-experimental.meta.redirects.2.yml
release_date: '2020-07-06'

29
changelogs/config.yaml Normal file
View File

@@ -0,0 +1,29 @@
changelog_filename_template: ../CHANGELOG.rst
changelog_filename_version_depth: 0
changes_file: changelog.yaml
changes_format: combined
keep_fragments: false
mention_ancestor: true
flatmap: true
new_plugins_after_name: removed_features
notesdir: fragments
prelude_section_name: release_summary
prelude_section_title: Release Summary
sections:
- - major_changes
- Major Changes
- - minor_changes
- Minor Changes
- - breaking_changes
- Breaking Changes / Porting Guide
- - deprecated_features
- Deprecated Features
- - removed_features
- Removed Features (previously deprecated)
- - security_fixes
- Security Fixes
- - bugfixes
- Bugfixes
- - known_issues
- Known Issues
title: Community General

View File

@@ -0,0 +1,4 @@
minor_changes:
- log_plays callback - use v2 methods (https://github.com/ansible-collections/community.general/pull/442).
breaking_changes:
- log_plays callback - add missing information to the logs generated by the callback plugin. This changes the log message format (https://github.com/ansible-collections/community.general/pull/442).

View File

@@ -0,0 +1,3 @@
---
bugfixes:
- kubevirt - Add aliases 'interface_name' for network_name (https://github.com/ansible/ansible/issues/55641).

View File

@@ -0,0 +1,3 @@
---
minor_changes:
- "airbrake_deployment - add ``version`` param; clarified docs on ``revision`` param (https://github.com/ansible-collections/community.general/pull/583)."

View File

@@ -1,28 +1,20 @@
namespace: community
name: general
version: 0.1.0
version: 0.3.0-experimental.meta.redirects-3
readme: README.md
authors: null
authors:
- Ansible (https://github.com/ansible)
description: null
license: GPL-3.0-or-later
license_file: COPYING
tags: null
#dependencies:
# netapp.ontap: '>=0.1.0'
# community.kubernetes: '>=0.1.0'
# ovirt.ovirt: '>=0.1.0'
# ansible.netcommon: '>=0.1.0'
# cisco.mso: '>=0.1.0'
# ansible.posix: '>=0.1.0'
# cisco.aci: '>=0.1.0'
# cisco.intersight: '>=0.1.0'
# check_point.mgmt: '>=0.1.0'
# fortinet.fortios: '>=0.1.0'
# openstack.cloud: '>=0.1.0'
# google.cloud: '>=0.1.0'
# f5networks.f5_modules: '>=0.1.0'
# NOTE: No more dependencies can be added to this list
dependencies:
ansible.netcommon: '>=0.0.2'
ansible.posix: '>=1.0.0'
community.kubernetes: '>=0.1.0'
google.cloud: '>=0.0.9'
repository: https://github.com/ansible-collections/community.general
documentation: https://github.com/ansible-collection-migration/community.general/tree/master/docs
#documentation: https://github.com/ansible-collection-migration/community.general/tree/main/docs
homepage: https://github.com/ansible-collections/community.general
issues: https://github.com/ansible-collections/community.general/issues
type: flatmap
#type: flatmap

View File

@@ -1,66 +0,0 @@
docker:
- docker_swarm
- docker_image_facts
- docker_service
- docker_compose
- docker_config
- docker_container
- docker_container_info
- docker_host_info
- docker_image
- docker_image_info
- docker_login
- docker_network
- docker_network_info
- docker_node
- docker_node_info
- docker_prune
- docker_secret
- docker_swarm
- docker_swarm_info
- docker_swarm_service
- docker_swarm_service_info
- docker_volume
- docker_volume_info
k8s:
- kubevirt_cdi_upload
- kubevirt_preset
- kubevirt_pvc
- kubevirt_rs
- kubevirt_template
- kubevirt_vm
os:
- os_flavor_facts
- os_image_facts
- os_keystone_domain_facts
- os_networks_facts
- os_port_facts
- os_project_facts
- os_server_facts
- os_subnets_facts
- os_user_facts
ovirt:
- ovirt_affinity_label_facts
- ovirt_api_facts
- ovirt_cluster_facts
- ovirt_datacenter_facts
- ovirt_disk_facts
- ovirt_event_facts
- ovirt_external_provider_facts
- ovirt_group_facts
- ovirt_host_facts
- ovirt_host_storage_facts
- ovirt_network_facts
- ovirt_nic_facts
- ovirt_permission_facts
- ovirt_quota_facts
- ovirt_scheduling_policy_facts
- ovirt_snapshot_facts
- ovirt_storage_domain_facts
- ovirt_storage_template_facts
- ovirt_storage_vm_facts
- ovirt_tag_facts
- ovirt_template_facts
- ovirt_user_facts
- ovirt_vm_facts
- ovirt_vmpool_facts

View File

@@ -1,962 +0,0 @@
plugin_routing:
modules:
ali_instance_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
cs_instance_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
cs_zone_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
digital_ocean:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
digital_ocean_account_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
digital_ocean_certificate_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
digital_ocean_domain_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
digital_ocean_firewall_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
digital_ocean_floating_ip_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
digital_ocean_image_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
digital_ocean_load_balancer_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
digital_ocean_region_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
digital_ocean_size_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
digital_ocean_snapshot_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
digital_ocean_sshkey_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
digital_ocean_tag_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
digital_ocean_volume_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
docker_image_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
docker_service:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
gcdns_record:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
gcdns_zone:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
gce:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
gcp_backend_service:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
gcp_bigquery_dataset_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
gcp_bigquery_table_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
gcp_cloudbuild_trigger_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
gcp_compute_address_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
gcp_compute_backend_bucket_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
gcp_compute_backend_service_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
gcp_compute_disk_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
gcp_compute_firewall_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
gcp_compute_forwarding_rule_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
gcp_compute_global_address_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
gcp_compute_global_forwarding_rule_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
gcp_compute_health_check_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
gcp_compute_http_health_check_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
gcp_compute_https_health_check_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
gcp_compute_image_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
gcp_compute_instance_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
gcp_compute_instance_group_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
gcp_compute_instance_group_manager_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
gcp_compute_instance_template_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
gcp_compute_interconnect_attachment_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
gcp_compute_network_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
gcp_compute_region_disk_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
gcp_compute_route_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
gcp_compute_router_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
gcp_compute_ssl_certificate_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
gcp_compute_ssl_policy_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
gcp_compute_subnetwork_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
gcp_compute_target_http_proxy_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
gcp_compute_target_https_proxy_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
gcp_compute_target_pool_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
gcp_compute_target_ssl_proxy_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
gcp_compute_target_tcp_proxy_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
gcp_compute_target_vpn_gateway_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
gcp_compute_url_map_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
gcp_compute_vpn_tunnel_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
gcp_container_cluster_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
gcp_container_node_pool_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
gcp_dns_managed_zone_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
gcp_dns_resource_record_set_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
gcp_forwarding_rule:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
gcp_healthcheck:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
gcp_iam_role_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
gcp_iam_service_account_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
gcp_pubsub_subscription_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
gcp_pubsub_topic_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
gcp_redis_instance_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
gcp_resourcemanager_project_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
gcp_sourcerepo_repository_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
gcp_spanner_database_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
gcp_spanner_instance_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
gcp_sql_database_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
gcp_sql_instance_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
gcp_sql_user_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
gcp_target_proxy:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
gcp_tpu_node_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
gcp_url_map:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
gcpubsub_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
gcspanner:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
memset_memstore_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
memset_server_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
ovirt:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
online_server_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
online_user_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
one_image_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
os_flavor_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
os_image_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
os_keystone_domain_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
os_networks_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
os_port_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
os_project_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
os_server_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
os_subnets_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
os_user_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
ovirt_affinity_label_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
ovirt_api_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
ovirt_cluster_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
ovirt_datacenter_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
ovirt_disk_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
ovirt_event_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
ovirt_external_provider_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
ovirt_group_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
ovirt_host_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
ovirt_host_storage_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
ovirt_network_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
ovirt_nic_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
ovirt_permission_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
ovirt_quota_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
ovirt_scheduling_policy_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
ovirt_snapshot_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
ovirt_storage_domain_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
ovirt_storage_template_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
ovirt_storage_vm_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
ovirt_tag_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
ovirt_template_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
ovirt_user_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
ovirt_vm_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
ovirt_vmpool_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
scaleway_image_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
scaleway_ip_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
scaleway_organization_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
scaleway_security_group_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
scaleway_server_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
scaleway_snapshot_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
scaleway_volume_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
smartos_image_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
vr_account_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
vr_dns_domain:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
vr_dns_record:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
vr_firewall_group:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
vr_firewall_rule:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
vr_server:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
vr_ssh_key:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
vr_startup_script:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
vr_user:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
vultr_account_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
vultr_block_storage_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
vultr_dns_domain_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
vultr_firewall_group_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
vultr_network_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
vultr_os_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
vultr_plan_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
vultr_region_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
vultr_server_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
vultr_ssh_key_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
vultr_startup_script_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
vultr_user_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
xenserver_guest_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
vertica_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
onepassword_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
zabbix_group_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
zabbix_host_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
ldap_attr:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
aci_intf_policy_fc:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
aci_intf_policy_l2:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
aci_intf_policy_lldp:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
aci_intf_policy_mcp:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
aci_intf_policy_port_channel:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
aci_intf_policy_port_security:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
bigip_asm_policy:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
bigip_device_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
bigip_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
bigip_gtm_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
bigip_iapplx_package:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
bigip_security_address_list:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
bigip_security_port_list:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
bigip_traffic_group:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
bigiq_device_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
pn_cluster:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
pn_ospf:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
pn_ospfarea:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
pn_show:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
pn_trunk:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
pn_vlag:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
pn_vlan:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
pn_vrouter:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
pn_vrouterbgp:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
pn_vrouterif:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
pn_vrouterlbif:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
panos_admin:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
panos_admpwd:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
panos_cert_gen_ssh:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
panos_check:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
panos_commit:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
panos_dag:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
panos_dag_tags:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
panos_import:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
panos_interface:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
panos_lic:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
panos_loadcfg:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
panos_match_rule:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
panos_mgtconfig:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
panos_nat_rule:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
panos_object:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
panos_op:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
panos_pg:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
panos_query_rules:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
panos_restart:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
panos_sag:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
panos_security_rule:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
panos_set:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
osx_say:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
foreman:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
katello:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
hpilo_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
oneview_datacenter_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
oneview_enclosure_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
oneview_ethernet_network_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
oneview_fc_network_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
oneview_fcoe_network_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
oneview_logical_interconnect_group_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
oneview_network_set_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
oneview_san_manager_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
idrac_redfish_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
redfish_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
github_hooks:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
github_webhook_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
gitlab_hooks:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
gluster_heal_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
na_cdot_aggregate:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
na_cdot_license:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
na_cdot_lun:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
na_cdot_qtree:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
na_cdot_svm:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
na_cdot_user:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
na_cdot_user_role:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
na_cdot_volume:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
na_ontap_gather_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
sf_account_manager:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
sf_check_connections:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
sf_snapshot_schedule_manager:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
sf_volume_access_group_manager:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
sf_volume_manager:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
purefa_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
purefb_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
python_requirements_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
jenkins_job_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details
nginx_status_facts:
deprecation:
removal_date: TBD
warning_text: see plugin documentation for details

1834
meta/runtime.yml Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -1,79 +0,0 @@
#
# (c) 2016 Red Hat Inc.
#
# This file is part of Ansible
#
# Ansible is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Ansible is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Ansible. If not, see <http://www.gnu.org/licenses/>.
#
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
import sys
import copy
from ansible import constants as C
from ansible_collections.ansible.netcommon.plugins.action.network import ActionModule as ActionNetworkModule
from ansible_collections.community.general.plugins.module_utils.network.aireos.aireos import aireos_provider_spec
from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.utils import load_provider
from ansible.utils.display import Display
display = Display()
class ActionModule(ActionNetworkModule):
def run(self, tmp=None, task_vars=None):
del tmp # tmp no longer has any effect
module_name = self._task.action.split('.')[-1]
self._config_module = True if module_name == 'aireos_config' else False
if self._play_context.connection != 'local':
return dict(
failed=True,
msg='invalid connection specified, expected connection=local, '
'got %s' % self._play_context.connection
)
provider = load_provider(aireos_provider_spec, self._task.args)
pc = copy.deepcopy(self._play_context)
pc.connection = 'network_cli'
pc.network_os = 'aireos'
pc.remote_addr = provider['host'] or self._play_context.remote_addr
pc.port = int(provider['port'] or self._play_context.port or 22)
pc.remote_user = provider['username'] or self._play_context.connection_user
pc.password = provider['password'] or self._play_context.password
command_timeout = int(provider['timeout'] or C.PERSISTENT_COMMAND_TIMEOUT)
display.vvv('using connection plugin %s (was local)' % pc.connection, pc.remote_addr)
connection = self._shared_loader_obj.connection_loader.get('persistent', pc, sys.stdin, task_uuid=self._task._uuid)
connection.set_options(direct={'persistent_command_timeout': command_timeout})
socket_path = connection.run()
display.vvvv('socket_path: %s' % socket_path, pc.remote_addr)
if not socket_path:
return {'failed': True,
'msg': 'unable to open shell. Please see: ' +
'https://docs.ansible.com/ansible/network_debug_troubleshooting.html#unable-to-open-shell'}
task_vars['ansible_socket'] = socket_path
if self._play_context.become_method == 'enable':
self._play_context.become = False
self._play_context.become_method = None
result = super(ActionModule, self).run(task_vars=task_vars)
return result

View File

@@ -1,79 +0,0 @@
#
# (c) 2016 Red Hat Inc.
#
# This file is part of Ansible
#
# Ansible is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Ansible is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Ansible. If not, see <http://www.gnu.org/licenses/>.
#
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
import sys
import copy
from ansible import constants as C
from ansible_collections.ansible.netcommon.plugins.action.network import ActionModule as ActionNetworkModule
from ansible_collections.community.general.plugins.module_utils.network.aruba.aruba import aruba_provider_spec
from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.utils import load_provider
from ansible.utils.display import Display
display = Display()
class ActionModule(ActionNetworkModule):
def run(self, tmp=None, task_vars=None):
del tmp # tmp no longer has any effect
module_name = self._task.action.split('.')[-1]
self._config_module = True if module_name == 'aruba_config' else False
if self._play_context.connection != 'local':
return dict(
failed=True,
msg='invalid connection specified, expected connection=local, '
'got %s' % self._play_context.connection
)
provider = load_provider(aruba_provider_spec, self._task.args)
pc = copy.deepcopy(self._play_context)
pc.connection = 'network_cli'
pc.network_os = 'aruba'
pc.remote_addr = provider['host'] or self._play_context.remote_addr
pc.port = int(provider['port'] or self._play_context.port or 22)
pc.remote_user = provider['username'] or self._play_context.connection_user
pc.password = provider['password'] or self._play_context.password
pc.private_key_file = provider['ssh_keyfile'] or self._play_context.private_key_file
command_timeout = int(provider['timeout'] or C.PERSISTENT_COMMAND_TIMEOUT)
display.vvv('using connection plugin %s (was local)' % pc.connection, pc.remote_addr)
connection = self._shared_loader_obj.connection_loader.get('persistent', pc, sys.stdin, task_uuid=self._task._uuid)
connection.set_options(direct={'persistent_command_timeout': command_timeout})
socket_path = connection.run()
display.vvvv('socket_path: %s' % socket_path, pc.remote_addr)
if not socket_path:
return {'failed': True,
'msg': 'unable to open shell. Please see: ' +
'https://docs.ansible.com/ansible/network_debug_troubleshooting.html#unable-to-open-shell'}
task_vars['ansible_socket'] = socket_path
if self._play_context.become_method == 'enable':
self._play_context.become = False
self._play_context.become_method = None
result = super(ActionModule, self).run(task_vars=task_vars)
return result

View File

@@ -1,89 +0,0 @@
#
# Copyright: (c) 2016, Red Hat Inc.
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
import sys
import copy
from ansible import constants as C
from ansible_collections.ansible.netcommon.plugins.action.network import ActionModule as ActionNetworkModule
from ansible_collections.community.general.plugins.module_utils.network.cloudengine.ce import ce_provider_spec
from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.utils import load_provider
from ansible.utils.display import Display
display = Display()
CLI_SUPPORTED_MODULES = ['ce_rollback', 'ce_mlag_interface', 'ce_startup', 'ce_config',
'ce_command', 'ce_facts', 'ce_evpn_global', 'ce_evpn_bgp_rr',
'ce_mtu', 'ce_evpn_bgp', 'ce_snmp_location', 'ce_snmp_contact',
'ce_snmp_traps', 'ce_netstream_global', 'ce_netstream_aging',
'ce_netstream_export', 'ce_netstream_template', 'ce_ntp_auth',
'ce_stp', 'ce_vxlan_global', 'ce_vxlan_arp', 'ce_vxlan_gateway',
'ce_acl_interface']
class ActionModule(ActionNetworkModule):
def run(self, tmp=None, task_vars=None):
del tmp # tmp no longer has any effect
module_name = self._task.action.split('.')[-1]
self._config_module = True if module_name == 'ce_config' else False
socket_path = None
persistent_connection = self._play_context.connection.split('.')[-1]
if self._play_context.connection == 'local':
provider = load_provider(ce_provider_spec, self._task.args)
transport = provider['transport'] or 'cli'
display.vvvv('connection transport is %s' % transport, self._play_context.remote_addr)
if transport == 'cli':
pc = copy.deepcopy(self._play_context)
pc.connection = 'network_cli'
pc.network_os = 'ce'
pc.remote_addr = provider['host'] or self._play_context.remote_addr
pc.port = int(provider['port'] or self._play_context.port or 22)
pc.remote_user = provider['username'] or self._play_context.connection_user
pc.password = provider['password'] or self._play_context.password
command_timeout = int(provider['timeout'] or C.PERSISTENT_COMMAND_TIMEOUT)
self._task.args['provider'] = provider.update(
host=pc.remote_addr,
port=pc.port,
username=pc.remote_user,
password=pc.password
)
if module_name in ['ce_netconf'] or module_name not in CLI_SUPPORTED_MODULES:
pc.connection = 'netconf'
display.vvv('using connection plugin %s (was local)' % pc.connection, pc.remote_addr)
connection = self._shared_loader_obj.connection_loader.get('persistent', pc, sys.stdin, task_uuid=self._task._uuid)
connection.set_options(direct={'persistent_command_timeout': command_timeout})
socket_path = connection.run()
display.vvvv('socket_path: %s' % socket_path, pc.remote_addr)
if not socket_path:
return {'failed': True,
'msg': 'unable to open shell. Please see: ' +
'https://docs.ansible.com/ansible/network_debug_troubleshooting.html#unable-to-open-shell'}
task_vars['ansible_socket'] = socket_path
# make sure a transport value is set in args
self._task.args['transport'] = transport
self._task.args['provider'] = provider
elif persistent_connection in ('netconf', 'network_cli'):
provider = self._task.args.get('provider', {})
if any(provider.values()):
display.warning('provider is unnecessary when using %s and will be ignored' % self._play_context.connection)
del self._task.args['provider']
if (persistent_connection == 'network_cli' and module_name not in CLI_SUPPORTED_MODULES) or \
(persistent_connection == 'netconf' and module_name in CLI_SUPPORTED_MODULES):
return {'failed': True, 'msg': "Connection type '%s' is not valid for '%s' module."
% (self._play_context.connection, self._task.action)}
result = super(ActionModule, self).run(task_vars=task_vars)
return result

View File

@@ -1,104 +0,0 @@
#
# Copyright 2015 Peter Sprygada <psprygada@ansible.com>
#
# This file is part of Ansible
#
# Ansible is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Ansible is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Ansible. If not, see <http://www.gnu.org/licenses/>.
#
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
import os
import time
import glob
from ansible.module_utils.six.moves.urllib.parse import urlsplit
from ansible.module_utils._text import to_text
from ansible_collections.community.general.plugins.action.ce import ActionModule as _ActionModule
class ActionModule(_ActionModule):
def run(self, tmp=None, task_vars=None):
try:
self._handle_template()
except (ValueError, AttributeError) as exc:
return dict(failed=True, msg=exc.message)
result = super(ActionModule, self).run(tmp, task_vars)
del tmp # tmp no longer has any effect
if self._task.args.get('backup') and result.get('__backup__'):
# User requested backup and no error occurred in module.
# NOTE: If there is a parameter error, __backup__ key may not be in results.
self._write_backup(task_vars['inventory_hostname'], result['__backup__'])
if '__backup__' in result:
del result['__backup__']
return result
def _get_working_path(self):
cwd = self._loader.get_basedir()
if self._task._role is not None:
cwd = self._task._role._role_path
return cwd
def _write_backup(self, host, contents):
backup_path = self._get_working_path() + '/backup'
if not os.path.exists(backup_path):
os.mkdir(backup_path)
for fn in glob.glob('%s/%s*' % (backup_path, host)):
os.remove(fn)
tstamp = time.strftime("%Y-%m-%d@%H:%M:%S", time.localtime(time.time()))
filename = '%s/%s_config.%s' % (backup_path, host, tstamp)
open(filename, 'w').write(contents)
def _handle_template(self):
src = self._task.args.get('src')
if not src:
raise ValueError('missing required arguments: src')
working_path = self._get_working_path()
if os.path.isabs(src) or urlsplit(src).scheme:
source = src
else:
source = self._loader.path_dwim_relative(working_path, 'templates', src)
if not source:
source = self._loader.path_dwim_relative(working_path, src)
if not os.path.exists(source):
return
try:
with open(source, 'r') as f:
template_data = to_text(f.read())
except IOError:
return dict(failed=True, msg='unable to load src file')
# Create a template search path in the following order:
# [working_path, self_role_path, dependent_role_paths, dirname(source)]
searchpath = [working_path]
if self._task._role is not None:
searchpath.append(self._task._role._role_path)
if hasattr(self._task, "_block:"):
dep_chain = self._task._block.get_dep_chain()
if dep_chain is not None:
for role in dep_chain:
searchpath.append(role._role_path)
searchpath.append(os.path.dirname(source))
with self._templar.set_temporary_context(searchpath=searchpath):
self._task.args['src'] = self._templar.template(template_data)

View File

@@ -1,69 +0,0 @@
# (C) 2017 Red Hat Inc.
# Copyright (C) 2017 Lenovo.
#
# GNU General Public License v3.0+
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
#
# Contains Action Plugin methods for CNOS Config Module
# Lenovo Networking
#
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
import sys
import copy
from ansible import constants as C
from ansible_collections.ansible.netcommon.plugins.action.network import ActionModule as ActionNetworkModule
from ansible_collections.community.general.plugins.module_utils.network.cnos.cnos import cnos_provider_spec
from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.utils import load_provider
from ansible.utils.display import Display
display = Display()
class ActionModule(ActionNetworkModule):
def run(self, tmp=None, task_vars=None):
del tmp # tmp no longer has any effect
module_name = self._task.action.split('.')[-1]
self._config_module = True if module_name == 'cnos_config' else False
if self._play_context.connection == 'local':
provider = load_provider(cnos_provider_spec, self._task.args)
pc = copy.deepcopy(self._play_context)
pc.connection = 'network_cli'
pc.network_os = 'cnos'
pc.remote_addr = provider['host'] or self._play_context.remote_addr
pc.port = provider['port'] or self._play_context.port or 22
pc.remote_user = provider['username'] or self._play_context.connection_user
pc.password = provider['password'] or self._play_context.password
pc.private_key_file = provider['ssh_keyfile'] or self._play_context.private_key_file
command_timeout = int(provider['timeout'] or C.PERSISTENT_COMMAND_TIMEOUT)
pc.become = provider['authorize'] or True
pc.become_pass = provider['auth_pass']
pc.become_method = 'enable'
display.vvv('using connection plugin %s (was local)' % pc.connection, pc.remote_addr)
connection = self._shared_loader_obj.connection_loader.get('persistent', pc, sys.stdin, task_uuid=self._task._uuid)
connection.set_options(direct={'persistent_command_timeout': command_timeout})
socket_path = connection.run()
display.vvvv('socket_path: %s' % socket_path, pc.remote_addr)
if not socket_path:
return {'failed': True,
'msg': 'unable to open shell. Please see: ' +
'https://docs.ansible.com/ansible/network_debug_troubleshooting.html#unable-to-open-shell'}
task_vars['ansible_socket'] = socket_path
result = super(ActionModule, self).run(task_vars=task_vars)
return result

View File

@@ -1,36 +0,0 @@
#
# Copyright 2018 Red Hat Inc.
#
# This file is part of Ansible
#
# Ansible is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Ansible is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Ansible. If not, see <http://www.gnu.org/licenses/>.
#
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
from ansible_collections.ansible.netcommon.plugins.action.network import ActionModule as ActionNetworkModule
class ActionModule(ActionNetworkModule):
def run(self, tmp=None, task_vars=None):
del tmp # tmp no longer has any effect
self._config_module = True
if self._play_context.connection.split('.')[-1] != 'network_cli':
return {'failed': True, 'msg': 'Connection type %s is not valid for this module. Must use fully qualified'
' name of network_cli connection type.' % self._play_context.connection}
return super(ActionModule, self).run(task_vars=task_vars)

View File

@@ -1,69 +0,0 @@
# (C) 2017 Red Hat Inc.
# Copyright (C) 2017 Lenovo.
#
# GNU General Public License v3.0+
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
#
# Contains Action Plugin methods for ENOS Config Module
# Lenovo Networking
#
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
import sys
import copy
from ansible import constants as C
from ansible_collections.ansible.netcommon.plugins.action.network import ActionModule as ActionNetworkModule
from ansible_collections.community.general.plugins.module_utils.network.enos.enos import enos_provider_spec
from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.utils import load_provider
from ansible.utils.display import Display
display = Display()
class ActionModule(ActionNetworkModule):
def run(self, tmp=None, task_vars=None):
del tmp # tmp no longer has any effect
module_name = self._task.action.split('.')[-1]
self._config_module = True if module_name == 'enos_config' else False
if self._play_context.connection == 'local':
provider = load_provider(enos_provider_spec, self._task.args)
pc = copy.deepcopy(self._play_context)
pc.connection = 'network_cli'
pc.network_os = 'enos'
pc.remote_addr = provider['host'] or self._play_context.remote_addr
pc.port = provider['port'] or self._play_context.port or 22
pc.remote_user = provider['username'] or self._play_context.connection_user
pc.password = provider['password'] or self._play_context.password
pc.private_key_file = provider['ssh_keyfile'] or self._play_context.private_key_file
command_timeout = int(provider['timeout'] or C.PERSISTENT_COMMAND_TIMEOUT)
pc.become = provider['authorize'] or True
pc.become_pass = provider['auth_pass']
pc.become_method = 'enable'
display.vvv('using connection plugin %s (was local)' % pc.connection, pc.remote_addr)
connection = self._shared_loader_obj.connection_loader.get('persistent', pc, sys.stdin, task_uuid=self._task._uuid)
connection.set_options(direct={'persistent_command_timeout': command_timeout})
socket_path = connection.run()
display.vvvv('socket_path: %s' % socket_path, pc.remote_addr)
if not socket_path:
return {'failed': True,
'msg': 'unable to open shell. Please see: ' +
'https://docs.ansible.com/ansible/network_debug_troubleshooting.html#unable-to-open-shell'}
task_vars['ansible_socket'] = socket_path
result = super(ActionModule, self).run(task_vars=task_vars)
return result

View File

@@ -1,45 +0,0 @@
#
# Copyright 2015 Peter Sprygada <psprygada@ansible.com>
#
# This file is part of Ansible
#
# Ansible is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Ansible is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Ansible. If not, see <http://www.gnu.org/licenses/>.
#
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
from ansible_collections.ansible.netcommon.plugins.action.network import ActionModule as ActionNetworkModule
class ActionModule(ActionNetworkModule):
EXOS_NETWORK_CLI_MODULES = (
'exos_facts',
'exos_config',
'exos_command')
def run(self, tmp=None, task_vars=None):
del tmp # tmp no longer has any effect
module_name = self._task.action.split('.')[-1]
self._config_module = True if module_name == 'exos_config' else False
persistent_connection = self._play_context.connection.split('.')[-1]
if persistent_connection not in ('network_cli', 'httpapi'):
return {'failed': True, 'msg': 'Connection type %s is not valid for this module' % self._play_context.connection}
if persistent_connection == 'network_cli' and module_name not in self.EXOS_NETWORK_CLI_MODULES:
return {'failed': True, 'msg': "Connection type %s is not valid for this module" % self._play_context.connection}
return super(ActionModule, self).run(task_vars=task_vars)

View File

@@ -1,80 +0,0 @@
#
# (c) 2016 Red Hat Inc.
#
# This file is part of Ansible
#
# Ansible is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Ansible is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Ansible. If not, see <http://www.gnu.org/licenses/>.
#
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
import sys
import copy
from ansible_collections.ansible.netcommon.plugins.action.network import ActionModule as ActionNetworkModule
from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.utils import load_provider
from ansible_collections.community.general.plugins.module_utils.network.ironware.ironware import ironware_provider_spec
from ansible.utils.display import Display
display = Display()
class ActionModule(ActionNetworkModule):
def run(self, tmp=None, task_vars=None):
del tmp # tmp no longer has any effect
module_name = self._task.action.split('.')[-1]
self._config_module = True if module_name == 'ironware_config' else False
persistent_connection = self._play_context.connection.split('.')[-1]
if persistent_connection == 'network_cli':
provider = self._task.args.get('provider', {})
if any(provider.values()):
display.warning('provider is unnecessary when using network_cli and will be ignored')
del self._task.args['provider']
elif self._play_context.connection == 'local':
provider = load_provider(ironware_provider_spec, self._task.args)
pc = copy.deepcopy(self._play_context)
pc.connection = 'network_cli'
pc.network_os = 'ironware'
pc.remote_addr = provider['host'] or self._play_context.remote_addr
pc.port = int(provider['port'] or self._play_context.port or 22)
pc.remote_user = provider['username'] or self._play_context.connection_user
pc.password = provider['password'] or self._play_context.password
pc.private_key_file = provider['ssh_keyfile'] or self._play_context.private_key_file
pc.become = provider['authorize'] or False
if pc.become:
pc.become_method = 'enable'
pc.become_pass = provider['auth_pass']
display.vvv('using connection plugin %s (was local)' % pc.connection, pc.remote_addr)
connection = self._shared_loader_obj.connection_loader.get('persistent', pc, sys.stdin, task_uuid=self._task._uuid)
command_timeout = int(provider['timeout']) if provider['timeout'] else connection.get_option('persistent_command_timeout')
connection.set_options(direct={'persistent_command_timeout': command_timeout})
socket_path = connection.run()
display.vvvv('socket_path: %s' % socket_path, pc.remote_addr)
if not socket_path:
return {'failed': True,
'msg': 'unable to open shell. Please see: ' +
'https://docs.ansible.com/ansible/network_debug_troubleshooting.html#unable-to-open-shell'}
task_vars['ansible_socket'] = socket_path
else:
return {'failed': True, 'msg': 'Connection type %s is not valid for this module' % self._play_context.connection}
result = super(ActionModule, self).run(task_vars=task_vars)
return result

View File

@@ -1,31 +0,0 @@
#
# (c) 2017, Red Hat, Inc.
#
# This file is part of Ansible
#
# Ansible is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Ansible is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Ansible. If not, see <http://www.gnu.org/licenses/>.
#
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
from ansible_collections.ansible.netcommon.plugins.action.network import ActionModule as ActionNetworkModule
class ActionModule(ActionNetworkModule):
def run(self, tmp=None, task_vars=None):
del tmp # tmp no longer has any effect
self._config_module = True
return super(ActionModule, self).run(task_vars=task_vars)

View File

@@ -1,40 +0,0 @@
#
# (c) 2018 Extreme Networks Inc.
#
# This file is part of Ansible
#
# Ansible is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Ansible is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Ansible. If not, see <http://www.gnu.org/licenses/>.
#
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
import re
from ansible_collections.ansible.netcommon.plugins.action.network import ActionModule as ActionNetworkModule
PRIVATE_KEYS_RE = re.compile('__.+__')
class ActionModule(ActionNetworkModule):
def run(self, tmp=None, task_vars=None):
del tmp # tmp no longer has any effect
module_name = self._task.action.split('.')[-1]
self._config_module = True if module_name == 'slxos_config' else False
persistent_connection = self._play_context.connection.split('.')[-1]
if persistent_connection not in ('network_cli'):
return {'failed': True, 'msg': 'Connection type %s is not valid for this module' % self._play_context.connection}
return super(ActionModule, self).run(task_vars=task_vars)

View File

@@ -1,77 +0,0 @@
#
# (c) 2016 Red Hat Inc.
#
# This file is part of Ansible
#
# Ansible is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Ansible is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Ansible. If not, see <http://www.gnu.org/licenses/>.
#
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
import sys
import copy
from ansible import constants as C
from ansible_collections.ansible.netcommon.plugins.action.network import ActionModule as ActionNetworkModule
from ansible_collections.community.general.plugins.module_utils.network.sros.sros import sros_provider_spec
from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.utils import load_provider
from ansible.utils.display import Display
display = Display()
class ActionModule(ActionNetworkModule):
def run(self, tmp=None, task_vars=None):
del tmp # tmp no longer has any effect
module_name = self._task.action.split('.')[-1]
persistent_connection = self._play_context.connection.split('.')[-1]
self._config_module = True if module_name == 'sros_config' else False
if persistent_connection == 'network_cli':
provider = self._task.args.get('provider', {})
if any(provider.values()):
display.warning('provider is unnecessary when using network_cli and will be ignored')
del self._task.args['provider']
elif self._play_context.connection == 'local':
provider = load_provider(sros_provider_spec, self._task.args)
pc = copy.deepcopy(self._play_context)
pc.connection = 'network_cli'
pc.network_os = 'sros'
pc.remote_addr = provider['host'] or self._play_context.remote_addr
pc.port = int(provider['port'] or self._play_context.port or 22)
pc.remote_user = provider['username'] or self._play_context.connection_user
pc.password = provider['password'] or self._play_context.password
pc.private_key_file = provider['ssh_keyfile'] or self._play_context.private_key_file
command_timeout = int(provider['timeout'] or C.PERSISTENT_COMMAND_TIMEOUT)
display.vvv('using connection plugin %s (was local)' % pc.connection, pc.remote_addr)
connection = self._shared_loader_obj.connection_loader.get('persistent', pc, sys.stdin, task_uuid=self._task._uuid)
connection.set_options(direct={'persistent_command_timeout': command_timeout})
socket_path = connection.run()
display.vvvv('socket_path: %s' % socket_path, pc.remote_addr)
if not socket_path:
return {'failed': True,
'msg': 'unable to open shell. Please see: ' +
'https://docs.ansible.com/ansible/network_debug_troubleshooting.html#unable-to-open-shell'}
task_vars['ansible_socket'] = socket_path
else:
return {'failed': True, 'msg': 'Connection type %s is not valid for this module' % self._play_context.connection}
result = super(ActionModule, self).run(task_vars=task_vars)
return result

View File

@@ -1,36 +0,0 @@
#
# (c) 2018 Extreme Networks Inc.
#
# This file is part of Ansible
#
# Ansible is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Ansible is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Ansible. If not, see <http://www.gnu.org/licenses/>.
#
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
from ansible_collections.ansible.netcommon.plugins.action.network import ActionModule as ActionNetworkModule
class ActionModule(ActionNetworkModule):
def run(self, tmp=None, task_vars=None):
del tmp # tmp no longer has any effect
module_name = self._task.action.split('.')[-1]
self._config_module = True if module_name == 'voss_config' else False
persistent_connection = self._play_context.connection.split('.')[-1]
if persistent_connection not in ('network_cli'):
return {'failed': True, 'msg': 'Connection type %s is not valid for this module' % self._play_context.connection}
return super(ActionModule, self).run(task_vars=task_vars)

View File

@@ -111,13 +111,13 @@ class BecomeModule(BecomeBase):
self.prompt = True
become_exe = self.get_option('become_exe') or self.name
become_exe = self.get_option('become_exe')
flags = self.get_option('become_flags') or ''
flags = self.get_option('become_flags')
if not self.get_option('become_pass') and '-n' not in flags:
flags += ' -n'
user = self.get_option('become_user') or ''
user = self.get_option('become_user')
if user:
user = '-u %s' % (user)

View File

@@ -82,14 +82,14 @@ class BecomeModule(BecomeBase):
if not cmd:
return cmd
becomecmd = self.get_option('become_exe') or self.name
becomecmd = self.get_option('become_exe')
flags = self.get_option('become_flags') or ''
flags = self.get_option('become_flags')
if self.get_option('become_pass'):
self.prompt = '[dzdo via ansible, key=%s] password:' % self._id
flags = '%s -p "%s"' % (flags.replace('-n', ''), self.prompt)
user = self.get_option('become_user') or ''
user = self.get_option('become_user')
if user:
user = '-u %s' % (user)

View File

@@ -13,6 +13,7 @@ DOCUMENTATION = '''
options:
become_user:
description: User you 'become' to execute the task
default: ''
ini:
- section: privilege_escalation
key: become_user
@@ -113,7 +114,8 @@ class BecomeModule(BecomeBase):
if not cmd:
return cmd
exe = self.get_option('become_exe') or self.name
flags = self.get_option('become_flags') or ''
user = self.get_option('become_user') or ''
exe = self.get_option('become_exe')
flags = self.get_option('become_flags')
user = self.get_option('become_user')
return '%s %s %s -e %s ' % (exe, user, flags, self._build_success_command(cmd, shell))

View File

@@ -13,6 +13,7 @@ DOCUMENTATION = '''
options:
become_user:
description: User you 'become' to execute the task
default: ''
ini:
- section: privilege_escalation
key: become_user
@@ -80,7 +81,8 @@ class BecomeModule(BecomeBase):
if not cmd:
return cmd
become = self.get_option('become_exe') or self.name
flags = self.get_option('become_flags') or ''
user = self.get_option('become_user') or ''
become = self.get_option('become_exe')
flags = self.get_option('become_flags')
user = self.get_option('become_user')
return '%s -q shell %s %s@ %s' % (become, flags, user, cmd)

View File

@@ -41,6 +41,7 @@ DOCUMENTATION = '''
- name: ANSIBLE_PBRUN_EXE
become_flags:
description: Options to pass to pbrun
default: ''
ini:
- section: privilege_escalation
key: become_flags
@@ -93,9 +94,10 @@ class BecomeModule(BecomeBase):
if not cmd:
return cmd
become_exe = self.get_option('become_exe') or self.name
flags = self.get_option('become_flags') or ''
user = self.get_option('become_user') or ''
become_exe = self.get_option('become_exe')
flags = self.get_option('become_flags')
user = self.get_option('become_user')
if user:
user = '-u %s' % (user)
noexe = not self.get_option('wrap_exe')

View File

@@ -97,7 +97,8 @@ class BecomeModule(BecomeBase):
if not cmd:
return cmd
exe = self.get_option('become_exe') or self.name
exe = self.get_option('become_exe')
flags = self.get_option('become_flags')
noexe = not self.get_option('wrap_exe')
return '%s %s "%s"' % (exe, flags, self._build_success_command(cmd, shell, noexe=noexe))

View File

@@ -27,6 +27,7 @@ DOCUMENTATION = '''
- name: ANSIBLE_PMRUN_EXE
become_flags:
description: Options to pass to pmrun
default: ''
ini:
- section: privilege_escalation
key: become_flags
@@ -70,6 +71,7 @@ class BecomeModule(BecomeBase):
if not cmd:
return cmd
become = self.get_option('become_exe') or self.name
flags = self.get_option('become_flags') or ''
become = self.get_option('become_exe')
flags = self.get_option('become_flags')
return '%s %s %s' % (become, flags, shlex_quote(self._build_success_command(cmd, shell)))

View File

@@ -13,6 +13,7 @@ DOCUMENTATION = '''
options:
become_user:
description: User you 'become' to execute the task
default: ''
ini:
- section: privilege_escalation
key: become_user
@@ -74,7 +75,7 @@ class BecomeModule(BecomeBase):
name = 'community.general.sesu'
_prompt = 'Please enter your password:'
prompt = 'Please enter your password:'
fail = missing = ('Sorry, try again with sesu.',)
def build_become_command(self, cmd, shell):
@@ -83,7 +84,8 @@ class BecomeModule(BecomeBase):
if not cmd:
return cmd
become = self.get_option('become_exe') or self.name
flags = self.get_option('become_flags') or ''
user = self.get_option('become_user') or ''
become = self.get_option('become_exe')
flags = self.get_option('become_flags')
user = self.get_option('become_user')
return '%s %s %s -c %s' % (become, flags, user, self._build_success_command(cmd, shell))

View File

@@ -1,62 +0,0 @@
# (c) 2014, Brian Coca, Josh Drake, et al
# (c) 2017 Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# Make coding more python3-ish
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
DOCUMENTATION = '''
cache: jsonfile
short_description: JSON formatted files.
description:
- This cache uses JSON formatted, per host, files saved to the filesystem.
author: Ansible Core (@ansible-core)
options:
_uri:
required: True
description:
- Path in which the cache plugin will save the JSON files
env:
- name: ANSIBLE_CACHE_PLUGIN_CONNECTION
ini:
- key: fact_caching_connection
section: defaults
_prefix:
description: User defined prefix to use when creating the JSON files
env:
- name: ANSIBLE_CACHE_PLUGIN_PREFIX
ini:
- key: fact_caching_prefix
section: defaults
_timeout:
default: 86400
description: Expiration timeout in seconds for the cache plugin data. Set to 0 to never expire
env:
- name: ANSIBLE_CACHE_PLUGIN_TIMEOUT
ini:
- key: fact_caching_timeout
section: defaults
type: integer
'''
import codecs
import json
from ansible.parsing.ajson import AnsibleJSONEncoder, AnsibleJSONDecoder
from ansible.plugins.cache import BaseFileCacheModule
class CacheModule(BaseFileCacheModule):
"""
A caching module backed by json files.
"""
def _load(self, filepath):
# Valid JSON is always UTF-8 encoded.
with codecs.open(filepath, 'r', encoding='utf-8') as f:
return json.load(f, cls=AnsibleJSONDecoder)
def _dump(self, value, filepath):
with codecs.open(filepath, 'w', encoding='utf-8') as f:
f.write(json.dumps(value, cls=AnsibleJSONEncoder, sort_keys=True, indent=4))

View File

@@ -179,7 +179,8 @@ class CacheModule(BaseCacheModule):
self._prefix = self.get_option('_prefix')
except KeyError:
display.deprecated('Rather than importing CacheModules directly, '
'use ansible.plugins.loader.cache_loader', version='2.12')
'use ansible.plugins.loader.cache_loader',
version='2.0.0', collection_name='community.general') # was Ansible 2.12
if C.CACHE_PLUGIN_CONNECTION:
connection = C.CACHE_PLUGIN_CONNECTION.split(',')
self._timeout = C.CACHE_PLUGIN_TIMEOUT

View File

@@ -15,6 +15,8 @@ DOCUMENTATION = '''
_uri:
description:
- A colon separated string of connection information for Redis.
- The format is C(host:port:db:password), for example C(localhost:6379:0:changeme).
- To use encryption in transit, prefix the connection with C(tls://), as in C(tls://localhost:6379:0:changeme).
required: True
env:
- name: ANSIBLE_CACHE_PLUGIN_CONNECTION
@@ -67,24 +69,32 @@ class CacheModule(BaseCacheModule):
performance.
"""
def __init__(self, *args, **kwargs):
connection = []
uri = ''
try:
super(CacheModule, self).__init__(*args, **kwargs)
if self.get_option('_uri'):
connection = self.get_option('_uri').split(':')
uri = self.get_option('_uri')
self._timeout = float(self.get_option('_timeout'))
self._prefix = self.get_option('_prefix')
except KeyError:
display.deprecated('Rather than importing CacheModules directly, '
'use ansible.plugins.loader.cache_loader', version='2.12')
'use ansible.plugins.loader.cache_loader',
version='2.0.0', collection_name='community.general') # was Ansible 2.12
if C.CACHE_PLUGIN_CONNECTION:
connection = C.CACHE_PLUGIN_CONNECTION.split(':')
uri = C.CACHE_PLUGIN_CONNECTION
self._timeout = float(C.CACHE_PLUGIN_TIMEOUT)
self._prefix = C.CACHE_PLUGIN_PREFIX
self._cache = {}
self._db = StrictRedis(*connection)
kw = {}
tlsprefix = 'tls://'
if uri.startswith(tlsprefix):
kw['ssl'] = True
uri = uri[len(tlsprefix):]
connection = uri.split(':')
self._db = StrictRedis(*connection, **kw)
self._keys_set = 'ansible_cache_keys'
def _make_key(self, key):

View File

@@ -15,7 +15,7 @@ DOCUMENTATION = '''
- This callback suppresses any non Failed or Changed status.
deprecated:
why: The 'default' callback plugin now supports this functionality
removed_in: '2.11'
removed_in: '2.0.0' # was Ansible 2.11
alternative: "'default' callback plugin with 'display_skipped_hosts = no' and 'display_ok_hosts = no' options"
extends_documentation_fragment:
- default_callback
@@ -32,7 +32,7 @@ DOCUMENTATION = '''
- name: DISPLAY_SKIPPED_HOSTS
deprecated:
why: environment variables without "ANSIBLE_" prefix are deprecated
version: "2.12"
version: "2.0.0" # was Ansible 2.12
alternatives: the "ANSIBLE_DISPLAY_SKIPPED_HOSTS" environment variable
- name: ANSIBLE_DISPLAY_SKIPPED_HOSTS
ini:

View File

@@ -6,10 +6,6 @@
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
ANSIBLE_METADATA = {'metadata_version': '1.1',
'status': ['preview'],
'supported_by': 'community'}
DOCUMENTATION = '''
callback: cgroup_memory_recap
callback_type: aggregate

View File

@@ -144,7 +144,7 @@ colors = dict(
states = ('skipped', 'ok', 'changed', 'failed', 'unreachable')
class CallbackModule_dense(CallbackModule_default):
class CallbackModule(CallbackModule_default):
'''
This is the dense callback interface, where screen estate is still valued.
@@ -497,5 +497,3 @@ class CallbackModule_dense(CallbackModule_default):
# When using -vv or higher, simply do the default action
if display.verbosity >= 2 or not HAS_OD:
CallbackModule = CallbackModule_default
else:
CallbackModule = CallbackModule_dense

1420
plugins/callback/diy.py Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -14,7 +14,7 @@ DOCUMENTATION = '''
- Use this plugin when you do not care about any output for tasks that were completely skipped
deprecated:
why: The 'default' callback plugin now supports this functionality
removed_in: '2.11'
removed_in: '2.0.0' # was Ansible 2.11
alternative: "'default' callback plugin with 'display_skipped_hosts = no' option"
extends_documentation_fragment:
- default_callback

View File

@@ -53,7 +53,7 @@ class CallbackModule(CallbackBase):
CALLBACK_NEEDS_WHITELIST = True
TIME_FORMAT = "%b %d %Y %H:%M:%S"
MSG_FORMAT = "%(now)s - %(category)s - %(data)s\n\n"
MSG_FORMAT = "%(now)s - %(playbook)s - %(task_name)s - %(task_action)s - %(category)s - %(data)s\n\n"
def __init__(self):
@@ -67,7 +67,8 @@ class CallbackModule(CallbackBase):
if not os.path.exists(self.log_folder):
makedirs_safe(self.log_folder)
def log(self, host, category, data):
def log(self, result, category):
data = result._result
if isinstance(data, MutableMapping):
if '_ansible_verbose_override' in data:
# avoid logging extraneous data
@@ -79,30 +80,43 @@ class CallbackModule(CallbackBase):
if invocation is not None:
data = json.dumps(invocation) + " => %s " % data
path = os.path.join(self.log_folder, host)
path = os.path.join(self.log_folder, result._host.get_name())
now = time.strftime(self.TIME_FORMAT, time.localtime())
msg = to_bytes(self.MSG_FORMAT % dict(now=now, category=category, data=data))
msg = to_bytes(
self.MSG_FORMAT
% dict(
now=now,
playbook=self.playbook,
task_name=result._task.name,
task_action=result._task.action,
category=category,
data=data,
)
)
with open(path, "ab") as fd:
fd.write(msg)
def runner_on_failed(self, host, res, ignore_errors=False):
self.log(host, 'FAILED', res)
def v2_runner_on_failed(self, result, ignore_errors=False):
self.log(result, 'FAILED')
def runner_on_ok(self, host, res):
self.log(host, 'OK', res)
def v2_runner_on_ok(self, result):
self.log(result, 'OK')
def runner_on_skipped(self, host, item=None):
self.log(host, 'SKIPPED', '...')
def v2_runner_on_skipped(self, result):
self.log(result, 'SKIPPED')
def runner_on_unreachable(self, host, res):
self.log(host, 'UNREACHABLE', res)
def v2_runner_on_unreachable(self, result):
self.log(result, 'UNREACHABLE')
def runner_on_async_failed(self, host, res, jid):
self.log(host, 'ASYNC_FAILED', res)
def v2_runner_on_async_failed(self, result):
self.log(result, 'ASYNC_FAILED')
def playbook_on_import_for_host(self, host, imported_file):
self.log(host, 'IMPORTED', imported_file)
def v2_playbook_on_start(self, playbook):
self.playbook = playbook._file_name
def playbook_on_not_import_for_host(self, host, missing_file):
self.log(host, 'NOTIMPORTED', missing_file)
def v2_playbook_on_import_for_host(self, result, imported_file):
self.log(result, 'IMPORTED', imported_file)
def v2_playbook_on_not_import_for_host(self, result, missing_file):
self.log(result, 'NOTIMPORTED', missing_file)

View File

@@ -1 +0,0 @@
say.py

View File

@@ -16,7 +16,7 @@ DOCUMENTATION = '''
description:
- This plugin will use the 'say' or 'espeak' program to "speak" about play events.
notes:
- In 2.8, this callback has been renamed from C(osx_say) into M(say).
- In 2.8, this callback has been renamed from C(osx_say) into M(community.general.say).
'''
import distutils.spawn

View File

@@ -14,7 +14,7 @@ DOCUMENTATION = '''
short_description: Splits output, sending failed tasks to stderr
deprecated:
why: The 'default' callback plugin now supports this functionality
removed_in: '2.11'
removed_in: '2.0.0' # was Ansible 2.11
alternative: "'default' callback plugin with 'display_failed_stderr = yes' option"
extends_documentation_fragment:
- default_callback

View File

@@ -66,7 +66,9 @@ class CallbackModule(CallbackBase):
super(CallbackModule, self).__init__()
self.set_options()
def set_options(self, task_keys=None, var_options=None, direct=None):
super(CallbackModule, self).set_options(task_keys=task_keys, var_options=var_options, direct=direct)
syslog_host = self.get_option("server")
syslog_port = int(self.get_option("port"))

View File

@@ -1,95 +0,0 @@
#
# (c) 2017 Red Hat Inc.
#
# This file is part of Ansible
#
# Ansible is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Ansible is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Ansible. If not, see <http://www.gnu.org/licenses/>.
#
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
DOCUMENTATION = '''
---
cliconf: aireos
short_description: Use aireos cliconf to run command on Cisco WLC platform
description:
- This aireos plugin provides low level abstraction apis for
sending and receiving CLI commands from Cisco WLC network devices.
'''
import re
import json
from itertools import chain
from ansible.errors import AnsibleConnectionFailure
from ansible.module_utils._text import to_text
from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.utils import to_list
from ansible.plugins.cliconf import CliconfBase, enable_mode
class Cliconf(CliconfBase):
def get_device_info(self):
device_info = {}
device_info['network_os'] = 'aireos'
reply = self.get('show sysinfo')
data = to_text(reply, errors='surrogate_or_strict').strip()
match = re.search(r'Product Version\.* (.*)', data)
if match:
device_info['network_os_version'] = match.group(1)
match = re.search(r'System Name\.* (.*)', data, re.M)
if match:
device_info['network_os_hostname'] = match.group(1)
reply = self.get('show inventory')
data = to_text(reply, errors='surrogate_or_strict').strip()
match = re.search(r'DESCR: \"(.*)\"', data, re.M)
if match:
device_info['network_os_model'] = match.group(1)
return device_info
@enable_mode
def get_config(self, source='running', format='text', flags=None):
if source not in ('running', 'startup'):
return self.invalid_params("fetching configuration from %s is not supported" % source)
if source == 'running':
cmd = 'show run-config commands'
else:
cmd = 'show run-config startup-commands'
return self.send_command(cmd)
@enable_mode
def edit_config(self, command):
for cmd in chain(['config'], to_list(command), ['end']):
self.send_command(cmd)
def get(self, command, prompt=None, answer=None, sendonly=False, newline=True, check_all=False):
return self.send_command(command=command, prompt=prompt, answer=answer, sendonly=sendonly, newline=newline, check_all=check_all)
def get_capabilities(self):
result = super(Cliconf, self).get_capabilities()
return json.dumps(result)
def set_cli_prompt_context(self):
"""
Make sure we are in the operational cli mode
:return: None
"""
if self._connection.connected:
self._update_cli_prompt_context(config_context=')#')

View File

@@ -1,72 +0,0 @@
# (C) 2018 Red Hat Inc.
# Copyright (C) 2019 APCON.
#
# GNU General Public License v3.0+
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
#
# Contains CLIConf Plugin methods for apconos Modules
# APCON Networking
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
DOCUMENTATION = '''
---
author: "David Li (@davidlee-ap)"
cliconf: apconos
short_description: Use apconos cliconf to run command on APCON network devices
description:
- This apconos plugin provides low level abstraction apis for
sending and receiving CLI commands from APCON network devices.
'''
import re
import json
from itertools import chain
from ansible.module_utils._text import to_bytes, to_text
from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.utils import to_list
from ansible.plugins.cliconf import CliconfBase, enable_mode
class Cliconf(CliconfBase):
def get_device_info(self):
device_info = {}
device_info['network_os'] = 'apconos'
reply = self.get(b'show version')
data = to_text(reply, errors='surrogate_or_strict').strip()
if data:
device_info['network_os_version'] = self.parse_version(data)
device_info['network_os_model'] = self.parse_model(data)
return device_info
def parse_version(self, data):
return ""
def parse_model(self, data):
return ""
@enable_mode
def get_config(self, source='running', format='text'):
pass
@enable_mode
def edit_config(self, command):
for cmd in chain([b'configure terminal'], to_list(command), [b'end']):
self.send_command(cmd)
def get(self, command, prompt=None, answer=None, sendonly=False, check_all=False):
return self.send_command(command=command, prompt=prompt, answer=answer, sendonly=sendonly, check_all=check_all)
def get_capabilities(self):
return json.dumps(self.get_device_info())

View File

@@ -1,95 +0,0 @@
#
# (c) 2017 Red Hat Inc.
#
# This file is part of Ansible
#
# Ansible is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Ansible is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Ansible. If not, see <http://www.gnu.org/licenses/>.
#
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
DOCUMENTATION = '''
---
cliconf: aruba
short_description: Use aruba cliconf to run command on Aruba platform
description:
- This aruba plugin provides low level abstraction apis for
sending and receiving CLI commands from Aruba network devices.
'''
import re
import json
from itertools import chain
from ansible.module_utils._text import to_bytes, to_text
from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.utils import to_list
from ansible.plugins.cliconf import CliconfBase, enable_mode
class Cliconf(CliconfBase):
def get_device_info(self):
device_info = {}
device_info['network_os'] = 'aruba'
reply = self.get('show version')
data = to_text(reply, errors='surrogate_or_strict').strip()
match = re.search(r'Version (\S+)', data)
if match:
device_info['network_os_version'] = match.group(1)
match = re.search(r'^MODEL: (\S+)\),', data, re.M)
if match:
device_info['network_os_model'] = match.group(1)
reply = self.get('show hostname')
data = to_text(reply, errors='surrogate_or_strict').strip()
match = re.search(r'^Hostname is (.+)', data, re.M)
if match:
device_info['network_os_hostname'] = match.group(1)
return device_info
@enable_mode
def get_config(self, source='running', format='text', flags=None):
if source not in ('running', 'startup'):
return self.invalid_params("fetching configuration from %s is not supported" % source)
if source == 'running':
cmd = 'show running-config all'
else:
cmd = 'show configuration'
return self.send_command(cmd)
@enable_mode
def edit_config(self, command):
for cmd in chain(['configure terminal'], to_list(command), ['end']):
self.send_command(cmd)
def get(self, command, prompt=None, answer=None, sendonly=False, newline=True, check_all=False):
return self.send_command(command=command, prompt=prompt, answer=answer, sendonly=sendonly, newline=newline, check_all=check_all)
def get_capabilities(self):
result = super(Cliconf, self).get_capabilities()
return json.dumps(result)
def set_cli_prompt_context(self):
"""
Make sure we are in the operational cli mode
:return: None
"""
if self._connection.connected:
self._update_cli_prompt_context(config_context=')#')

View File

@@ -1,121 +0,0 @@
#
# (c) 2017 Red Hat Inc.
#
# This file is part of Ansible
#
# Ansible is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Ansible is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Ansible. If not, see <http://www.gnu.org/licenses/>.
#
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
DOCUMENTATION = '''
---
cliconf: ce
short_description: Use ce cliconf to run command on HUAWEI CloudEngine platform
description:
- This ce plugin provides low level abstraction apis for
sending and receiving CLI commands from HUAWEI CloudEngine network devices.
'''
import re
import json
from itertools import chain
from ansible.errors import AnsibleConnectionFailure
from ansible.module_utils._text import to_text
from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.utils import to_list
from ansible.plugins.cliconf import CliconfBase, enable_mode
class Cliconf(CliconfBase):
def get_device_info(self):
device_info = {}
device_info['network_os'] = 'ce'
reply = self.get('display version')
data = to_text(reply, errors='surrogate_or_strict').strip()
match = re.search(r'^Huawei.+\n.+\Version\s+(\S+)', data)
if match:
device_info['network_os_version'] = match.group(1).strip(',')
match = re.search(r'^Huawei(.+)\n.+\(\S+\s+\S+\)', data, re.M)
if match:
device_info['network_os_model'] = match.group(1)
match = re.search(r'HUAWEI\s+(\S+)\s+uptime', data, re.M)
if match:
device_info['network_os_hostname'] = match.group(1)
return device_info
@enable_mode
def get_config(self, source='running', format='text', flags=None):
if source not in ('running'):
return self.invalid_params("fetching configuration from %s is not supported" % source)
if not flags:
flags = []
cmd = 'display current-configuration'
return self.send_command(cmd)
@enable_mode
def edit_config(self, command):
results = []
for cmd in chain(['configure terminal'], to_list(command), ['end']):
if isinstance(cmd, dict):
command = cmd['command']
prompt = cmd['prompt']
answer = cmd['answer']
newline = cmd.get('newline', True)
else:
command = cmd
prompt = None
answer = None
newline = True
results.append(self.send_command(command, prompt, answer, False, newline))
return results[1:-1]
def get(self, command, prompt=None, answer=None, sendonly=False, newline=True, check_all=False):
return self.send_command(command=command, prompt=prompt, answer=answer, sendonly=sendonly, newline=newline, check_all=check_all)
def get_capabilities(self):
result = super(Cliconf, self).get_capabilities()
return json.dumps(result)
def set_cli_prompt_context(self):
"""
Make sure we are in the operational cli mode
:return: None
"""
if self._connection.connected:
out = self._connection.get_prompt()
if out is None:
raise AnsibleConnectionFailure(message=u'cli prompt is not identified from the last received'
u' response window: %s' % self._connection._last_recv_window)
prompt = to_text(out, errors='surrogate_then_replace').strip()
while prompt.endswith(']'):
self._connection.queue_message('vvvv', 'wrong context, sending return to device')
if prompt.startswith('[*'):
self._connection.exec_command('clear configuration candidate')
self._connection.exec_command('return')
out = self._connection.get_prompt()
prompt = to_text(out, errors='surrogate_then_replace').strip()

View File

@@ -1,135 +0,0 @@
# (C) 2017 Red Hat Inc.
# Copyright (C) 2017 Lenovo.
#
# GNU General Public License v3.0+
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
#
# Contains CLIConf Plugin methods for CNOS Modules
# Lenovo Networking
#
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
DOCUMENTATION = '''
---
cliconf: cnos
short_description: Use cnos cliconf to run command on Lenovo CNOS platform
description:
- This cnos plugin provides low level abstraction apis for
sending and receiving CLI commands from Lenovo CNOS network devices.
'''
import re
import json
from ansible.errors import AnsibleConnectionFailure
from ansible.module_utils.common._collections_compat import Mapping
from ansible.module_utils._text import to_bytes, to_text
from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.utils import to_list
from ansible.plugins.cliconf import CliconfBase, enable_mode
class Cliconf(CliconfBase):
def get_device_info(self):
device_info = {}
device_info['network_os'] = 'cnos'
reply = self.get('show sys-info')
data = to_text(reply, errors='surrogate_or_strict').strip()
host = self.get('show hostname')
hostname = to_text(host, errors='surrogate_or_strict').strip()
if data:
device_info['network_os_version'] = self.parse_version(data)
device_info['network_os_model'] = self.parse_model(data)
device_info['network_os_hostname'] = hostname
return device_info
def parse_version(self, data):
for line in data.split('\n'):
line = line.strip()
match = re.match(r'System Software Revision (.*?)',
line, re.M | re.I)
if match:
vers = line.split(':')
ver = vers[1].strip()
return ver
return "NA"
def parse_model(self, data):
for line in data.split('\n'):
line = line.strip()
match = re.match(r'System Model (.*?)', line, re.M | re.I)
if match:
mdls = line.split(':')
mdl = mdls[1].strip()
return mdl
return "NA"
@enable_mode
def get_config(self, source='running', format='text', flags=None):
if source not in ('running', 'startup'):
msg = "fetching configuration from %s is not supported"
return self.invalid_params(msg % source)
if source == 'running':
cmd = 'show running-config'
else:
cmd = 'show startup-config'
return self.send_command(cmd)
@enable_mode
def edit_config(self, candidate=None, commit=True,
replace=None, comment=None):
resp = {}
results = []
requests = []
if commit:
self.send_command('configure terminal')
for line in to_list(candidate):
if not isinstance(line, Mapping):
line = {'command': line}
cmd = line['command']
if cmd != 'end' and cmd[0] != '!':
results.append(self.send_command(**line))
requests.append(cmd)
self.send_command('end')
else:
raise ValueError('check mode is not supported')
resp['request'] = requests
resp['response'] = results
return resp
def get(self, command, prompt=None, answer=None, sendonly=False, newline=True, check_all=False):
return self.send_command(command=command, prompt=prompt, answer=answer, sendonly=sendonly, newline=newline, check_all=check_all)
def get_capabilities(self):
result = super(Cliconf, self).get_capabilities()
return json.dumps(result)
def set_cli_prompt_context(self):
"""
Make sure we are in the operational cli mode
:return: None
"""
if self._connection.connected:
out = self._connection.get_prompt()
if out is None:
raise AnsibleConnectionFailure(message=u'cli prompt is not identified from the last received'
u' response window: %s' % self._connection._last_recv_window)
if to_text(out, errors='surrogate_then_replace').strip().endswith(')#'):
self._connection.queue_message('vvvv', 'In Config mode, sending exit to device')
self._connection.send_command('exit')
else:
self._connection.send_command('enable')

View File

@@ -1,114 +0,0 @@
# Copyright: (c) 2018, Ansible Project
# GNU General Public License v3.0+
# (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
DOCUMENTATION = '''
---
cliconf: edgeos
short_description: Use edgeos cliconf to run command on EdgeOS platform
description:
- This edgeos plugin provides low level abstraction apis for
sending and receiving CLI commands from Ubiquiti EdgeOS network devices.
'''
import re
import json
from itertools import chain
from ansible.errors import AnsibleConnectionFailure
from ansible.module_utils._text import to_text
from ansible.module_utils.common._collections_compat import Mapping
from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.utils import to_list
from ansible.plugins.cliconf import CliconfBase
class Cliconf(CliconfBase):
def get_device_info(self):
device_info = {}
device_info['network_os'] = 'edgeos'
reply = self.get('show version')
data = to_text(reply, errors='surrogate_or_strict').strip()
match = re.search(r'Version:\s*v?(\S+)', data)
if match:
device_info['network_os_version'] = match.group(1)
match = re.search(r'HW model:\s*(\S+)', data)
if match:
device_info['network_os_model'] = match.group(1)
reply = self.get('show host name')
device_info['network_os_hostname'] = to_text(reply, errors='surrogate_or_strict').strip()
return device_info
def get_config(self, source='running', format='text', flags=None):
return self.send_command('show configuration commands')
def edit_config(self, candidate=None, commit=True, replace=False, comment=None):
for cmd in chain(['configure'], to_list(candidate)):
self.send_command(cmd)
def get(self, command, prompt=None, answer=None, sendonly=False, newline=True, check_all=False):
return self.send_command(command=command, prompt=prompt, answer=answer, sendonly=sendonly, newline=newline, check_all=check_all)
def commit(self, comment=None):
if comment:
command = 'commit comment "{0}"'.format(comment)
else:
command = 'commit'
self.send_command(command)
def discard_changes(self, *args, **kwargs):
self.send_command('discard')
def run_commands(self, commands=None, check_rc=True):
if commands is None:
raise ValueError("'commands' value is required")
responses = list()
for cmd in to_list(commands):
if not isinstance(cmd, Mapping):
cmd = {'command': cmd}
output = cmd.pop('output', None)
if output:
raise ValueError("'output' value %s is not supported for run_commands" % output)
try:
out = self.send_command(**cmd)
except AnsibleConnectionFailure as e:
if check_rc:
raise
out = getattr(e, 'err', e)
responses.append(out)
return responses
def get_device_operations(self):
return {
'supports_diff_replace': False,
'supports_commit': True,
'supports_rollback': False,
'supports_defaults': False,
'supports_onbox_diff': False,
'supports_commit_comment': True,
'supports_multiline_delimiter': False,
'supports_diff_match': False,
'supports_diff_ignore_lines': False,
'supports_generate_diff': False,
'supports_replace': False
}
def get_capabilities(self):
result = super(Cliconf, self).get_capabilities()
result['rpc'] += ['commit', 'discard_changes', 'run_commands']
result['device_operations'] = self.get_device_operations()
return json.dumps(result)

View File

@@ -1,141 +0,0 @@
#
# (c) 2018 Red Hat Inc.
#
# This file is part of Ansible
#
# Ansible is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Ansible is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Ansible. If not, see <http://www.gnu.org/licenses/>.
#
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
DOCUMENTATION = '''
---
cliconf: edgeswitch
short_description: Use edgeswitch cliconf to run command on EdgeSwitch platform
description:
- This edgeswitch plugin provides low level abstraction apis for
sending and receiving CLI commands from Ubiquiti EdgeSwitch network devices.
'''
import re
import time
import json
from itertools import chain
from ansible.errors import AnsibleConnectionFailure
from ansible.module_utils._text import to_text
from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.config import dumps
from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.utils import to_list
from ansible.plugins.cliconf import CliconfBase, enable_mode
from ansible.module_utils.common._collections_compat import Mapping
class Cliconf(CliconfBase):
def get_device_info(self):
device_info = {}
device_info['network_os'] = 'edgeswitch'
reply = self.get(command='show version')
data = to_text(reply, errors='surrogate_or_strict').strip()
match = re.search(r'Software Version\.+ (.*)', data)
if match:
device_info['network_os_version'] = match.group(1).strip(',')
match = re.search(r'^Machine Model\.+ (.*)', data, re.M)
if match:
device_info['network_os_model'] = match.group(1)
match = re.search(r'System Name\.+ (.*)', data, re.M)
if match:
device_info['network_os_hostname'] = match.group(1)
return device_info
@enable_mode
def get_config(self, source='running', flags=None):
if source not in ('running', 'startup'):
raise ValueError("fetching configuration from %s is not supported" % source)
if source == 'running':
cmd = 'show running-config '
else:
cmd = 'show startup-config '
if flags:
cmd += ' '.join(to_list(flags))
cmd = cmd.strip()
return self.send_command(cmd)
@enable_mode
def edit_config(self, commands):
resp = {}
results = []
requests = []
self.send_command('configure')
for line in to_list(commands):
if not isinstance(line, Mapping):
line = {'command': line}
cmd = line['command']
if cmd != 'end' and cmd[0] != '!':
results.append(self.send_command(**line))
requests.append(cmd)
self.send_command('end')
resp['request'] = requests
resp['response'] = results
return resp
def get(self, command=None, prompt=None, answer=None, sendonly=False, output=None, newline=True, check_all=False):
if not command:
raise ValueError('must provide value of command to execute')
if output:
raise ValueError("'output' value %s is not supported for get" % output)
return self.send_command(command=command, prompt=prompt, answer=answer, sendonly=sendonly, newline=newline, check_all=check_all)
def get_capabilities(self):
result = super(Cliconf, self).get_capabilities()
result['rpc'] += ['run_commands']
return json.dumps(result)
def run_commands(self, commands=None, check_rc=True):
if commands is None:
raise ValueError("'commands' value is required")
responses = list()
for cmd in to_list(commands):
if not isinstance(cmd, Mapping):
cmd = {'command': cmd}
output = cmd.pop('output', None)
if output:
raise ValueError("'output' value %s is not supported for run_commands" % output)
try:
out = self.send_command(**cmd)
except AnsibleConnectionFailure as e:
if check_rc:
raise
out = getattr(e, 'err', e)
responses.append(out)
return responses

View File

@@ -1,103 +0,0 @@
# (C) 2017 Red Hat Inc.
# Copyright (C) 2017 Lenovo.
#
# GNU General Public License v3.0+
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
#
# Contains CLIConf Plugin methods for ENOS Modules
# Lenovo Networking
#
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
DOCUMENTATION = '''
---
cliconf: enos
short_description: Use enos cliconf to run command on Lenovo ENOS platform
description:
- This enos plugin provides low level abstraction apis for
sending and receiving CLI commands from Lenovo ENOS network devices.
'''
import re
import json
from itertools import chain
from ansible.errors import AnsibleConnectionFailure
from ansible.module_utils._text import to_text
from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.utils import to_list
from ansible.plugins.cliconf import CliconfBase, enable_mode
class Cliconf(CliconfBase):
def get_device_info(self):
device_info = {}
device_info['network_os'] = 'enos'
reply = self.get('show version')
data = to_text(reply, errors='surrogate_or_strict').strip()
match = re.search(r'^Software Version (.*?) ', data, re.M | re.I)
if match:
device_info['network_os_version'] = match.group(1)
match = re.search(r'^Lenovo RackSwitch (\S+)', data, re.M | re.I)
if match:
device_info['network_os_model'] = match.group(1)
match = re.search(r'^(.+) uptime', data, re.M)
if match:
device_info['network_os_hostname'] = match.group(1)
else:
device_info['network_os_hostname'] = "NA"
return device_info
@enable_mode
def get_config(self, source='running', format='text', flags=None):
if source not in ('running', 'startup'):
msg = "fetching configuration from %s is not supported"
return self.invalid_params(msg % source)
if source == 'running':
cmd = 'show running-config'
else:
cmd = 'show startup-config'
return self.send_command(cmd)
@enable_mode
def edit_config(self, command):
for cmd in chain(['configure terminal'], to_list(command), ['end']):
self.send_command(cmd)
def get(self, command, prompt=None, answer=None, sendonly=False, newline=True, check_all=False):
return self.send_command(command=command, prompt=prompt, answer=answer, sendonly=sendonly, newline=newline, check_all=check_all)
def get_capabilities(self):
result = super(Cliconf, self).get_capabilities()
return json.dumps(result)
def set_cli_prompt_context(self):
"""
Make sure we are in the operational cli mode
:return: None
"""
if self._connection.connected:
out = self._connection.get_prompt()
if out is None:
raise AnsibleConnectionFailure(message=u'cli prompt is not identified from the last received'
u' response window: %s' % self._connection._last_recv_window)
if to_text(out, errors='surrogate_then_replace').strip().endswith(')#'):
self._connection.queue_message('vvvv', 'In Config mode, sending exit to device')
self._connection.send_command('exit')
else:
self._connection.send_command('enable')

View File

@@ -1,97 +0,0 @@
#
# Copyright (c) 2019 Ericsson AB.
#
# Ansible is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Ansible is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Ansible. If not, see <http://www.gnu.org/licenses/>.
#
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
DOCUMENTATION = '''
---
author: Ericsson IPOS OAM team
cliconf: eccli
short_description: Use eccli cliconf to run command on Ericsson ECCLI platform
description:
- This eccli plugin provides low level abstraction APIs for
sending and receiving CLI commands from Ericsson ECCLI network devices.
'''
from ansible.module_utils.common._collections_compat import Mapping
import collections
import re
import time
import json
from itertools import chain
from ansible.errors import AnsibleConnectionFailure
from ansible.module_utils._text import to_text
from ansible.module_utils.six import iteritems
from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.config import NetworkConfig, dumps
from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.utils import to_list
from ansible.plugins.cliconf import CliconfBase, enable_mode
class Cliconf(CliconfBase):
def get_config(self, source='running', flags=None, format=None):
return
def edit_config(self, candidate=None, commit=True, replace=None, comment=None):
return
def get(self, command=None, prompt=None, answer=None, sendonly=False, output=None, newline=True, check_all=False):
if not command:
raise ValueError('must provide value of command to execute')
if output:
raise ValueError("'output' value %s is not supported for get" % output)
return self.send_command(command=command, prompt=prompt, answer=answer, sendonly=sendonly, newline=newline, check_all=check_all)
def get_device_info(self):
device_info = {}
device_info['network_os'] = 'eric_eccli'
return device_info
def get_capabilities(self):
result = dict()
result['rpc'] = self.get_base_rpc() + ['run_commands']
result['network_api'] = 'cliconf'
result['device_info'] = self.get_device_info()
return json.dumps(result)
def run_commands(self, commands=None, check_rc=True):
if commands is None:
raise ValueError("'commands' value is required")
responses = list()
for cmd in to_list(commands):
if not isinstance(cmd, Mapping):
cmd = {'command': cmd}
output = cmd.pop('output', None)
if output:
raise ValueError("'output' value %s is not supported for run_commands" % output)
try:
out = self.send_command(**cmd)
except AnsibleConnectionFailure as e:
if check_rc:
raise
out = getattr(e, 'err', e)
responses.append(out)
return responses

View File

@@ -1,229 +0,0 @@
#
# (c) 2017 Red Hat Inc.
#
# This file is part of Ansible
#
# Ansible is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Ansible is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Ansible. If not, see <http://www.gnu.org/licenses/>.
#
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
DOCUMENTATION = '''
---
cliconf: exos
short_description: Use exos cliconf to run command on Extreme EXOS platform
description:
- This exos plugin provides low level abstraction apis for
sending and receiving CLI commands from Extreme EXOS network devices.
'''
import re
import json
from ansible.errors import AnsibleConnectionFailure
from ansible.module_utils._text import to_bytes, to_text
from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.utils import to_list
from ansible.module_utils.connection import ConnectionError
from ansible.module_utils.common._collections_compat import Mapping
from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.config import NetworkConfig, dumps
from ansible.plugins.cliconf import CliconfBase
class Cliconf(CliconfBase):
def get_diff(self, candidate=None, running=None, diff_match='line', diff_ignore_lines=None, path=None, diff_replace='line'):
diff = {}
device_operations = self.get_device_operations()
option_values = self.get_option_values()
if candidate is None and device_operations['supports_generate_diff']:
raise ValueError("candidate configuration is required to generate diff")
if diff_match not in option_values['diff_match']:
raise ValueError("'match' value %s in invalid, valid values are %s" % (diff_match, ', '.join(option_values['diff_match'])))
if diff_replace not in option_values['diff_replace']:
raise ValueError("'replace' value %s in invalid, valid values are %s" % (diff_replace, ', '.join(option_values['diff_replace'])))
# prepare candidate configuration
candidate_obj = NetworkConfig(indent=1)
candidate_obj.load(candidate)
if running and diff_match != 'none' and diff_replace != 'config':
# running configuration
running_obj = NetworkConfig(indent=1, contents=running, ignore_lines=diff_ignore_lines)
configdiffobjs = candidate_obj.difference(running_obj, path=path, match=diff_match, replace=diff_replace)
else:
configdiffobjs = candidate_obj.items
diff['config_diff'] = dumps(configdiffobjs, 'commands') if configdiffobjs else ''
return diff
def get_device_info(self):
device_info = {}
device_info['network_os'] = 'exos'
reply = self.run_commands({'command': 'show switch detail', 'output': 'text'})
data = to_text(reply, errors='surrogate_or_strict').strip()
match = re.search(r'ExtremeXOS version (\S+)', data)
if match:
device_info['network_os_version'] = match.group(1)
match = re.search(r'System Type: +(\S+)', data)
if match:
device_info['network_os_model'] = match.group(1)
match = re.search(r'SysName: +(\S+)', data)
if match:
device_info['network_os_hostname'] = match.group(1)
return device_info
def get_default_flag(self):
# The flag to modify the command to collect configuration with defaults
return 'detail'
def get_config(self, source='running', format='text', flags=None):
options_values = self.get_option_values()
if format not in options_values['format']:
raise ValueError("'format' value %s is invalid. Valid values are %s" % (format, ','.join(options_values['format'])))
lookup = {'running': 'show configuration', 'startup': 'debug cfgmgr show configuration file'}
if source not in lookup:
raise ValueError("fetching configuration from %s is not supported" % source)
cmd = {'command': lookup[source], 'output': 'text'}
if source == 'startup':
reply = self.run_commands({'command': 'show switch', 'format': 'text'})
data = to_text(reply, errors='surrogate_or_strict').strip()
match = re.search(r'Config Selected: +(\S+)\.cfg', data, re.MULTILINE)
if match:
cmd['command'] += match.group(1)
else:
# No Startup(/Selected) Config
return {}
cmd['command'] += ' '.join(to_list(flags))
cmd['command'] = cmd['command'].strip()
return self.run_commands(cmd)[0]
def edit_config(self, candidate=None, commit=True, replace=None, diff=False, comment=None):
resp = {}
operations = self.get_device_operations()
self.check_edit_config_capability(operations, candidate, commit, replace, comment)
results = []
requests = []
if commit:
for line in to_list(candidate):
if not isinstance(line, Mapping):
line = {'command': line}
results.append(self.send_command(**line))
requests.append(line['command'])
else:
raise ValueError('check mode is not supported')
resp['request'] = requests
resp['response'] = results
return resp
def get(self, command, prompt=None, answer=None, sendonly=False, output=None, newline=True, check_all=False):
if output:
command = self._get_command_with_output(command, output)
return self.send_command(command=command, prompt=prompt, answer=answer, sendonly=sendonly, newline=newline, check_all=check_all)
def run_commands(self, commands=None, check_rc=True):
if commands is None:
raise ValueError("'commands' value is required")
responses = list()
for cmd in to_list(commands):
if not isinstance(cmd, Mapping):
cmd = {'command': cmd}
output = cmd.pop('output', None)
if output:
cmd['command'] = self._get_command_with_output(cmd['command'], output)
try:
out = self.send_command(**cmd)
except AnsibleConnectionFailure as e:
if check_rc is True:
raise
out = getattr(e, 'err', e)
if out is not None:
try:
out = to_text(out, errors='surrogate_or_strict').strip()
except UnicodeError:
raise ConnectionError(message=u'Failed to decode output from %s: %s' % (cmd, to_text(out)))
if output and output == 'json':
try:
out = json.loads(out)
except ValueError:
raise ConnectionError('Response was not valid JSON, got {0}'.format(
to_text(out)
))
responses.append(out)
return responses
def get_device_operations(self):
return {
'supports_diff_replace': False, # identify if config should be merged or replaced is supported
'supports_commit': False, # identify if commit is supported by device or not
'supports_rollback': False, # identify if rollback is supported or not
'supports_defaults': True, # identify if fetching running config with default is supported
'supports_commit_comment': False, # identify if adding comment to commit is supported of not
'supports_onbox_diff': False, # identify if on box diff capability is supported or not
'supports_generate_diff': True, # identify if diff capability is supported within plugin
'supports_multiline_delimiter': False, # identify if multiline delimiter is supported within config
'supports_diff_match': True, # identify if match is supported
'supports_diff_ignore_lines': True, # identify if ignore line in diff is supported
'supports_config_replace': False, # identify if running config replace with candidate config is supported
'supports_admin': False, # identify if admin configure mode is supported or not
'supports_commit_label': False, # identify if commit label is supported or not
'supports_replace': False
}
def get_option_values(self):
return {
'format': ['text', 'json'],
'diff_match': ['line', 'strict', 'exact', 'none'],
'diff_replace': ['line', 'block'],
'output': ['text', 'json']
}
def get_capabilities(self):
result = super(Cliconf, self).get_capabilities()
result['rpc'] += ['run_commmands', 'get_default_flag', 'get_diff']
result['device_operations'] = self.get_device_operations()
result['device_info'] = self.get_device_info()
result.update(self.get_option_values())
return json.dumps(result)
def _get_command_with_output(self, command, output):
if output not in self.get_option_values().get('output'):
raise ValueError("'output' value is %s is invalid. Valid values are %s" % (output, ','.join(self.get_option_values().get('output'))))
if output == 'json' and not command.startswith('run script cli2json.py'):
cmd = 'run script cli2json.py %s' % command
else:
cmd = command
return cmd

View File

@@ -1,314 +0,0 @@
# Copyright: (c) 2019, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
DOCUMENTATION = '''
---
author: Ruckus Wireless (@Commscope)
cliconf: icx
short_description: Use icx cliconf to run command on Ruckus ICX platform
description:
- This icx plugin provides low level abstraction APIs for
sending and receiving CLI commands from Ruckus ICX network devices.
'''
import re
import time
import json
import os
from itertools import chain
from ansible.errors import AnsibleConnectionFailure
from ansible.module_utils._text import to_text
from ansible.module_utils.six import iteritems
from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.config import NetworkConfig, dumps
from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.utils import to_list
from ansible.plugins.cliconf import CliconfBase, enable_mode
from ansible.module_utils.common._collections_compat import Mapping
class Cliconf(CliconfBase):
@enable_mode
def get_config(self, source='running', flags=None, format=None, compare=None):
if source not in ('running', 'startup'):
raise ValueError("fetching configuration from %s is not supported" % source)
if format:
raise ValueError("'format' value %s is not supported for get_config" % format)
if not flags:
flags = []
if compare is False:
return ''
else:
if source == 'running':
cmd = 'show running-config '
else:
cmd = 'show configuration '
cmd += ' '.join(to_list(flags))
cmd = cmd.strip()
return self.send_command(cmd)
def get_diff(self, candidate=None, running=None, diff_match='line', diff_ignore_lines=None, path=None, diff_replace='line'):
"""
Generate diff between candidate and running configuration. If the
remote host supports onbox diff capabilities ie. supports_onbox_diff in that case
candidate and running configurations are not required to be passed as argument.
In case if onbox diff capability is not supported candidate argument is mandatory
and running argument is optional.
:param candidate: The configuration which is expected to be present on remote host.
:param running: The base configuration which is used to generate diff.
:param diff_match: Instructs how to match the candidate configuration with current device configuration
Valid values are 'line', 'strict', 'exact', 'none'.
'line' - commands are matched line by line
'strict' - command lines are matched with respect to position
'exact' - command lines must be an equal match
'none' - will not compare the candidate configuration with the running configuration
:param diff_ignore_lines: Use this argument to specify one or more lines that should be
ignored during the diff. This is used for lines in the configuration
that are automatically updated by the system. This argument takes
a list of regular expressions or exact line matches.
:param path: The ordered set of parents that uniquely identify the section or hierarchy
the commands should be checked against. If the parents argument
is omitted, the commands are checked against the set of top
level or global commands.
:param diff_replace: Instructs on the way to perform the configuration on the device.
If the replace argument is set to I(line) then the modified lines are
pushed to the device in configuration mode. If the replace argument is
set to I(block) then the entire command block is pushed to the device in
configuration mode if any line is not correct.
:return: Configuration diff in json format.
{
'config_diff': '',
'banner_diff': {}
}
"""
diff = {}
device_operations = self.get_device_operations()
option_values = self.get_option_values()
if candidate is None and device_operations['supports_generate_diff']:
raise ValueError("candidate configuration is required to generate diff")
if diff_match not in option_values['diff_match']:
raise ValueError("'match' value %s in invalid, valid values are %s" % (diff_match, ', '.join(option_values['diff_match'])))
if diff_replace not in option_values['diff_replace']:
raise ValueError("'replace' value %s in invalid, valid values are %s" % (diff_replace, ', '.join(option_values['diff_replace'])))
# prepare candidate configuration
candidate_obj = NetworkConfig(indent=1)
want_src, want_banners = self._extract_banners(candidate)
candidate_obj.load(want_src)
if running and diff_match != 'none':
# running configuration
have_src, have_banners = self._extract_banners(running)
running_obj = NetworkConfig(indent=1, contents=have_src, ignore_lines=diff_ignore_lines)
configdiffobjs = candidate_obj.difference(running_obj, path=path, match=diff_match, replace=diff_replace)
else:
configdiffobjs = candidate_obj.items
have_banners = {}
diff['config_diff'] = dumps(configdiffobjs, 'commands') if configdiffobjs else ''
banners = self._diff_banners(want_banners, have_banners)
diff['banner_diff'] = banners if banners else {}
return diff
@enable_mode
def edit_config(self, candidate=None, commit=True, replace=None, comment=None):
resp = {}
operations = self.get_device_operations()
self.check_edit_config_capability(operations, candidate, commit, replace, comment)
results = []
requests = []
if commit:
prompt = self._connection.get_prompt()
if (b'(config-if' in prompt) or (b'(config' in prompt) or (b'(config-lag-if' in prompt):
self.send_command('end')
self.send_command('configure terminal')
for line in to_list(candidate):
if not isinstance(line, Mapping):
line = {'command': line}
cmd = line['command']
if cmd != 'end' and cmd[0] != '!':
results.append(self.send_command(**line))
requests.append(cmd)
self.send_command('end')
else:
raise ValueError('check mode is not supported')
resp['request'] = requests
resp['response'] = results
return resp
def get(self, command=None, prompt=None, answer=None, sendonly=False, output=None, check_all=False):
if not command:
raise ValueError('must provide value of command to execute')
if output:
raise ValueError("'output' value %s is not supported for get" % output)
return self.send_command(command=command, prompt=prompt, answer=answer, sendonly=sendonly, check_all=check_all)
def scp(self, command=None, scp_user=None, scp_pass=None):
if not command:
raise ValueError('must provide value of command to execute')
prompt = ["User name:", "Password:"]
if(scp_pass is None):
answer = [scp_user, self._connection._play_context.password]
else:
answer = [scp_user, scp_pass]
return self.send_command(command=command, prompt=prompt, answer=answer, sendonly=False, check_all=True)
def get_device_info(self):
device_info = {}
device_info['network_os'] = 'icx'
reply = self.get(command='show version')
data = to_text(reply, errors='surrogate_or_strict').strip()
match = re.search(r'Version (\S+)', data)
if match:
device_info['network_os_version'] = match.group(1).strip(',')
match = re.search(r'^Cisco (.+) \(revision', data, re.M)
if match:
device_info['network_os_model'] = match.group(1)
match = re.search(r'^(.+) uptime', data, re.M)
if match:
device_info['network_os_hostname'] = match.group(1)
return device_info
def get_device_operations(self):
return {
'supports_diff_replace': True,
'supports_commit': False,
'supports_rollback': False,
'supports_defaults': True,
'supports_onbox_diff': False,
'supports_commit_comment': False,
'supports_multiline_delimiter': True,
'supports_diff_match': True,
'supports_diff_ignore_lines': True,
'supports_generate_diff': True,
'supports_replace': False
}
def get_option_values(self):
return {
'format': ['text'],
'diff_match': ['line', 'strict', 'exact', 'none'],
'diff_replace': ['line', 'block'],
'output': []
}
def get_capabilities(self):
result = dict()
result['rpc'] = self.get_base_rpc() + ['edit_banner', 'get_diff', 'run_commands', 'get_defaults_flag']
result['network_api'] = 'cliconf'
result['device_operations'] = self.get_device_operations()
result.update(self.get_option_values())
return json.dumps(result)
def edit_banner(self, candidate=None, multiline_delimiter="@", commit=True):
"""
Edit banner on remote device
:param banners: Banners to be loaded in json format
:param multiline_delimiter: Line delimiter for banner
:param commit: Boolean value that indicates if the device candidate
configuration should be pushed in the running configuration or discarded.
:param diff: Boolean flag to indicate if configuration that is applied on remote host should
generated and returned in response or not
:return: Returns response of executing the configuration command received
from remote host
"""
resp = {}
banners_obj = json.loads(candidate)
results = []
requests = []
if commit:
for key, value in iteritems(banners_obj):
key += ' %s' % multiline_delimiter
self.send_command('config terminal', sendonly=True)
for cmd in [key, value, multiline_delimiter]:
obj = {'command': cmd, 'sendonly': True}
results.append(self.send_command(**obj))
requests.append(cmd)
self.send_command('end', sendonly=True)
time.sleep(0.1)
results.append(self.send_command('\n'))
requests.append('\n')
resp['request'] = requests
resp['response'] = results
return resp
def run_commands(self, commands=None, check_rc=True):
if commands is None:
raise ValueError("'commands' value is required")
responses = list()
for cmd in to_list(commands):
if not isinstance(cmd, Mapping):
cmd = {'command': cmd}
output = cmd.pop('output', None)
if output:
raise ValueError("'output' value %s is not supported for run_commands" % output)
try:
out = self.send_command(**cmd)
except AnsibleConnectionFailure as e:
if check_rc:
raise
out = getattr(e, 'err', to_text(e))
responses.append(out)
return responses
def _extract_banners(self, config):
banners = {}
banner_cmds = re.findall(r'^banner (\w+)', config, re.M)
for cmd in banner_cmds:
regex = r'banner %s \$(.+?)(?=\$)' % cmd
match = re.search(regex, config, re.S)
if match:
key = 'banner %s' % cmd
banners[key] = match.group(1).strip()
for cmd in banner_cmds:
regex = r'banner %s \$(.+?)(?=\$)' % cmd
match = re.search(regex, config, re.S)
if match:
config = config.replace(str(match.group(1)), '')
config = re.sub(r'banner \w+ \$\$', '!! banner removed', config)
return config, banners
def _diff_banners(self, want, have):
candidate = {}
for key, value in iteritems(want):
if value != have.get(key):
candidate[key] = value
return candidate

View File

@@ -1,95 +0,0 @@
#
# (c) 2017 Red Hat Inc.
#
# This file is part of Ansible
#
# Ansible is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Ansible is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Ansible. If not, see <http://www.gnu.org/licenses/>.
#
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
DOCUMENTATION = '''
---
cliconf: ironware
short_description: Use ironware cliconf to run command on Extreme Ironware platform
description:
- This ironware plugin provides low level abstraction apis for
sending and receiving CLI commands from Extreme Ironware network devices.
'''
import re
import json
from itertools import chain
from ansible.module_utils._text import to_bytes, to_text
from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.utils import to_list
from ansible.plugins.cliconf import CliconfBase, enable_mode
class Cliconf(CliconfBase):
def get_device_info(self):
device_info = {}
device_info['network_os'] = 'ironware'
reply = self.send_command('show version')
data = to_text(reply, errors='surrogate_or_strict').strip()
match = re.search(r'IronWare : Version (\S+),', data)
if match:
device_info['network_os_version'] = match.group(1)
match = re.search(r'^(?:System Mode\:|System\:) (CES|CER|MLX|XMR)', data, re.M)
if match:
device_info['network_os_model'] = match.group(1)
return device_info
@enable_mode
def get_config(self, source='running', format='text', flags=None):
if source not in ('running', 'startup'):
raise ValueError("fetching configuration from %s is not supported" % source)
if source == 'running':
cmd = 'show running-config'
if flags is not None:
cmd += ' ' + ' '.join(flags)
else:
cmd = 'show configuration'
if flags is not None:
raise ValueError("flags are only supported with running-config")
return self.send_command(cmd)
@enable_mode
def edit_config(self, command):
for cmd in chain(['configure terminal'], to_list(command), ['end']):
self.send_command(cmd)
def get(self, command, prompt=None, answer=None, sendonly=False, newline=True, check_all=False):
return self.send_command(command=command, prompt=prompt, answer=answer, sendonly=sendonly, newline=newline, check_all=check_all)
def get_capabilities(self):
result = super(Cliconf, self).get_capabilities()
return json.dumps(result)
def set_cli_prompt_context(self):
"""
Make sure we are in the operational cli mode
:return: None
"""
if self._connection.connected:
self._update_cli_prompt_context(config_context=')#')

View File

@@ -1,74 +0,0 @@
#
# (c) 2016 Red Hat Inc.
#
# This file is part of Ansible
#
# Ansible is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Ansible is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Ansible. If not, see <http://www.gnu.org/licenses/>.
#
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
DOCUMENTATION = '''
---
cliconf: netvisor
short_description: Use netvisor cliconf to run command on Pluribus netvisor platform
description:
- This netvisor plugin provides low level abstraction apis for
sending and receiving CLI commands from Pluribus netvisor devices.
'''
import json
from ansible.plugins.cliconf import CliconfBase
class Cliconf(CliconfBase):
def get_config(self, source='running', format='text', flags=None):
if source not in ('running'):
return self.invalid_params("fetching configuration from %s is not supported" % source)
cmd = 'show running-config'
return self.send_command(cmd)
def edit_config(self, command):
return
def get(self, command=None, prompt=None, answer=None, sendonly=False, output=None, newline=True, check_all=False):
if not command:
raise ValueError('must provide value of command to execute')
if output:
raise ValueError("'output' value %s is not supported for get" % output)
return self.send_command(command=command, prompt=prompt, answer=answer, sendonly=sendonly, newline=newline, check_all=check_all)
def get_option_values(self):
return {
'format': ['text'],
'diff_match': ['line', 'strict', 'exact', 'none'],
'diff_replace': ['line', 'block'],
'output': []
}
def get_capabilities(self):
result = dict()
result['rpc'] = self.get_base_rpc()
result['network_api'] = 'cliconf'
result['device_info'] = self.get_device_info()
result.update(self.get_option_values())
return json.dumps(result)
def get_device_info(self):
device_info = {}
device_info['network_os'] = 'netvisor'
return device_info

View File

@@ -1,112 +0,0 @@
#
# (c) 2018 Extreme Networks Inc.
#
# This file is part of Ansible
#
# Ansible is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Ansible is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Ansible. If not, see <http://www.gnu.org/licenses/>.
#
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
DOCUMENTATION = '''
---
cliconf: nos
short_description: Use nos cliconf to run command on Extreme NOS platform
description:
- This nos plugin provides low level abstraction apis for
sending and receiving CLI commands from Extreme NOS network devices.
'''
import re
import json
from ansible.module_utils._text import to_text
from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.utils import to_list
from ansible.plugins.cliconf import CliconfBase
class Cliconf(CliconfBase):
def get_device_info(self):
device_info = {}
device_info['network_os'] = 'nos'
reply = self.get('show version')
data = to_text(reply, errors='surrogate_or_strict').strip()
match = re.search(r'Network Operating System Version: (\S+)', data)
if match:
device_info['network_os_version'] = match.group(1)
reply = self.get('show chassis')
data = to_text(reply, errors='surrogate_or_strict').strip()
match = re.search(r'^Chassis Name:(\s+)(\S+)', data, re.M)
if match:
device_info['network_os_model'] = match.group(2)
reply = self.get('show running-config | inc "switch-attributes host-name"')
data = to_text(reply, errors='surrogate_or_strict').strip()
match = re.search(r'switch-attributes host-name (\S+)', data, re.M)
if match:
device_info['network_os_hostname'] = match.group(1)
return device_info
def get_config(self, source='running', flags=None):
if source not in 'running':
raise ValueError("fetching configuration from %s is not supported" % source)
if source == 'running':
cmd = 'show running-config'
flags = [] if flags is None else flags
cmd += ' '.join(flags)
cmd = cmd.strip()
return self.send_command(cmd)
def edit_config(self, command):
resp = {}
results = []
requests = []
self.send_command('configure terminal')
for cmd in to_list(command):
if isinstance(cmd, dict):
command = cmd['command']
prompt = cmd['prompt']
answer = cmd['answer']
newline = cmd.get('newline', True)
else:
command = cmd
prompt = None
answer = None
newline = True
if cmd != 'end' and cmd[0] != '!':
results.append(self.send_command(command, prompt, answer, False, newline))
requests.append(cmd)
self.send_command('end')
resp['request'] = requests
resp['response'] = results
return resp
def get(self, command, prompt=None, answer=None, sendonly=False, newline=True, check_all=False):
return self.send_command(command=command, prompt=prompt, answer=answer, sendonly=sendonly, newline=newline, check_all=check_all)
def get_capabilities(self):
result = super(Cliconf, self).get_capabilities()
return json.dumps(result)

View File

@@ -1,77 +0,0 @@
#
# (c) 2017 Red Hat Inc.
#
# This file is part of Ansible
#
# Ansible is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Ansible is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Ansible. If not, see <http://www.gnu.org/licenses/>.
#
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
DOCUMENTATION = '''
---
cliconf: onyx
short_description: Use onyx cliconf to run command on Mellanox ONYX platform
description:
- This onyx plugin provides low level abstraction apis for
sending and receiving CLI commands from Mellanox ONYX network devices.
'''
import json
from itertools import chain
from ansible.module_utils._text import to_text
from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.utils import to_list
from ansible.plugins.cliconf import CliconfBase, enable_mode
class Cliconf(CliconfBase):
def get_device_info(self):
device_info = {}
reply = self.get('show version | json-print')
data = json.loads(reply)
device_info['network_os'] = data['Product name']
device_info['network_os_version'] = data['Product release']
device_info['network_os_version_summary'] = data['Version summary']
device_info['network_os_model'] = data['Product model']
reply = self.get('show hosts | include Hostname')
data = to_text(reply, errors='surrogate_or_strict').strip()
hostname = data.split(':')[1]
hostname = hostname.strip()
device_info['network_os_hostname'] = hostname
return device_info
@enable_mode
def get_config(self, source='running', format='text', flags=None):
if source not in ('running',):
return self.invalid_params("fetching configuration from %s is not supported" % source)
cmd = 'show running-config'
return self.send_command(cmd)
@enable_mode
def edit_config(self, command):
for cmd in chain(['configure terminal'], to_list(command), ['exit']):
self.send_command(cmd)
def get(self, command, prompt=None, answer=None, sendonly=False, newline=True, check_all=False):
return self.send_command(command=command, prompt=prompt, answer=answer, sendonly=sendonly, newline=newline, check_all=check_all)
def get_capabilities(self):
result = super(Cliconf, self).get_capabilities()
return json.dumps(result)

View File

@@ -1,78 +0,0 @@
#
# (c) 2017 Red Hat Inc.
#
# This file is part of Ansible
#
# Ansible is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Ansible is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Ansible. If not, see <http://www.gnu.org/licenses/>.
#
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
DOCUMENTATION = '''
---
cliconf: routeros
short_description: Use routeros cliconf to run command on MikroTik RouterOS platform
description:
- This routeros plugin provides low level abstraction apis for
sending and receiving CLI commands from MikroTik RouterOS network devices.
'''
import re
import json
from itertools import chain
from ansible.module_utils._text import to_bytes, to_text
from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.utils import to_list
from ansible.plugins.cliconf import CliconfBase, enable_mode
class Cliconf(CliconfBase):
def get_device_info(self):
device_info = {}
device_info['network_os'] = 'RouterOS'
resource = self.get('/system resource print')
data = to_text(resource, errors='surrogate_or_strict').strip()
match = re.search(r'version: (\S+)', data)
if match:
device_info['network_os_version'] = match.group(1)
routerboard = self.get('/system routerboard print')
data = to_text(routerboard, errors='surrogate_or_strict').strip()
match = re.search(r'model: (.+)$', data, re.M)
if match:
device_info['network_os_model'] = match.group(1)
identity = self.get('/system identity print')
data = to_text(identity, errors='surrogate_or_strict').strip()
match = re.search(r'name: (.+)$', data, re.M)
if match:
device_info['network_os_hostname'] = match.group(1)
return device_info
def get_config(self, source='running', format='text', flags=None):
return
def edit_config(self, command):
return
def get(self, command, prompt=None, answer=None, sendonly=False, newline=True, check_all=False):
return self.send_command(command=command, prompt=prompt, answer=answer, sendonly=sendonly, newline=newline, check_all=check_all)
def get_capabilities(self):
result = super(Cliconf, self).get_capabilities()
return json.dumps(result)

View File

@@ -1,104 +0,0 @@
#
# (c) 2018 Extreme Networks Inc.
#
# This file is part of Ansible
#
# Ansible is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Ansible is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Ansible. If not, see <http://www.gnu.org/licenses/>.
#
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
DOCUMENTATION = '''
---
cliconf: slxos
short_description: Use slxos cliconf to run command on Extreme SLX-OS platform
description:
- This slxos plugin provides low level abstraction apis for
sending and receiving CLI commands from Extreme SLX-OS network devices.
'''
import re
import json
from itertools import chain
from ansible.module_utils._text import to_bytes, to_text
from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.utils import to_list
from ansible.plugins.cliconf import CliconfBase
class Cliconf(CliconfBase):
def get_device_info(self):
device_info = {}
device_info['network_os'] = 'slxos'
reply = self.get('show version')
data = to_text(reply, errors='surrogate_or_strict').strip()
match = re.search(r'SLX\-OS Operating System Version: (\S+)', data)
if match:
device_info['network_os_version'] = match.group(1)
reply = self.get('show chassis')
data = to_text(reply, errors='surrogate_or_strict').strip()
match = re.search(r'^Chassis Name:(\s+)(\S+)', data, re.M)
if match:
device_info['network_os_model'] = match.group(2)
reply = self.get('show running-config | inc "switch-attributes host-name"')
data = to_text(reply, errors='surrogate_or_strict').strip()
match = re.search(r'switch-attributes host-name (\S+)', data, re.M)
if match:
device_info['network_os_hostname'] = match.group(1)
return device_info
def get_config(self, source='running', flags=None):
if source not in ('running', 'startup'):
raise ValueError("fetching configuration from %s is not supported" % source)
if source == 'running':
cmd = 'show running-config'
else:
cmd = 'show startup-config'
flags = [] if flags is None else flags
cmd += ' '.join(flags)
cmd = cmd.strip()
return self.send_command(cmd)
def edit_config(self, command):
for cmd in chain(['configure terminal'], to_list(command), ['end']):
if isinstance(cmd, dict):
command = cmd['command']
prompt = cmd['prompt']
answer = cmd['answer']
newline = cmd.get('newline', True)
else:
command = cmd
prompt = None
answer = None
newline = True
self.send_command(command, prompt, answer, False, newline)
def get(self, command, prompt=None, answer=None, sendonly=False, newline=True, check_all=False):
return self.send_command(command=command, prompt=prompt, answer=answer, sendonly=sendonly, newline=newline, check_all=check_all)
def get_capabilities(self):
result = super(Cliconf, self).get_capabilities()
return json.dumps(result)

View File

@@ -1,235 +0,0 @@
#
# (c) 2018 Extreme Networks Inc.
#
# This file is part of Ansible
#
# Ansible is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Ansible is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Ansible. If not, see <http://www.gnu.org/licenses/>.
#
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
DOCUMENTATION = '''
---
cliconf: voss
short_description: Use voss cliconf to run command on Extreme VOSS platform
description:
- This voss plugin provides low level abstraction apis for
sending and receiving CLI commands from Extreme VOSS network devices.
'''
import re
import json
from ansible.errors import AnsibleConnectionFailure
from ansible.module_utils._text import to_text
from ansible.module_utils.common._collections_compat import Mapping
from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.config import NetworkConfig, dumps
from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.utils import to_list
from ansible_collections.community.general.plugins.module_utils.network.voss.voss import VossNetworkConfig
from ansible.plugins.cliconf import CliconfBase, enable_mode
class Cliconf(CliconfBase):
@enable_mode
def get_config(self, source='running', flags=None, format=None):
if source not in ('running', 'startup'):
raise ValueError("fetching configuration from %s is not supported" % source)
if format:
raise ValueError("'format' value %s is not supported for get_config" % format)
if not flags:
flags = []
if source == 'running':
cmd = 'show running-config '
cmd += ' '.join(to_list(flags))
cmd = cmd.strip()
else:
cmd = 'more /intflash/config.cfg'
return self.send_command(cmd)
def get_diff(self, candidate=None, running=None, diff_match='line', diff_ignore_lines=None, path=None, diff_replace='line'):
"""
Generate diff between candidate and running configuration. If the
remote host supports onbox diff capabilities ie. supports_onbox_diff in that case
candidate and running configurations are not required to be passed as argument.
In case if onbox diff capability is not supported candidate argument is mandatory
and running argument is optional.
:param candidate: The configuration which is expected to be present on remote host.
:param running: The base configuration which is used to generate diff.
:param diff_match: Instructs how to match the candidate configuration with current device configuration
Valid values are 'line', 'strict', 'exact', 'none'.
'line' - commands are matched line by line
'strict' - command lines are matched with respect to position
'exact' - command lines must be an equal match
'none' - will not compare the candidate configuration with the running configuration
:param diff_ignore_lines: Use this argument to specify one or more lines that should be
ignored during the diff. This is used for lines in the configuration
that are automatically updated by the system. This argument takes
a list of regular expressions or exact line matches.
:param path: The ordered set of parents that uniquely identify the section or hierarchy
the commands should be checked against. If the parents argument
is omitted, the commands are checked against the set of top
level or global commands.
:param diff_replace: Instructs on the way to perform the configuration on the device.
If the replace argument is set to I(line) then the modified lines are
pushed to the device in configuration mode. If the replace argument is
set to I(block) then the entire command block is pushed to the device in
configuration mode if any line is not correct.
:return: Configuration diff in json format.
{
'config_diff': '',
}
"""
diff = {}
device_operations = self.get_device_operations()
option_values = self.get_option_values()
if candidate is None and device_operations['supports_generate_diff']:
raise ValueError("candidate configuration is required to generate diff")
if diff_match not in option_values['diff_match']:
raise ValueError("'match' value %s in invalid, valid values are %s" % (diff_match, ', '.join(option_values['diff_match'])))
if diff_replace not in option_values['diff_replace']:
raise ValueError("'replace' value %s in invalid, valid values are %s" % (diff_replace, ', '.join(option_values['diff_replace'])))
# prepare candidate configuration
candidate_obj = VossNetworkConfig(indent=0, ignore_lines=diff_ignore_lines)
candidate_obj.load(candidate)
if running and diff_match != 'none':
# running configuration
running_obj = VossNetworkConfig(indent=0, contents=running, ignore_lines=diff_ignore_lines)
configdiffobjs = candidate_obj.difference(running_obj, path=path, match=diff_match, replace=diff_replace)
else:
configdiffobjs = candidate_obj.items
diff['config_diff'] = dumps(configdiffobjs, 'commands') if configdiffobjs else ''
diff['diff_path'] = path
diff['diff_replace'] = diff_replace
return diff
@enable_mode
def edit_config(self, candidate=None, commit=True, replace=None, comment=None):
resp = {}
operations = self.get_device_operations()
self.check_edit_config_capability(operations, candidate, commit, replace, comment)
results = []
requests = []
if commit:
self.send_command('configure terminal')
for line in to_list(candidate):
if not isinstance(line, Mapping):
line = {'command': line}
cmd = line['command']
if cmd != 'end' and cmd[0] != '!':
results.append(self.send_command(**line))
requests.append(cmd)
self.send_command('end')
else:
raise ValueError('check mode is not supported')
resp['request'] = requests
resp['response'] = results
return resp
def get(self, command, prompt=None, answer=None, sendonly=False, newline=True, check_all=False):
return self.send_command(command=command, prompt=prompt, answer=answer, sendonly=sendonly, newline=newline, check_all=check_all)
def get_device_info(self):
device_info = {}
device_info['network_os'] = 'voss'
reply = self.get(command='show sys-info')
data = to_text(reply, errors='surrogate_or_strict').strip()
match = re.search(r'SysDescr\s+: \S+ \((\S+)\)', data)
if match:
device_info['network_os_version'] = match.group(1)
match = re.search(r'Chassis\s+: (\S+)', data)
if match:
device_info['network_os_model'] = match.group(1)
match = re.search(r'SysName\s+: (\S+)', data)
if match:
device_info['network_os_hostname'] = match.group(1)
return device_info
def get_device_operations(self):
return {
'supports_diff_replace': True,
'supports_commit': False,
'supports_rollback': False,
'supports_defaults': True,
'supports_onbox_diff': False,
'supports_commit_comment': False,
'supports_multiline_delimiter': False,
'supports_diff_match': True,
'supports_diff_ignore_lines': True,
'supports_generate_diff': True,
'supports_replace': False
}
def get_option_values(self):
return {
'format': ['text'],
'diff_match': ['line', 'strict', 'exact', 'none'],
'diff_replace': ['line', 'block'],
'output': []
}
def get_capabilities(self):
result = super(Cliconf, self).get_capabilities()
result['rpc'] += ['get_diff', 'run_commands', 'get_defaults_flag']
result['device_operations'] = self.get_device_operations()
result.update(self.get_option_values())
return json.dumps(result)
def run_commands(self, commands=None, check_rc=True):
if commands is None:
raise ValueError("'commands' value is required")
responses = list()
for cmd in to_list(commands):
if not isinstance(cmd, Mapping):
cmd = {'command': cmd}
output = cmd.pop('output', None)
if output:
raise ValueError("'output' value %s is not supported for run_commands" % output)
try:
out = self.send_command(**cmd)
except AnsibleConnectionFailure as e:
if check_rc:
raise
out = getattr(e, 'err', e)
responses.append(out)
return responses
def get_defaults_flag(self):
return 'verbose'

View File

@@ -274,9 +274,13 @@ class Connection(ConnectionBase):
Can revisit using $HOME instead if it's a problem
'''
if not remote_path.startswith(os.path.sep):
remote_path = os.path.join(os.path.sep, remote_path)
return os.path.normpath(remote_path)
if getattr(self._shell, "_IS_WINDOWS", False):
import ntpath
return ntpath.normpath(remote_path)
else:
if not remote_path.startswith(os.path.sep):
remote_path = os.path.join(os.path.sep, remote_path)
return os.path.normpath(remote_path)
def put_file(self, in_path, out_path):
""" Transfer a file from local to docker container """
@@ -328,7 +332,11 @@ class Connection(ConnectionBase):
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
p.communicate()
actual_out_path = os.path.join(out_dir, os.path.basename(in_path))
if getattr(self._shell, "_IS_WINDOWS", False):
import ntpath
actual_out_path = ntpath.join(out_dir, ntpath.basename(in_path))
else:
actual_out_path = os.path.join(out_dir, os.path.basename(in_path))
if p.returncode != 0:
# Older docker doesn't have native support for fetching files command `cp`

View File

@@ -1,355 +0,0 @@
# Based on the docker connection plugin
#
# Connection plugin for configuring kubernetes containers with kubectl
# (c) 2017, XuXinkun <xuxinkun@gmail.com>
#
# This file is part of Ansible
#
# Ansible is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Ansible is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Ansible. If not, see <http://www.gnu.org/licenses/>.
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
DOCUMENTATION = '''
author:
- xuxinkun
connection: kubectl
short_description: Execute tasks in pods running on Kubernetes.
description:
- Use the kubectl exec command to run tasks in, or put/fetch files to, pods running on the Kubernetes
container platform.
requirements:
- kubectl (go binary)
options:
kubectl_pod:
description:
- Pod name. Required when the host name does not match pod name.
default: ''
vars:
- name: ansible_kubectl_pod
env:
- name: K8S_AUTH_POD
kubectl_container:
description:
- Container name. Required when a pod contains more than one container.
default: ''
vars:
- name: ansible_kubectl_container
env:
- name: K8S_AUTH_CONTAINER
kubectl_namespace:
description:
- The namespace of the pod
default: ''
vars:
- name: ansible_kubectl_namespace
env:
- name: K8S_AUTH_NAMESPACE
kubectl_extra_args:
description:
- Extra arguments to pass to the kubectl command line.
default: ''
vars:
- name: ansible_kubectl_extra_args
env:
- name: K8S_AUTH_EXTRA_ARGS
kubectl_kubeconfig:
description:
- Path to a kubectl config file. Defaults to I(~/.kube/config)
default: ''
vars:
- name: ansible_kubectl_kubeconfig
- name: ansible_kubectl_config
env:
- name: K8S_AUTH_KUBECONFIG
kubectl_context:
description:
- The name of a context found in the K8s config file.
default: ''
vars:
- name: ansible_kubectl_context
env:
- name: k8S_AUTH_CONTEXT
kubectl_host:
description:
- URL for accessing the API.
default: ''
vars:
- name: ansible_kubectl_host
- name: ansible_kubectl_server
env:
- name: K8S_AUTH_HOST
- name: K8S_AUTH_SERVER
kubectl_username:
description:
- Provide a username for authenticating with the API.
default: ''
vars:
- name: ansible_kubectl_username
- name: ansible_kubectl_user
env:
- name: K8S_AUTH_USERNAME
kubectl_password:
description:
- Provide a password for authenticating with the API.
default: ''
vars:
- name: ansible_kubectl_password
env:
- name: K8S_AUTH_PASSWORD
kubectl_token:
description:
- API authentication bearer token.
vars:
- name: ansible_kubectl_token
- name: ansible_kubectl_api_key
env:
- name: K8S_AUTH_TOKEN
- name: K8S_AUTH_API_KEY
client_cert:
description:
- Path to a certificate used to authenticate with the API.
default: ''
vars:
- name: ansible_kubectl_cert_file
- name: ansible_kubectl_client_cert
env:
- name: K8S_AUTH_CERT_FILE
aliases: [ kubectl_cert_file ]
client_key:
description:
- Path to a key file used to authenticate with the API.
default: ''
vars:
- name: ansible_kubectl_key_file
- name: ansible_kubectl_client_key
env:
- name: K8S_AUTH_KEY_FILE
aliases: [ kubectl_key_file ]
ca_cert:
description:
- Path to a CA certificate used to authenticate with the API.
default: ''
vars:
- name: ansible_kubectl_ssl_ca_cert
- name: ansible_kubectl_ca_cert
env:
- name: K8S_AUTH_SSL_CA_CERT
aliases: [ kubectl_ssl_ca_cert ]
validate_certs:
description:
- Whether or not to verify the API server's SSL certificate. Defaults to I(true).
default: ''
vars:
- name: ansible_kubectl_verify_ssl
- name: ansible_kubectl_validate_certs
env:
- name: K8S_AUTH_VERIFY_SSL
aliases: [ kubectl_verify_ssl ]
'''
import distutils.spawn
import os
import os.path
import subprocess
import ansible.constants as C
from ansible.parsing.yaml.loader import AnsibleLoader
from ansible.errors import AnsibleError, AnsibleFileNotFound
from ansible.module_utils.six.moves import shlex_quote
from ansible.module_utils._text import to_bytes
from ansible.plugins.connection import ConnectionBase, BUFSIZE
from ansible.utils.display import Display
display = Display()
CONNECTION_TRANSPORT = 'kubectl'
CONNECTION_OPTIONS = {
'kubectl_container': '-c',
'kubectl_namespace': '-n',
'kubectl_kubeconfig': '--kubeconfig',
'kubectl_context': '--context',
'kubectl_host': '--server',
'kubectl_username': '--username',
'kubectl_password': '--password',
'client_cert': '--client-certificate',
'client_key': '--client-key',
'ca_cert': '--certificate-authority',
'validate_certs': '--insecure-skip-tls-verify',
'kubectl_token': '--token'
}
class Connection(ConnectionBase):
''' Local kubectl based connections '''
transport = CONNECTION_TRANSPORT
connection_options = CONNECTION_OPTIONS
documentation = DOCUMENTATION
has_pipelining = True
transport_cmd = None
def __init__(self, play_context, new_stdin, *args, **kwargs):
super(Connection, self).__init__(play_context, new_stdin, *args, **kwargs)
# Note: kubectl runs commands as the user that started the container.
# It is impossible to set the remote user for a kubectl connection.
cmd_arg = '{0}_command'.format(self.transport)
if cmd_arg in kwargs:
self.transport_cmd = kwargs[cmd_arg]
else:
self.transport_cmd = distutils.spawn.find_executable(self.transport)
if not self.transport_cmd:
raise AnsibleError("{0} command not found in PATH".format(self.transport))
def _build_exec_cmd(self, cmd):
""" Build the local kubectl exec command to run cmd on remote_host
"""
local_cmd = [self.transport_cmd]
# Build command options based on doc string
doc_yaml = AnsibleLoader(self.documentation).get_single_data()
for key in doc_yaml.get('options'):
if key.endswith('verify_ssl') and self.get_option(key) != '':
# Translate verify_ssl to skip_verify_ssl, and output as string
skip_verify_ssl = not self.get_option(key)
local_cmd.append(u'{0}={1}'.format(self.connection_options[key], str(skip_verify_ssl).lower()))
elif not key.endswith('container') and self.get_option(key) and self.connection_options.get(key):
cmd_arg = self.connection_options[key]
local_cmd += [cmd_arg, self.get_option(key)]
extra_args_name = u'{0}_extra_args'.format(self.transport)
if self.get_option(extra_args_name):
local_cmd += self.get_option(extra_args_name).split(' ')
pod = self.get_option(u'{0}_pod'.format(self.transport))
if not pod:
pod = self._play_context.remote_addr
# -i is needed to keep stdin open which allows pipelining to work
local_cmd += ['exec', '-i', pod]
# if the pod has more than one container, then container is required
container_arg_name = u'{0}_container'.format(self.transport)
if self.get_option(container_arg_name):
local_cmd += ['-c', self.get_option(container_arg_name)]
local_cmd += ['--'] + cmd
return local_cmd
def _connect(self, port=None):
""" Connect to the container. Nothing to do """
super(Connection, self)._connect()
if not self._connected:
display.vvv(u"ESTABLISH {0} CONNECTION".format(self.transport), host=self._play_context.remote_addr)
self._connected = True
def exec_command(self, cmd, in_data=None, sudoable=False):
""" Run a command in the container """
super(Connection, self).exec_command(cmd, in_data=in_data, sudoable=sudoable)
local_cmd = self._build_exec_cmd([self._play_context.executable, '-c', cmd])
display.vvv("EXEC %s" % (local_cmd,), host=self._play_context.remote_addr)
local_cmd = [to_bytes(i, errors='surrogate_or_strict') for i in local_cmd]
p = subprocess.Popen(local_cmd, shell=False, stdin=subprocess.PIPE,
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
stdout, stderr = p.communicate(in_data)
return (p.returncode, stdout, stderr)
def _prefix_login_path(self, remote_path):
''' Make sure that we put files into a standard path
If a path is relative, then we need to choose where to put it.
ssh chooses $HOME but we aren't guaranteed that a home dir will
exist in any given chroot. So for now we're choosing "/" instead.
This also happens to be the former default.
Can revisit using $HOME instead if it's a problem
'''
if not remote_path.startswith(os.path.sep):
remote_path = os.path.join(os.path.sep, remote_path)
return os.path.normpath(remote_path)
def put_file(self, in_path, out_path):
""" Transfer a file from local to the container """
super(Connection, self).put_file(in_path, out_path)
display.vvv("PUT %s TO %s" % (in_path, out_path), host=self._play_context.remote_addr)
out_path = self._prefix_login_path(out_path)
if not os.path.exists(to_bytes(in_path, errors='surrogate_or_strict')):
raise AnsibleFileNotFound(
"file or module does not exist: %s" % in_path)
out_path = shlex_quote(out_path)
# kubectl doesn't have native support for copying files into
# running containers, so we use kubectl exec to implement this
with open(to_bytes(in_path, errors='surrogate_or_strict'), 'rb') as in_file:
if not os.fstat(in_file.fileno()).st_size:
count = ' count=0'
else:
count = ''
args = self._build_exec_cmd([self._play_context.executable, "-c", "dd of=%s bs=%s%s" % (out_path, BUFSIZE, count)])
args = [to_bytes(i, errors='surrogate_or_strict') for i in args]
try:
p = subprocess.Popen(args, stdin=in_file,
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
except OSError:
raise AnsibleError("kubectl connection requires dd command in the container to put files")
stdout, stderr = p.communicate()
if p.returncode != 0:
raise AnsibleError("failed to transfer file %s to %s:\n%s\n%s" % (in_path, out_path, stdout, stderr))
def fetch_file(self, in_path, out_path):
""" Fetch a file from container to local. """
super(Connection, self).fetch_file(in_path, out_path)
display.vvv("FETCH %s TO %s" % (in_path, out_path), host=self._play_context.remote_addr)
in_path = self._prefix_login_path(in_path)
out_dir = os.path.dirname(out_path)
# kubectl doesn't have native support for fetching files from
# running containers, so we use kubectl exec to implement this
args = self._build_exec_cmd([self._play_context.executable, "-c", "dd if=%s bs=%s" % (in_path, BUFSIZE)])
args = [to_bytes(i, errors='surrogate_or_strict') for i in args]
actual_out_path = os.path.join(out_dir, os.path.basename(in_path))
with open(to_bytes(actual_out_path, errors='surrogate_or_strict'), 'wb') as out_file:
try:
p = subprocess.Popen(args, stdin=subprocess.PIPE,
stdout=out_file, stderr=subprocess.PIPE)
except OSError:
raise AnsibleError(
"{0} connection requires dd command in the container to fetch files".format(self.transport)
)
stdout, stderr = p.communicate()
if p.returncode != 0:
raise AnsibleError("failed to fetch file %s to %s:\n%s\n%s" % (in_path, out_path, stdout, stderr))
if actual_out_path != out_path:
os.rename(to_bytes(actual_out_path, errors='strict'), to_bytes(out_path, errors='strict'))
def close(self):
""" Terminate the connection. Nothing to do for kubectl"""
super(Connection, self).close()
self._connected = False

View File

@@ -1,181 +0,0 @@
# Based on local.py (c) 2012, Michael DeHaan <michael.dehaan@gmail.com>
# Based on chroot.py (c) 2013, Maykel Moya <mmoya@speedyrails.com>
# (c) 2013, Michael Scherer <misc@zarb.org>
# (c) 2015, Toshio Kuratomi <tkuratomi@ansible.com>
# (c) 2017 Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
DOCUMENTATION = '''
author: Michael Scherer <misc@zarb.org>
connection: libvirt_lxc
short_description: Run tasks in lxc containers via libvirt
description:
- Run commands or put/fetch files to an existing lxc container using libvirt
options:
remote_addr:
description:
- Container identifier
default: The set user as per docker's configuration
vars:
- name: ansible_host
- name: ansible_libvirt_lxc_host
'''
import distutils.spawn
import os
import os.path
import subprocess
import traceback
from ansible import constants as C
from ansible.errors import AnsibleError
from ansible.module_utils.six.moves import shlex_quote
from ansible.module_utils._text import to_bytes
from ansible.plugins.connection import ConnectionBase, BUFSIZE
from ansible.utils.display import Display
display = Display()
class Connection(ConnectionBase):
''' Local lxc based connections '''
transport = 'community.general.libvirt_lxc'
has_pipelining = True
# su currently has an undiagnosed issue with calculating the file
# checksums (so copy, for instance, doesn't work right)
# Have to look into that before re-enabling this
default_user = 'root'
has_tty = False
def __init__(self, play_context, new_stdin, *args, **kwargs):
super(Connection, self).__init__(play_context, new_stdin, *args, **kwargs)
self.lxc = self._play_context.remote_addr
self.virsh = self._search_executable('virsh')
self._check_domain(self.lxc)
def _search_executable(self, executable):
cmd = distutils.spawn.find_executable(executable)
if not cmd:
raise AnsibleError("%s command not found in PATH") % executable
return cmd
def _check_domain(self, domain):
p = subprocess.Popen([self.virsh, '-q', '-c', 'lxc:///', 'dominfo', to_bytes(domain)],
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
p.communicate()
if p.returncode:
raise AnsibleError("%s is not a lxc defined in libvirt" % domain)
def _connect(self):
''' connect to the lxc; nothing to do here '''
super(Connection, self)._connect()
if not self._connected:
display.vvv("THIS IS A LOCAL LXC DIR", host=self.lxc)
self._connected = True
def _buffered_exec_command(self, cmd, stdin=subprocess.PIPE):
''' run a command on the chroot. This is only needed for implementing
put_file() get_file() so that we don't have to read the whole file
into memory.
compared to exec_command() it looses some niceties like being able to
return the process's exit code immediately.
'''
executable = C.DEFAULT_EXECUTABLE.split()[0] if C.DEFAULT_EXECUTABLE else '/bin/sh'
local_cmd = [self.virsh, '-q', '-c', 'lxc:///', 'lxc-enter-namespace']
if C.DEFAULT_LIBVIRT_LXC_NOSECLABEL:
local_cmd += ['--noseclabel']
local_cmd += [self.lxc, '--', executable, '-c', cmd]
display.vvv("EXEC %s" % (local_cmd,), host=self.lxc)
local_cmd = [to_bytes(i, errors='surrogate_or_strict') for i in local_cmd]
p = subprocess.Popen(local_cmd, shell=False, stdin=stdin,
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
return p
def exec_command(self, cmd, in_data=None, sudoable=False):
''' run a command on the chroot '''
super(Connection, self).exec_command(cmd, in_data=in_data, sudoable=sudoable)
p = self._buffered_exec_command(cmd)
stdout, stderr = p.communicate(in_data)
return (p.returncode, stdout, stderr)
def _prefix_login_path(self, remote_path):
''' Make sure that we put files into a standard path
If a path is relative, then we need to choose where to put it.
ssh chooses $HOME but we aren't guaranteed that a home dir will
exist in any given chroot. So for now we're choosing "/" instead.
This also happens to be the former default.
Can revisit using $HOME instead if it's a problem
'''
if not remote_path.startswith(os.path.sep):
remote_path = os.path.join(os.path.sep, remote_path)
return os.path.normpath(remote_path)
def put_file(self, in_path, out_path):
''' transfer a file from local to lxc '''
super(Connection, self).put_file(in_path, out_path)
display.vvv("PUT %s TO %s" % (in_path, out_path), host=self.lxc)
out_path = shlex_quote(self._prefix_login_path(out_path))
try:
with open(to_bytes(in_path, errors='surrogate_or_strict'), 'rb') as in_file:
if not os.fstat(in_file.fileno()).st_size:
count = ' count=0'
else:
count = ''
try:
p = self._buffered_exec_command('dd of=%s bs=%s%s' % (out_path, BUFSIZE, count), stdin=in_file)
except OSError:
raise AnsibleError("chroot connection requires dd command in the chroot")
try:
stdout, stderr = p.communicate()
except Exception:
traceback.print_exc()
raise AnsibleError("failed to transfer file %s to %s" % (in_path, out_path))
if p.returncode != 0:
raise AnsibleError("failed to transfer file %s to %s:\n%s\n%s" % (in_path, out_path, stdout, stderr))
except IOError:
raise AnsibleError("file or module does not exist at: %s" % in_path)
def fetch_file(self, in_path, out_path):
''' fetch a file from lxc to local '''
super(Connection, self).fetch_file(in_path, out_path)
display.vvv("FETCH %s TO %s" % (in_path, out_path), host=self.lxc)
in_path = shlex_quote(self._prefix_login_path(in_path))
try:
p = self._buffered_exec_command('dd if=%s bs=%s' % (in_path, BUFSIZE))
except OSError:
raise AnsibleError("chroot connection requires dd command in the chroot")
with open(to_bytes(out_path, errors='surrogate_or_strict'), 'wb+') as out_file:
try:
chunk = p.stdout.read(BUFSIZE)
while chunk:
out_file.write(chunk)
chunk = p.stdout.read(BUFSIZE)
except Exception:
traceback.print_exc()
raise AnsibleError("failed to transfer file %s to %s" % (in_path, out_path))
stdout, stderr = p.communicate()
if p.returncode != 0:
raise AnsibleError("failed to transfer file %s to %s:\n%s\n%s" % (in_path, out_path, stdout, stderr))
def close(self):
''' terminate the connection; nothing to do here '''
super(Connection, self).close()
self._connected = False

View File

@@ -85,7 +85,7 @@ DOCUMENTATION = '''
vars:
- name: ansible_oc_context
env:
- name: k8S_AUTH_CONTEXT
- name: K8S_AUTH_CONTEXT
oc_host:
description:
- URL for accessing the API.
@@ -147,7 +147,7 @@ DOCUMENTATION = '''
aliases: [ oc_verify_ssl ]
'''
from ansible_collections.community.general.plugins.connection.kubectl import Connection as KubectlConnection
from ansible_collections.community.kubernetes.plugins.connection.kubectl import Connection as KubectlConnection
CONNECTION_TRANSPORT = 'oc'

View File

@@ -3,6 +3,9 @@
# Copyright: (c) 2018, Google Inc.
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
class ModuleDocFragment(object):
# GCP doc fragment.

View File

@@ -0,0 +1,138 @@
# -*- coding: utf-8 -*-
# Copyright: (c) 2018, Sumit Kumar <sumit4@netapp.com>, chris Archibald <carchi@netapp.com>
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
class ModuleDocFragment(object):
DOCUMENTATION = r'''
options:
- See respective platform section for more details
requirements:
- See respective platform section for more details
notes:
- Ansible modules are available for the following NetApp Storage Platforms: E-Series, ONTAP, SolidFire
'''
# Documentation fragment for ONTAP (na_cdot)
ONTAP = r'''
options:
hostname:
required: true
description:
- The hostname or IP address of the ONTAP instance.
username:
required: true
description:
- This can be a Cluster-scoped or SVM-scoped account, depending on whether a Cluster-level or SVM-level API is required.
For more information, please read the documentation U(https://mysupport.netapp.com/NOW/download/software/nmsdk/9.4/).
aliases: ['user']
password:
required: true
description:
- Password for the specified user.
aliases: ['pass']
requirements:
- A physical or virtual clustered Data ONTAP system. The modules were developed with Clustered Data ONTAP 8.3
- Ansible 2.2
- netapp-lib (2015.9.25). Install using 'pip install netapp-lib'
notes:
- The modules prefixed with na\\_cdot are built to support the ONTAP storage platform.
'''
# Documentation fragment for SolidFire
SOLIDFIRE = r'''
options:
hostname:
required: true
description:
- The hostname or IP address of the SolidFire cluster.
username:
required: true
description:
- Please ensure that the user has the adequate permissions. For more information, please read the official documentation
U(https://mysupport.netapp.com/documentation/docweb/index.html?productID=62636&language=en-US).
aliases: ['user']
password:
required: true
description:
- Password for the specified user.
aliases: ['pass']
requirements:
- The modules were developed with SolidFire 10.1
- solidfire-sdk-python (1.1.0.92) or greater. Install using 'pip install solidfire-sdk-python'
notes:
- The modules prefixed with na\\_elementsw are built to support the SolidFire storage platform.
'''
# Documentation fragment for ONTAP (na_ontap)
NA_ONTAP = r'''
options:
hostname:
description:
- The hostname or IP address of the ONTAP instance.
type: str
required: true
username:
description:
- This can be a Cluster-scoped or SVM-scoped account, depending on whether a Cluster-level or SVM-level API is required.
For more information, please read the documentation U(https://mysupport.netapp.com/NOW/download/software/nmsdk/9.4/).
type: str
required: true
aliases: [ user ]
password:
description:
- Password for the specified user.
type: str
required: true
aliases: [ pass ]
https:
description:
- Enable and disable https
type: bool
default: no
validate_certs:
description:
- If set to C(no), the SSL certificates will not be validated.
- This should only set to C(False) used on personally controlled sites using self-signed certificates.
type: bool
default: yes
http_port:
description:
- Override the default port (80 or 443) with this port
type: int
ontapi:
description:
- The ontap api version to use
type: int
use_rest:
description:
- REST API if supported by the target system for all the resources and attributes the module requires. Otherwise will revert to ZAPI.
- Always -- will always use the REST API
- Never -- will always use the ZAPI
- Auto -- will try to use the REST Api
default: Auto
choices: ['Never', 'Always', 'Auto']
type: str
requirements:
- A physical or virtual clustered Data ONTAP system. The modules support Data ONTAP 9.1 and onward
- Ansible 2.6
- Python2 netapp-lib (2017.10.30) or later. Install using 'pip install netapp-lib'
- Python3 netapp-lib (2018.11.13) or later. Install using 'pip install netapp-lib'
- To enable http on the cluster you must run the following commands 'set -privilege advanced;' 'system services web modify -http-enabled true;'
notes:
- The modules prefixed with na\\_ontap are built to support the ONTAP storage platform.
'''

View File

@@ -1,45 +0,0 @@
# -*- coding: utf-8 -*-
# Copyright: (c) 2016, John Barker <jobarker@redhat.com>
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
class ModuleDocFragment(object):
# Standard files documentation fragment
DOCUMENTATION = r'''
options:
host:
description:
- Hostname or IP of the A10 Networks device.
type: str
required: true
username:
description:
- An account with administrator privileges.
type: str
required: true
aliases: [ admin, user ]
password:
description:
- Password for the C(username) account.
type: str
required: true
aliases: [ pass, pwd ]
write_config:
description:
- If C(yes), any changes will cause a write of the running configuration
to non-volatile memory. This will save I(all) configuration changes,
including those that may have been made manually or through other modules,
so care should be taken when specifying C(yes).
type: bool
default: no
validate_certs:
description:
- If C(no), SSL certificates will not be validated.
- This should only be used on personally controlled devices using self-signed certificates.
type: bool
default: yes
notes:
- Requires A10 Networks aXAPI 2.1.
'''

View File

@@ -1,55 +0,0 @@
# -*- coding: utf-8 -*-
# Copyright: (c) 2017, James Mighion <@jmighion>
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
class ModuleDocFragment(object):
# Standard files documentation fragment
DOCUMENTATION = r'''
options:
provider:
description:
- A dict object containing connection details.
suboptions:
host:
description:
- Specifies the DNS host name or address for connecting to the remote device over the specified transport.
- The value of host is used as the destination address for the transport.
type: str
required: true
port:
description:
- Specifies the port to use when building the connection to the remote device.
type: int
default: 22
username:
description:
- Configures the username to use to authenticate the connection to the remote device.
- This value is used to authenticate the SSH session.
- If the value is not specified in the task, the value of environment variable
C(ANSIBLE_NET_USERNAME) will be used instead.
type: str
password:
description:
- Specifies the password to use to authenticate the connection to the remote device.
- This value is used to authenticate the SSH session.
- If the value is not specified in the task, the value of environment variable
C(ANSIBLE_NET_PASSWORD) will be used instead.
type: str
timeout:
description:
- Specifies the timeout in seconds for communicating with the network device
for either connecting or sending commands.
- If the timeout is exceeded before the operation is completed, the module will error.
type: int
default: 10
ssh_keyfile:
description:
- Specifies the SSH key to use to authenticate the connection to the remote device.
- This value is the path to the key used to authenticate the SSH session.
- If the value is not specified in the task, the value of environment variable
C(ANSIBLE_NET_SSH_KEYFILE) will be used instead.
type: path
'''

View File

@@ -1,8 +1,11 @@
# -*- coding: utf-8 -*-
# Copyright: (c) 2017 Alibaba Group Holding Limited. He Guimin <heguimin36@163.com>
# Copyright (c) 2017-present Alibaba Group Holding Limited. He Guimin <heguimin36@163.com>
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
class ModuleDocFragment(object):
@@ -11,46 +14,95 @@ class ModuleDocFragment(object):
options:
alicloud_access_key:
description:
- Aliyun Cloud access key.
- If not set then the value of environment variable C(ALICLOUD_ACCESS_KEY),
C(ALICLOUD_ACCESS_KEY_ID) will be used instead.
- Alibaba Cloud access key. If not set then the value of environment variable C(ALICLOUD_ACCESS_KEY),
C(ALICLOUD_ACCESS_KEY_ID) will be used instead.
aliases: ['access_key_id', 'access_key']
type: str
aliases: [ access_key_id, access_key ]
alicloud_secret_key:
description:
- Aliyun Cloud secret key.
- If not set then the value of environment variable C(ALICLOUD_SECRET_KEY),
C(ALICLOUD_SECRET_ACCESS_KEY) will be used instead.
- Alibaba Cloud secret key. If not set then the value of environment variable C(ALICLOUD_SECRET_KEY),
C(ALICLOUD_SECRET_ACCESS_KEY) will be used instead.
aliases: ['secret_access_key', 'secret_key']
type: str
aliases: [ secret_access_key, secret_key ]
alicloud_region:
description:
- The Aliyun Cloud region to use.
- If not specified then the value of environment variable
C(ALICLOUD_REGION), C(ALICLOUD_REGION_ID) will be used instead.
- The Alibaba Cloud region to use. If not specified then the value of environment variable
C(ALICLOUD_REGION), C(ALICLOUD_REGION_ID) will be used instead.
aliases: ['region', 'region_id']
required: true
type: str
aliases: [ region, region_id ]
alicloud_security_token:
description:
- The Aliyun Cloud security token.
- If not specified then the value of environment variable
C(ALICLOUD_SECURITY_TOKEN) will be used instead.
- The Alibaba Cloud security token. If not specified then the value of environment variable
C(ALICLOUD_SECURITY_TOKEN) will be used instead.
aliases: ['security_token']
type: str
alicloud_assume_role:
description:
- If provided with a role ARN, Ansible will attempt to assume this role using the supplied credentials.
- The nested assume_role block supports I(alicloud_assume_role_arn), I(alicloud_assume_role_session_name),
I(alicloud_assume_role_session_expiration) and I(alicloud_assume_role_policy)
type: dict
aliases: ['assume_role']
alicloud_assume_role_arn:
description:
- The Alibaba Cloud role_arn. The ARN of the role to assume. If ARN is set to an empty string,
it does not perform role switching. It supports environment variable ALICLOUD_ASSUME_ROLE_ARN.
ansible will execute with provided credentials.
aliases: ['assume_role_arn']
type: str
alicloud_assume_role_session_name:
description:
- The Alibaba Cloud session_name. The session name to use when assuming the role. If omitted,
'ansible' is passed to the AssumeRole call as session name. It supports environment variable
ALICLOUD_ASSUME_ROLE_SESSION_NAME
aliases: ['assume_role_session_name']
type: str
alicloud_assume_role_session_expiration:
description:
- The Alibaba Cloud session_expiration. The time after which the established session for assuming
role expires. Valid value range 900-3600 seconds. Default to 3600 (in this case Alicloud use own default
value). It supports environment variable ALICLOUD_ASSUME_ROLE_SESSION_EXPIRATION
aliases: ['assume_role_session_expiration']
type: int
ecs_role_name:
description:
- The RAM Role Name attached on a ECS instance for API operations. You can retrieve this from the 'Access Control'
section of the Alibaba Cloud console.
- If you're running Ansible from an ECS instance with RAM Instance using RAM Role, Ansible will just access the
metadata U(http://100.100.100.200/latest/meta-data/ram/security-credentials/<ecs_role_name>) to obtain the STS
credential. This is a preferred approach over any other when running in ECS as you can avoid hard coding
credentials. Instead these are leased on-the-fly by Ansible which reduces the chance of leakage.
aliases: ['role_name']
type: str
profile:
description:
- This is the Alicloud profile name as set in the shared credentials file. It can also be sourced from the
ALICLOUD_PROFILE environment variable.
type: str
shared_credentials_file:
description:
- This is the path to the shared credentials file. It can also be sourced from the ALICLOUD_SHARED_CREDENTIALS_FILE
environment variable.
- If this is not set and a profile is specified, ~/.aliyun/config.json will be used.
type: str
aliases: [ security_token ]
author:
- He Guimin (@xiaozhu36)
- "He Guimin (@xiaozhu36)"
requirements:
- python >= 2.6
extends_documentation_fragment:
- community.general.alicloud
- "python >= 3.6"
notes:
- If parameters are not set within the module, the following
environment variables can be used in decreasing order of precedence
C(ALICLOUD_ACCESS_KEY) or C(ALICLOUD_ACCESS_KEY_ID),
C(ALICLOUD_SECRET_KEY) or C(ALICLOUD_SECRET_ACCESS_KEY),
C(ALICLOUD_REGION) or C(ALICLOUD_REGION_ID),
C(ALICLOUD_SECURITY_TOKEN)
C(ALICLOUD_SECURITY_TOKEN),
C(ALICLOUD_ECS_ROLE_NAME),
C(ALICLOUD_SHARED_CREDENTIALS_FILE),
C(ALICLOUD_PROFILE),
C(ALICLOUD_ASSUME_ROLE_ARN),
C(ALICLOUD_ASSUME_ROLE_SESSION_NAME),
C(ALICLOUD_ASSUME_ROLE_SESSION_EXPIRATION),
- C(ALICLOUD_REGION) or C(ALICLOUD_REGION_ID) can be typically be used to specify the
ALICLOUD region, when required, but this can also be configured in the footmark config file
'''

View File

@@ -1,58 +0,0 @@
# -*- coding: utf-8 -*-
# Copyright: (c) 2017, James Mighion <@jmighion>
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
class ModuleDocFragment(object):
# Standard files documentation fragment
DOCUMENTATION = r'''
options:
provider:
description:
- A dict object containing connection details.
suboptions:
host:
description:
- Specifies the DNS host name or address for connecting to the remote
device over the specified transport. The value of host is used as
the destination address for the transport.
type: str
required: true
port:
description:
- Specifies the port to use when building the connection to the remote.
device.
type: int
default: 22
username:
description:
- Configures the username to use to authenticate the connection to
the remote device. This value is used to authenticate
the SSH session. If the value is not specified in the task, the
value of environment variable C(ANSIBLE_NET_USERNAME) will be used instead.
type: str
password:
description:
- Specifies the password to use to authenticate the connection to
the remote device. This value is used to authenticate
the SSH session. If the value is not specified in the task, the
value of environment variable C(ANSIBLE_NET_PASSWORD) will be used instead.
type: str
timeout:
description:
- Specifies the timeout in seconds for communicating with the network device
for either connecting or sending commands. If the timeout is
exceeded before the operation is completed, the module will error.
type: int
default: 10
ssh_keyfile:
description:
- Specifies the SSH key to use to authenticate the connection to
the remote device. This value is the path to the
key used to authenticate the SSH session. If the value is not specified
in the task, the value of environment variable C(ANSIBLE_NET_SSH_KEYFILE)
will be used instead.
type: path
'''

View File

@@ -2,6 +2,9 @@
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
class ModuleDocFragment(object):

View File

@@ -1,96 +0,0 @@
# -*- coding: utf-8 -*-
# Created on December 12, 2016
# @author: Gaurav Rastogi (grastogi@avinetworks.com)
# Avi Version: 16.3.4
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
class ModuleDocFragment(object):
# Avi common documentation fragment
DOCUMENTATION = r'''
options:
controller:
description:
- IP address or hostname of the controller. The default value is the environment variable C(AVI_CONTROLLER).
type: str
default: ''
username:
description:
- Username used for accessing Avi controller. The default value is the environment variable C(AVI_USERNAME).
type: str
default: ''
password:
description:
- Password of Avi user in Avi controller. The default value is the environment variable C(AVI_PASSWORD).
type: str
default: ''
tenant:
description:
- Name of tenant used for all Avi API calls and context of object.
type: str
default: admin
tenant_uuid:
description:
- UUID of tenant used for all Avi API calls and context of object.
type: str
default: ''
api_version:
description:
- Avi API version of to use for Avi API and objects.
type: str
default: 16.4.4
avi_credentials:
description:
- Avi Credentials dictionary which can be used in lieu of enumerating Avi Controller login details.
suboptions:
controller:
description:
- Avi controller IP or SQDN
username:
description:
- Avi controller username
password:
description:
- Avi controller password
api_version:
description:
- Avi controller version
default: 16.4.4
tenant:
description:
- Avi controller tenant
default: admin
tenant_uuid:
description:
- Avi controller tenant UUID
port:
description:
- Avi controller port
token:
description:
- Avi controller API token
timeout:
description:
- Avi controller request timeout
default: 300
session_id:
description:
- Avi controller API session id to reuse existing session with csrftoken
csrftoken:
description:
- Avi controller API csrftoken to reuse existing session with session id
type: dict
api_context:
description:
- Avi API context that includes current session ID and CSRF Token.
- This allows user to perform single login and re-use the session.
type: dict
avi_disable_session_cache_as_fact:
description:
- It disables avi session information to be cached as a fact.
type: bool
notes:
- For more information on using Ansible to manage Avi Network devices see U(https://www.ansible.com/ansible-avi-networks).
'''

View File

@@ -1,60 +0,0 @@
# -*- coding: utf-8 -*-
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
class ModuleDocFragment(object):
# Standard files documentation fragment
DOCUMENTATION = r'''
options:
provider:
description:
- A dict object containing connection details.
suboptions:
host:
description:
- Specifies the DNS host name or address for connecting to the remote
device over the specified transport. The value of host is used as
the destination address for the transport.
type: str
required: true
port:
description:
- Specifies the port to use when building the connection to the remote
device. This value applies to either I(cli) or I(netconf). The port
value will default to the appropriate transport common port if
none is provided in the task. (cli=22, netconf=22).
type: int
default: 0 (use common port)
username:
description:
- Configures the username to use to authenticate the connection to
the remote device. This value is used to authenticate the CLI login.
If the value is not specified in the task, the value of environment
variable C(ANSIBLE_NET_USERNAME) will be used instead.
type: str
password:
description:
- Specifies the password to use to authenticate the connection to
the remote device. This is a common argument used for cli
transports. If the value is not specified in the task, the
value of environment variable C(ANSIBLE_NET_PASSWORD) will be used instead.
type: str
ssh_keyfile:
description:
- Specifies the SSH key to use to authenticate the connection to
the remote device. This argument is used for the I(cli)
transport. If the value is not specified in the task, the
value of environment variable C(ANSIBLE_NET_SSH_KEYFILE) will be used instead.
type: path
transport:
description:
- Configures the transport connection to use when connecting to the
remote device. The transport argument supports connectivity to the
device over cli (ssh).
type: str
required: true
choices: [ cli, netconf ]
default: cli
'''

View File

@@ -1,30 +0,0 @@
# -*- coding: utf-8 -*-
# Copyright (c) 2019, René Moser <mail@renemoser.net>
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
from __future__ import absolute_import, division, print_function
__metaclass__ = type
class ModuleDocFragment(object):
# Standard cloudstack documentation fragment
DOCUMENTATION = '''
options:
api_token:
description:
- cloudscale.ch API token.
- This can also be passed in the C(CLOUDSCALE_API_TOKEN) environment variable.
type: str
api_timeout:
description:
- Timeout in seconds for calls to the cloudscale.ch API.
default: 30
type: int
notes:
- Instead of the api_token parameter the C(CLOUDSCALE_API_TOKEN) environment variable can be used.
- All operations are performed using the cloudscale.ch public API v1.
- "For details consult the full API documentation: U(https://www.cloudscale.ch/en/api/v1)."
- A valid API token is required for all operations. You can create as many tokens as you like using the cloudscale.ch control panel at
U(https://control.cloudscale.ch).
'''

View File

@@ -1,71 +0,0 @@
# -*- coding: utf-8 -*-
# Copyright (c) 2015, René Moser <mail@renemoser.net>
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
from __future__ import absolute_import, division, print_function
__metaclass__ = type
class ModuleDocFragment(object):
# Standard cloudstack documentation fragment
DOCUMENTATION = r'''
options:
api_key:
description:
- API key of the CloudStack API.
- If not given, the C(CLOUDSTACK_KEY) env variable is considered.
- As the last option, the value is taken from the ini config file, also see the notes.
type: str
api_secret:
description:
- Secret key of the CloudStack API.
- If not set, the C(CLOUDSTACK_SECRET) env variable is considered.
- As the last option, the value is taken from the ini config file, also see the notes.
type: str
api_url:
description:
- URL of the CloudStack API e.g. https://cloud.example.com/client/api.
- If not given, the C(CLOUDSTACK_ENDPOINT) env variable is considered.
- As the last option, the value is taken from the ini config file, also see the notes.
type: str
api_http_method:
description:
- HTTP method used to query the API endpoint.
- If not given, the C(CLOUDSTACK_METHOD) env variable is considered.
- As the last option, the value is taken from the ini config file, also see the notes.
- Fallback value is C(get) if not specified.
type: str
choices: [ get, post ]
api_timeout:
description:
- HTTP timeout in seconds.
- If not given, the C(CLOUDSTACK_TIMEOUT) env variable is considered.
- As the last option, the value is taken from the ini config file, also see the notes.
- Fallback value is 10 seconds if not specified.
type: int
api_region:
description:
- Name of the ini section in the C(cloustack.ini) file.
- If not given, the C(CLOUDSTACK_REGION) env variable is considered.
type: str
default: cloudstack
requirements:
- python >= 2.6
- cs >= 0.6.10
notes:
- Ansible uses the C(cs) library's configuration method if credentials are not
provided by the arguments C(api_url), C(api_key), C(api_secret).
Configuration is read from several locations, in the following order.
The C(CLOUDSTACK_ENDPOINT), C(CLOUDSTACK_KEY), C(CLOUDSTACK_SECRET) and
C(CLOUDSTACK_METHOD). C(CLOUDSTACK_TIMEOUT) environment variables.
A C(CLOUDSTACK_CONFIG) environment variable pointing to an C(.ini) file.
A C(cloudstack.ini) file in the current working directory.
A C(.cloudstack.ini) file in the users home directory.
Optionally multiple credentials and endpoints can be specified using ini sections in C(cloudstack.ini).
Use the argument C(api_region) to select the section name, default section is C(cloudstack).
See https://github.com/exoscale/cs for more information.
- A detailed guide about cloudstack modules can be found in the L(CloudStack Cloud Guide,../scenario_guides/guide_cloudstack.html).
- This module supports check mode.
'''

View File

@@ -1,78 +0,0 @@
# -*- coding: utf-8 -*-
# Copyright: (c) 2017, Lenovo, Inc.
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
class ModuleDocFragment(object):
# Standard CNOS documentation fragment
DOCUMENTATION = r'''
options:
outputfile:
description:
- This specifies the file path where the output of each command
execution is saved. Each command that is specified in the merged
template file and each response from the device are saved here.
Usually the location is the results folder, but you can
choose another location based on your write permission.
type: str
required: true
host:
description:
- This is the variable used to search the hosts file at
/etc/ansible/hosts and identify the IP address of the device on
which the template is going to be applied. Usually the Ansible
keyword {{ inventory_hostname }} is specified in the playbook as
an abstraction of the group of network elements that need to be
configured.
type: str
required: true
username:
description:
- Configures the username used to authenticate the connection to
the remote device. The value of the username parameter is used to
authenticate the SSH session. While generally the value should
come from the inventory file, you can also specify it as a
variable. This parameter is optional. If it is not specified, no
default value will be used.
type: str
required: true
password:
description:
- Configures the password used to authenticate the connection to
the remote device. The value of the password parameter is used to
authenticate the SSH session. While generally the value should
come from the inventory file, you can also specify it as a
variable. This parameter is optional. If it is not specified, no
default value will be used.
type: str
required: true
enablePassword:
description:
- Configures the password used to enter Global Configuration
command mode on the switch. If the switch does not request this
password, the parameter is ignored.While generally the value
should come from the inventory file, you can also specify it as a
variable. This parameter is optional. If it is not specified,
no default value will be used.
type: str
deviceType:
description:
- This specifies the type of device where the method is executed.
The choices NE1072T,NE1032,NE1032T,NE10032,NE2572 are added
since Ansible 2.4. The choice NE0152T is added since 2.8
type: str
required: true
choices:
- g8272_cnos
- g8296_cnos
- g8332_cnos
- NE0152T
- NE1072T
- NE1032
- NE1032T
- NE10032
- NE2572
notes:
- For more information on using Ansible to manage Lenovo Network devices see U(https://www.ansible.com/ansible-lenovo).
'''

View File

@@ -4,6 +4,9 @@
# Copyright: (c) 2018, Abhijeet Kasurde (akasurde@redhat.com)
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
class ModuleDocFragment(object):
# Parameters for DigitalOcean modules

View File

@@ -3,6 +3,9 @@
# Copyright: (c) 2016, Dimension Data
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
# Authors:
# - Adam Friedman <tintoy@tintoy.io>

View File

@@ -3,6 +3,9 @@
# Copyright: (c) 2016, Dimension Data
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
# Authors:
# - Adam Friedman <tintoy@tintoy.io>

View File

@@ -101,7 +101,7 @@ notes:
with the product that sets up the environment. It will set these variables for you. See
U(https://docs.docker.com/machine/reference/env/) for more details.
- When connecting to Docker daemon with TLS, you might need to install additional Python packages.
For the Docker SDK for Python, version 2.4 or newer, this can be done by installing C(docker[tls]) with M(pip).
For the Docker SDK for Python, version 2.4 or newer, this can be done by installing C(docker[tls]) with M(ansible.builtin.pip).
- Note that the Docker SDK for Python only allows to specify the path to the Docker configuration for very few functions.
In general, it will use C($HOME/.docker/config.json) if the C(DOCKER_CONFIG) environment variable is not specified,
and use C($DOCKER_CONFIG/config.json) otherwise.

View File

@@ -3,6 +3,9 @@
# Copyright: (c) 2018, Luca Lorenzetto (@remix_tj) <lorenzetto.luca@gmail.com>
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
class ModuleDocFragment(object):

View File

@@ -1,90 +0,0 @@
# -*- coding: utf-8 -*-
# Copyright: (c) 2017, Red Hat Inc.
# Copyright: (c) 2017, Lenovo.
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
class ModuleDocFragment(object):
# Standard files documentation fragment
DOCUMENTATION = r'''
options:
authorize:
description:
- Instructs the module to enter privileged mode on the remote device
before sending any commands. If not specified, the device will
attempt to execute all commands in non-privileged mode. If the value
is not specified in the task, the value of environment variable
C(ANSIBLE_NET_AUTHORIZE) will be used instead.
type: bool
default: no
auth_pass:
description:
- Specifies the password to use if required to enter privileged mode
on the remote device. If I(authorize) is false, then this argument
does nothing. If the value is not specified in the task, the value of
environment variable C(ANSIBLE_NET_AUTH_PASS) will be used instead.
provider:
description:
- A dict object containing connection details.
type: dict
suboptions:
host:
description:
- Specifies the DNS host name or address for connecting to the remote
device over the specified transport. The value of host is used as
the destination address for the transport.
type: str
required: true
port:
description:
- Specifies the port to use when building the connection to the remote device.
type: int
default: 22
username:
description:
- Configures the username to use to authenticate the connection to
the remote device. This value is used to authenticate
the SSH session. If the value is not specified in the task, the
value of environment variable C(ANSIBLE_NET_USERNAME) will be used instead.
type: str
password:
description:
- Specifies the password to use to authenticate the connection to
the remote device. This value is used to authenticate
the SSH session. If the value is not specified in the task, the
value of environment variable C(ANSIBLE_NET_PASSWORD) will be used instead.
type: str
timeout:
description:
- Specifies the timeout in seconds for communicating with the network device
for either connecting or sending commands. If the timeout is
exceeded before the operation is completed, the module will error.
type: int
default: 10
ssh_keyfile:
description:
- Specifies the SSH key to use to authenticate the connection to
the remote device. This value is the path to the
key used to authenticate the SSH session. If the value is not specified
in the task, the value of environment variable C(ANSIBLE_NET_SSH_KEYFILE)
will be used instead.
type: path
authorize:
description:
- Instructs the module to enter privileged mode on the remote device
before sending any commands. If not specified, the device will
attempt to execute all commands in non-privileged mode. If the value
is not specified in the task, the value of environment variable
C(ANSIBLE_NET_AUTHORIZE) will be used instead.
type: bool
default: no
auth_pass:
description:
- Specifies the password to use if required to enter privileged mode
on the remote device. If I(authorize) is false, then this argument
does nothing. If the value is not specified in the task, the value of
environment variable C(ANSIBLE_NET_AUTH_PASS) will be used instead.
type: str
'''

View File

@@ -1,56 +0,0 @@
# -*- coding: utf-8 -*-
# Copyright: (c) 2017, René Moser <mail@renemoser.net>
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
from __future__ import absolute_import, division, print_function
__metaclass__ = type
class ModuleDocFragment(object):
# Standard exoscale documentation fragment
DOCUMENTATION = r'''
options:
api_key:
description:
- API key of the Exoscale DNS API.
- Since 2.4, the ENV variable C(CLOUDSTACK_KEY) is used as default, when defined.
type: str
api_secret:
description:
- Secret key of the Exoscale DNS API.
- Since 2.4, the ENV variable C(CLOUDSTACK_SECRET) is used as default, when defined.
type: str
api_timeout:
description:
- HTTP timeout to Exoscale DNS API.
- Since 2.4, the ENV variable C(CLOUDSTACK_TIMEOUT) is used as default, when defined.
type: int
default: 10
api_region:
description:
- Name of the ini section in the C(cloustack.ini) file.
- Since 2.4, the ENV variable C(CLOUDSTACK_REGION) is used as default, when defined.
type: str
default: cloudstack
validate_certs:
description:
- Validate SSL certs of the Exoscale DNS API.
type: bool
default: yes
requirements:
- python >= 2.6
notes:
- As Exoscale DNS uses the same API key and secret for all services, we reuse the config used for Exscale Compute based on CloudStack.
The config is read from several locations, in the following order.
The C(CLOUDSTACK_KEY), C(CLOUDSTACK_SECRET) environment variables.
A C(CLOUDSTACK_CONFIG) environment variable pointing to an C(.ini) file,
A C(cloudstack.ini) file in the current working directory.
A C(.cloudstack.ini) file in the users home directory.
Optionally multiple credentials and endpoints can be specified using ini sections in C(cloudstack.ini).
Use the argument C(api_region) to select the section name, default section is C(cloudstack).
- This module does not support multiple A records and will complain properly if you try.
- More information Exoscale DNS can be found on https://community.exoscale.ch/documentation/dns/.
- This module supports check mode and diff.
'''

View File

@@ -3,6 +3,9 @@
# Copyright: (c) 2019 Felix Fontein <felix@fontein.de>
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
class ModuleDocFragment(object):

View File

@@ -2,6 +2,9 @@
# GNU General Public License v3.0+
# (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
class ModuleDocFragment(object):

View File

@@ -2,6 +2,9 @@
# GNU General Public License v3.0+
# (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
class ModuleDocFragment(object):

View File

@@ -3,6 +3,9 @@
# Copyright: (c) 2016, Gregory Shulov <gregory.shulov@gmail.com>
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
class ModuleDocFragment(object):

View File

@@ -4,6 +4,9 @@
# Copyright: (c) 2017, Abhijeet Kasurde (akasurde@redhat.com)
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
class ModuleDocFragment(object):
# Parameters for influxdb modules
@@ -38,6 +41,7 @@ options:
description:
- The path on which InfluxDB server is accessible
type: str
version_added: '0.2.0'
validate_certs:
description:
- If set to C(no), the SSL certificates will not be validated.

View File

@@ -1,61 +0,0 @@
# -*- coding: utf-8 -*-
# Copyright: (c) 2018, Ingate Systems AB
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
class ModuleDocFragment(object):
DOCUMENTATION = r'''
options:
client:
description:
- A dict object containing connection details.
suboptions:
version:
description:
- REST API version.
type: str
choices: [ v1 ]
default: v1
scheme:
description:
- Which HTTP protocol to use.
type: str
required: true
choices: [ http, https ]
address:
description:
- The hostname or IP address to the unit.
type: str
required: true
username:
description:
- The username of the REST API user.
type: str
required: true
password:
description:
- The password for the REST API user.
type: str
required: true
port:
description:
- Which HTTP(S) port to connect to.
type: int
timeout:
description:
- The timeout (in seconds) for REST API requests.
type: int
validate_certs:
description:
- Verify the unit's HTTPS certificate.
type: bool
default: yes
aliases: [ verify_ssl ]
notes:
- This module requires that the Ingate Python SDK is installed on the
host. To install the SDK use the pip command from your shell
C(pip install ingatesdk).
requirements:
- ingatesdk >= 1.0.6
'''

View File

@@ -4,6 +4,9 @@
# Copyright: (c) 2017-18, Abhijeet Kasurde (akasurde@redhat.com)
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
class ModuleDocFragment(object):
# Parameters for FreeIPA/IPA modules

View File

@@ -1,93 +0,0 @@
# -*- coding: utf-8 -*-
# Copyright: (c) 2017, Paul Baker <@paulquack>
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
class ModuleDocFragment(object):
# Standard files documentation fragment
DOCUMENTATION = r'''
options:
authorize:
description:
- B(Deprecated)
- "Starting with Ansible 2.7 we recommend using C(connection: network_cli) and C(become: yes)."
- For more information please see the L(IronWare Platform Options guide, ../network/user_guide/platform_ironware.html).
- HORIZONTALLINE
- Instructs the module to enter privileged mode on the remote device
before sending any commands. If not specified, the device will
attempt to execute all commands in non-privileged mode. If the value
is not specified in the task, the value of environment variable
C(ANSIBLE_NET_AUTHORIZE) will be used instead.
type: bool
default: no
provider:
description:
- B(Deprecated)
- "Starting with Ansible 2.7 we recommend using C(connection: network_cli) and C(become: yes)."
- For more information please see the L(IronWare Platform Options guide, ../network/user_guide/platform_ironware.html).
- HORIZONTALLINE
- A dict object containing connection details.
type: dict
suboptions:
host:
description:
- Specifies the DNS host name or address for connecting to the remote
device over the specified transport. The value of host is used as
the destination address for the transport.
type: str
port:
description:
- Specifies the port to use when building the connection to the remote
device.
type: int
default: 22
username:
description:
- Configures the username to use to authenticate the connection to
the remote device. This value is used to authenticate
the SSH session. If the value is not specified in the task, the
value of environment variable C(ANSIBLE_NET_USERNAME) will be used instead.
type: str
password:
description:
- Specifies the password to use to authenticate the connection to
the remote device. This value is used to authenticate
the SSH session. If the value is not specified in the task, the
value of environment variable C(ANSIBLE_NET_PASSWORD) will be used instead.
type: str
ssh_keyfile:
description:
- Specifies the SSH key to use to authenticate the connection to
the remote device. This value is the path to the
key used to authenticate the SSH session. If the value is not specified
in the task, the value of environment variable C(ANSIBLE_NET_SSH_KEYFILE)
will be used instead.
type: path
authorize:
description:
- Instructs the module to enter privileged mode on the remote device
before sending any commands. If not specified, the device will
attempt to execute all commands in non-privileged mode. If the value
is not specified in the task, the value of environment variable
C(ANSIBLE_NET_AUTHORIZE) will be used instead.
type: bool
default: no
auth_pass:
description:
- Specifies the password to use if required to enter privileged mode
on the remote device. If I(authorize) is false, then this argument
does nothing. If the value is not specified in the task, the value of
environment variable C(ANSIBLE_NET_AUTH_PASS) will be used instead.
type: str
timeout:
description:
- Specifies idle timeout in seconds for the connection, in seconds. Useful
if the console freezes before continuing. For example when saving
configurations.
type: int
default: 10
notes:
- For more information on using Ansible to manage network devices see the :ref:`Ansible Network Guide <network_guide>`
'''

View File

@@ -3,6 +3,9 @@
# Copyright: (c) 2017, Eike Frost <ei@kefro.st>
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
class ModuleDocFragment(object):

View File

@@ -3,6 +3,9 @@
# Copyright: (c) 2018, KubeVirt Team <@kubevirt>
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
class ModuleDocFragment(object):
DOCUMENTATION = r'''
@@ -36,6 +39,7 @@ options:
description:
- Number of seconds to sleep between checks.
default: 5
version_added: '0.2.0'
memory:
description:
- The amount of memory to be requested by virtual machine.

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