Compare commits

..

432 Commits
0.1.1 ... 1.1.0

Author SHA1 Message Date
Felix Fontein
d472953e10 Release 1.1.0. 2020-08-18 13:15:39 +02:00
Felix Fontein
c78d6c95d6 Add release summary. 2020-08-18 13:14:33 +02:00
Andrew Klaus
c9cb987eb7 sysupgrade: new module (#341)
* Adding types to sysupgrade documentation
* Apply suggestions from code review
* Adding installurl flag. Changing wording in example.
* Use None for installurl by default
* Changing word case in description
* sysupgrade: use module structure recommended by Ansible unit test docs
* Adding unit test for sysupgrade

Signed-off-by:  Andrew Klaus <andrew@aklaus.ca>
Co-authored-by: Abhijeet Kasurde <akasurde@redhat.com>
Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>
Co-authored-by: Felix Fontein <felix@fontein.de>

Co-authored-by: Abhijeet Kasurde <akasurde@redhat.com>
Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>
Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit 2aabf5e62b)
2020-08-18 09:11:48 +02:00
Felix Fontein
099a99d288 Fix galaxy.yml (#774)
* Bump dependencies to 1.0.0, fix tags in galaxy.yml.

* Add changelog.

(cherry picked from commit 0ae3d0aecb)
2020-08-18 08:31:14 +02:00
Amin Vakil
26ea01d5b4 Fix MacOS shutdown integration test (#769)
(cherry picked from commit 4e56347fc1)
2020-08-18 08:31:07 +02:00
Felix Fontein
a9afbe59e5 docker_stack_task_info tests: add delay to make sure task is running (#765)
(cherry picked from commit 0e8cc31799)
2020-08-18 08:31:02 +02:00
Felix Fontein
dc9cab36ac Try to fix docker tests (#764)
* Try to limit docker package version if API version is < 1.39.

* Fix error.

* Re-combine to one command.

(cherry picked from commit a00d615d68)
2020-08-18 08:30:57 +02:00
Sam Doran
99265c5126 Remove "rhui-" prefix from RHEL repository (#762)
(cherry picked from commit 0d31899fe7)
2020-08-18 08:30:52 +02:00
Dusan Matejka
57aede6b95 Cleanup changelog for not included zabbix plugins (#760)
* cleanup changelog for not included zabbix plugins

* Re-generate changelog

Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit fefc4b3423)
2020-08-18 08:30:46 +02:00
Felix Fontein
e51e41203a Fix author entry for dsv and tss lookup plugin. (#753)
(cherry picked from commit 7f37103df3)
2020-08-18 08:30:42 +02:00
Kelly Brazil
54644179ea JC plugin (#750)
* initial commit

* add contrib info

* remove nonfunctional \n in error messate

* add documentation and optional quiet and raw arguments

* add changelog fragment

* add aliases

* add initial test

* change folder name

* add pip install jc for tests

* simplify changelog since tests were failing

* add newline to end of file

* fix trailing whitespace in comment causing test failure

* use pip3 since tests are failing using python2.6 pip

* skip python 2.7 tests since jc only supports python 3

* use pip instead of pip3

* add python version requirement

(cherry picked from commit b2a222b136)
2020-08-18 08:30:37 +02:00
Guillaume RODRIGUEZ
7d6a1a4483 Scaleway - Fix api_token documentation (#747)
(cherry picked from commit 76174602dc)
2020-08-18 08:30:30 +02:00
Adriaan Callaerts
2715e4456c Update xfconf.py: make locale-independent (#744)
* Update xfconf.py

- ensure correct behaviour, even in desktop environments which don't use English as the default language
- add double as content type

* set environ_update for entire module

* set envvar LANGUAGE instead of LANG because of priority order in evaluating them

(cherry picked from commit d13b026f47)
2020-08-18 08:30:24 +02:00
Abhijeet Kasurde
a335d1cc56 dsv: Use correct dict usage (#743)
Signed-off-by: Abhijeet Kasurde <akasurde@redhat.com>
(cherry picked from commit 9e039cc4a0)
2020-08-18 08:30:19 +02:00
DenBeke
a89b43b110 bot: remove from team (#742)
(cherry picked from commit d2d4997fa8)
2020-08-18 08:30:14 +02:00
Abhijeet Kasurde
1b599bde37 lookup: Fix minor typos (#740)
Signed-off-by: Abhijeet Kasurde <akasurde@redhat.com>
(cherry picked from commit 0eb4954339)
2020-08-18 08:30:09 +02:00
David Marthy
7bd987e2b9 ipa module utils: BUGFIX ipa modules Cookie problem with Loadbalanced IPA and Python3 (… (#738)
* BUGFIX ipa modules Cookie problem with Loadbalanced IPA and Python3 (#737)

* Update changelogs/fragments/738-ipa-python3.yml

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

* Update plugins/module_utils/ipa.py

Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit 0951833a6c)
2020-08-18 08:30:04 +02:00
Jose Angel Munoz
8b0896a43d New Docker Stack Task Info Module with Tests (#732)
* Add docker_stack_task_info with tests

* Change link

* Change ln

* Fix Documentation

* Small doc changes

* Remove node for RH

(cherry picked from commit 107e956565)
2020-08-18 08:29:59 +02:00
Abhijeet Kasurde
402bb01501 filetree: Update example and documentation for plugin (#728)
Fixes: #727

Signed-off-by: Abhijeet Kasurde <akasurde@redhat.com>
(cherry picked from commit ce48751033)
2020-08-18 08:29:53 +02:00
Felix Fontein
75afd83508 Fix plugins (names, constants, FQCNs in examples) (#722)
* cobbler inventory: fix NAME

* oc transport: fix transport name

* Inventory plugins: fix plugin identifications

* Use FQCN in lookup plugin examples.

* Use FQCN in callback plugins.

* Add changelog fragment.

* Adjust documentation.

* Fix lookup plugin linting errors.

* Fix quotes.

(cherry picked from commit ea21341686)
2020-08-18 08:29:44 +02:00
Amin Vakil
b25f0f3cd2 New module: shutdown (#700)
* New module: shutdown

* Add symlink to plugin

* Fix

Signed-off-by: Amin Vakil <info@aminvakil.com>

* Fix

* Fix

* Add seealso

* Fix seealso

* Add future-import, metaclass boilerplate

* Change pre_shutdown_delay to delay

* Cleanup before executing shutdown

* Fix

* Remove unused connect_timeout paramater

* Improve documentation

* Remove deprecated function and calling it

* Remove double calling delay function

* Remove unneeded call in check delay function

* Make check mode more realistic

* Remove extra blank line

* Remove unnecessary imports and fix copyright year

* Add shutdown_command and integration test

* Fix integration test

* Don't fail on local AND enabled check_mode

* Add copyright

* Skip ubuntu1804 as systemd-sysv is not installed on container

* Ignore ubuntu 18 on task

* Readd integration tests

* Do not run integration test on ubuntu 18

* Improve integration test and add delay, msg testing

* Fix ubuntu 18 integration test

* Remove unnecessary condition

(cherry picked from commit c475effeed)
2020-08-18 08:29:38 +02:00
quidame
9226c4b0d5 New module: iptables_state (#271)
* restart from last state

* test (sanity) doc fragment placeholder

* test (sanity) remove doc fragment placeholder

* remove internal params from DOCUMENTATION

* update ignore-2.10.txt

* doc: add changelog fragment

* shorten changelog fragment

* Revert "shorten changelog fragment"

This reverts commit f9aea0d1eaefda139fd5b79bd0eb127c09a433fb.

* test with posix/group1

* test with posix/group3

* test with posix/group5

* test with posix/group4

* test with posix/group3

* New modules/action plugins automatically get a changelog entry

* fix: styles

* Revert "remove internal params from DOCUMENTATION"

This reverts commit 7d5fcf4b17e4cd5b0afc08fd1bd3fcef5fcaee26.

* drop neutral/informative/stateless behaviour

* update tasks after changes in module

* use FQCN in EXAMPLES

* add tests to validate error handling about required params

* doc: remove outdated sentence

* do not document internal parameters

* display timeout value in failure message

* remove inapropriate comment

* merge results and clean them up only once

* conditionally remove tmp path

* at least one iteration is required

* remove deprecated code

* move variables declaration to conditional block

* dissociate async and connection timeout

* improve warnings (conditions + values)

* remove ANSIBLE_METADATA (no more needed); fix typo

* update DOCUMENTATION

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

* catch early errors before resetting connection and processing the loop

* fix typo

* change posix group (due to xtables locks); add 'version_added' in doc

* update deprecation (replace Ansible 2.12 by community.general 2.0.0)

* bump version_added to 1.0.0

* update ignore-2.11.txt

* ignore errors for 2.9 as for 2.10 & 2.11

* move action plugin to system/ and replace it by a symlink

* remove action-plugin-docs override in tests/sanity/ignore*.txt

* update action plugin docstrings

* bump version_added to 1.1.0
* use lowercase booleans
* extend usage of namespaces to ansible builtin modules

(cherry picked from commit 92242d898d)
2020-08-18 08:29:31 +02:00
Andrew Klychkov
fe3e262209 postgresql_set: allow to pass an empty string as a value (#776) (#784)
* postgresql_set: allow to pass an empty string as a value

* add check_mode to CI for the case

* add changelog fragment

* add pause

* fix

* fix ci

* fix

* fix

* add suggested
(cherry picked from commit 05556dc671)
2020-08-17 22:46:10 +03:00
Felix Fontein
b9fac26dcd Rename changelogs/fragments/.empty -> changelogs/fragments/.keep
(cherry picked from commit d0879bfaf9)
2020-08-07 08:18:40 +02:00
Felix Fontein
343e5a03a7 Next release will be 1.1.0. 2020-07-31 13:55:27 +02:00
Felix Fontein
acea082a7c Add changelog for 1.0.0. 2020-07-31 13:54:10 +02:00
Felix Fontein
0cff1f116f Add release summary. 2020-07-31 13:52:28 +02:00
Felix Fontein
bac14c2f01 Wildfly didn't start because of some permission problems. (#718) 2020-07-31 13:47:38 +02:00
Abhijeet Kasurde
291ceffecb sanity: Fix sanity check for modules (#587)
Signed-off-by: Abhijeet Kasurde <akasurde@redhat.com>
2020-07-31 10:57:57 +02:00
chris93111
623817b0b7 add ini config to logstash callback (#610)
* Update logstash.py

* remove version with collection

Co-authored-by: Abhijeet Kasurde <akasurde@redhat.com>

* rename the callback name with migration collection

Co-authored-by: Abhijeet Kasurde <akasurde@redhat.com>

* Update plugins/callback/logstash.py

v1

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

* Create 610_logstash_callback_add_ini_config.yml

* Update changelogs/fragments/610_logstash_callback_add_ini_config.yml

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

* Update logstash.py

Co-authored-by: Abhijeet Kasurde <akasurde@redhat.com>
Co-authored-by: Felix Fontein <felix@fontein.de>
2020-07-31 10:56:12 +02:00
Roman
6df7fd3026 module lxd_container - added target parameter for cluster deployments (#711)
* module lxd_container - added target support for LXD cluster deployments.
https://github.com/ansible-collections/community.general/issues/637

* lxd_container.py fixed PEP8 issues.

* Update plugins/modules/cloud/lxd/lxd_container.py

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

* Update plugins/modules/cloud/lxd/lxd_container.py

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

* Update plugins/modules/cloud/lxd/lxd_container.py

Added type: str for target parameter description.

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

* lxd_container.py - added example of using target parameter

* lxd_container.py - fixed PEP8 issue, trailing whitespace.

* Update plugins/modules/cloud/lxd/lxd_container.py

Cosmetic fix, adding newline between two blocks of examples.

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-07-30 12:30:25 +03:00
Felix Fontein
95531d24ea nmcli: fix package name (#712)
* Type: Wrong package names

In Red Hat systems, python packages are preceeded by `python3-`

* Use Python 2 packages on CentOS 7 and Fedora <= 28.

Co-authored-by: Frank Brütting <fbruetting@users.noreply.github.com>
2020-07-30 06:35:12 +00:00
Sean Reifschneider
848d63fa38 haproxy: Enable/disable health and agent checks (#689)
* Enable/disable health and agent checks

Health and agent checks can cause a disabled service to re-enable
itself.  This adds "health" and "agent" options that will also
enable or disable those checks, matching if the service is to be
enabled/disabled.

* Update plugins/modules/net_tools/haproxy.py

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

* Update plugins/modules/net_tools/haproxy.py

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

* Update plugins/modules/net_tools/haproxy.py

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

* Update plugins/modules/net_tools/haproxy.py

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

* Changes to documentation and changelog.

Changes for the haproxy documentation to resolve issues with
the CI/CD, and adding a changelog fragment.

* Update changelogs/fragments/689-haproxy_agent_and_health.yml

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

* Update changelogs/fragments/689-haproxy_agent_and_health.yml

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

* Update plugins/modules/net_tools/haproxy.py

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

* Add an example of health/agent disable.

* Update plugins/modules/net_tools/haproxy.py

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-07-29 23:39:48 +02:00
Ken Dreyer
b29af922eb jira: cast error messages to strings (#707)
Sometimes Jira returns dicts as "errors" instead of simple strings.
For example, when a user specifies a field that cannot be set, Jira
returns a dict with the field name as a key and the error message as the
value.

In the rare case that we have both a "errorMessages" list and an
"errors" dict, when we combine those values later with join(), Python
raises a TypeError.

Transform each individual error message into a string, and then join()
the list of strings.
2020-07-29 23:38:51 +02:00
Lee Goolsbee
9822d8172b slack: support for blocks (#702)
* Slack: add support for blocks

* Slack: drop unused validate_certs option

* Slack: update docs to reflect thread_id can be sent with tokens other than WebAPI

* Slack: drop escaping of quotes and apostrophes

* Slack: typo

* Revert "Slack: drop escaping of quotes and apostrophes"

This reverts commit bc6120907e.

* Revert "Slack: drop unused validate_certs option"

This reverts commit a981ee6bca.

* Slack: other/minor PR feedback

* Slack: add changelog fragment

* Slack: clean-up/clarify use of recursive escaping function

* Slack: PR feedback

Co-authored-by: Lee Goolsbee <lgoolsbee@atlassian.com>
2020-07-29 22:11:32 +02:00
Felix Fontein
08f10d5758 Fix more become plugins (#708)
* Fix more become plugins.

* Don't re-use var.

* Other way around.
2020-07-29 20:27:16 +02:00
Jose Angel Munoz
bc5dde0e25 New docker_stack_module with tests (#576)
* First docker stack info approach without tests

Fixes results when no stack availabl

Fixes sanity test

Fixing links

Fixes tabs

Fixes long line

Improving Json Output

Changes arguments

Lint with autopep8

Moves imports

Adds extra line

Adds Tests

Adds pip and fixes return empty

Fixes silly missing else

* Adds Tests and Fixes comments

* Removes tasks option

* Removes arguments

* Changes error message

* Changes Tests

* Add proposals f

* Improve output

* Change test for output change

* Add debug
2020-07-29 14:56:49 +02:00
Felix Fontein
233617fdfa Add porting guide entries from Ansible-base porting guide (#703)
* Add porting guide entries from Ansible-base porting guide (https://github.com/ansible/ansible/blob/devel/docs/docsite/rst/porting_guides/porting_guide_2.10.rst).

* This is already in the changelog.
2020-07-29 08:02:12 +02:00
Gonéri Le Bouder
15e9f04f86 doas: properly set the default values (#704)
* doas: properly set the default values

The module expects by default:

- `become_user` to be `None` or a string,
- `become_flags` to by an empty string.

* Apply suggestions from code review

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

Co-authored-by: Felix Fontein <felix@fontein.de>
2020-07-29 07:55:01 +02:00
Robert Osowiecki
2be739ef05 archive: exclude_path documentation (#599)
* archive: exclude_path does not actualy exclude files from archive, but paths generated by glob expantion of path param.

* Update plugins/modules/files/archive.py

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

Co-authored-by: Felix Fontein <felix@fontein.de>
2020-07-28 11:42:17 +03:00
Pierre Roudier
4a1d86c47e Added uint type to xfconf module (#696)
* Added uint type to xfconf module

* Update changelogs/fragments/xfconf_add_uint_type.yml

Updated PR number in changelog

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

Co-authored-by: Pierre Roudier <pierre.roudier@ticksmith.com>
Co-authored-by: Felix Fontein <felix@fontein.de>
2020-07-28 10:40:40 +03:00
Ken Dreyer
041824b98e jira: log error messages in "errors" key (#311)
Jira's API can return a empty "errorMessages" list, and the real error
is in the "errors" object. This happens, for example, if a user tries to
file a ticket in a project that does not exist (tested with Jira
v7.13.8)

Check both "errorMessages" and "errors", and report both values with
fail_json().

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

Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>
2020-07-28 08:59:33 +03:00
Felix Fontein
f5ed0689c1 Update dependencies (#694)
* Bump dependency versions.

* No longer need to use git checkouts.
2020-07-27 16:14:59 +02:00
Michael Williams
1beabef60e Shameless recommit of changes in jesstruck/ansible:jenkins_plugins_sha1 (#677)
* Shameless recommit of changes in jesstruck/ansible:jenkins_plugins_sha1

* Add changelog fragment.

* Change variable name to remove reference to sha1

Also, update changelog fragment typos/style.

* Update changelog fragment typos/style.
2020-07-27 11:33:08 +02:00
Alexei Znamensky
d40dece6c5 big revamp on xfconf, adding array values (#693)
* big revamp on xfconf, adding array values

* added changelog fragment

* Update changelogs/fragments/693-big-revamp-on-xfconf-adding-array-values.yml

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

Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>
2020-07-25 13:58:14 +03:00
Bill Dodd
0f6bf38573 remove jose-delarosa - new job (#691) 2020-07-24 23:36:55 +02:00
Bill Dodd
87423f4a33 Fix decoding of response payloads for python 3.5 (#687)
* fix decoding of response payloads for python 3.5

* add changelog fragment
2020-07-24 23:35:33 +02:00
Felix Fontein
748fb40541 Add missing symlink, sort meta/runtime.yml entries (#681)
* Add missing symlink.

* Sort meta/runtime.yml entries.
2020-07-23 22:40:33 +02:00
Jan Gaßner
eb2369a934 yarn: Fix handling of empty outdated & scoped packages (#474)
* Fixed index out of range in yarn module when no packages are outdated

* Fixed handling of yarn dependencies when scoped modules are installed

* Added changelog fragment for yarn module fixes

* Adhere changelogs/fragments/474-yarn_fix-outdated-fix-list.yml to current standards

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

* Added scoped package to yarn integration test

Co-authored-by: Jan Gaßner <jan.gassner@plusserver.com>
Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>
2020-07-23 10:19:32 +03:00
Martin Migasiewicz
80cd8329e0 launchd: new module to control services on macOS hosts (#305) 2020-07-22 16:54:58 +03:00
Orion Poplawski
669b7bf090 Add cobbler inventory plugin (#627)
* Add cobbler inventory plugin

* Add elements, caps

* Use fail_json if we cannot import xmlrpc_client

* [cobbler] Raise AnsibleError for errors

* [plugins/inventory/cobbler] Add cache_fallback option

* [inventory/cobbler] Use != for comparison

* [inventory/cobbler] Add very basic unit tests

* Update plugins/inventory/cobbler.py

Use full name

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

Co-authored-by: Felix Fontein <felix@fontein.de>
2020-07-21 23:37:01 +03:00
Andrew Klychkov
c207b7298c osx_defaults: fix handling negative integers (#676)
* osx_defaults: fix handling negative integers

* add changelog fragment
2020-07-21 16:12:21 +02:00
ernst-s
d7aabcceed Handle 'No more variables left in this MIB View ' in snmp_facts (#613)
Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>
2020-07-21 12:40:26 +05:30
Felix Fontein
7ac467a359 Restore removed google modules (#675)
* Revert "Remove entries of modules that no longer exist." partially.

This reverts commit c1e1b37da4.

* Revert "The _info module is in google.cloud."

This reverts commit 26f5c84924.

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

This reverts commit a1442ccc35.

* Fix FQCNs in examples and module references.

* Add changelog fragment.

* Update ignore.txt.

* Remove bad lines.
2020-07-21 07:45:32 +01:00
Minh Ha
52cce0b7af removes advertise_addr from required parameters when state is "join" (#646)
* removes advertise_addr from required parameters when state is "join"

addressing this issue: https://github.com/ansible-collections/community.general/issues/439

* adjusts test

* adds changelog
2020-07-20 18:14:16 +02:00
Andrew Klychkov
09d68678ee postgresql_query: add search_path parameter (#653)
* postgresql_query: add search_path parameter

* add CI tests

* add ref to seealso

* add changelog fragment

* fix test syntax

* fix test syntax

* fix

* fix

* fix CI syntax

* cosmetic change

* improve CI test

* move CI tests to the right place

* improve CI
2020-07-20 10:08:02 +03:00
Felix Fontein
ee6baa30cf Prevent CI failure with older pip versions. (#670) 2020-07-19 14:50:40 +02:00
Eric G
bc43694ca9 pacman: Treat .zst package names as files (#650)
* pacman: Treat .zst package names as files

* pacman: add changelog for .zst support

* pacman: refer to pull-request in changelog fragment

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

Co-authored-by: gileri <e+git8413@linuxw.info>
Co-authored-by: Felix Fontein <felix@fontein.de>
2020-07-19 12:07:38 +02:00
John Westcott IV
a86195623b Adding ODBC module (#606)
* Adding ODBC module

* Adding symink and fixing docs and argspec

* Another sanity issue

* Hopefully last fix for elements

* Making changes suggested by felixfontein

* Making changes suggested by Andersson007

* Removing defaults and added info in description

* Fixing line too long

* More cleanup suggested by felixfontein

* Changing module call
2020-07-17 07:39:37 +03:00
Mr Bleu
9e76fdc668 Add check for rundeck_acl_policy name (#612)
* Add check for rundeck_acl_policy name

* Update changelogs/fragments/add_argument_check_for_rundeck.yaml

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

Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>
2020-07-16 23:17:18 +02:00
Adam Miller
64c4548b7f migrate firewalld to ansible.posix (#623)
* migrate firewalld to ansible.posix

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

* fix removal_version for runtime.yml

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

* add changelog fragment

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

* Update meta/runtime.yml

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

* Update changelogs/fragments/firewalld_migration.yml

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

* add module_util routing entry

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

* Update meta/runtime.yml

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

Co-authored-by: Felix Fontein <felix@fontein.de>
2020-07-16 22:21:22 +02:00
VMax
a0c8a3034a modules: fix names with hyphens (#656) (#659)
* modules: fix names with hyphens (#656)

* modules: fix names with hyphens (#656)

* Fix param name for postgresql_schema

* Add double quotes for schema name

* Add delete created DB objects

* Fix module code

* Set correct test tasks order

Co-authored-by: Maxim Voskresenskiy <maxim.voskresenskiy@uptick.com>
2020-07-16 17:44:19 +03:00
Andrew Klychkov
4c4a6ab27c modules: fix examples to use FQCN for builtin plugins (#661) 2020-07-16 14:42:12 +03:00
Andrew Klychkov
2c3efea14b Test of using FQCN for some builtin plugins (#660) 2020-07-16 12:24:04 +03:00
Regis A. Despres
831a4962c1 gitlab_runners inventory plugin: runtime en var and list default behavior (#611)
* chore: runtime en var and list default bahevaior 

Ability to pick options values from env vars on gitlab_runners inventory plugin
Remove default 20 items limit to runners list on gitlab_runners inventory plugin

* Changelog fragment

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

* Changelog fragment

* Badly placed fragment

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

* changelog fragment for api token

* changelog fragment

* Update changelogs/fragments/611-gitlab-runners-env-vars-intput-and-default-item-limit.yaml

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

* Update changelogs/fragments/611-gitlab-runners-env-vars-intput-and-default-item-limit.yaml

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

* fix: remove default filter all due to  #440

* fix: remove default filter all due to  #440

* chore: add os env var for filter input

* chore: add os env var for filter input

Co-authored-by: Felix Fontein <felix@fontein.de>
Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>
2020-07-16 10:41:09 +03:00
Till!
8e45b96a33 Update: only "warn" when restart is required (#651)
* Fix: only "warn" when restart is required

Motivation: my logs are flooded with "warnings" when I run roles against instances.
So even though I understand for this "warning", it's a false positive when nothing
needs to be done.

* Update changelogs/fragments/651-fix-postgresql_set-warning.yaml

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

Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>
2020-07-15 16:22:06 +03:00
Andrew Klychkov
c055340ecb modules: fix examples to use FQCN for builtin modules (#648)
* modules: fix examples to use FQCN for builtin modules

* fix

* fix

* fix

* fix

* fix

* fix

* fix
2020-07-14 18:28:08 +03:00
Abhijeet Kasurde
c034e8c04f gitlab_project: add support for merge_method on projects (#636)
Migrated from ansible/ansible#66813

Signed-off-by: Abhijeet Kasurde <akasurde@redhat.com>
2020-07-14 20:17:46 +05:30
Andrew Klychkov
41cfdda6a3 modules: fix examples to use FQCN (#644)
* modules: fix examples to use FQCN

* fix

* fix

* fix
2020-07-13 21:50:31 +02:00
Felix Fontein
8b92e0454d docker_container: make sure to_text() and to_native() are used instead of str() (#642)
* Make sure to_text() and to_native() are used instead of str().

* Add changelog.

* Quoting should stay.
2020-07-13 20:59:29 +02:00
Andrew Klychkov
f62b8027e0 postgresql modules: fix examples to use FQCN (#643) 2020-07-13 12:54:34 +03:00
Adam C. Migus
a424ee71e3 Add Thycotic DevOps Secrets Vault lookup plugin (#90)
* Add the Thycotic DevOps Secrets Vault lookup plugin.

* Update plugins/lookup/dsv.py

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

* Update plugins/lookup/dsv.py

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

* Update plugins/lookup/dsv.py

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

* Fix import error check per code review.

* Apply suggestions from code review

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

* Add a unittest for plugins/lookup/dsv.py

* Add copyrights.

* Apply suggestions from code review

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

* Fixed formatting bug in test_dsv.py

* Apply suggestions from code review

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

* Apply suggestions from code review

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

Co-authored-by: Felix Fontein <felix@fontein.de>
2020-07-13 05:45:07 +00:00
Adam C. Migus
4c6e2f2a40 Add the Thycotic Secret Server lookup plugin. (#91)
* Add the Thycotic Secret Server lookup plugin.

* Update plugins/lookup/tss.py

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

* Fix import error check per code review.

* Apply suggestions from code review

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

* Trivial changes based on suggestions from code review.

* Add a unittest for plugins/lookup/tss.py

* Add copyrights.

* Fixed formatting bug in test_tss.py

* Fix formatting bugs in tss.py and test_tss.py

* Apply suggestions from code review

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

Co-authored-by: Felix Fontein <felix@fontein.de>
2020-07-13 07:37:20 +02:00
Abhijeet Kasurde
151551b04f selective: mark task failed correctly (#629)
Added additional condition to detect failed task in
selective callback plugin when ran with loop or with_items.

Fixes: ansible/ansible#63767

Signed-off-by: Abhijeet Kasurde <akasurde@redhat.com>
2020-07-12 00:26:58 +02:00
Amin Vakil
b31de003bd Reduce ignored files sanity tests (#639)
* Remove all files ignores to see errors

* Fix

* Revert archive.py as its change should be discussed in another PR

* Ignore archive.py

* Revert xml

* Fix
2020-07-12 00:22:15 +02:00
ekaulberg
7f76d8aff4 Remove old infini modules to prepare for collection implementation (#607)
* Removed old infini modules, added redirects to new collection.

* Fix key names.

Co-authored-by: Felix Fontein <felix@fontein.de>
2020-07-10 21:08:09 +02:00
Ben Mildren
f420e8f02e Migrating MySQL to community.mysql (#633)
* Migrating MySQL to community.mysql

* Added PR to changelog

* Removed missed tests

* Removed missed changelog fragments

* Update meta/runtime.yml

Co-authored-by: Ben Mildren <bmildren@digitalocean.com>
Co-authored-by: Felix Fontein <felix@fontein.de>
2020-07-10 18:54:04 +02:00
Davíð Steinn Geirsson
d0b07885f0 pkgng: Add support for upgrading all installed packages (#569)
* pkgng: Add support for upgrading all installed packages

Adds support for ``name: "*", state: latest`` to upgrade all installed
packages, similar to other package providers.

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

* pkgng: Improve wording for warning in example, fix formatting

* pkgng.py: Fix capitalization

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-07-07 23:04:35 +02:00
Felix Fontein
c1b5b51366 Remove DigitalOcean modules (moved to community.digitalocean) (#622)
* Remove DigitalOcean modules.

* Remove inventory scripts.
2020-07-07 16:41:16 +02:00
Ben Mildren
25aec0d712 migrating ProxySQL to community.proxysql (#624)
* migrating ProxySQL to community.proxysql

* Added PR to changelog

* Removed symlinks, fixed grammer in changelog fragment

* Fixed typo

* Added redirects to meta/runtime.yml

* Added docs_fragment redirect to meta/runtime.yml

Co-authored-by: Ben Mildren <bmildren@digitalocean.com>
2020-07-07 13:38:54 +01:00
Andrew Klychkov
17f905eb35 postgres modules: fix CI timeouts (#628) 2020-07-07 11:33:35 +03:00
John R Barker
c5f0c34190 codeql-analysis.yml cron 2020-07-06 20:24:45 +01:00
John R Barker
24c66fcc43 Create codeql-analysis.yml 2020-07-06 20:19:31 +01:00
Andrew Klychkov
5e23f01a76 mysql_user: fix overriding user passowrd to the same (#609)
* mysql_user: fix overriding user passowrd to the same

* add changelog
2020-07-06 15:16:48 +03:00
Andrew Klychkov
74ba307777 mysql_user: add missed privileges (#618)
* mysql_user: add missed privileges

* add changelog fragment
2020-07-06 09:58:15 +02:00
Felix Fontein
a1c03a3cfe master -> main 2020-07-06 08:53:01 +02:00
James J Porter
6b852d841f Fix bug in digital_ocean_tag_info module (#615)
Co-authored-by: Felix Fontein <felix@fontein.de>
2020-07-05 11:31:52 +05:30
Felix Fontein
c6ec384c24 Disable OSX 10.11 for 2.9 tests, since coverage fails for it. 2020-07-04 14:08:10 +02:00
Felix Fontein
65a8dbad8d Fix coverage parameters for shippable script. 2020-07-03 20:15:31 +02:00
Piotr Wojciechowski
171bc087cf Fix documentation mistakes for docker_swarm_info and docker_swarm_service (#608)
* Fix typo in documentation section

* Fix typo in documentation section

Co-authored-by: WojciechowskiPiotr <devel@it-playground.pl>
2020-07-02 23:17:07 +02:00
Felix Fontein
786f082976 Run tests with Ansible 2.9 as well (#296)
* Run some tests with Ansible 2.9. No need to run extra tests multiple times.

* Update ignore-2.9.txt.

* Adjust README.

* Add changelog fragment.
2020-07-02 13:40:16 +02:00
Andrew Klychkov
3cde447eb8 postgresql CI tests: fix timeouts (#598)
* postgresql CI tests: fix timeouts

* fix

ci_complete
2020-07-02 09:01:20 +02:00
Felix Fontein
e2bd4b34ed Adjust README to template's README. (#601) 2020-07-02 06:44:08 +02:00
Andrew Klychkov
a5f11b085b postgresql_idx: add CI tests (#603) 2020-06-30 17:11:43 +03:00
Abhijeet Kasurde
d0fb125586 docs: misc fixes for typos (#602)
Migrated from https://github.com/ansible/ansible/pull/68367

Signed-off-by: Radoslav Dimitrov dimitrovr@vmware.com
2020-06-30 19:00:41 +05:30
Robert Osowiecki
ba28da9b62 postgresql_db: document when pg_restore is used (#589)
* postgresql_db: document when pg_restore is used (#588)

* postgresql_db: more precise description for target_opts

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

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

Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>
2020-06-30 09:54:31 +03:00
anshulbehl
cca84abeb5 conjur_variable: redirecting to correct collection (#570)
* - Redirecting to correct collection
- Removing the plugin and adding changelog and deprecation

* Making suggested changes

* Earlier version on leftovers

* Update changelogs/fragments/cyberarkconjur-removal.yml

Co-authored-by: Felix Fontein <felix@fontein.de>
2020-06-30 07:36:08 +02:00
Joey Zhang
d2ee51253d nmcli: add idempotent support for any kinds of connections (#562)
* nmcli: add idemptent support for any kinds of connections

Fixes #481: nmcli reports changed status even if nothing needs to change
- Implement show_connection() to retrieve connection profile from command line
- Parse integer enumeration values in show_connection()
- Convert 'bond.options' to alias shortcuts
- Modify connection only if changes are detected
- Support generic alias in during the property comparison

* nmcli: add idemptent support for any kinds of connections

Add mock object for modification cases when connection state changes

* nmcli: add idempotent support for any kinds of connections

- Add more test cases to check idempotent for each type of connections
- Verify 'changed' and 'failed' in the result of each test
- Append prefixlen for 'ip4' values in test data
- Fix the incorrect 'return_value' of execute_command() in previous mockers
- Ignore the empty string in _compare_conn_params()
- Fix the property key mapping of 'bridge-port.hairpin-mode' for bridge-slave
- Add 'override_options' in the result output for playboot debug

* nmcli: add idempotent support for any kinds of connections

Fix pep8 issues in test_nmcli.py: Comparison to False should be 'not expr'

* nmcli: add idempotent support for any kinds of connections

Support setting 'ipv4.method' or 'ipv6.method' via nmcli if the configuration method changes

* nmcli: add idempotent support for any kinds of connections

Simplify the if statements in show_connection() according to vlours's advice

* nmcli: add idempotent support for any kinds of connections

Fix the list argument comparison method with multiple values.

* nmcli: add idempotent support for any kinds of connections

Use ansible --diff option output to show detailed changes instead of a private return value.

* nmcli: add idempotent support for any kinds of connections

Add changelog fragment for bugfix.
2020-06-30 05:43:39 +02:00
Kirill Petrov
706195fb02 use Config MacAddress by default instead of Networks (#564)
* use Config MacAddress by default instead of Networks

* use Config MacAddress by default instead of Networks - fix typo

* #564 docker_container macaddress - add changelog fragment
2020-06-30 05:40:43 +02:00
Baptiste Mille-Mathias
a7a74a6eb7 [splunk] Add an option to not fail when the certificate is not valid (#596)
* [splunk] Add an option to not fail when the certificate is not valid

Add an boolean option validate_certs to not validate the certificate of
the HTTP Event Collector.

* Add changelog

* Fix using tabs indentation

* Fix post-review - fix changelog and version of the parameter

Co-authored-by: Baptiste Mille-Mathias <baptiste.millemathias@gmail.com>
2020-06-29 16:14:44 +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
4976 changed files with 41651 additions and 488939 deletions

1119
.github/BOTMETA.yml vendored

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"

49
.github/workflows/codeql-analysis.yml vendored Normal file
View File

@@ -0,0 +1,49 @@
name: "Code scanning - action"
on:
schedule:
- cron: '26 19 * * 1'
jobs:
CodeQL-Build:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v2
with:
# We must fetch at least the immediate parents so that if this is
# a pull request then we can checkout the head.
fetch-depth: 2
# If this run was triggered by a pull request event, then checkout
# the head of the pull request instead of the merge commit.
- run: git checkout HEAD^2
if: ${{ github.event_name == 'pull_request' }}
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v1
# Override language selection by uncommenting this and choosing your languages
# with:
# languages: go, javascript, csharp, python, cpp, java
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
uses: github/codeql-action/autobuild@v1
# Command-line programs to run using the OS shell.
# 📚 https://git.io/JvXDl
# ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
# and modify them (or add more) to build your code if your project
# uses a compiled language
#- run: |
# make bootstrap
# make release
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v1

628
CHANGELOG.rst Normal file
View File

@@ -0,0 +1,628 @@
===============================
Community General Release Notes
===============================
.. contents:: Topics
v1.1.0
======
Release Summary
---------------
Release for Ansible 2.10.0.
Minor Changes
-------------
- The collection dependencies where adjusted so that ``community.kubernetes`` and ``google.cloud`` are required to be of version 1.0.0 or newer (https://github.com/ansible-collections/community.general/pull/774).
- jc - new filter to convert the output of many shell commands and file-types to JSON. Uses the jc library at https://github.com/kellyjonbrazil/jc. For example, filtering the STDOUT output of ``uname -a`` via ``{{ result.stdout | community.general.jc('uname') }}``. Requires Python 3.6+ (https://github.com/ansible-collections/community.general/pull/750).
- xfconf - add support for ``double`` type (https://github.com/ansible-collections/community.general/pull/744).
Bugfixes
--------
- cobbler inventory plugin - ``name`` needed FQCN (https://github.com/ansible-collections/community.general/pull/722).
- dsv lookup - use correct dict usage (https://github.com/ansible-collections/community.general/pull/743).
- inventory plugins - allow FQCN in ``plugin`` option (https://github.com/ansible-collections/community.general/pull/722).
- ipa_hostgroup - fix an issue with load-balanced ipa and cookie handling with Python 3 (https://github.com/ansible-collections/community.general/issues/737).
- oc connection plugin - ``transport`` needed FQCN (https://github.com/ansible-collections/community.general/pull/722).
- postgresql_set - allow to pass an empty string to the ``value`` parameter (https://github.com/ansible-collections/community.general/issues/775).
- xfconf - make it work in non-english locales (https://github.com/ansible-collections/community.general/pull/744).
New Modules
-----------
Cloud
~~~~~
docker
^^^^^^
- docker_stack_task_info - Return information of the tasks on a docker stack
System
~~~~~~
- iptables_state - Save iptables state into a file or restore it from a file
- shutdown - Shut down a machine
- sysupgrade - Manage OpenBSD system upgrades
v1.0.0
======
Release Summary
---------------
This is release 1.0.0 of ``community.general``, released on 2020-07-31.
Minor Changes
-------------
- Add the ``gcpubsub``, ``gcpubsub_info`` and ``gcpubsub_facts`` (to be removed in 3.0.0) modules. These were originally in community.general, but removed on the assumption that they have been moved to google.cloud. Since this turned out to be incorrect, we re-added them for 1.0.0.
- Add the deprecated ``gcp_backend_service``, ``gcp_forwarding_rule`` and ``gcp_healthcheck`` modules, which will be removed in 2.0.0. These were originally in community.general, but removed on the assumption that they have been moved to google.cloud. Since this turned out to be incorrect, we re-added them for 1.0.0.
- The collection is now actively tested in CI with the latest Ansible 2.9 release.
- airbrake_deployment - add ``version`` param; clarified docs on ``revision`` param (https://github.com/ansible-collections/community.general/pull/583).
- apk - added ``no_cache`` option (https://github.com/ansible-collections/community.general/pull/548).
- firewalld - the module has been moved to the ``ansible.posix`` collection. A redirection is active, which will be removed in version 2.0.0 (https://github.com/ansible-collections/community.general/pull/623).
- gitlab_project - add support for merge_method on projects (https://github.com/ansible/ansible/pull/66813).
- gitlab_runners inventory plugin - permit environment variable input for ``server_url``, ``api_token`` and ``filter`` options (https://github.com/ansible-collections/community.general/pull/611).
- haproxy - add options to dis/enable health and agent checks. When health and agent checks are enabled for a service, a disabled service will re-enable itself automatically. These options also change the state of the agent checks to match the requested state for the backend (https://github.com/ansible-collections/community.general/issues/684).
- log_plays callback - use v2 methods (https://github.com/ansible-collections/community.general/pull/442).
- logstash callback - add ini config (https://github.com/ansible-collections/community.general/pull/610).
- lxd_container - added support of ``--target`` flag for cluster deployments (https://github.com/ansible-collections/community.general/issues/637).
- 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).
- pkgng - added support for upgrading all packages using ``name: *, state: latest``, similar to other package providers (https://github.com/ansible-collections/community.general/pull/569).
- postgresql_query - add search_path parameter (https://github.com/ansible-collections/community.general/issues/625).
- rundeck_acl_policy - add check for rundeck_acl_policy name parameter (https://github.com/ansible-collections/community.general/pull/612).
- slack - add support for sending messages built with block kit (https://github.com/ansible-collections/community.general/issues/380).
- splunk callback - add an option to allow not to validate certificate from HEC (https://github.com/ansible-collections/community.general/pull/596).
- xfconf - add arrays support (https://github.com/ansible/ansible/issues/46308).
- xfconf - add support for ``uint`` type (https://github.com/ansible-collections/community.general/pull/696).
Breaking Changes / Porting Guide
--------------------------------
- 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).
- pkgng - passing ``name: *`` with ``state: absent`` will no longer remove every installed package from the system. It is now a noop. (https://github.com/ansible-collections/community.general/pull/569).
- pkgng - passing ``name: *`` with ``state: latest`` or ``state: present`` will no longer install every package from the configured package repositories. Instead, ``name: *, state: latest`` will upgrade all already-installed packages, and ``name: *, state: present`` is a noop. (https://github.com/ansible-collections/community.general/pull/569).
Deprecated Features
-------------------
- The ldap_attr module has been deprecated and will be removed in a later release; use ldap_attrs instead.
- 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)
----------------------------------------
- conjur_variable lookup - has been moved to the ``cyberark.conjur`` collection. A redirection is active, which will be removed in version 2.0.0 (https://github.com/ansible-collections/community.general/pull/570).
- digital_ocean_* - all DigitalOcean modules have been moved to the ``community.digitalocean`` collection. A redirection is active, which will be removed in version 2.0.0 (https://github.com/ansible-collections/community.general/pull/622).
- infini_* - all infinidat modules have been moved to the ``infinidat.infinibox`` collection. A redirection is active, which will be removed in version 2.0.0 (https://github.com/ansible-collections/community.general/pull/607).
- 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).
- mysql_* - all MySQL modules have been moved to the ``community.mysql`` collection. A redirection is active, which will be removed in version 2.0.0 (https://github.com/ansible-collections/community.general/pull/633).
- proxysql_* - all ProxySQL modules have been moved to the ``community.proxysql`` collection. A redirection is active, which will be removed in version 2.0.0 (https://github.com/ansible-collections/community.general/pull/624).
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).
- digital_ocean_tag_info - fix crash when querying for an individual tag (https://github.com/ansible-collections/community.general/pull/615).
- doas become plugin - address a bug with the parameters handling that was breaking the plugin in community.general when ``become_flags`` and ``become_user`` were not explicitly specified (https://github.com/ansible-collections/community.general/pull/704).
- 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).
- docker_container - use Config MacAddress by default instead of Networks. Networks MacAddress is empty in some cases (https://github.com/ansible/ansible/issues/70206).
- docker_container - various error fixes in string handling for Python 2 to avoid crashes when non-ASCII characters are used in strings (https://github.com/ansible-collections/community.general/issues/640).
- docker_swarm - removes ``advertise_addr`` from list of required arguments when ``state`` is ``"join"`` (https://github.com/ansible-collections/community.general/issues/439).
- dzdo become plugin - address a bug with the parameters handling that was breaking the plugin in community.general when ``become_user`` was not explicitly specified (https://github.com/ansible-collections/community.general/pull/708).
- filesystem - resizefs of xfs filesystems is fixed. Filesystem needs to be mounted.
- jenkins_plugin - replace MD5 checksum verification with SHA1 due to MD5 being disabled on systems with FIPS-only algorithms enabled (https://github.com/ansible/ansible/issues/34304).
- jira - improve error message handling (https://github.com/ansible-collections/community.general/pull/311).
- jira - improve error message handling with multiple errors (https://github.com/ansible-collections/community.general/pull/707).
- kubevirt - Add aliases 'interface_name' for network_name (https://github.com/ansible/ansible/issues/55641).
- nmcli - fix idempotetency when modifying an existing connection (https://github.com/ansible-collections/community.general/issues/481).
- osx_defaults - fix handling negative integers (https://github.com/ansible-collections/community.general/issues/134).
- pacman - treat package names containing .zst as package files during installation (https://www.archlinux.org/news/now-using-zstandard-instead-of-xz-for-package-compression/, https://github.com/ansible-collections/community.general/pull/650).
- pbrun become plugin - address a bug with the parameters handling that was breaking the plugin in community.general when ``become_user`` was not explicitly specified (https://github.com/ansible-collections/community.general/pull/708).
- postgresql_privs - fix crash when set privileges on schema with hyphen in the name (https://github.com/ansible-collections/community.general/issues/656).
- postgresql_set - only display a warning about restarts, when restarting is needed (https://github.com/ansible-collections/community.general/pull/651).
- redfish_info, redfish_config, redfish_command - Fix Redfish response payload decode on Python 3.5 (https://github.com/ansible-collections/community.general/issues/686)
- selective - mark task failed correctly (https://github.com/ansible/ansible/issues/63767).
- snmp_facts - skip ``EndOfMibView`` values (https://github.com/ansible/ansible/issues/49044).
- yarn - fixed an index out of range error when no outdated packages where returned by yarn executable (see https://github.com/ansible-collections/community.general/pull/474).
- yarn - fixed an too many values to unpack error when scoped packages are installed (see https://github.com/ansible-collections/community.general/pull/474).
New Plugins
-----------
Inventory
~~~~~~~~~
- cobbler - Cobbler inventory source
Lookup
~~~~~~
- dsv - Get secrets from Thycotic DevOps Secrets Vault
- tss - Get secrets from Thycotic Secret Server
New Modules
-----------
Cloud
~~~~~
docker
^^^^^^
- docker_stack_info - Return information on a docker stack
Database
~~~~~~~~
misc
^^^^
- odbc - Execute SQL via ODBC
System
~~~~~~
- launchd - Manage macOS services
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``.
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.
- 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.
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)
- 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,87 @@
[![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 many modules and plugins supported by Ansible community which are not part of more specialized community collections.
## Tested with Ansible
Tested with the current Ansible 2.9 and 2.10 releases and the current development version of Ansible. Ansible versions before 2.9.10 are not supported.
## External requirements
Some modules and plugins require external libraries. Please check the requirements for each plugin or module you use in the documentation to find out which requirements are needed.
## Included content
Please check the included content on the [Ansible Galaxy page for this collection](https://galaxy.ansible.com/community/general).
## Using this collection
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
```
See [Ansible Using collections](https://docs.ansible.com/ansible/latest/user_guide/collections_using.html) for more details.
## Contributing to this collection
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_PATH`](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), and in the [Ansible Community Guide](https://docs.ansible.com/ansible/latest/community/index.html).
### Running tests
See [here](https://docs.ansible.com/ansible/devel/dev_guide/developing_collections.html#testing-collections).
### 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)
### 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.
## Release notes
See the [changelog](https://github.com/ansible-collections/community.general/blob/main/CHANGELOG.rst).
## Roadmap
See [this issue](https://github.com/ansible-collections/community.general/issues/582) for information on releasing, versioning and deprecation.
In general, we plan to release a major version every six months, and minor versions every two months. Major versions can contain breaking changes, while minor versions only contain new features and bugfixes.
## More information
- [Ansible Collection overview](https://github.com/ansible-collections/overview)
- [Ansible User guide](https://docs.ansible.com/ansible/latest/user_guide/index.html)
- [Ansible Developer guide](https://docs.ansible.com/ansible/latest/dev_guide/index.html)
- [Ansible Community code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html)
## Licensing
GNU General Public License v3.0 or later.
See [COPYING](https://www.gnu.org/licenses/gpl-3.0.txt) to see the full text.

1
changelogs/.gitignore vendored Normal file
View File

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

1106
changelogs/changelog.yaml Normal file

File diff suppressed because it is too large Load Diff

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

@@ -1,29 +1,20 @@
namespace: community
name: general
version: 0.1.1
version: 1.1.0
readme: README.md
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'
tags: [community]
# NOTE: No more dependencies can be added to this list
dependencies:
ansible.netcommon: '>=1.0.0'
ansible.posix: '>=1.0.0'
community.kubernetes: '>=1.0.0'
google.cloud: '>=1.0.0'
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

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

742
meta/runtime.yml Normal file
View File

@@ -0,0 +1,742 @@
requires_ansible: '>=2.9.10'
action_groups:
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
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
plugin_routing:
lookup:
conjur_variable:
redirect: cyberark.conjur.conjur_variable
deprecation:
removal_version: 2.0.0
warning_text: The conjur_variable lookup has been moved to the cyberark.conjur collection.
modules:
ali_instance_facts:
deprecation:
removal_version: 3.0.0
warning_text: see plugin documentation for details
digital_ocean:
deprecation:
removal_version: 2.0.0
warning_text: The digital_ocean module has been moved to the community.digitalocean collection.
redirect: community.digitalocean.digital_ocean
digital_ocean_account_facts:
deprecation:
removal_version: 2.0.0
warning_text: The digital_ocean_account_facts module has been moved to the community.digitalocean collection.
redirect: community.digitalocean.digital_ocean_account_facts
digital_ocean_account_info:
deprecation:
removal_version: 2.0.0
warning_text: The digital_ocean_account_info module has been moved to the community.digitalocean collection.
redirect: community.digitalocean.digital_ocean_account_info
digital_ocean_block_storage:
deprecation:
removal_version: 2.0.0
warning_text: The digital_ocean_block_storage module has been moved to the community.digitalocean collection.
redirect: community.digitalocean.digital_ocean_block_storage
digital_ocean_certificate:
deprecation:
removal_version: 2.0.0
warning_text: The digital_ocean_certificate module has been moved to the community.digitalocean collection.
redirect: community.digitalocean.digital_ocean_certificate
digital_ocean_certificate_facts:
deprecation:
removal_version: 2.0.0
warning_text: The digital_ocean_certificate_facts module has been moved to the community.digitalocean collection.
redirect: community.digitalocean.digital_ocean_certificate_facts
digital_ocean_certificate_info:
deprecation:
removal_version: 2.0.0
warning_text: The digital_ocean_certificate_info module has been moved to the community.digitalocean collection.
redirect: community.digitalocean.digital_ocean_certificate_info
digital_ocean_domain:
deprecation:
removal_version: 2.0.0
warning_text: The digital_ocean_domain module has been moved to the community.digitalocean collection.
redirect: community.digitalocean.digital_ocean_domain
digital_ocean_domain_facts:
deprecation:
removal_version: 2.0.0
warning_text: The digital_ocean_domain_facts module has been moved to the community.digitalocean collection.
redirect: community.digitalocean.digital_ocean_domain_facts
digital_ocean_domain_info:
deprecation:
removal_version: 2.0.0
warning_text: The digital_ocean_domain_info module has been moved to the community.digitalocean collection.
redirect: community.digitalocean.digital_ocean_domain_info
digital_ocean_droplet:
deprecation:
removal_version: 2.0.0
warning_text: The digital_ocean_droplet module has been moved to the community.digitalocean collection.
redirect: community.digitalocean.digital_ocean_droplet
digital_ocean_firewall_facts:
deprecation:
removal_version: 2.0.0
warning_text: The digital_ocean_firewall_facts module has been moved to the community.digitalocean collection.
redirect: community.digitalocean.digital_ocean_firewall_facts
digital_ocean_firewall_info:
deprecation:
removal_version: 2.0.0
warning_text: The digital_ocean_firewall_info module has been moved to the community.digitalocean collection.
redirect: community.digitalocean.digital_ocean_firewall_info
digital_ocean_floating_ip:
deprecation:
removal_version: 2.0.0
warning_text: The digital_ocean_floating_ip module has been moved to the community.digitalocean collection.
redirect: community.digitalocean.digital_ocean_floating_ip
digital_ocean_floating_ip_facts:
deprecation:
removal_version: 2.0.0
warning_text: The digital_ocean_floating_ip_facts module has been moved to the community.digitalocean collection.
redirect: community.digitalocean.digital_ocean_floating_ip_facts
digital_ocean_floating_ip_info:
deprecation:
removal_version: 2.0.0
warning_text: The digital_ocean_floating_ip_info module has been moved to the community.digitalocean collection.
redirect: community.digitalocean.digital_ocean_floating_ip_info
digital_ocean_image_facts:
deprecation:
removal_version: 2.0.0
warning_text: The digital_ocean_image_facts module has been moved to the community.digitalocean collection.
redirect: community.digitalocean.digital_ocean_image_facts
digital_ocean_image_info:
deprecation:
removal_version: 2.0.0
warning_text: The digital_ocean_image_info module has been moved to the community.digitalocean collection.
redirect: community.digitalocean.digital_ocean_image_info
digital_ocean_load_balancer_facts:
deprecation:
removal_version: 2.0.0
warning_text: The digital_ocean_load_balancer_facts module has been moved to the community.digitalocean collection.
redirect: community.digitalocean.digital_ocean_load_balancer_facts
digital_ocean_load_balancer_info:
deprecation:
removal_version: 2.0.0
warning_text: The digital_ocean_load_balancer_info module has been moved to the community.digitalocean collection.
redirect: community.digitalocean.digital_ocean_load_balancer_info
digital_ocean_region_facts:
deprecation:
removal_version: 2.0.0
warning_text: The digital_ocean_region_facts module has been moved to the community.digitalocean collection.
redirect: community.digitalocean.digital_ocean_region_facts
digital_ocean_region_info:
deprecation:
removal_version: 2.0.0
warning_text: The digital_ocean_region_info module has been moved to the community.digitalocean collection.
redirect: community.digitalocean.digital_ocean_region_info
digital_ocean_size_facts:
deprecation:
removal_version: 2.0.0
warning_text: The digital_ocean_size_facts module has been moved to the community.digitalocean collection.
redirect: community.digitalocean.digital_ocean_size_facts
digital_ocean_size_info:
deprecation:
removal_version: 2.0.0
warning_text: The digital_ocean_size_info module has been moved to the community.digitalocean collection.
redirect: community.digitalocean.digital_ocean_size_info
digital_ocean_snapshot_facts:
deprecation:
removal_version: 2.0.0
warning_text: The digital_ocean_snapshot_facts module has been moved to the community.digitalocean collection.
redirect: community.digitalocean.digital_ocean_snapshot_facts
digital_ocean_snapshot_info:
deprecation:
removal_version: 2.0.0
warning_text: The digital_ocean_snapshot_info module has been moved to the community.digitalocean collection.
redirect: community.digitalocean.digital_ocean_snapshot_info
digital_ocean_sshkey:
deprecation:
removal_version: 2.0.0
warning_text: The digital_ocean_sshkey module has been moved to the community.digitalocean collection.
redirect: community.digitalocean.digital_ocean_sshkey
digital_ocean_sshkey_facts:
deprecation:
removal_version: 2.0.0
warning_text: The digital_ocean_sshkey_facts module has been moved to the community.digitalocean collection.
redirect: community.digitalocean.digital_ocean_sshkey_facts
digital_ocean_sshkey_info:
deprecation:
removal_version: 2.0.0
warning_text: The digital_ocean_sshkey_info module has been moved to the community.digitalocean collection.
redirect: community.digitalocean.digital_ocean_sshkey_info
digital_ocean_tag:
deprecation:
removal_version: 2.0.0
warning_text: The digital_ocean_tag module has been moved to the community.digitalocean collection.
redirect: community.digitalocean.digital_ocean_tag
digital_ocean_tag_facts:
deprecation:
removal_version: 2.0.0
warning_text: The digital_ocean_tag_facts module has been moved to the community.digitalocean collection.
redirect: community.digitalocean.digital_ocean_tag_facts
digital_ocean_tag_info:
deprecation:
removal_version: 2.0.0
warning_text: The digital_ocean_tag_info module has been moved to the community.digitalocean collection.
redirect: community.digitalocean.digital_ocean_tag_info
digital_ocean_volume_facts:
deprecation:
removal_version: 2.0.0
warning_text: The digital_ocean_volume_facts module has been moved to the community.digitalocean collection.
redirect: community.digitalocean.digital_ocean_volume_facts
digital_ocean_volume_info:
deprecation:
removal_version: 2.0.0
warning_text: The digital_ocean_volume_info module has been moved to the community.digitalocean collection.
redirect: community.digitalocean.digital_ocean_volume_info
docker_image_facts:
deprecation:
removal_version: 2.0.0
warning_text: see plugin documentation for details
docker_service:
deprecation:
removal_version: 2.0.0
warning_text: see plugin documentation for details
firewalld:
deprecation:
removal_version: 2.0.0
warning_text: The firewalld module has been moved to the ansible.posix collection.
redirect: ansible.posix.firewalld
foreman:
deprecation:
removal_version: 2.0.0
warning_text: see plugin documentation for details
gcdns_record:
deprecation:
removal_version: 2.0.0
warning_text: see plugin documentation for details
gcdns_zone:
deprecation:
removal_version: 2.0.0
warning_text: see plugin documentation for details
gce:
deprecation:
removal_version: 2.0.0
warning_text: see plugin documentation for details
gcp_backend_service:
deprecation:
removal_version: 2.0.0
warning_text: see plugin documentation for details
gcp_forwarding_rule:
deprecation:
removal_version: 2.0.0
warning_text: see plugin documentation for details
gcp_healthcheck:
deprecation:
removal_version: 2.0.0
warning_text: see plugin documentation for details
gcp_target_proxy:
deprecation:
removal_version: 2.0.0
warning_text: see plugin documentation for details
gcp_url_map:
deprecation:
removal_version: 2.0.0
warning_text: see plugin documentation for details
gcpubsub_facts:
deprecation:
removal_version: 3.0.0
warning_text: see plugin documentation for details
gcspanner:
deprecation:
removal_version: 2.0.0
warning_text: see plugin documentation for details
github_hooks:
deprecation:
removal_version: 2.0.0
warning_text: see plugin documentation for details
helm:
deprecation:
removal_version: 3.0.0
warning_text: The helm module in community.general has been deprecated. Use community.kubernetes.helm instead.
hpilo_facts:
deprecation:
removal_version: 3.0.0
warning_text: see plugin documentation for details
idrac_redfish_facts:
deprecation:
removal_version: 3.0.0
warning_text: see plugin documentation for details
infini_export:
redirect: infinidat.infinibox.infini_export
deprecation:
removal_version: 2.0.0
warning_text: The infini_export module has been moved to the infinidat collection.
infini_export_client:
redirect: infinidat.infinibox.infini_export_client
deprecation:
removal_version: 2.0.0
warning_text: The infini_export_client module has been moved to the infinidat collection.
infini_fs:
redirect: infinidat.infinibox.infini_fs
deprecation:
removal_version: 2.0.0
warning_text: The infini_fs module has been moved to the infinidat collection.
infini_host:
redirect: infinidat.infinibox.infini_host
deprecation:
removal_version: 2.0.0
warning_text: The infini_host module has been moved to the infinidat collection.
infini_pool:
redirect: infinidat.infinibox.infini_pool
deprecation:
removal_version: 2.0.0
warning_text: The infini_pool module has been moved to the infinidat collection.
infini_vol:
redirect: infinidat.infinibox.infini_vol
deprecation:
removal_version: 2.0.0
warning_text: The infini_vol module has been moved to the infinidat collection.
jenkins_job_facts:
deprecation:
removal_version: 3.0.0
warning_text: see plugin documentation for details
katello:
deprecation:
removal_version: 2.0.0
warning_text: see plugin documentation for details
ldap_attr:
deprecation:
removal_version: 3.0.0
warning_text: see plugin documentation for details
logicmonitor:
tombstone:
removal_version: 1.0.0
warning_text: The logicmonitor_facts module is no longer maintained and the API used has been disabled in 2017.
logicmonitor_facts:
tombstone:
removal_version: 1.0.0
warning_text: The logicmonitor_facts module is no longer maintained and the API used has been disabled in 2017.
memset_memstore_facts:
deprecation:
removal_version: 3.0.0
warning_text: see plugin documentation for details
memset_server_facts:
deprecation:
removal_version: 3.0.0
warning_text: see plugin documentation for details
mysql_db:
deprecation:
removal_version: 2.0.0
warning_text: The mysql_db module has been moved to the community.mysql collection.
redirect: community.mysql.mysql_db
mysql_info:
deprecation:
removal_version: 2.0.0
warning_text: The mysql_info module has been moved to the community.mysql collection.
redirect: community.mysql.mysql_info
mysql_query:
deprecation:
removal_version: 2.0.0
warning_text: The mysql_query module has been moved to the community.mysql collection.
redirect: community.mysql.mysql_query
mysql_replication:
deprecation:
removal_version: 2.0.0
warning_text: The mysql_replication module has been moved to the community.mysql collection.
redirect: community.mysql.mysql_replication
mysql_user:
deprecation:
removal_version: 2.0.0
warning_text: The mysql_user module has been moved to the community.mysql collection.
redirect: community.mysql.mysql_user
mysql_variables:
deprecation:
removal_version: 2.0.0
warning_text: The mysql_variables module has been moved to the community.mysql collection.
redirect: community.mysql.mysql_variables
na_cdot_aggregate:
deprecation:
removal_version: 2.0.0
warning_text: see plugin documentation for details
na_cdot_license:
deprecation:
removal_version: 2.0.0
warning_text: see plugin documentation for details
na_cdot_lun:
deprecation:
removal_version: 2.0.0
warning_text: see plugin documentation for details
na_cdot_qtree:
deprecation:
removal_version: 2.0.0
warning_text: see plugin documentation for details
na_cdot_svm:
deprecation:
removal_version: 2.0.0
warning_text: see plugin documentation for details
na_cdot_user:
deprecation:
removal_version: 2.0.0
warning_text: see plugin documentation for details
na_cdot_user_role:
deprecation:
removal_version: 2.0.0
warning_text: see plugin documentation for details
na_cdot_volume:
deprecation:
removal_version: 2.0.0
warning_text: see plugin documentation for details
na_ontap_gather_facts:
deprecation:
removal_version: 3.0.0
warning_text: see plugin documentation for details
nginx_status_facts:
deprecation:
removal_version: 3.0.0
warning_text: see plugin documentation for details
one_image_facts:
deprecation:
removal_version: 3.0.0
warning_text: see plugin documentation for details
onepassword_facts:
deprecation:
removal_version: 3.0.0
warning_text: see plugin documentation for details
oneview_datacenter_facts:
deprecation:
removal_version: 3.0.0
warning_text: see plugin documentation for details
oneview_enclosure_facts:
deprecation:
removal_version: 3.0.0
warning_text: see plugin documentation for details
oneview_ethernet_network_facts:
deprecation:
removal_version: 3.0.0
warning_text: see plugin documentation for details
oneview_fc_network_facts:
deprecation:
removal_version: 3.0.0
warning_text: see plugin documentation for details
oneview_fcoe_network_facts:
deprecation:
removal_version: 3.0.0
warning_text: see plugin documentation for details
oneview_logical_interconnect_group_facts:
deprecation:
removal_version: 3.0.0
warning_text: see plugin documentation for details
oneview_network_set_facts:
deprecation:
removal_version: 3.0.0
warning_text: see plugin documentation for details
oneview_san_manager_facts:
deprecation:
removal_version: 3.0.0
warning_text: see plugin documentation for details
online_server_facts:
deprecation:
removal_version: 3.0.0
warning_text: see plugin documentation for details
online_user_facts:
deprecation:
removal_version: 3.0.0
warning_text: see plugin documentation for details
ovirt:
deprecation:
removal_version: 3.0.0
warning_text: see plugin documentation for details
ovirt_affinity_label_facts:
deprecation:
removal_version: 3.0.0
warning_text: see plugin documentation for details
ovirt_api_facts:
deprecation:
removal_version: 3.0.0
warning_text: see plugin documentation for details
ovirt_cluster_facts:
deprecation:
removal_version: 3.0.0
warning_text: see plugin documentation for details
ovirt_datacenter_facts:
deprecation:
removal_version: 3.0.0
warning_text: see plugin documentation for details
ovirt_disk_facts:
deprecation:
removal_version: 3.0.0
warning_text: see plugin documentation for details
ovirt_event_facts:
deprecation:
removal_version: 3.0.0
warning_text: see plugin documentation for details
ovirt_external_provider_facts:
deprecation:
removal_version: 3.0.0
warning_text: see plugin documentation for details
ovirt_group_facts:
deprecation:
removal_version: 3.0.0
warning_text: see plugin documentation for details
ovirt_host_facts:
deprecation:
removal_version: 3.0.0
warning_text: see plugin documentation for details
ovirt_host_storage_facts:
deprecation:
removal_version: 3.0.0
warning_text: see plugin documentation for details
ovirt_network_facts:
deprecation:
removal_version: 3.0.0
warning_text: see plugin documentation for details
ovirt_nic_facts:
deprecation:
removal_version: 3.0.0
warning_text: see plugin documentation for details
ovirt_permission_facts:
deprecation:
removal_version: 3.0.0
warning_text: see plugin documentation for details
ovirt_quota_facts:
deprecation:
removal_version: 3.0.0
warning_text: see plugin documentation for details
ovirt_scheduling_policy_facts:
deprecation:
removal_version: 3.0.0
warning_text: see plugin documentation for details
ovirt_snapshot_facts:
deprecation:
removal_version: 3.0.0
warning_text: see plugin documentation for details
ovirt_storage_domain_facts:
deprecation:
removal_version: 3.0.0
warning_text: see plugin documentation for details
ovirt_storage_template_facts:
deprecation:
removal_version: 3.0.0
warning_text: see plugin documentation for details
ovirt_storage_vm_facts:
deprecation:
removal_version: 3.0.0
warning_text: see plugin documentation for details
ovirt_tag_facts:
deprecation:
removal_version: 3.0.0
warning_text: see plugin documentation for details
ovirt_template_facts:
deprecation:
removal_version: 3.0.0
warning_text: see plugin documentation for details
ovirt_user_facts:
deprecation:
removal_version: 3.0.0
warning_text: see plugin documentation for details
ovirt_vm_facts:
deprecation:
removal_version: 3.0.0
warning_text: see plugin documentation for details
ovirt_vmpool_facts:
deprecation:
removal_version: 3.0.0
warning_text: see plugin documentation for details
proxysql_backend_servers:
deprecation:
removal_version: 2.0.0
warning_text: The proxysql_backend_servers module has been moved to the community.proxysql collection.
redirect: community.proxysql.proxysql_backend_servers
proxysql_global_variables:
deprecation:
removal_version: 2.0.0
warning_text: The proxysql_global_variables module has been moved to the community.proxysql collection.
redirect: community.proxysql.proxysql_global_variables
proxysql_manage_config:
deprecation:
removal_version: 2.0.0
warning_text: The proxysql_manage_config module has been moved to the community.proxysql collection.
redirect: community.proxysql.proxysql_manage_config
proxysql_mysql_users:
deprecation:
removal_version: 2.0.0
warning_text: The proxysql_mysql_users module has been moved to the community.proxysql collection.
redirect: community.proxysql.proxysql_mysql_users
proxysql_query_rules:
deprecation:
removal_version: 2.0.0
warning_text: The proxysql_query_rules module has been moved to the community.proxysql collection.
redirect: community.proxysql.proxysql_query_rules
proxysql_replication_hostgroups:
deprecation:
removal_version: 2.0.0
warning_text: The proxysql_replication_hostgroups module has been moved to the community.proxysql collection.
redirect: community.proxysql.proxysql_replication_hostgroups
proxysql_scheduler:
deprecation:
removal_version: 2.0.0
warning_text: The proxysql_scheduler module has been moved to the community.proxysql collection.
redirect: community.proxysql.proxysql_scheduler
purefa_facts:
deprecation:
removal_version: 3.0.0
warning_text: see plugin documentation for details
purefb_facts:
deprecation:
removal_version: 3.0.0
warning_text: see plugin documentation for details
python_requirements_facts:
deprecation:
removal_version: 3.0.0
warning_text: see plugin documentation for details
redfish_facts:
deprecation:
removal_version: 3.0.0
warning_text: see plugin documentation for details
scaleway_image_facts:
deprecation:
removal_version: 3.0.0
warning_text: see plugin documentation for details
scaleway_ip_facts:
deprecation:
removal_version: 3.0.0
warning_text: see plugin documentation for details
scaleway_organization_facts:
deprecation:
removal_version: 3.0.0
warning_text: see plugin documentation for details
scaleway_security_group_facts:
deprecation:
removal_version: 3.0.0
warning_text: see plugin documentation for details
scaleway_server_facts:
deprecation:
removal_version: 3.0.0
warning_text: see plugin documentation for details
scaleway_snapshot_facts:
deprecation:
removal_version: 3.0.0
warning_text: see plugin documentation for details
scaleway_volume_facts:
deprecation:
removal_version: 3.0.0
warning_text: see plugin documentation for details
sf_account_manager:
deprecation:
removal_version: 2.0.0
warning_text: see plugin documentation for details
sf_check_connections:
deprecation:
removal_version: 2.0.0
warning_text: see plugin documentation for details
sf_snapshot_schedule_manager:
deprecation:
removal_version: 2.0.0
warning_text: see plugin documentation for details
sf_volume_access_group_manager:
deprecation:
removal_version: 2.0.0
warning_text: see plugin documentation for details
sf_volume_manager:
deprecation:
removal_version: 2.0.0
warning_text: see plugin documentation for details
smartos_image_facts:
deprecation:
removal_version: 3.0.0
warning_text: see plugin documentation for details
vertica_facts:
deprecation:
removal_version: 3.0.0
warning_text: see plugin documentation for details
xenserver_guest_facts:
deprecation:
removal_version: 3.0.0
warning_text: see plugin documentation for details
doc_fragments:
digital_ocean:
deprecation:
removal_version: 2.0.0
warning_text: The digital_ocean docs_fragment has been moved to the community.digitalocean collection.
redirect: community.digitalocean.digital_ocean
infinibox:
redirect: infinidat.infinibox.infinibox
deprecation:
removal_version: 2.0.0
warning_text: The infinibox doc_fragments plugin has been moved to the infinidat.infinibox collection.
mysql:
deprecation:
removal_version: 2.0.0
warning_text: The mysql docs_fragment has been moved to the community.mysql collection.
redirect: community.mysql.mysql
proxysql:
deprecation:
removal_version: 2.0.0
warning_text: The proxysql docs_fragment has been moved to the community.proxysql collection.
redirect: community.proxysql.proxysql
module_utils:
digital_ocean:
deprecation:
removal_version: 2.0.0
warning_text: The digital_ocean module_utils has been moved to the community.digitalocean collection.
redirect: community.digitalocean.digital_ocean
firewalld:
deprecation:
removal_version: 2.0.0
warning_text: The firewalld module_utils has been moved to the ansible.posix collection.
redirect: ansible.posix.firewalld
infinibox:
redirect: infinidat.infinibox.infinibox
deprecation:
removal_version: 2.0.0
warning_text: The infinibox module_utils plugin has been moved to the infinidat.infinibox collection.
mysql:
deprecation:
removal_version: 2.0.0
warning_text: The mysql module_utils has been moved to the community.mysql collection.
redirect: community.mysql.mysql

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

@@ -0,0 +1 @@
./system/iptables_state.py

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) 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
self._config_module = True
return super(ActionModule, self).run(task_vars=task_vars)

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)

1
plugins/action/shutdown.py Symbolic link
View File

@@ -0,0 +1 @@
./system/shutdown.py

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

@@ -0,0 +1,189 @@
# Copyright: (c) 2020, quidame <quidame@poivron.org>
# 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 time
from ansible.plugins.action import ActionBase
from ansible.errors import AnsibleError, AnsibleActionFail, AnsibleConnectionFailure
from ansible.utils.vars import merge_hash
from ansible.utils.display import Display
display = Display()
class ActionModule(ActionBase):
# Keep internal params away from user interactions
_VALID_ARGS = frozenset(('path', 'state', 'table', 'noflush', 'counters', 'modprobe', 'ip_version', 'wait'))
DEFAULT_SUDOABLE = True
MSG_ERROR__ASYNC_AND_POLL_NOT_ZERO = (
"This module doesn't support async>0 and poll>0 when its 'state' param "
"is set to 'restored'. To enable its rollback feature (that needs the "
"module to run asynchronously on the remote), please set task attribute "
"'poll' (=%s) to 0, and 'async' (=%s) to a value >2 and not greater than "
"'ansible_timeout' (=%s) (recommended).")
MSG_WARNING__NO_ASYNC_IS_NO_ROLLBACK = (
"Attempts to restore iptables state without rollback in case of mistake "
"may lead the ansible controller to loose access to the hosts and never "
"regain it before fixing firewall rules through a serial console, or any "
"other way except SSH. Please set task attribute 'poll' (=%s) to 0, and "
"'async' (=%s) to a value >2 and not greater than 'ansible_timeout' (=%s) "
"(recommended).")
MSG_WARNING__ASYNC_GREATER_THAN_TIMEOUT = (
"You attempt to restore iptables state with rollback in case of mistake, "
"but with settings that will lead this rollback to happen AFTER that the "
"controller will reach its own timeout. Please set task attribute 'poll' "
"(=%s) to 0, and 'async' (=%s) to a value >2 and not greater than "
"'ansible_timeout' (=%s) (recommended).")
def _async_result(self, module_args, task_vars, timeout):
'''
Retrieve results of the asynchonous task, and display them in place of
the async wrapper results (those with the ansible_job_id key).
'''
# At least one iteration is required, even if timeout is 0.
for i in range(max(1, timeout)):
async_result = self._execute_module(
module_name='async_status',
module_args=module_args,
task_vars=task_vars,
wrap_async=False)
if async_result['finished'] == 1:
break
time.sleep(min(1, timeout))
return async_result
def run(self, tmp=None, task_vars=None):
self._supports_check_mode = True
self._supports_async = True
result = super(ActionModule, self).run(tmp, task_vars)
del tmp # tmp no longer has any effect
if not result.get('skipped'):
# FUTURE: better to let _execute_module calculate this internally?
wrap_async = self._task.async_val and not self._connection.has_native_async
# Set short names for values we'll have to compare or reuse
task_poll = self._task.poll
task_async = self._task.async_val
check_mode = self._play_context.check_mode
max_timeout = self._connection._play_context.timeout
module_name = self._task.action
module_args = self._task.args
if module_args.get('state', None) == 'restored':
if not wrap_async:
if not check_mode:
display.warning(self.MSG_WARNING__NO_ASYNC_IS_NO_ROLLBACK % (
task_poll,
task_async,
max_timeout))
elif task_poll:
raise AnsibleActionFail(self.MSG_ERROR__ASYNC_AND_POLL_NOT_ZERO % (
task_poll,
task_async,
max_timeout))
else:
if task_async > max_timeout and not check_mode:
display.warning(self.MSG_WARNING__ASYNC_GREATER_THAN_TIMEOUT % (
task_poll,
task_async,
max_timeout))
# BEGIN snippet from async_status action plugin
env_async_dir = [e for e in self._task.environment if
"ANSIBLE_ASYNC_DIR" in e]
if len(env_async_dir) > 0:
# for backwards compatibility we need to get the dir from
# ANSIBLE_ASYNC_DIR that is defined in the environment. This is
# deprecated and will be removed in favour of shell options
async_dir = env_async_dir[0]['ANSIBLE_ASYNC_DIR']
msg = "Setting the async dir from the environment keyword " \
"ANSIBLE_ASYNC_DIR is deprecated. Set the async_dir " \
"shell option instead"
display.deprecated(msg, version='2.0.0',
collection_name='community.general') # was Ansible 2.12
else:
# inject the async directory based on the shell option into the
# module args
async_dir = self.get_shell_option('async_dir', default="~/.ansible_async")
# END snippet from async_status action plugin
# Bind the loop max duration to consistent values on both
# remote and local sides (if not the same, make the loop
# longer on the controller); and set a backup file path.
module_args['_timeout'] = task_async
module_args['_back'] = '%s/iptables.state' % async_dir
async_status_args = dict(_async_dir=async_dir)
confirm_cmd = 'rm -f %s' % module_args['_back']
remaining_time = max(task_async, max_timeout)
# do work!
result = merge_hash(result, self._execute_module(module_args=module_args, task_vars=task_vars, wrap_async=wrap_async))
# Then the 3-steps "go ahead or rollback":
# - reset connection to ensure a persistent one will not be reused
# - confirm the restored state by removing the backup on the remote
# - retrieve the results of the asynchronous task to return them
if '_back' in module_args:
async_status_args['jid'] = result.get('ansible_job_id', None)
if async_status_args['jid'] is None:
raise AnsibleActionFail("Unable to get 'ansible_job_id'.")
# Catch early errors due to missing mandatory option, bad
# option type/value, missing required system command, etc.
result = merge_hash(result, self._async_result(async_status_args, task_vars, 0))
if not result['finished']:
try:
self._connection.reset()
display.v("%s: reset connection" % (module_name))
except AttributeError:
display.warning("Connection plugin does not allow to reset the connection.")
for x in range(max_timeout):
time.sleep(1)
remaining_time -= 1
# - AnsibleConnectionFailure covers rejected requests (i.e.
# by rules with '--jump REJECT')
# - ansible_timeout is able to cover dropped requests (due
# to a rule or policy DROP) if not lower than async_val.
try:
garbage = self._low_level_execute_command(confirm_cmd, sudoable=self.DEFAULT_SUDOABLE)
break
except AnsibleConnectionFailure:
continue
result = merge_hash(result, self._async_result(async_status_args, task_vars, remaining_time))
# Cleanup async related stuff and internal params
for key in ('ansible_job_id', 'results_file', 'started', 'finished'):
if result.get(key):
del result[key]
if result.get('invocation', {}).get('module_args'):
if '_timeout' in result['invocation']['module_args']:
del result['invocation']['module_args']['_back']
del result['invocation']['module_args']['_timeout']
async_status_args['mode'] = 'cleanup'
garbage = self._execute_module(
module_name='async_status',
module_args=async_status_args,
task_vars=task_vars,
wrap_async=False)
if not wrap_async:
# remove a temporary path we created
self._remove_tmp_path(self._connection._shell.tmpdir)
return result

View File

@@ -0,0 +1,211 @@
# Copyright: (c) 2020, Amin Vakil <info@aminvakil.com>
# Copyright: (c) 2016-2018, Matt Davis <mdavis@ansible.com>
# Copyright: (c) 2018, Sam Doran <sdoran@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
from ansible.errors import AnsibleError, AnsibleConnectionFailure
from ansible.module_utils._text import to_native, to_text
from ansible.module_utils.common.collections import is_string
from ansible.plugins.action import ActionBase
from ansible.utils.display import Display
display = Display()
class TimedOutException(Exception):
pass
class ActionModule(ActionBase):
TRANSFERS_FILES = False
_VALID_ARGS = frozenset((
'msg',
'delay',
'search_paths'
))
DEFAULT_CONNECT_TIMEOUT = None
DEFAULT_PRE_SHUTDOWN_DELAY = 0
DEFAULT_SHUTDOWN_MESSAGE = 'Shut down initiated by Ansible'
DEFAULT_SHUTDOWN_COMMAND = 'shutdown'
DEFAULT_SHUTDOWN_COMMAND_ARGS = '-h {delay_min} "{message}"'
DEFAULT_SUDOABLE = True
SHUTDOWN_COMMANDS = {
'alpine': 'poweroff',
'vmkernel': 'halt',
}
SHUTDOWN_COMMAND_ARGS = {
'alpine': '',
'void': '-h +{delay_min} "{message}"',
'freebsd': '-h +{delay_sec}s "{message}"',
'linux': DEFAULT_SHUTDOWN_COMMAND_ARGS,
'macosx': '-h +{delay_min} "{message}"',
'openbsd': '-h +{delay_min} "{message}"',
'solaris': '-y -g {delay_sec} -i 5 "{message}"',
'sunos': '-y -g {delay_sec} -i 5 "{message}"',
'vmkernel': '-d {delay_sec}',
'aix': '-Fh',
}
def __init__(self, *args, **kwargs):
super(ActionModule, self).__init__(*args, **kwargs)
@property
def delay(self):
return self._check_delay('delay', self.DEFAULT_PRE_SHUTDOWN_DELAY)
def _check_delay(self, key, default):
"""Ensure that the value is positive or zero"""
value = int(self._task.args.get(key, default))
if value < 0:
value = 0
return value
def _get_value_from_facts(self, variable_name, distribution, default_value):
"""Get dist+version specific args first, then distribution, then family, lastly use default"""
attr = getattr(self, variable_name)
value = attr.get(
distribution['name'] + distribution['version'],
attr.get(
distribution['name'],
attr.get(
distribution['family'],
getattr(self, default_value))))
return value
def get_shutdown_command_args(self, distribution):
args = self._get_value_from_facts('SHUTDOWN_COMMAND_ARGS', distribution, 'DEFAULT_SHUTDOWN_COMMAND_ARGS')
# Convert seconds to minutes. If less that 60, set it to 0.
delay_sec = self.delay
shutdown_message = self._task.args.get('msg', self.DEFAULT_SHUTDOWN_MESSAGE)
return args.format(delay_sec=delay_sec, delay_min=delay_sec // 60, message=shutdown_message)
def get_distribution(self, task_vars):
# FIXME: only execute the module if we don't already have the facts we need
distribution = {}
display.debug('{action}: running setup module to get distribution'.format(action=self._task.action))
module_output = self._execute_module(
task_vars=task_vars,
module_name='ansible.legacy.setup',
module_args={'gather_subset': 'min'})
try:
if module_output.get('failed', False):
raise AnsibleError('Failed to determine system distribution. {0}, {1}'.format(
to_native(module_output['module_stdout']).strip(),
to_native(module_output['module_stderr']).strip()))
distribution['name'] = module_output['ansible_facts']['ansible_distribution'].lower()
distribution['version'] = to_text(module_output['ansible_facts']['ansible_distribution_version'].split('.')[0])
distribution['family'] = to_text(module_output['ansible_facts']['ansible_os_family'].lower())
display.debug("{action}: distribution: {dist}".format(action=self._task.action, dist=distribution))
return distribution
except KeyError as ke:
raise AnsibleError('Failed to get distribution information. Missing "{0}" in output.'.format(ke.args[0]))
def get_shutdown_command(self, task_vars, distribution):
shutdown_bin = self._get_value_from_facts('SHUTDOWN_COMMANDS', distribution, 'DEFAULT_SHUTDOWN_COMMAND')
default_search_paths = ['/sbin', '/usr/sbin', '/usr/local/sbin']
search_paths = self._task.args.get('search_paths', default_search_paths)
# FIXME: switch all this to user arg spec validation methods when they are available
# Convert bare strings to a list
if is_string(search_paths):
search_paths = [search_paths]
# Error if we didn't get a list
err_msg = "'search_paths' must be a string or flat list of strings, got {0}"
try:
incorrect_type = any(not is_string(x) for x in search_paths)
if not isinstance(search_paths, list) or incorrect_type:
raise TypeError
except TypeError:
raise AnsibleError(err_msg.format(search_paths))
display.debug('{action}: running find module looking in {paths} to get path for "{command}"'.format(
action=self._task.action,
command=shutdown_bin,
paths=search_paths))
find_result = self._execute_module(
task_vars=task_vars,
# prevent collection search by calling with ansible.legacy (still allows library/ override of find)
module_name='ansible.legacy.find',
module_args={
'paths': search_paths,
'patterns': [shutdown_bin],
'file_type': 'any'
}
)
full_path = [x['path'] for x in find_result['files']]
if not full_path:
raise AnsibleError('Unable to find command "{0}" in search paths: {1}'.format(shutdown_bin, search_paths))
self._shutdown_command = full_path[0]
return self._shutdown_command
def perform_shutdown(self, task_vars, distribution):
result = {}
shutdown_result = {}
shutdown_command = self.get_shutdown_command(task_vars, distribution)
shutdown_command_args = self.get_shutdown_command_args(distribution)
shutdown_command_exec = '{0} {1}'.format(shutdown_command, shutdown_command_args)
self.cleanup(force=True)
try:
display.vvv("{action}: shutting down server...".format(action=self._task.action))
display.debug("{action}: shutting down server with command '{command}'".format(action=self._task.action, command=shutdown_command_exec))
if self._play_context.check_mode:
shutdown_result['rc'] = 0
else:
shutdown_result = self._low_level_execute_command(shutdown_command_exec, sudoable=self.DEFAULT_SUDOABLE)
except AnsibleConnectionFailure as e:
# If the connection is closed too quickly due to the system being shutdown, carry on
display.debug('{action}: AnsibleConnectionFailure caught and handled: {error}'.format(action=self._task.action, error=to_text(e)))
shutdown_result['rc'] = 0
if shutdown_result['rc'] != 0:
result['failed'] = True
result['shutdown'] = False
result['msg'] = "Shutdown command failed. Error was {stdout}, {stderr}".format(
stdout=to_native(shutdown_result['stdout'].strip()),
stderr=to_native(shutdown_result['stderr'].strip()))
return result
result['failed'] = False
result['shutdown_command'] = shutdown_command_exec
return result
def run(self, tmp=None, task_vars=None):
self._supports_check_mode = True
self._supports_async = True
# If running with local connection, fail so we don't shutdown ourself
if self._connection.transport == 'local' and (not self._play_context.check_mode):
msg = 'Running {0} with local connection would shutdown the control node.'.format(self._task.action)
return {'changed': False, 'elapsed': 0, 'shutdown': False, 'failed': True, 'msg': msg}
if task_vars is None:
task_vars = {}
result = super(ActionModule, self).run(tmp, task_vars)
if result.get('skipped', False) or result.get('failed', False):
return result
distribution = self.get_distribution(task_vars)
# Initiate shutdown
shutdown_result = self.perform_shutdown(task_vars, distribution)
if shutdown_result['failed']:
result = shutdown_result
return result
result['shutdown'] = True
result['changed'] = True
result['shutdown_command'] = shutdown_result['shutdown_command']
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

@@ -40,7 +40,7 @@ DOCUMENTATION = '''
- name: ANSIBLE_DOAS_EXE
become_flags:
description: Options to pass to doas
default:
default: ''
ini:
- section: privilege_escalation
key: become_flags
@@ -111,15 +111,14 @@ 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 ''
if user:
user = '-u %s' % (user)
become_user = self.get_option('become_user')
user = '-u %s' % (become_user) if become_user else ''
success_cmd = self._build_success_command(cmd, shell, noexe=True)
executable = getattr(shell, 'executable', shell.SHELL_FAMILY)

View File

@@ -82,15 +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 ''
if user:
user = '-u %s' % (user)
become_user = self.get_option('become_user')
user = '-u %s' % (become_user) if become_user else ''
return ' '.join([becomecmd, flags, user, self._build_success_command(cmd, shell)])

View File

@@ -113,7 +113,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,11 +94,11 @@ 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 ''
if user:
user = '-u %s' % (user)
become_exe = self.get_option('become_exe')
flags = self.get_option('become_flags')
become_user = self.get_option('become_user')
user = '-u %s' % (become_user) if become_user else ''
noexe = not self.get_option('wrap_exe')
return ' '.join([become_exe, flags, user, self._build_success_command(cmd, shell, noexe=noexe)])

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

@@ -75,7 +75,7 @@ examples: >
To enable, add this to your ansible.cfg file in the defaults block
[defaults]
callback_whitelist = logentries
callback_whitelist = community.general.logentries
Either set the environment variables
export LOGENTRIES_API=data.logentries.com

View File

@@ -19,16 +19,28 @@ DOCUMENTATION = '''
description: Address of the Logstash server
env:
- name: LOGSTASH_SERVER
ini:
- section: callback_logstash
key: server
version_added: 1.0.0
default: localhost
port:
description: Port on which logstash is listening
env:
- name: LOGSTASH_PORT
ini:
- section: callback_logstash
key: port
version_added: 1.0.0
default: 5000
type:
description: Message type
env:
- name: LOGSTASH_TYPE
ini:
- section: callback_logstash
key: type
version_added: 1.0.0
default: ansible
'''
@@ -68,7 +80,7 @@ class CallbackModule(CallbackBase):
Requires:
python-logstash
This plugin makes use of the following environment variables:
This plugin makes use of the following environment variables or ini config:
LOGSTASH_SERVER (optional): defaults to localhost
LOGSTASH_PORT (optional): defaults to 5000
LOGSTASH_TYPE (optional): defaults to ansible
@@ -79,30 +91,37 @@ class CallbackModule(CallbackBase):
CALLBACK_NAME = 'community.general.logstash'
CALLBACK_NEEDS_WHITELIST = True
def __init__(self):
super(CallbackModule, self).__init__()
def __init__(self, display=None):
super(CallbackModule, self).__init__(display=display)
if not HAS_LOGSTASH:
self.disabled = True
self._display.warning("The required python-logstash is not installed. "
"pip install python-logstash")
else:
self.logger = logging.getLogger('python-logstash-logger')
self.logger.setLevel(logging.DEBUG)
self.handler = logstash.TCPLogstashHandler(
os.getenv('LOGSTASH_SERVER', 'localhost'),
int(os.getenv('LOGSTASH_PORT', 5000)),
version=1,
message_type=os.getenv('LOGSTASH_TYPE', 'ansible')
)
self.logger.addHandler(self.handler)
self.hostname = socket.gethostname()
self.session = str(uuid.uuid1())
self.errors = 0
self.start_time = datetime.utcnow()
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)
self.logger = logging.getLogger('python-logstash-logger')
self.logger.setLevel(logging.DEBUG)
self.logstash_server = self.get_option('server')
self.logstash_port = self.get_option('port')
self.logstash_type = self.get_option('type')
self.handler = logstash.TCPLogstashHandler(
self.logstash_server,
int(self.logstash_port),
version=1,
message_type=self.logstash_type
)
self.logger.addHandler(self.handler)
self.hostname = socket.gethostname()
self.session = str(uuid.uuid1())
self.errors = 0
def v2_playbook_on_start(self, playbook):
self.playbook = playbook._file_name
data = {

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

@@ -30,8 +30,8 @@ DOCUMENTATION = '''
'''
EXAMPLES = """
- debug: msg="This will not be printed"
- debug: msg="But this will"
- ansible.builtin.debug: msg="This will not be printed"
- ansible.builtin.debug: msg="But this will"
tags: [print_action]
"""
@@ -201,7 +201,7 @@ class CallbackModule(CallbackBase):
)
if 'results' in result._result:
for r in result._result['results']:
failed = 'failed' in r
failed = 'failed' in r and r['failed']
stderr = [r.get('exception', None), r.get('module_stderr', None)]
stderr = "\n".join([e for e in stderr if e]).strip()

View File

@@ -45,13 +45,25 @@ DOCUMENTATION = '''
ini:
- section: callback_splunk
key: authtoken
validate_certs:
description: Whether to validate certificates for connections to HEC. It is not recommended to set to
C(false) except when you are sure that nobody can intercept the connection
between this plugin and HEC, as setting it to C(false) allows man-in-the-middle attacks!
env:
- name: SPLUNK_VALIDATE_CERTS
ini:
- section: callback_splunk
key: validate_certs
type: bool
default: true
version_added: '1.0.0'
'''
EXAMPLES = '''
examples: >
To enable, add this to your ansible.cfg file in the defaults block
[defaults]
callback_whitelist = splunk
callback_whitelist = community.general.splunk
Set the environment variable
export SPLUNK_URL=http://mysplunkinstance.datapaas.io:8088/services/collector/event
export SPLUNK_AUTHTOKEN=f23blad6-5965-4537-bf69-5b5a545blabla88
@@ -84,7 +96,7 @@ class SplunkHTTPCollectorSource(object):
self.ip_address = socket.gethostbyname(socket.gethostname())
self.user = getpass.getuser()
def send_event(self, url, authtoken, state, result, runtime):
def send_event(self, url, authtoken, validate_certs, state, result, runtime):
if result._task_fields['args'].get('_ansible_check_mode') is True:
self.ansible_check_mode = True
@@ -129,7 +141,8 @@ class SplunkHTTPCollectorSource(object):
'Content-type': 'application/json',
'Authorization': 'Splunk ' + authtoken
},
method='POST'
method='POST',
validate_certs=validate_certs
)
@@ -144,6 +157,7 @@ class CallbackModule(CallbackBase):
self.start_datetimes = {} # Collect task start times
self.url = None
self.authtoken = None
self.validate_certs = None
self.splunk = SplunkHTTPCollectorSource()
def _runtime(self, result):
@@ -153,7 +167,9 @@ class CallbackModule(CallbackBase):
).total_seconds()
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)
super(CallbackModule, self).set_options(task_keys=task_keys,
var_options=var_options,
direct=direct)
self.url = self.get_option('url')
@@ -175,6 +191,8 @@ class CallbackModule(CallbackBase):
'`SPLUNK_AUTHTOKEN` environment variable or '
'in the ansible.cfg file.')
self.validate_certs = self.get_option('validate_certs')
def v2_playbook_on_start(self, playbook):
self.splunk.ansible_playbook = basename(playbook._file_name)
@@ -188,6 +206,7 @@ class CallbackModule(CallbackBase):
self.splunk.send_event(
self.url,
self.authtoken,
self.validate_certs,
'OK',
result,
self._runtime(result)
@@ -197,6 +216,7 @@ class CallbackModule(CallbackBase):
self.splunk.send_event(
self.url,
self.authtoken,
self.validate_certs,
'SKIPPED',
result,
self._runtime(result)
@@ -206,6 +226,7 @@ class CallbackModule(CallbackBase):
self.splunk.send_event(
self.url,
self.authtoken,
self.validate_certs,
'FAILED',
result,
self._runtime(result)
@@ -215,6 +236,7 @@ class CallbackModule(CallbackBase):
self.splunk.send_event(
self.url,
self.authtoken,
self.validate_certs,
'FAILED',
result,
self._runtime(result)
@@ -224,6 +246,7 @@ class CallbackModule(CallbackBase):
self.splunk.send_event(
self.url,
self.authtoken,
self.validate_certs,
'UNREACHABLE',
result,
self._runtime(result)

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

@@ -42,7 +42,7 @@ EXAMPLES = '''
examples: >
To enable, add this to your ansible.cfg file in the defaults block
[defaults]
callback_whitelist = sumologic
callback_whitelist = community.general.sumologic
Set the environment variable
export SUMOLOGIC_URL=https://endpoint1.collection.us2.sumologic.com/receiver/v1/http/R8moSv1d8EW9LAUFZJ6dbxCFxwLH6kfCdcBfddlfxCbLuL-BN5twcTpMk__pYy_cDmp==

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,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,10 +147,10 @@ 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'
CONNECTION_TRANSPORT = 'community.general.oc'
CONNECTION_OPTIONS = {
'oc_container': '-c',

View File

@@ -0,0 +1,62 @@
# -*- coding: utf-8 -*-
# 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.
DOCUMENTATION = r'''
options:
project:
description:
- The Google Cloud Platform project to use.
type: str
auth_kind:
description:
- The type of credential used.
type: str
required: true
choices: [ application, machineaccount, serviceaccount ]
service_account_contents:
description:
- The contents of a Service Account JSON file, either in a dictionary or as a JSON string that represents it.
type: jsonarg
service_account_file:
description:
- The path of a Service Account JSON file if serviceaccount is selected as type.
type: path
service_account_email:
description:
- An optional service account email address if machineaccount is selected
and the user does not wish to use the default email.
type: str
scopes:
description:
- Array of scopes to be used.
type: list
elements: str
env_type:
description:
- Specifies which Ansible environment you're running this module within.
- This should not be set unless you know what you're doing.
- This only alters the User Agent string for any API requests.
type: str
notes:
- for authentication, you can set service_account_file using the
c(gcp_service_account_file) env variable.
- for authentication, you can set service_account_contents using the
c(GCP_SERVICE_ACCOUNT_CONTENTS) env variable.
- For authentication, you can set service_account_email using the
C(GCP_SERVICE_ACCOUNT_EMAIL) env variable.
- For authentication, you can set auth_kind using the C(GCP_AUTH_KIND) env
variable.
- For authentication, you can set scopes using the C(GCP_SCOPES) env variable.
- Environment variables values will only be used if the playbook values are
not set.
- The I(service_account_email) and I(service_account_file) options are
mutually exclusive.
'''

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

@@ -1,30 +0,0 @@
# -*- coding: utf-8 -*-
# Copyright: (c) 2018, Ansible Project
# 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)
class ModuleDocFragment(object):
# Parameters for DigitalOcean modules
DOCUMENTATION = r'''
options:
oauth_token:
description:
- DigitalOcean OAuth token.
- "There are several other environment variables which can be used to provide this value."
- "i.e., - 'DO_API_TOKEN', 'DO_API_KEY', 'DO_OAUTH_TOKEN' and 'OAUTH_TOKEN'"
type: str
aliases: [ api_token ]
timeout:
description:
- The timeout in seconds used for polling DigitalOcean's API.
type: int
default: 30
validate_certs:
description:
- If set to C(no), the SSL certificates will not be validated.
- This should only set to C(no) used on personally controlled sites using self-signed certificates.
type: bool
default: yes
'''

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

@@ -1,59 +0,0 @@
# -*- coding: utf-8 -*-
# Copyright: (c) 2018, Google Inc.
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
class ModuleDocFragment(object):
# GCP doc fragment.
DOCUMENTATION = r'''
options:
project:
description:
- The Google Cloud Platform project to use.
type: str
auth_kind:
description:
- The type of credential used.
type: str
required: true
choices: [ application, machineaccount, serviceaccount ]
service_account_contents:
description:
- The contents of a Service Account JSON file, either in a dictionary or as a JSON string that represents it.
type: jsonarg
service_account_file:
description:
- The path of a Service Account JSON file if serviceaccount is selected as type.
type: path
service_account_email:
description:
- An optional service account email address if machineaccount is selected
and the user does not wish to use the default email.
type: str
scopes:
description:
- Array of scopes to be used.
type: list
elements: str
env_type:
description:
- Specifies which Ansible environment you're running this module within.
- This should not be set unless you know what you're doing.
- This only alters the User Agent string for any API requests.
type: str
notes:
- for authentication, you can set service_account_file using the
c(gcp_service_account_file) env variable.
- for authentication, you can set service_account_contents using the
c(GCP_SERVICE_ACCOUNT_CONTENTS) env variable.
- For authentication, you can set service_account_email using the
C(GCP_SERVICE_ACCOUNT_EMAIL) env variable.
- For authentication, you can set auth_kind using the C(GCP_AUTH_KIND) env
variable.
- For authentication, you can set scopes using the C(GCP_SCOPES) env variable.
- Environment variables values will only be used if the playbook values are
not set.
- The I(service_account_email) and I(service_account_file) options are
mutually exclusive.
'''

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):

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