Compare commits

..

309 Commits
2.1.0 ... 1.3.3

Author SHA1 Message Date
Felix Fontein
20e1d7c08b Release 1.3.3. 2021-01-13 12:31:11 +01:00
Felix Fontein
24aa8afde8 Add release summary. 2021-01-13 12:28:33 +01:00
patchback[bot]
71c6ec0b00 init_reconfigure fails on module cloud/misc/terraform.py (#1620) (#1629)
* fix reconfigure option

If `init_reconfigure` is true, the init fails because it is run as:
`terraform init -input=false - r e c o n f i g u r e`

* changelog fragment

* typo

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

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

Co-authored-by: christophemorio <49184206+christophemorio@users.noreply.github.com>
2021-01-13 11:12:50 +01:00
patchback[bot]
469e32e15b Remove bigmstone (#1626) (#1627)
Removing bigmstone from BOTMETA.

(cherry picked from commit 19fdb29db7)

Co-authored-by: Matthew Stone <dev@mattstone.io>
2021-01-12 17:52:50 +01:00
patchback[bot]
ebfb46aa78 Updated doc. Module not idempotent. delegate_to not needed. (#1587) (#1622)
(cherry picked from commit 63817f7c1b)

Co-authored-by: Vladimir Botka <vbotka@gmail.com>
2021-01-12 12:08:17 +01:00
patchback[bot]
fa2d2d6971 snmp_facts: Hide user sensitive information in console (#1621) (#1623)
**SECURITY** - CVE-2021-20178

Hide user sensitive information like `privkey` and `authkey`
while logging in console.

Signed-off-by: Abhijeet Kasurde <akasurde@redhat.com>
(cherry picked from commit 3560aeb12f)

Co-authored-by: Abhijeet Kasurde <akasurde@redhat.com>
2021-01-12 12:08:03 +01:00
patchback[bot]
a1429d0266 Skip monit tests on RHEL. (#1615) (#1617)
(cherry picked from commit 637571993a)

Co-authored-by: Felix Fontein <felix@fontein.de>
2021-01-12 07:09:04 +01:00
Felix Fontein
3077ac770f chroot: re-enable connection chroot tests (#1591) (#1602)
Signed-off-by: Abhijeet Kasurde <akasurde@redhat.com>
(cherry picked from commit e7b16a96b9)

Co-authored-by: Abhijeet Kasurde <akasurde@redhat.com>
2021-01-07 12:20:28 +01:00
patchback[bot]
7813cd751a hg: Re-enable tests (#1599) (#1600)
* Update license boilerplate
* Change mercurial repository links

Fixes: #840

Signed-off-by: Abhijeet Kasurde <akasurde@redhat.com>
(cherry picked from commit 126c397d6c)

Co-authored-by: Abhijeet Kasurde <akasurde@redhat.com>
2021-01-07 07:44:20 +01:00
Felix Fontein
4461c18957 Add kubevirt removal announcement. (#1594) 2021-01-05 18:41:02 -05:00
Felix Fontein
34cf93a538 Next release will be 1.3.3. 2021-01-04 18:26:38 +01:00
Felix Fontein
b56539f17e Release 1.3.2. 2021-01-04 18:26:01 +01:00
Felix Fontein
167d4bae90 Add release summary. 2021-01-04 13:36:21 +01:00
Felix Fontein
de85c11bd1 [stable-1] Add OC, hashi_vault and Google removal announcements (#1560)
* Add removal announcements.

* Remove Latin abbrevation.

* Add hashi_vault removal announcement.
2021-01-04 11:06:49 +01:00
patchback[bot]
d0731b111c Re-enable nomad tests (#1582) (#1586)
Signed-off-by: Abhijeet Kasurde <akasurde@redhat.com>
(cherry picked from commit d12951b9c7)

Co-authored-by: Abhijeet Kasurde <akasurde@redhat.com>
2021-01-04 09:18:37 +01:00
patchback[bot]
7cd96ef3b6 changed make parameter from --question to -q (#1574) (#1581)
* changed make parameter from --question to -q

* changelog fragment

* Update changelogs/fragments/1574-make-question.yaml

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

Co-authored-by: Abhijeet Kasurde <akasurde@redhat.com>
Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit 0bd4b3cbc9)

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2021-01-03 13:55:58 +01:00
patchback[bot]
b7a44a593e fix passwordstore.py to be compatible with gopass versions (#1493) (#1580)
* Be compatible to latest gopass versions.
`gopass show` is deprecated.

* add changelog fragment

* Update changelogs/fragments/1493-fix_passwordstore.py_to_be_compatible_with_gopass_versions.yml

Co-authored-by: Eike Waldt <git@yog.wtf>
Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit 491b622041)

Co-authored-by: Eike Waldt <git@yeoldegrove.de>
2021-01-03 11:48:37 +00:00
patchback[bot]
c413963ecb pamd - fixed bug (#1538) (#1579)
* Fixed bug

- The module was searching back (and forward, in the ``after`` state) for lines that were not comments, assuming it would be a valid rule or an include.

* remove the line, make yamllint happy

* Update changelogs/fragments/1394-pamd-removing-comments.yaml

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

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

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2021-01-03 11:48:07 +00:00
patchback[bot]
4f7d44aa10 monit: add support for all monit services when checking process state (#1532) (#1578)
* add support for all monit service types

* ignore case when performing check

* add changelog

* Escape special characters before matching

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

* escape each element individually

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

Co-authored-by: Graham Herceg <g.a.herceg@gmail.com>
2021-01-03 11:47:54 +00:00
patchback[bot]
56055d4f1e Remove bridge-slave from list of IP based connections (#1517) (#1577)
* Removed the bridge-slave from list of ip based connections since nmcli does not accept IP options for bridge-slave connections.

* Update changelogs/fragments/1517-bridge-slave-from-list-of-ip-based-connections.yml

Thanks for the tip.

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

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

Co-authored-by: momcilo78 <momcilo@majic.rs>
2021-01-03 12:43:56 +01:00
patchback[bot]
3fa4a9c073 Legacy Python certificate validation fixed (#470) (#1576)
* Legacy Python certificate validation fixed

* added changelog fragment

* removed blank line for sanity checks

* Update changelogs/fragments/470-spacewalk-legacy-python-certificate-validation.yaml

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

* Update changelogs/fragments/470-spacewalk-legacy-python-certificate-validation.yaml

Co-authored-by: jpe <petz.johannes@afb.de>
Co-authored-by: Felix Fontein <felix@fontein.de>
Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>
(cherry picked from commit df9f0741b5)

Co-authored-by: Johannes Petz <PetzJohannes@users.noreply.github.com>
2021-01-03 11:37:40 +01:00
patchback[bot]
1552bae77b syslogger - update syslog.openlog API call for older Python (#1572) (#1573)
* syslogger - update syslog.openlog API call for older Python

Fixes: #953

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

* Update changelogs/fragments/953_syslogger.yml

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

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

Co-authored-by: Abhijeet Kasurde <akasurde@redhat.com>
2021-01-02 21:05:43 +01:00
patchback[bot]
a9cad80a36 lxc_container: update docs (#1544) (#1570)
Signed-off-by: Abhijeet Kasurde <akasurde@redhat.com>
(cherry picked from commit eacbf45632)

Co-authored-by: Abhijeet Kasurde <akasurde@redhat.com>
2021-01-01 17:37:11 +01:00
patchback[bot]
fc79283662 snmp_facts: doc update (#1569) (#1571)
Signed-off-by: Abhijeet Kasurde <akasurde@redhat.com>
(cherry picked from commit ba50d114d4)

Co-authored-by: Abhijeet Kasurde <akasurde@redhat.com>
2021-01-01 17:36:50 +01:00
patchback[bot]
0d8ea31781 Scaleway: Update documentation (#1567) (#1568)
Online SAS is rebranded as Scaleway in 2015. Updated
inventory documentation for the same.

Fixes: #814

Signed-off-by: Abhijeet Kasurde <akasurde@redhat.com>
(cherry picked from commit 7b529c72b3)

Co-authored-by: Abhijeet Kasurde <akasurde@redhat.com>
2021-01-01 13:44:09 +01:00
patchback[bot]
7ac14f964b updated deprecated homebrew cask commands (#1481) (#1565)
* updated deprecated homebrew cask commands

* added methods for brew version deprecation check

* added comments and changelog fragment

* added unit test for version comparison

* switch to use disutils LooseVersion for version comparison

* updated changelog message and minor refactor for building brew command based on version

* added caching logic for retrieval of brew version and updated PR changelog yaml

* Update changelogs/fragments/1481-deprecated-brew-cask-command.yaml

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

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

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

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

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

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

* switch to use subprocess.check_output instead of subprocess.run

* replace subprocess with run_command

* removed unused subprocess import

* removed error handling logic to depend on check_rc=True instead

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

Co-authored-by: Jianhao Tan <jianhao@shopback.com>
2020-12-31 23:07:39 +00:00
patchback[bot]
95d725a3cc launchd: Handle deprecated APIs in plistlib (#1554) (#1563)
Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit 6c88b69d6f)

Co-authored-by: Abhijeet Kasurde <akasurde@redhat.com>
2020-12-30 09:00:33 +01:00
patchback[bot]
95de8bd39d sendgrid: Update docs (#1557) (#1558)
* Updated docs
* Warn user about required Sendgrid Python library version i.e <=1.6.22

Signed-off-by: Abhijeet Kasurde <akasurde@redhat.com>
(cherry picked from commit 818cafc580)

Co-authored-by: Abhijeet Kasurde <akasurde@redhat.com>
2020-12-29 10:25:40 +01:00
Felix Fontein
ecbdaca971 Backport of 5eef093e99 (#1548) 2020-12-27 15:50:21 +01:00
patchback[bot]
54754f7e81 Add hnakamur to ignore list for LXD modules (see #1543). (#1545) (#1546)
(cherry picked from commit 09e2699d1c)

Co-authored-by: Felix Fontein <felix@fontein.de>
2020-12-27 14:47:40 +01:00
patchback[bot]
bd15741647 jira - some improvements to the module (#1536) (#1547)
* Some improvements to the module

- Fixed examples documentation ().
- Module no longer incorrectly reports change for information gathering operations ().
- Replaced custom parameter validation with ``required_if`` ().
- Added the traceback output to ``fail_json()`` calls deriving from exceptions ().

* added PR URL to changelof frag

* Update changelogs/fragments/jira_improvements.yaml

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

* mentioned issue required for transition in chnagelog

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

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2020-12-27 13:47:33 +00:00
Felix Fontein
fa05ca3f63 Backport of 117f132213 (#1542) 2020-12-26 18:30:07 +00:00
patchback[bot]
29992f1fbf nios_member: fix nios api member_normalize error with python 3 (#1527) (#1534)
* nios_member: fix nios api member_normalize error with python 3

Force a copy of the key to allow change during iteration.

* Update - add changelog fragment

* Update - add changelog fragment

* Update changelogs/fragments/1527-fix-nios-api-member-normalize.yaml

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

Co-authored-by: neatherweb <35084494+neatherweb@users.noreply.github.com>
2020-12-23 08:49:29 +01:00
patchback[bot]
34ab07865f Ensured `changed returns False`. (#1530) (#1531)
* Ensured ``changed`` returns ``False``.

- Added small improvement on the ``_load_scope()`` method.

* yamllint caught it

* Rephrased changelog fragment

(cherry picked from commit 1faf8ef08b)

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2020-12-22 16:15:50 +01:00
patchback[bot]
5fa1fc65ca YAML callback: do not remove non-ASCII Unicode from multi-line string output (#1522) (#1529)
* Do not remove non-ASCII Unicode from multi-line string output.

* Added basic tests.

* Add Unicode test.

* Simplify tests, avoid later Jinja features.

* Refactor.

* Make use diy tests use callback test framework as well.

* Remove color codes.

* Work around stable-2.9 bug.

* Simplify again.

(cherry picked from commit 0a7ed3b019)

Co-authored-by: Felix Fontein <felix@fontein.de>
2020-12-22 09:59:57 +00:00
Felix Fontein
c0bb56c454 Next release will be 1.3.2. 2020-12-21 14:57:57 +01:00
Felix Fontein
332ba8166c Release 1.3.1. 2020-12-21 14:25:46 +01:00
Felix Fontein
725450e57a Add release summary. 2020-12-21 14:24:51 +01:00
patchback[bot]
f4311e08aa Some adjustments/improvements (#1516) (#1520)
* Some adjustments/improvements

- Added doc details for parameters ``description`` and ``objectClass``
- Added type details to argument_spec of parameters ``description`` and ``objectClass``.
- Removed unused import
- Simplified logic of ``LdapEntry._load_attrs()``
- Replaced parameter validation test with ``required_if``.

* Added changelog frag

(cherry picked from commit 5ee5c004b4)

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2020-12-21 14:20:35 +01:00
patchback[bot]
9e7b067904 Raises error for non-existent repo path (#1512) (#1518)
* Raises error for non-existent repo path, requires Ansible 2.10.4 or higher.

* Changes from suggestions in the PR

* Suggestion from PR

* Update changelogs/fragments/630-git_config-handling-invalid-dir.yaml

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

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

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2020-12-21 13:11:45 +01:00
patchback[bot]
d29db3ecf9 saltstack: fix put_file to preserve checksum (#1472) (#1514)
* saltstack: fix put_file to preserve checksum

Use hashutil.base64_decodefile to ensure that the file checksum
is preserved, since file.write only supports text files.

Signed-off-by: Zac Medico <zmedico@gmail.com>

* Update changelogs/fragments/1472-saltstack-fix-put_file-to-preserve-checksum.yml

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

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

Co-authored-by: Zac Medico <zmedico@gmail.com>
2020-12-19 18:55:57 +00:00
patchback[bot]
4aba7d5b87 jira: Provide useful error message to user (#1509) (#1513)
* Code refactor
* Handle exception
* Provide useful error message to user when exception is raised

Fixes: #1504

Signed-off-by: Abhijeet Kasurde <akasurde@redhat.com>
(cherry picked from commit eb79c14e9c)

Co-authored-by: Abhijeet Kasurde <akasurde@redhat.com>
2020-12-19 18:11:11 +01:00
Felix Fontein
88d00c32db Use stable-1 branch for AZP CI badge. 2020-12-18 17:26:10 +01:00
Felix Fontein
f1e1b46ce2 Use AZP badge instead of Shippable badge for CI.
(cherry picked from commit 1ed5a36a81)
2020-12-18 17:24:42 +01:00
John R Barker
c4256d8674 [stable-1] AZP Bootstrap (#1505)
* AZP Bootstrap

(cherry picked from commit 33126b7267)

* AZP: Correct Cloud jobs

(cherry picked from commit 2fea31b292377e17ba5447dcb79c4b753a6fad58)

* Fix AZP CI (#1508)

* Fix 2.9/2.10 cloud

* Fix splunk callback tests.

* ansible_virtualization_type on AZP can be one of container/containerd instead of docker for dockerized tests.

* Disable nomad tests.

* Work around AZP bugs.

(cherry picked from commit dd55c3c3bb)

* Run tests on all groups.

* Reduce 2.9 coverage to decrease large number of jobs.

* Try to fix test.

* Revert "Try to fix test."

This reverts commit 23f51451c6.

* Other target selection for 2.9.

Co-authored-by: Felix Fontein <felix@fontein.de>
2020-12-18 16:07:09 +00:00
patchback[bot]
0bfed46136 bitbucket_pipeline_variable: Change pagination logic (#1498) (#1502)
Bitbucket's pagination for pipeline variables is flawed.
Refactor bitbucket_pipeline_variable code to correct this logic.

Fixes: #1425

Signed-off-by: Abhijeet Kasurde <akasurde@redhat.com>
(cherry picked from commit 4c14df6d88)

Co-authored-by: Abhijeet Kasurde <akasurde@redhat.com>
2020-12-17 11:12:39 +01:00
patchback[bot]
a04912dec0 [PR #645/c3ef9bf6 backport][stable-1] cobbler: Add Python 3 support (#1499)
* cobbler: Add Python 3 support (#645)


(cherry picked from commit c3ef9bf668)

* Fix changelog fragment.

(cherry picked from commit d495d3969b)

Co-authored-by: Dag Wieers <dag@wieers.com>
Co-authored-by: Felix Fontein <felix@fontein.de>
2020-12-16 23:04:23 +01:00
patchback[bot]
7f92aa0854 Icinga doc fix (#1495) (#1496)
* Document it is a dictionary to reduce confusion.

* Add variable example

(cherry picked from commit 757427cadf)

Co-authored-by: Erinn Looney-Triggs <erinn@users.noreply.github.com>
2020-12-16 08:06:43 +01:00
Felix Fontein
a16164cb72 Prepare docker tests for AZP. (#1482)
Backport of important parts of https://github.com/ansible-collections/community.docker/pull/48 to stable-1.
2020-12-15 20:04:09 +00:00
patchback[bot]
3960153f70 fix so module nios_host_record can remove aliases (#1470) (#1490)
* fix for https://github.com/ansible-collections/community.general/issues/1335

* added changelog fragment

* Update changelogs/fragments/nios_host_record-fix-aliases-removal.yml

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

* extend changelog to specify CNAMES

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

Co-authored-by: Pablo Escobar Lopez <pescobar001@gmail.com>
2020-12-15 20:49:52 +01:00
Felix Fontein
6d4760eb20 Fix docker CI. (#1494)
Backport of ansible-collections/community.docker#50 to stable-1.
2020-12-15 20:20:43 +01:00
patchback[bot]
777a741d4d keycloak: Provide meaningful error message to user (#1487) (#1489)
When user provides auth URL value which does not startswith
http or https protocol schema, provide a meaningful error message
stating so.

Fixes: #331

Signed-off-by: Abhijeet Kasurde <akasurde@redhat.com>
(cherry picked from commit f37eb12580)

Co-authored-by: Abhijeet Kasurde <akasurde@redhat.com>
2020-12-15 06:39:47 +01:00
patchback[bot]
aaf42f3646 Fix property name typo in get_memory_inventory() (#1484) (#1486)
Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit 51dfc1f288)

Co-authored-by: Bill Dodd <billdodd@gmail.com>
2020-12-14 07:57:07 +01:00
patchback[bot]
c167ac10e0 xfconf: add return values and expand test coverage (#1419) (#1479)
* xfconf: add return values and expand test coverage

* fix pep8

* fix pylint

* fix returns yaml docs

* Add changelog fragemnt

* revert docts for `returned`

* Update changelogs/fragments/1419-xfconf-return-values.yaml

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

* Update plugins/modules/system/xfconf.py

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

* update return values to raw for scalar/lists

* another doc tweak: None -> none

* Break newline for pep8

* Fix merge mistake

* Back to list of strings

* fix yaml syntax

* Fall back to old way, deprecate returns, add ingores for errors

* add a note about dprecating facts

* Add depracation messages and fix docstring error

* remove deprecation of return values.

* Update plugins/modules/system/xfconf.py

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

* drop the deprecation message too

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

Co-authored-by: Matthew Campbell <calvinmc@gmail.com>
2020-12-12 15:29:20 +01:00
Felix Fontein
154d8a313c [stable-1] Fix docker_image tests (#1476)
* Backport of https://github.com/ansible-collections/community.docker/pull/47 to stable-1.

* Also fix old-options.
2020-12-12 08:33:09 +01:00
patchback[bot]
b76492687b BOTMETA.yml: Add a new maintainer of osx_defaults module (#1469) (#1471)
(cherry picked from commit 8d9fd52d3d)

Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>
2020-12-11 06:44:28 +01:00
Felix Fontein
a118bb8d05 Backport of https://github.com/ansible-collections/community.docker/pull/43 (518e99411a9ce47c249a045b346cf28b63b512e2). (#1468) 2020-12-09 11:05:30 +03:00
patchback[bot]
d2b1df49c1 Bugfix: Fix parsing array values from osx_defaults (#358) (#1467)
* Bugfix: Fix parsing array values in osx_defaults

Unquote values and unescape double quotes when reading array values from defaults.

* Fix fragments: fix_parsing_array_values_in_osx_defaults

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

* add test code for Bugfix: Fix parsing array values from osx_defaults

* handle spaces after the comma

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

Co-authored-by: Kazufumi NOTO <noto.kazufumi@gmail.com>
2020-12-09 08:12:28 +01:00
patchback[bot]
fb3085e78d Add ignore-2.10.txt entry analogous to ignore-2.11.txt entry. (#1465) (#1466)
(cherry picked from commit e1bf23d27d)

Co-authored-by: Felix Fontein <felix@fontein.de>
2020-12-08 22:33:17 +01:00
patchback[bot]
ad163ed3af Fix new sanity errors. (#1451) (#1452)
(cherry picked from commit 4566812591)

Co-authored-by: Felix Fontein <felix@fontein.de>
2020-12-06 10:37:17 +01:00
patchback[bot]
15257e9a64 zypper_repository: fix broken tests (#1449) (#1450)
* Change broken repository

* Re-enable integration tests

* Fix integration test

(cherry picked from commit 65d4fe2f4f)

Co-authored-by: Amin Vakil <info@aminvakil.com>
2020-12-05 16:27:16 +01:00
patchback[bot]
c642ee9157 Fix #1435: mas : Fix "invalid literal" when no app (#1436) (#1448)
* Fix #1435: mas : Fix "invalid literal" when no app

* Add changelog fragment

* Update changelogs/fragments/1436-mas-fix-no-app-installed.yml

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

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

Co-authored-by: Jean-Pierre Matsumoto <jpmat296@gmail.com>
2020-12-04 09:36:03 +01:00
patchback[bot]
7e89bc6f61 Temporarily disable zypper_repository tests. (#1445) (#1447)
(cherry picked from commit e1ca4ce1e8)

Co-authored-by: Felix Fontein <felix@fontein.de>
2020-12-04 08:12:29 +00:00
patchback[bot]
9defd1aca1 json_query: Handle AnsibleUnicode, AnsibleUnsafeText (#1434) (#1443)
jmespath library does not undestand custom string types
such as AnsibleUnicode, and AnsibleUnsafeText.
So user need to use ``to_json | from_json`` filter while using
functions like ``starts_with`` and ``contains`` etc.
This hack will allow user to get rid of this filter.

Fixes: #320

Signed-off-by: Abhijeet Kasurde <akasurde@redhat.com>
(cherry picked from commit 5319437bc2)

Co-authored-by: Abhijeet Kasurde <akasurde@redhat.com>
2020-12-04 08:06:09 +01:00
patchback[bot]
ff1a8415bd Remove adejoux as maintainer from aix_lvol. (#1432) (#1438)
See https://github.com/ansible-collections/community.general/pull/1330 for details.

(cherry picked from commit d1acf52906)

Co-authored-by: Felix Fontein <felix@fontein.de>
2020-12-03 22:18:20 +01:00
patchback[bot]
961011891b [icinga2_host.py] Actually return codes instead of data (#335) (#1431)
* [icinga2_host.py] Actually return codes instead of data

Currently the module tries to return the `data`, which can result in a blank message instead of the code being shown.

```
 "msg": "bad return code creating host: "
```

* add changelog fragment

* Update changelogs/fragments/335-icinga2_host-return-error-code.yaml

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

* return code and data on fail

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

Co-authored-by: John R Barker <john@johnrbarker.com>
Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>
Co-authored-by: Deric Crago <deric.crago@gmail.com>
Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit 70ba401602)

Co-authored-by: Martin <spleefer90@gmail.com>
2020-12-02 08:17:26 +01:00
Felix Fontein
6470d3defe Tidy up validate-modules:no-default-for-required-parameter and other cases (#1423) (#1429)
* Fixed validate-modules:mutually_exclusive-unknown for plugins/modules/packaging/os/redhat_subscription.py

* fixed validation-modules for plugins/modules/cloud/lxd/lxd_container.py

* fixed validation-modules for plugins/modules/web_infrastructure/sophos_utm/utm_network_interface_address.py

* fixed validation-modules for plugins/modules/cloud/opennebula/one_host.py

* fixed validation-modules for plugins/modules/cloud/opennebula/one_image_info.py

* fixed validation-modules for plugins/modules/cloud/opennebula/one_image.py

* fixed validation-modules for plugins/modules/cloud/opennebula/one_service.py

* fixed validation-modules for plugins/modules/cloud/opennebula/one_vm.py

* fixed validation-modules for plugins/modules/net_tools/cloudflare_dns.py

* fixed validation-modules for plugins/modules/net_tools/ip_netns.py

* fixed validation-modules for plugins/modules/net_tools/ipinfoio_facts.py

* fixed validation-modules for plugins/modules/net_tools/netcup_dns.py

* fixed validation-modules for plugins/modules/remote_management/wakeonlan.py

* added types to plugins/modules/remote_management/stacki/stacki_host.py but still cannot remove ignore line

* added a couple of FIXME comments

* fixed validation-modules for plugins/modules/remote_management/manageiq/manageiq_provider.py

* fixed validation-modules for plugins/modules/notification/rocketchat.py

* fixed validation-modules for plugins/modules/monitoring/bigpanda.py

* fixed validation-modules for plugins/modules/identity/keycloak/keycloak_client.py

* fixed validation-modules for plugins/modules/identity/keycloak/keycloak_clienttemplate.py

* fixed validation-modules for plugins/modules/cloud/univention/udm_user.py

* fixed validation-modules for plugins/modules/cloud/univention/udm_group.py

* fixed validation-modules for plugins/modules/cloud/spotinst/spotinst_aws_elastigroup.py

* fixed validation-modules for plugins/modules/cloud/smartos/imgadm.py

* fixed validation-modules for plugins/modules/cloud/profitbricks/profitbricks_nic.py

* fixed validation-modules for plugins/modules/cloud/ovirt/ovirt_external_provider_facts.py

* Tidy up validate-modules ignores no-default-for-required-parameter + couple of other cases

* Added changelog frag

* fixed validation-modules for plugins/modules/cloud/centurylink/clc_alert_policy.py

* fixed validation-modules for plugins/modules/cloud/centurylink/clc_firewall_policy.py

* fixed validation-modules for plugins/modules/cloud/lxd/lxd_profile.py

* Typos and small fixes

* fixed validation-modules for plugins/modules/net_tools/ldap/ldap_passwd.py

* Typos and small fixes, part 2

* Fixes from PR comments

* Update plugins/modules/cloud/profitbricks/profitbricks_nic.py

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

* Rolled back the mutually-exclusive-unknown in redhat_subscription

* Update changelogs/fragments/1423-valmod_multiple_cases.yml

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

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

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2020-12-01 21:13:54 +00:00
patchback[bot]
32ac93fb16 mas : Add example using PATH: /usr/local/bin (#1424) (#1427)
Use of "environement" is required when mas is installed with
homebrew. I suppose most of people use homebrew.

(cherry picked from commit db61a899d5)

Co-authored-by: Jean-Pierre Matsumoto <jpmat296@gmail.com>
2020-12-01 20:57:09 +01:00
Felix Fontein
1dfe7963cf Tidy up validate-modules:doc-required-mismatch (#1415) (#1417)
* Tidy up validate-modules ignores doc-required-mismatch

* Tidy up validate-modules ignores doc-required-mismatch - update on 2.11

* Fixed chengelog frag

* rolledback removal of parameter from cloud/smartos/vmadm.py

* removed changelog frag for the rollback

* Update plugins/modules/cloud/smartos/vmadm.py

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

* Revert "removed changelog frag for the rollback"

This reverts commit 56a02ead3b.

* suggestion from PR

* yet another PR suggestion

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

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2020-11-28 15:41:36 +01:00
Felix Fontein
a46fb7bcae Tidy up validate-modules:doc-choices-do-not-match-spec II: The Rebase (#1409) (#1416)
* fixed validation-modules for plugins/modules/cloud/lxc/lxc_container.py

* fixed validation-modules for plugins/modules/cloud/smartos/vmadm.py

* fixed validation-modules for plugins/modules/cloud/spotinst/spotinst_aws_elastigroup.py

* fixed validation-modules for plugins/modules/cloud/univention/udm_dns_record.py

* fixed validation-modules for plugins/modules/cloud/univention/udm_dns_zone.py

* fixed validation-modules for plugins/modules/cloud/lxc/lxc_container.py

* fixed validation-modules for plugins/modules/cloud/univention/udm_user.py

* fixed validation-modules for plugins/modules/clustering/etcd3.py

* fixed validation-modules for plugins/modules/clustering/znode.py

* fixed validation-modules for plugins/modules/remote_management/hpilo/hpilo_boot.py

* fixed validation-modules for plugins/modules/remote_management/ipmi/ipmi_boot.py

* fixed validation-modules for plugins/modules/remote_management/ipmi/ipmi_power.py

* fixed validation-modules for plugins/modules/remote_management/manageiq/manageiq_provider.py

* fixed validation-modules for plugins/modules/remote_management/stacki/stacki_host.py

* fixed validation-modules for plugins/modules/cloud/univention/udm_share.py

* Removed validate-modules:doc-choices-do-not-match-spec from ignore files

* fixed alias samba_inherit_permissions in udm_share.py

* Rolled back a couple of lines

* Removed duplicate key in docs

* Rolled back a couple of troublesome lines

* Removed no-longer necessary ignore lines

* Removed no-longer necessary ignore lines on 2.11 as well

* Removed no-longer necessary ignore lines on 2.9 this time

(cherry picked from commit cff8463882)

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2020-11-28 12:38:48 +01:00
patchback[bot]
70a8ca6ac3 Tidy up validate-modules:doc-elements-mismatch (#1399) (#1407)
* fixed validation-modules for plugins/modules/cloud/xenserver/xenserver_guest.py

* fixed validation-modules for plugins/modules/identity/ipa/ipa_hbacrule.py

* fixed validation-modules for plugins/modules/identity/keycloak/keycloak_client.py

* fixed validation-modules for plugins/modules/identity/keycloak/keycloak_clienttemplate.py

* fixed validation-modules for plugins/modules/net_tools/nios/nios_fixed_address.py

* fixed validation-modules for plugins/modules/net_tools/nios/nios_host_record.py

* fixed validation-modules for plugins/modules/net_tools/nios/nios_member.py

* fixed validation-modules for plugins/modules/net_tools/nios/nios_network.py

* fixed validation-modules for plugins/modules/net_tools/nios/nios_nsgroup.py

* fixed validation-modules for plugins/modules/remote_management/redfish/redfish_config.py

* fixed validation-modules for plugins/modules/source_control/github/github_webhook.py

* fixed validation-modules for plugins/modules/web_infrastructure/sophos_utm/utm_proxy_exception.py

* Tidy up validate-modules ignores doc-elements-mismatch

* Added changelog frag for utm_proxy_exception

* Update changelogs/fragments/1399-fixed-wrong-elements-type.yaml

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

* Fixed couple of missing docs

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

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2020-11-27 08:25:08 +01:00
Felix Fontein
17f598fdc2 Bump version for next release. 2020-11-26 14:13:09 +01:00
Felix Fontein
bc13182e1d Release 1.3.0. 2020-11-26 14:12:35 +01:00
Felix Fontein
6cbd0c772e Add release summary. 2020-11-26 14:10:50 +01:00
patchback[bot]
49314a42ef BOTMETA.yml: add a maintainer for pagerduty_user module (#1402) (#1403)
(cherry picked from commit 25c52d56bd)

Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>
2020-11-26 14:09:52 +01:00
patchback[bot]
4953fda9a0 a new module pagerduty_user (#1025) (#1401)
* a new module pagerduty_user

* fixed issues related to sanity

* fixed issues related to sanity

* modified the module

* shippable

* typo

* shippable

* removed e

* shippable

* shippable

* shippable

* updated test files

* Update plugins/modules/monitoring/pagerduty_user.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>
(cherry picked from commit 63fbcdb4b1)

Co-authored-by: Zainab Alsaffar <za5775@rit.edu>
2020-11-26 13:54:17 +01:00
Felix Fontein
e03431d9f6 [stable-1] Fix docker tests (#1398)
* Adjust version_added, re-place tests. (#34)

* Template docker test containers.

* Forgot to adjust test.
2020-11-26 13:21:12 +01:00
patchback[bot]
ab94b0ace0 Tidy up validate-modules nonexistent-parameter-documented (#1389) (#1400)
* fixed validation-modules for plugins/modules/cloud/spotinst/spotinst_aws_elastigroup.py

* fixed validation-modules for plugins/modules/cloud/univention/udm_share.py

* fixed validation-modules for plugins/modules/net_tools/nios/nios_host_record.py

* fixed validation-modules for plugins/modules/storage/zfs/zfs_facts.py

* fixed validation-modules for plugins/modules/storage/zfs/zpool_facts.py

* Tidy up validate-modules ignores nonexistent-parameter-documented

* Adjustments per the PR

* Removed no longer needed ignore line for udm_share.py

(cherry picked from commit 7f890c4645)

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2020-11-26 13:21:01 +01:00
patchback[bot]
bd8df8e94e Apache2 module: Add another shib module identifier (#1383) (#1397)
* Add another shib module identifier to apache2 module (#1379)

* Update changelogs/fragments/1383-apache2-module-amend-shib-workaround.yaml

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

Co-authored-by: peter <peter-@users.noreply.github.com>
2020-11-26 08:47:02 +01:00
patchback[bot]
9bb439632b adding fix for packet_net.py (#891) (#1396)
* adding fix for packet_net.py

* adding changelog fragment

* squashing to fix cascading notifications

Apply suggestions from code review

thanks felixfontein for working with me!

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

adding suggestions from code review (accessing dict in a better way)

modified packet_net fragment to accurate description

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

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

Co-authored-by: elreydetoda <unc741@gmail.com>
2020-11-26 08:10:33 +01:00
patchback[bot]
9e780b9d5e Fix macports package present/active detection (#1308) (#1395)
* Fix typo in redhat_subscription testcase

* Fix macports state=present matching against the wrong package name

Previous implementation returned true if the desired package name occurred anywhere in
the list of all installed packages. For example as a substring of another package name,
or even as a substring of a variant name for a different package.

Instead:

- request macports only list installed packages matching the desired package name, instead of all installed packages.
  - Note `port` exits with 0 regardless of whether any packages match the requested name.
- pass `-q` flag: "Do not print the header line. This is useful when parsing the output of port installed in scripts for further processing."
- eliminate `use_unsafe_shell=True` by searching stdout contents natively in python
instead of using `grep`. This has the added benefit of eliminating any potential
misinterpretation of characters in the package name as regex special characters.

If there are zero matching installed packages, `out` is empty.
If there are one or more matches (due to multiple installed versions), the output format
is: ec8a2bc682/src/port/port.tcl (L3320-L3323)

Notably, two leading spaces, the package name, a space, and then other information.
According to blame via github, those lines haven't changed in 11 years.

* Update macports state=active to eliminate use_unsafe_shell

Similar to previous commit (for macports state=present):

- pass `-q` flag: "Do not print the header line. This is useful when parsing the output of port installed in scripts for further processing."
- search stdout contents natively in python instead of using `grep`.
- added parentheses to search string to eliminate false positives if the package name
or variants contain the word `active`. Still could fail if they contain `(active)`, but
that's less likely

If there are zero matching installed packages, `out` is empty.
If there are one or more matches (due to multiple installed versions), the output format
is: ec8a2bc682/src/port/port.tcl (L3320-L3323)

For "state=active", we're looking for a line that contains `(active)` in the output.

* Basic test case of query_port for present and active

* Attempt to fix lint errors in test

* Different mock module creation, changed test cases indentation/spacing

- picked the wrong mock code to cargo-cult. Thanks to felixfontein for this suggestion
- 4 space indentation on continuation line. I thought I had that originally, but it looks like my editor sabotaged me with mixed tabs/spaces
- Remove leading newline on multi-line test cases. I don't think it would make a difference, but I'd read up on how the python syntax works and want to more accurately represent macports output.

fingers crossed this addresses the known build errors

* Add changelog fragment

* Update tests/unit/plugins/modules/packaging/os/test_macports.py

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

* Update changelogs/fragments/1307-macports-fix-status-check.yml

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

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

Co-authored-by: Dan Jackson <dan@djackson.org>
2020-11-26 07:15:27 +01:00
patchback[bot]
60e0a660ce BOTMETA.yml: add a new maintainer of facter module (#1362) (#1393)
(cherry picked from commit 0ba9ea6e48)

Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>
2020-11-25 16:19:15 +01:00
patchback[bot]
7664146c9b BOTMETA.yml: Add a new maintainer of pkgin module (#1391) (#1392)
(cherry picked from commit 5cd6d18b34)

Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>
2020-11-25 14:21:31 +01:00
patchback[bot]
28c455d234 Tidy up validate-modules ignores for modules: cloud/profitbricks (#1387) (#1390)
* fixed validation-modules for plugins/modules/cloud/profitbricks/profitbricks_datacenter.py

* fixed validation-modules for plugins/modules/cloud/profitbricks/profitbricks_nic.py

* fixed validation-modules for plugins/modules/cloud/profitbricks/profitbricks.py

* fixed validation-modules for plugins/modules/cloud/profitbricks/profitbricks_volume_attachments.py

* fixed validation-modules for plugins/modules/cloud/profitbricks/profitbricks_volume.py

* Tidy up validate-modules ignores for cloud/profitbricks modules

* CI errors for 2.9

(cherry picked from commit a99d011867)

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2020-11-25 12:08:48 +00:00
patchback[bot]
74d4561a33 BOTMETA.yml: Add a new maintainer of parted module (#1386) (#1388)
(cherry picked from commit 4a7379b61d)

Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>
2020-11-25 12:16:30 +01:00
Andrew Klychkov
a07db2f731 Add changelog fragment with PostgreSQL migration announcement (#1384) 2020-11-25 08:24:26 +01:00
Felix Fontein
528602f1b9 Improve fragments. (#1381) 2020-11-25 08:03:40 +01:00
patchback[bot]
b99586e26a Datadog: Mark notification_message as no_log (#1338) (#1385)
* Datadog: Mark notification_message as no_log

This message field is often used to page people or teams inside
an organization when a monitor goes off, by using `@` mentions.
If Ansible is configured to use Datadog's callback plugin [1], an
unwanted interaction would happen: 
When a monitor fails to create, the callback sends an error event
to Datadog which contains all the task's loggable fields in it.
If the message field contains `@` mentions, this event would page
the people on them.

[1] https://github.com/DataDog/ansible-datadog-callback

* Add changelog fragment

* Update changelogs/fragments/1338-datadog-mark-notification_message-no_log.yml

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

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

Co-authored-by: Albert Vaca Cintora <albertvaka@gmail.com>
2020-11-25 08:01:17 +01:00
patchback[bot]
999620c789 Add Cloud Init variables for Proxmox_KVM module (#797) (#1380)
* Add Cloud Init variables for Proxmox_KVM module

Co-authored-by: Felix Fontein <felix@fontein.de>
Co-authored-by: Amin Vakil <info@aminvakil.com>

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

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

* apply yaml syntax to all examples

* remove trailing whitespaces

Co-authored-by: Felix Fontein <felix@fontein.de>
Co-authored-by: Amin Vakil <info@aminvakil.com>
(cherry picked from commit 1f7649fcd7)

Co-authored-by: morph027 <morphsen@gmx.com>
2020-11-24 20:58:28 +01:00
patchback[bot]
d5c24e67e8 proxmox: create a common base (#1331) (#1378)
* proxmox: create a common base

Add a doc_fragment to share the documentation regarding authentication
parameters (api_host, api_user, api_password, api_token_id,
api_token_secret as well as the lone validate_certs).

Add a module_utils to hold common code such as the argument spec (again
related to authentication paramters), a helper function to convert from
Proxmox boolean representation to python and the base class
ProxmoxAnsible.
For now it only handles the connection to Proxmox VE API but more can be
added in the future.

To check if everything is well in place add three new modules:
proxmox_{domain,group,user}_info.

And finaly tests these new modules.

* Apply suggestions from code review

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

* Add tests/integration/targets/proxmox/aliases

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

Co-authored-by: Tristan Le Guern <tleguern@bouledef.eu>
2020-11-24 17:56:50 +01:00
patchback[bot]
b1d1391be5 Added umask option to passwordstore lookup plugin. (#1156) (#1376)
* Added umask option to passwordstore lookup plugin.

* Added umask documentation and changelog fragment.

* Added default values to paramvals within the run method.

* removed blank lines (PEP8)

* Update changelogs/fragments/lookup-passwordstore-umask.yml

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

* Update plugins/lookup/passwordstore.py

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

* Update changelogs/fragments/lookup-passwordstore-umask.yml

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

* passwordstore lookup plugin: changelog fragment update

* passing environment variables to subprocess.Popen()

* Update plugins/lookup/passwordstore.py

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

* rm trailing whitespace

* Don't force default umask in the plugin, pass will take care of this.

* remove default from the documentation string

* remove trailing whitespaces

* prevent KeyErrors when checking if key exits in paramvals.

* Update plugins/lookup/passwordstore.py

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

* Fix for TypeError

* revert back to old directory test

Co-authored-by: bratw0rst <c.chmiel@speakup.nl>
Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit 28ac4b79e2)

Co-authored-by: bratw0rst <42434435+bratw0rst@users.noreply.github.com>
2020-11-24 07:36:15 +00:00
patchback[bot]
02f0abfb36 archive: Fix paramater types (#1039) (#1377)
* archive: Fix ignored sanity test parameter-list-no-elements

* Fix wrong argument type

* Add changelog

* Add integration test for a list of files

(cherry picked from commit 31443e57b1)

Co-authored-by: Amin Vakil <info@aminvakil.com>
2020-11-24 08:33:19 +01:00
patchback[bot]
659ef811a3 Add filter dict_kv (#1264) (#1374)
- Add filter `dict_kv` which returns a single key-value pair dictionary created from two arguments

Example 1

```
- hosts: localhost
  gather_facts: false
  vars:
    myvar: myvalue
  tasks:
  - debug:
      msg: "{{ myvar | dict_kv('thatsmyvar') }}"

OUTPUT:
ok: [localhost] => {
    "msg": {
        "thatsmyvar": "myvalue"
    }
}
```

Example 2

```
- hosts: localhost
  gather_facts: false
  vars:
    common_config:
      type: host
      database: all
    myservers:
    - server1
    - server2
  tasks:
  - debug:
      msg: "{{ myservers | map('dict_kv', 'server') | map('combine', common_config) }}"

OUTPUT:
ok: [localhost] => {
    "msg": [
        {
            "database": "all",
            "server": "server1",
            "type": "host"
        },
        {
            "database": "all",
            "server": "server2",
            "type": "host"
        }
    ]
}
```

(cherry picked from commit 44fd157a2b)

Co-authored-by: Stanislav German-Evtushenko <ginermail@gmail.com>
2020-11-24 06:23:37 +01:00
patchback[bot]
b86161886f BOTMETA.yml: add a new maintainer of dict_kv plugin (#1361) (#1375)
(cherry picked from commit 8e3931d9b0)

Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>
2020-11-24 06:10:50 +01:00
Felix Fontein
e29d585412 Tidy up validate-modules ignores for modules: cloud/centurylink (rebased) (#1365) (#1373)
* fixed validation-modules for plugins/modules/cloud/centurylink/clc_aa_policy.py

fixed validation-modules for plugins/modules/cloud/centurylink/clc_alert_policy.py

fixed validation-modules for plugins/modules/cloud/centurylink/clc_firewall_policy.py

fixed validation-modules for plugins/modules/cloud/centurylink/clc_blueprint_package.py

fixed validation-modules for plugins/modules/cloud/centurylink/clc_group.py

fixed validation-modules for plugins/modules/cloud/centurylink/clc_loadbalancer.py

fixed validation-modules for plugins/modules/cloud/centurylink/clc_modify_server.py

fixed validation-modules for plugins/modules/cloud/centurylink/clc_publicip.py

fixed validation-modules for plugins/modules/cloud/centurylink/clc_server.py

fixed validation-modules for plugins/modules/cloud/centurylink/clc_server_snapshot.py

* Tidy up validate-modules ignores for cloud/centurylink modules

* Update plugins/modules/cloud/centurylink/clc_firewall_policy.py

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

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

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2020-11-24 06:07:36 +01:00
patchback[bot]
703bb465c7 Tidy up validate-modules ignores for monitoring modules (#1350) (#1372)
* fixed validation-modules for plugins/modules/monitoring/bigpanda.py

* fixed validation-modules for plugins/modules/monitoring/circonus_annotation.py

* fixed validation-modules for plugins/modules/monitoring/honeybadger_deployment.py

* fixed validation-modules for plugins/modules/monitoring/icinga2_feature.py

* fixed validation-modules for plugins/modules/monitoring/icinga2_host.py

* fixed validation-modules for plugins/modules/monitoring/librato_annotation.py

* fixed validation-modules for plugins/modules/monitoring/logentries.py

* fixed validation-modules for plugins/modules/monitoring/logstash_plugin.py

* fixed validation-modules for plugins/modules/monitoring/newrelic_deployment.py

* fixed validation-modules for plugins/modules/monitoring/pagerduty_alert.py

* fixed validation-modules for plugins/modules/monitoring/pagerduty.py

* fixed validation-modules for plugins/modules/monitoring/pingdom.py

* fixed validation-modules for plugins/modules/monitoring/rollbar_deployment.py

* fixed validation-modules for plugins/modules/monitoring/spectrum_device.py

* fixed validation-modules for plugins/modules/monitoring/stackdriver.py

* fixed validation-modules for plugins/modules/monitoring/statusio_maintenance.py

* fixed validation-modules for plugins/modules/monitoring/uptimerobot.py

* fixed validation-modules for plugins/modules/monitoring/datadog/datadog_event.py

* fixed validation-modules for plugins/modules/monitoring/datadog/datadog_monitor.py

* fixed validation-modules for plugins/modules/monitoring/sensu/sensu_check.py

* fixed validation-modules for plugins/modules/monitoring/sensu/sensu_client.py

* fixed validation-modules for plugins/modules/monitoring/sensu/sensu_handler.py

* fixed validation-modules for plugins/modules/monitoring/sensu/sensu_silence.py

* fixed validation-modules for plugins/modules/monitoring/sensu/sensu_subscription.py

* fixed trailing space

* Enabling validation-modules for monitoring modules

* Added line for 2.9

* Update plugins/modules/monitoring/icinga2_host.py

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

* Update plugins/modules/monitoring/datadog/datadog_event.py

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

* Suggestion from PR

* oops, missed the 2.11 ignore file

* Update plugins/modules/monitoring/icinga2_host.py

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

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

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2020-11-24 05:33:32 +01:00
patchback[bot]
1d290c129f Tidy up validate-modules ignores for modules: cloud/oneandone (#1357) (#1371)
* fixed validation-modules for plugins/modules/cloud/oneandone/oneandone_firewall_policy.py

* fixed validation-modules for plugins/modules/cloud/oneandone/oneandone_load_balancer.py

* fixed validation-modules for plugins/modules/cloud/oneandone/oneandone_monitoring_policy.py

* fixed validation-modules for plugins/modules/cloud/oneandone/oneandone_private_network.py

* fixed validation-modules for plugins/modules/cloud/oneandone/oneandone_public_ip.py

* fixed validation-modules for plugins/modules/cloud/oneandone/oneandone_server.py

* Tidy up validate-modules ignores for cloud/oneandone modules

* Update plugins/modules/cloud/oneandone/oneandone_server.py

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

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

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2020-11-23 22:21:47 +01:00
patchback[bot]
af913c9a6a Added Arguments for Facter module (#768) (#1367)
* Added arguments and Documentation

* fixing sanity checks

* Added documentation

* attempting doc fix

* removed elements from doc

* updated elements

* Update plugins/modules/system/facter.py

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

* Update plugins/modules/system/facter.py

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

* Create 768-factor.yml

added change log

* Rename 768-factor.yml to 768-facter.yml

* Update changelogs/fragments/768-facter.yml

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

* Updated Doc, simplified arg add

Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>
Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit 00c2ec062d)

Co-authored-by: Larry <34108925+gamethis@users.noreply.github.com>
2020-11-23 19:22:51 +01:00
patchback[bot]
028481c55e BOTMETA.yml: add a new maintainer for omapi_host module (#1363) (#1364)
(cherry picked from commit 19b5fceeab)

Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>
2020-11-23 15:14:19 +01:00
patchback[bot]
247da9890b Fix boolean defaults. (#1343) (#1358)
(cherry picked from commit a96f90ff94)

Co-authored-by: Felix Fontein <felix@fontein.de>
2020-11-23 12:29:14 +01:00
Felix Fontein
73d573b915 Add information on hetzner module migration. (#1344) 2020-11-23 11:15:25 +00:00
patchback[bot]
d1a7423196 Tidy up validate-modules ignores for some cloud/ modules (#1354) (#1356)
* fixed validation-modules for plugins/modules/cloud/atomic/atomic_container.py

* fixed validation-modules for plugins/modules/cloud/oracle/oci_vcn.py

* fixed validation-modules for plugins/modules/cloud/heroku/heroku_collaborator.py

* fixed validation-modules for plugins/modules/cloud/docker/docker_stack.py

* fixed validation-modules for plugins/modules/cloud/pubnub/pubnub_blocks.py

* fixed validation-modules for plugins/modules/cloud/huawei/hwc_ecs_instance.py

* fixed validation-modules for plugins/modules/cloud/huawei/hwc_vpc_port.py

* fixed validation-modules for plugins/modules/cloud/huawei/hwc_vpc_subnet.py

* fixed validation-modules for plugins/modules/cloud/ovh/ovh_ip_failover.py

* fixed validation-modules for plugins/modules/cloud/ovh/ovh_ip_loadbalancing_backend.py

* fixed validation-modules for plugins/modules/cloud/softlayer/sl_vm.py

* fixed validation-modules for plugins/modules/cloud/misc/proxmox_kvm.py

* fixed validation-modules for plugins/modules/cloud/misc/proxmox_template.py

* fixed validation-modules for plugins/modules/cloud/misc/terraform.py

* fixed validation-modules for plugins/modules/cloud/memset/memset_dns_reload.py

* fixed validation-modules for plugins/modules/cloud/memset/memset_memstore_info.py

* fixed validation-modules for plugins/modules/cloud/memset/memset_server_info.py

* fixed validation-modules for plugins/modules/cloud/memset/memset_zone_domain.py

* fixed validation-modules for plugins/modules/cloud/memset/memset_zone.py

* fixed validation-modules for plugins/modules/cloud/memset/memset_zone_record.py

* fixed validation-modules for plugins/modules/cloud/linode/linode.py

* fixed validation-modules for plugins/modules/cloud/linode/linode_v4.py

* fixed validation-modules for plugins/doc_fragments/dimensiondata.py

* fixed validation-modules for plugins/modules/cloud/dimensiondata/dimensiondata_network.py

* fixed validation-modules for plugins/modules/cloud/dimensiondata/dimensiondata_vlan.py

* fixed validation-modules for plugins/modules/cloud/xenserver/xenserver_guest_info.py

* fixed validation-modules for plugins/modules/cloud/xenserver/xenserver_guest_powerstate.py

* Tidy up validate-modules ignores for varied cloud modules

- loking at the count of ignore lines, worked from the lower numbers up

* rolled back line for docker_container, removed two extraneous for xenserver

* rolled back lins for linode in 2.9

(cherry picked from commit 3d1f9ed657)

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2020-11-23 10:01:35 +01:00
patchback[bot]
7ace59f505 [2.10] Fix omapi_host on python3 (#788) (#1353)
(cherry picked from commit 5c768dc6f1)

Co-authored-by: Alexey Masolov <amasolov@redhat.com>
2020-11-22 12:43:09 +01:00
patchback[bot]
bcf0060f10 Tidy up validate-modules ignores for modules: web_infrastructure/sophos_utm (#1351) (#1352)
* fixed validation-modules for plugins/modules/web_infrastructure/sophos_utm/utm_aaa_group_info.py

* fixed validation-modules for plugins/modules/web_infrastructure/sophos_utm/utm_aaa_group.py

* fixed validation-modules for plugins/modules/web_infrastructure/sophos_utm/utm_ca_host_key_cert_info.py

* fixed validation-modules for plugins/modules/web_infrastructure/sophos_utm/utm_ca_host_key_cert.py

* fixed validation-modules for plugins/modules/web_infrastructure/sophos_utm/utm_dns_host.py

* fixed validation-modules for plugins/modules/web_infrastructure/sophos_utm/utm_network_interface_address_info.py

* fixed validation-modules for plugins/modules/web_infrastructure/sophos_utm/utm_network_interface_address.py

* fixed validation-modules for plugins/modules/web_infrastructure/sophos_utm/utm_proxy_auth_profile.py

* fixed validation-modules for plugins/modules/web_infrastructure/sophos_utm/utm_proxy_exception.py

* fixed validation-modules for plugins/modules/web_infrastructure/sophos_utm/utm_proxy_frontend_info.py

* fixed validation-modules for plugins/modules/web_infrastructure/sophos_utm/utm_proxy_frontend.py

* fixed validation-modules for plugins/modules/web_infrastructure/sophos_utm/utm_proxy_location_info.py

* fixed validation-modules for plugins/modules/web_infrastructure/sophos_utm/utm_proxy_location.py

* Enabling validation-modules for web_infrastructure/sophos_utm modules

* Rolled back utm_network_interface_address.py for 2.9 sake

(cherry picked from commit 4c88a8edc0)

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2020-11-22 12:34:29 +01:00
patchback[bot]
07e35f7505 feat(pkgin): add support for installation of full versioned package names (#1256) (#1349)
* * pkgin query_package(..) understands now also package name with version (my-package-1.2nb123456). * pkgin query_package(..) will distinct between not-installed and not-found packages. * pkgin install_package(..) fails with proper error if a non-existing package is attempted to be installed.

* fixup ansibot comments

* add changelog fragment

* add example

* use more pythonic condition

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

* remove extra dot between description and link to PR

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

* fix file extension of changelog fragment

* add pkgin unit tests for query_package function

* fix pep8 issues

* use enum Flag instead mix of strings, bools and None as return value

* use IntEnum instead Flag to support Python versions >= 2.6

* fix pep8 and pylint errors

* use regular class instead enum to avoid issues with older Python releases

* fix comment

* remove the combined package state since without an IntFlag or Flag the usage of it would require to use logical operators

Co-authored-by: Erik van Nooijen <eric.vannooijen@tomtom.com>
Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>
(cherry picked from commit ece0202507)

Co-authored-by: Martin Migasiewicz <616250+martinm82@users.noreply.github.com>
2020-11-21 21:41:09 +01:00
patchback[bot]
9279e4532d Add ability to resize existing partition (#773) (#1348)
* Add ability to resize existing partition

* Add 'resize' flag to support backwards compatability, and allow partition reduction

* Add changelog fragment for #773

* Update changelogs/fragments/773-resize-partition.yml

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

* Update plugins/modules/system/parted.py

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

* Update resize flag with PR review comments

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

* Update plugins/modules/system/parted.py

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

* Update default on resize flag in parted.py

* Apply suggestions from code review

Co-authored-by: Felix Fontein <felix@fontein.de>
Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>
(cherry picked from commit 8f99f9cb1c)

Co-authored-by: jake2184 <jake2184@users.noreply.github.com>
2020-11-21 21:38:39 +01:00
patchback[bot]
51bf08c690 ipa: Update non-secret fields matching '*pass*' with no_log=False (#1339) (#1345)
* ipa: Update non-secret fields matching '*pass*' with no_log=False

* Add changelog fragment

* Update changelogs/fragments/1339-ip-no_log-nonsecret.yml

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

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

Co-authored-by: Mark Chappell <mchappel@redhat.com>
2020-11-21 17:36:40 +01:00
Felix Fontein
87e31ae886 [WIP] [stable-1] Add information on docker module migration (#1303)
* Add information on docker module migration.

* Rewrite fragment.
2020-11-20 23:03:11 +01:00
patchback[bot]
7713202d9b Adding module_utils/module_helper.py + big revamp in xfconf.py to use it (#1322) (#1336)
* Big revamp in xfconf.py

- added plugin/module_utils/module_helper.py
  - scaffold class for writing modules, beyond standard AnsibleModule
  - automatic capture of exceptions
  - easier dependency testing
  - StateMixin to easily handle different behaviours for 'state' param
  - CmdMixin to easily run external commands
- adapted test_xfconf.py
  - the args for run_command are now lists instead of a string
  - value and previous_value were not being tested before (because xfconf wasn't filling results - see below)
  - added more tests: setting value to previous_value, getting non-existent property
- rewritten xfconf module, keeping the same results
  - original module posted results as ansible_facts, this version still does it for compatibility, but also adds to the module result

* Added suggestions from the PR

* Added russoz as maintainer for the module_utils/module_helper.py file

* Formatting using printf-style requires special treatment

Strings not containing substitution tokens must work as well.

* Tidied up variables in module definition

* Tests with ArgFormat and DependencyCtxMgr

* pytest parameters must be in the same order, it seems

* improved testing for the DependencyCtxMgr

* fixed test for older pythons

* Moved changed property to improve readability

* Added testcase for state: absent and adjusted xfconf after it

* Fixed param name environ_update in run_command()

* added changelog fragment

* fixed tests after run_command param change

(cherry picked from commit e3fcc7de2a)

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2020-11-20 12:43:23 +01:00
patchback[bot]
e669562a0f BOTMETA.yml - setting aix modules for team_aix (#1330) (#1333)
* BOTMETA.yml - setting aix modules for team_aix

* simplification per PR suggestion

(cherry picked from commit 2ebf2861b6)

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2020-11-20 07:54:44 +01:00
patchback[bot]
17e39e3744 Add --non-interactive argurment to Flatpak (#1246) (#1332)
* Add noninteractive argument

* Correct pep8 errors

* Add changelog fragment

* Update changelogs/fragments/1246-flatpak-use-non-interactive-argument.yaml

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

Co-authored-by: Thibault GUIMBERT <tguimbert@leni.fr>
Co-authored-by: Thibault Guimbert <tguimbert@localhost.localdomain>
Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit 2be2d30f3b)

Co-authored-by: TGuimbert <33598842+TGuimbert@users.noreply.github.com>
2020-11-19 21:31:36 +01:00
patchback[bot]
c1a6feaf25 [pkgng] present the 'ignore_osver' option to pkg (#1243) (#1321)
* [pkgng] introduce IGNORE_OSVERSION to pkgng

* [pkgng] add small description about IGNORE_OSVERSION
  - source: https://www.freebsd.org/cgi/man.cgi?query=pkg.conf&sektion=5

* [pkgng] initialize default value of 'ignoreosver' as False

* [pkgng] replace double quotes by single ones, when setting 'ignoreosver'

* [pkgng] do not make 'ignoreosver' a required option for this module

* [pkgng] mode the point we set IGNORE_OSVER into install_packages()

* [pkgng] restrict the use of 'ignoreosver' to pkg versions >= 1.11
  - https://github.com/freebsd/pkg/blob/release-1.11/NEWS#L51

* [pkgng] value of 'ignoreosver' passed to install_packages

  - install_packages() contains a taks to update local pkgs cache;
  - should that update be triggered, AND 'ignoreosver' is set to True,
    we must change existing "batch_var" and add the IGNORE_OSVERSION=yes
    to the environment;
  - there pkg running on STABLE or CURRENT FreeBSD machines will have a
    chance to proceed with the "update" action

* [pkgng] create option description for "ignoreosver" and its defaults

* [pkgng] make sure we do use IGNORE_OSVERSION when action is "update"

* [pkgng] add more information on how 'ignoreosver' works

Signed-off-by: Vinicius Zavam <egypcio@googlemail.com>

* [pkgng] create changelog fragment for PR #1243

Signed-off-by: Vinicius Zavam <egypcio@googlemail.com>

* [pkgng] add information about when we start to offer 'ignoreosver'

Signed-off-by: Vinicius Zavam <egypcio@googlemail.com>

* [pkgng] rename 'ignoreosver' -> 'ignore_osver'

Signed-off-by: Vinicius Zavam <egypcio@googlemail.com>

* [pkgng] remove unnecessary backslashes for install_packages() call

Signed-off-by: Vinicius Zavam <egypcio@googlemail.com>

* [pkgng] fix changelog fragment's formating

Signed-off-by: Vinicius Zavam <egypcio@googlemail.com>
(cherry picked from commit d95910963b)

Co-authored-by: Vinícius Zavam <egypcio@users.noreply.github.com>
2020-11-17 07:37:00 +01:00
patchback[bot]
bdeb63e579 maven_artifact: Adjust path for time stamped SNAPSHOT versions (#713) (#1318)
* Adjust path for time stamped SNAPSHOT versions

Test the version string for the timestamp SNAPSHOT pattern. If it matches, substitute the SNAPSHOT version in the artifact path rather than the timestamped version string.

* Add changelog fragment for PR 713

* Update changelogs/fragments/713-maven-timestamp-snapshot.yml

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

* C
Fix problems reported by shippable
Fix problems reported by pull request checks

* Resolve additional shipping errors

Co-authored-by: jweber <jweber@seastreet.com>
Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit 9787e8a6bf)

Co-authored-by: John Weber <btsweber@gmail.com>
2020-11-16 22:22:14 +01:00
patchback[bot]
7e247b0eea proxmox*: add support for API tokens (#1206) (#1316)
Provides an alternative authentication method to the password.
The token validity is only tested during the first request after the
instantiation of `ProxmoxAPI`, thus the presence of a call to
`proxmox.version.get()` in `proxmox_template`.

Example:

    - name: Ensure test-vm is created
      proxmox_kvm:
        api_host: prx-test
        api_user: tleguern@pve
        api_token_id: api-pve-test
        api_token_secret: fad3db3d-b335-ee15-9fb0-ea1bf70128db
        node: prx-test-01
        name: test-vm
	...

(cherry picked from commit 5cc900cfdb)

Co-authored-by: Tristan Le Guern <tristan.leguern-presta@deveryware.com>
2020-11-16 21:37:42 +01:00
patchback[bot]
2fe6a34e3f Fix hashi_vault lookup approle authentication (#1138) (#1315)
As per the plugin documentation and the Hashicorp Vault documentation (https://www.vaultproject.io/docs/auth/approle#secretid)
secret_id is not mandatory.
Moreover, using this lookup plugin without a secret_id used to work in
Ansible 2.9.

Co-authored-by: Jonathan Piron <jonathanpiron@gmail.com>
(cherry picked from commit 6cec8759d0)

Co-authored-by: Jonathan Piron <jonathan@piron.at>
2020-11-16 16:40:54 +00:00
patchback[bot]
ca97eb6f93 Xfconf tests (#1305) (#1313)
* Adjusted case in class names - transparent to users

* Adjustments to module code:

- No need to try/except everything, in fact it complicated debugging
- Replaced second call to xfconf.get() with xfconf.previous_value

* the actual test

* removed extraneous empty lines

* added changelog fragment

* rolled back removing the try/except around the main execution

* Update changelogs/fragments/1305-added-xfconf-tests.yaml

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

* Update plugins/modules/system/xfconf.py

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

* Removed extraneous import

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

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2020-11-16 12:49:38 +01:00
patchback[bot]
b529955c07 Add support for HashiCorp Vault JWT auth (#1213) (#1309)
* Add support for Hashicorp Vault JWT auth

* Add support for HashiCorp Vault JWT auth (continued)

Co-authored-by: Brian Scholer <1260690+briantist@users.noreply.github.com>

Co-authored-by: Mike Brancato <mike@mikebrancato.com>
Co-authored-by: Brian Scholer <1260690+briantist@users.noreply.github.com>
(cherry picked from commit 64c6f20b55)

Co-authored-by: Erik Godding Boye <egboye@gmail.com>
2020-11-16 08:23:44 +01:00
patchback[bot]
d5d24302b6 Add hetzner_failover_ip* tests (#1301) (#1310)
* Add tests for hetzner_failover_ip_info.

* Add basic tests for hetzner_failover_ip.

(cherry picked from commit 41550b5205)

Co-authored-by: Felix Fontein <felix@fontein.de>
2020-11-16 08:17:55 +01:00
patchback[bot]
51a3594494 Add docker build output to task result (#805) (#1306)
The build output is only added during failures, but its useful to
have this available during normal task execution as well.

(cherry picked from commit 33b8d1c57e)

Co-authored-by: Raghu Siddarth Udiyar <raghusiddarth@gmail.com>
2020-11-15 17:08:43 +01:00
patchback[bot]
85fd4240f6 proxmox_kvm: pool parameter not supported by qemu/<vmid>/config API endpoint (#1258) (#1300)
* proxmox_kvm: pool parameter not supported by API on update

* added changelog fragment

* format fix and pull request link added

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

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

Co-authored-by: thetuxkeeper <thetuxkeeper@gmail.com>
2020-11-14 12:33:14 +01:00
patchback[bot]
490495937b Fix iso_extract tests for OpenSuSE (#1296) (#1298)
(cherry picked from commit 07fa7ea409)

Co-authored-by: Felix Fontein <felix@fontein.de>
2020-11-13 21:20:20 +00:00
Felix Fontein
0e7a130ec3 Fix gcp_storage_file lookup plugin (#1284).
(cherry picked from commit 0109310aa2)
2020-11-13 22:06:46 +01:00
Felix Fontein
5239357077 Fix the linode inventory plugin, and the redis and memcached cache plugins (#1281, #1282, #1283).
(cherry picked from commit 75fd32ca55)
2020-11-13 22:06:41 +01:00
patchback[bot]
8cd126be26 Try to fix zypper tests. (#1294) (#1295)
(cherry picked from commit 37c1453601)

Co-authored-by: Felix Fontein <felix@fontein.de>
2020-11-13 20:18:03 +01:00
patchback[bot]
d2e259da4a Tidy up validate-modules ignores for packaging modules (#1289) (#1291)
* fixed validation-modules for plugins/modules/packaging/language/bower.py

(cherry picked from commit deddce02fa)

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2020-11-13 14:04:53 +01:00
patchback[bot]
6bd10adb97 BOTMETA.yml: add a maintainer of pagerduty_change module (#1287) (#1290)
(cherry picked from commit a9346f0e68)

Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>
2020-11-13 13:29:45 +01:00
patchback[bot]
71b63e6a75 Add support for StackScripts to Linode v4 module (#1270) (#1288)
* Add support for StackScripts to Linode v4 module

* Apply suggestions from code review

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

* add changelog fragment

* Add stackscript to example

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

Co-authored-by: rmcintosh <rmcintosh@users.noreply.github.com>
2020-11-13 12:59:28 +01:00
patchback[bot]
1ce00126c5 Adds a module for sending PagerDuty change events. (#1269) (#1285)
* Adds a module for sending PagerDuty change events.

PagerDuty recently released a new feature called change events that behave similar to events that can trigger incidents, except they are used to track code/infrastrucure changes rather than triggering incidents. This change adds a module to easily allow creating change events from ansible deploys.

* Apply suggestions from code review

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

* Update copyright.

* Expand on example usage.

* Make API request with missing data when in check mode.

Just to ensure that we are hitting the correct API endpoint and it is responding as expected.

* Apply suggestions from code review

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

* Clarify lack of idempotency.

* Apply suggestions from code review

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

Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>
Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit 82e33a0ce5)

Co-authored-by: Adam Vaughan <adamjvaughan@gmail.com>
2020-11-13 10:16:14 +01:00
patchback[bot]
011e27caf5 Add OpenBSD pkg_add(1) snapshot support (#965) (#1280)
* Add OpenBSD pkg_add(1) snapshot support

* Fix documentation syntax

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

* Bump version_added

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

* zap one trailing whitespace

The first trailing whitespace is necessary otherwise we cal pkg_add(1)
with '-Im-Dsnap' which is invalid.

* Check build flag in package_present()

* zap one trailing whitespace

The first trailing whitespace is necessary otherwise we cal pkg_add(1)
with '-Im-Dsnap' which is invalid.

* check snapshot/build combination a little earlier

* Update "Force" documentation

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

* Bump version tgo 1.3.0

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

* Add a changelog fragment.

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

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

* Add: mutually exclusiv hint for "build" and add mutually_exclusive

* Re-add build=%s check

Co-authored-by: Felix Fontein <felix@fontein.de>
Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>
(cherry picked from commit ef49950b96)

Co-authored-by: Rafael Sadowski <rafael@sizeofvoid.org>
2020-11-13 06:49:59 +00:00
patchback[bot]
726ea65f4f BOTMETA.yml: add a new maintainer of filesystem module (#1276) (#1279)
(cherry picked from commit 4ea632b4e5)

Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>
2020-11-13 06:28:31 +01:00
patchback[bot]
85307d28e2 Tidy up validate-modules ignores for remote_management/manageiq modules (#1272) (#1275)
* fixed validation-modules for plugins/modules/remote_management/manageiq/manageiq_alert_profiles.py

* fixed validation-modules for plugins/modules/remote_management/manageiq/manageiq_alerts.py

* fixed validation-modules for plugins/modules/remote_management/manageiq/manageiq_group.py

* fixed validation-modules for plugins/modules/remote_management/manageiq/manageiq_policies.py

* partially fixed plugins/modules/remote_management/manageiq/manageiq_provider.py

- this module had way too many validation errors, many involving documenting parameters from scratch, so added types to options and suboptions, but rolled back ignore lines

* fixed validation-modules for plugins/modules/remote_management/manageiq/manageiq_tags.py

* fixed validation-modules for plugins/modules/remote_management/manageiq/manageiq_tenant.py

* fixed validation-modules for plugins/modules/remote_management/manageiq/manageiq_user.py

* fixed validation-modules for plugins/doc_fragments/manageiq.py

* Enabling validation-modules for remote_management/manageiq modules

* Hello 2.9 my old friend, I've come to roll you back again...

(cherry picked from commit 9b593fd46c)

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2020-11-12 09:00:42 +01:00
patchback[bot]
f6fe843a57 Tidy up validate-modules ignores for cloud/google modules (#1265) (#1273)
* fixed validation-modules for plugins/modules/cloud/google/gcdns_record.py

* fixed validation-modules for plugins/modules/cloud/google/gcdns_zone.py

* fixed validation-modules for plugins/modules/cloud/google/gce_eip.py

* fixed validation-modules for plugins/modules/cloud/google/gce_img.py

* fixed validation-modules for plugins/modules/cloud/google/gce_instance_template.py

* fixed validation-modules for plugins/modules/cloud/google/gce_labels.py

* fixed validation-modules for plugins/modules/cloud/google/gce_lb.py

* fixed validation-modules for plugins/modules/cloud/google/gce_mig.py

* fixed validation-modules for plugins/modules/cloud/google/gce_net.py

* fixed validation-modules for plugins/modules/cloud/google/gce_pd.py

* fixed validation-modules for plugins/modules/cloud/google/gce_snapshot.py

* fixed validation-modules for plugins/modules/cloud/google/gce_tag.py

* fixed validation-modules for plugins/modules/cloud/google/gcp_backend_service.py

* fixed validation-modules for plugins/modules/cloud/google/gcp_forwarding_rule.py

* fixed validation-modules for plugins/modules/cloud/google/gcp_healthcheck.py

* fixed validation-modules for plugins/modules/cloud/google/gcp_target_proxy.py

* fixed validation-modules for plugins/modules/cloud/google/gcpubsub_info.py

* fixed validation-modules for plugins/modules/cloud/google/gcpubsub.py

* fixed validation-modules for plugins/modules/cloud/google/gcp_url_map.py

* fixed validation-modules for plugins/modules/cloud/google/gcspanner.py

* fixed validation-modules for plugins/modules/cloud/google/gc_storage.py

* adjust parameter description in gce_eip.py

* fixed validation-modules for plugins/modules/cloud/google/gce.py

* removed extra type definition

* reformatted long lines

* Tidy up validate-modules ignores for cloud/google modules

* gc_storage.py: fixed parameter to be overwrite and alias force, instead of the other way around

* rolled back a number of ignore lines that ansible 2.9 believes to defy sanity

* gce_instance_template.py: the metadata parameter brings no definition whatsoever in argument_spec, causing a number of problems. Rolling back for now.

* Fixes on docs from the PR

(cherry picked from commit 4b26990d8b)

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2020-11-12 08:48:20 +01:00
patchback[bot]
ee04231964 Tidy up validate-modules ignores for cloud/scaleway modules (#1268) (#1274)
* fixed validation-modules for plugins/modules/cloud/scaleway/scaleway_compute.py

* fixed validation-modules for plugins/modules/cloud/scaleway/scaleway_image_facts.py

* fixed validation-modules for plugins/modules/cloud/scaleway/scaleway_image_info.py

* fixed validation-modules for plugins/modules/cloud/scaleway/scaleway_ip_facts.py

* fixed validation-modules for plugins/modules/cloud/scaleway/scaleway_ip_info.py

* fixed validation-modules for plugins/modules/cloud/scaleway/scaleway_ip.py

* fixed validation-modules for plugins/modules/cloud/scaleway/scaleway_lb.py

* fixed validation-modules for plugins/modules/cloud/scaleway/scaleway_security_group_facts.py

* fixed validation-modules for plugins/modules/cloud/scaleway/scaleway_security_group_info.py

* fixed validation-modules for plugins/modules/cloud/scaleway/scaleway_security_group.py

* fixed validation-modules for plugins/modules/cloud/scaleway/scaleway_security_group_rule.py

* fixed validation-modules for plugins/modules/cloud/scaleway/scaleway_server_facts.py

* fixed validation-modules for plugins/modules/cloud/scaleway/scaleway_server_info.py

* fixed validation-modules for plugins/modules/cloud/scaleway/scaleway_snapshot_facts.py

* fixed validation-modules for plugins/modules/cloud/scaleway/scaleway_snapshot_info.py

* fixed validation-modules for plugins/modules/cloud/scaleway/scaleway_sshkey.py

* fixed validation-modules for plugins/modules/cloud/scaleway/scaleway_user_data.py

* fixed validation-modules for plugins/modules/cloud/scaleway/scaleway_volume_facts.py

* fixed validation-modules for plugins/modules/cloud/scaleway/scaleway_volume_info.py

* fixed validation-modules for plugins/modules/cloud/scaleway/scaleway_volume.py

* Enabling validation-modules for cloud/scaleway modules

* Reverted invalid-documentation validations in 2.9

(cherry picked from commit adbf624a42)

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2020-11-12 08:48:07 +01:00
patchback[bot]
e09392e867 added description parameter to create request (#1196) (#1267)
* added description parameter to create request

* added changelog fragment

* Update changelogs/fragments/1196-use_description-in-gitlab-group-creation.yml

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

* added integration test for description in gitlab_group

* per request in the PR, creating separate task for the description issue in the integration test

* replaced deprecated param names with new names

* description should be optional to keep backward compatibility

* Update plugins/modules/source_control/gitlab/gitlab_group.py

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

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2020-11-11 13:50:41 +01:00
patchback[bot]
1b7c49cf56 BOTMETA.yml: add a new maintainer of parted module (#1254) (#1255)
(cherry picked from commit 2b0f7b858e)

Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>
2020-11-10 12:24:42 +00:00
patchback[bot]
e5cddcaf87 BOTMETA.yml: add a maintainer for syslog_json (#1252) (#1253)
(cherry picked from commit 6ecc95980d)

Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>
2020-11-09 11:13:27 +00:00
patchback[bot]
82162b35c4 Add a warning when ansible_key label is not found on a secret. (#31) (#1249) (#1251)
* add a warning when ansible_label is not found on a secret. addresses #30

* Update changelogs/fragments/31-docker-secret.yml

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

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

Backported from 22ba76b4e9

(cherry picked from commit d9e734d662)

Co-authored-by: Felix Fontein <felix@fontein.de>
2020-11-09 08:56:26 +01:00
patchback[bot]
2233c94a6f Fix idempotent issue when using lvol with %VG or %PVS size options and VG is fully allocated (#229) (#1250)
* Fix rounding issues with percentages

Changed the behavior when using %VG or %PVS to make the size_requested an even modulus with the VGs physical extents by rounding down.  This makes the usage of %VG or $PVE idempotent when the calculated size_requested does not end on a physical extent boundary.

* Added ansible changelog fragment.

* Forgot the module in the changelog fragment.

* Added URL to the PR to the changelog fragment.

* Update changelogs/fragments/229_lvol_percentage_fix.yml

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

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

Co-authored-by: JuddTracy-DAS <38507478+JuddTracy-DAS@users.noreply.github.com>
2020-11-09 07:49:37 +00:00
patchback[bot]
eba42c9eb9 Changed parameter name, added aliases for compatibility. (#1244) (#1248)
* Changed parameter name, added aliases for compatibility.

* added changelog fragment

* Update changelogs/fragments/1244-renamed-parameter.yaml

Added markup around parameters names.

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

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

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2020-11-09 07:16:20 +01:00
patchback[bot]
dbb145bc71 lxc_container: fix the type of the 'container_config' parameter (#216) (#1247)
* lxc_container: fix the type of the 'container_config' parameter

* lxc_container: specify the type of elements in 'container_config'

* lxc_container: improve the documentation of the container_config option

* lxc_container: add changelogs fragment for PR 216

* lxc_container: update changelogs fragment for PR 216

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

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

Co-authored-by: montag451 <montag451@laposte.net>
2020-11-08 13:31:21 +01:00
patchback[bot]
373df2ba68 Tidy up validate-modules ignores for rackspace modules (#1242) (#1245)
* fixed validation-modules for plugins/doc_fragments/rackspace.py

* fixed validation-modules for plugins/modules/cloud/rackspace/rax.py

* fixed validation-modules for plugins/modules/cloud/rackspace/rax_cbs.py

* fixed validation-modules for plugins/modules/cloud/rackspace/rax_cbs_attachments.py

* fixed validation-modules for plugins/modules/cloud/rackspace/rax_cdb_database.py

* fixed validation-modules for plugins/modules/cloud/rackspace/rax_cdb.py

* fixed validation-modules for plugins/modules/cloud/rackspace/rax_cdb_user.py

* fixed validation-modules for plugins/modules/cloud/rackspace/rax_clb_nodes.py

* fixed validation-modules for plugins/modules/cloud/rackspace/rax_clb.py

* fixed validation-modules for plugins/modules/cloud/rackspace/rax_clb_ssl.py

* fixed validation-modules for plugins/modules/cloud/rackspace/rax_dns.py

* fixed validation-modules for plugins/modules/cloud/rackspace/rax_dns_record.py

* fixed validation-modules for plugins/modules/cloud/rackspace/rax_facts.py

* fixed validation-modules for plugins/modules/cloud/rackspace/rax_files.py

* fixed validation-modules for plugins/modules/cloud/rackspace/rax_files_objects.py

* fixed validation-modules for plugins/modules/cloud/rackspace/rax_identity.py

* fixed validation-modules for plugins/modules/cloud/rackspace/rax_keypair.py

* fixed validation-modules for plugins/modules/cloud/rackspace/rax_meta.py

* fixed validation-modules for plugins/modules/cloud/rackspace/rax_mon_alarm.py

* fixed validation-modules for plugins/modules/cloud/rackspace/rax_mon_check.py

* fixed validation-modules for plugins/modules/cloud/rackspace/rax_mon_entity.py

* fixed validation-modules for plugins/modules/cloud/rackspace/rax_mon_notification_plan.py

* fixed validation-modules for plugins/modules/cloud/rackspace/rax_mon_notification.py

* fixed validation-modules for plugins/modules/cloud/rackspace/rax_network.py

* fixed validation-modules for plugins/modules/cloud/rackspace/rax_queue.py

* fixed validation-modules for plugins/modules/cloud/rackspace/rax_scaling_group.py

* fixed validation-modules for plugins/modules/cloud/rackspace/rax_scaling_policy.py

* Enabling validation-modules for rackspace modules

* Removed test in rax.py

* Added markup to items in list

* rax_monm_check.py: moved choices doc to description for check_type

As the argument_spec does not contain the "choices" spec, adjusting that in the docs

* rax_monm_check.py: a number of things missing in docs, fixed

(cherry picked from commit af4474efd7)

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2020-11-08 10:53:39 +01:00
patchback[bot]
4cd7476604 odbc: adding parameter to disable auto-commit (#1137) (#1139) (#1240)
* Adding parameter to disable auto-commit (#1137)

* Update plugins/modules/database/misc/odbc.py

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

* Update plugins/modules/database/misc/odbc.py

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

* Update plugins/modules/database/misc/odbc.py

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

* Update plugins/modules/database/misc/odbc.py

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

* Adding odbc changelog fragment

* Picking a better word while fixing a typo

* Adding additional wording per felixfontein suggestion

* Update wording in plugins/modules/database/misc/odbc.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>
(cherry picked from commit 6441814f8b)

Co-authored-by: John Westcott IV <32551173+john-westcott-iv@users.noreply.github.com>
2020-11-06 21:18:59 +01:00
patchback[bot]
24f973a9d1 InfluxDB_database: Make the path argument conditional on the InfluxDB version (#1126) (#1236)
Co-authored-by: Mathias Ettinger <mathias.ettinger@viveris.f>
(cherry picked from commit ce0f327875)

Co-authored-by: Mathias Ettinger <mathias@mettinger.fr>
2020-11-06 13:48:18 +01:00
Amin Vakil
f1ca1ccd89 [PR #850/d6f5029 backport][stable-1] proxmox, proxmox_kvm: Deprecate hard-coded defaults (#1205)
* proxmox, proxmox_kvm: Deprecate hard-coded defaults (#850)

* Remove hard-coded defaults

* Remove hard-coded defaults in proxmox.py

* Add changelog

* Remove defaults in proxmox docs

* Remove more default values

* Remove defaults in doc proxmox_kvm

* Restore default=True to onboot

* Add unspecified back to format

* correct changelog format and grammar

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

* improve changelog

* Fix changelog formatting

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

* Fix changelog formatting

* Deprecate before behaviour change

* Change changelog

* Remove unnecessary ignored sanity tests, fix

* Fix

* Better mention it too often than too little :)

* Deprecate in version 4.0.0 instead of 2.0.0

* Fix changelog

* Fix

* Remove none values

* Improve documentation as suggessted by felixfontein

* fix changelog

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

* Remove default value in force in proxmox_kvm

* Add description to force in proxmox_kvm

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

* Revert the breaking_change

Co-authored-by: Felix Fontein <felix@fontein.de>
2020-11-06 13:16:15 +01:00
patchback[bot]
0564a2239f Clarify COLLECTIONS_PATH value when using clone (#1234) (#1235)
(cherry picked from commit c85aa96177)

Co-authored-by: Matthew Davis <7035647+mdavis-xyz@users.noreply.github.com>
2020-11-06 06:57:11 +01:00
patchback[bot]
a3a33cb019 Tidy up validate-modules ignores for notification modules (#1229) (#1232)
* fixed validation-modules for plugins/modules/notification/bearychat.py

* fixed validation-modules for plugins/modules/notification/campfire.py

* fixed validation-modules for plugins/modules/notification/catapult.py

* fixed validation-modules for plugins/modules/notification/flowdock.py

* fixed validation-modules for plugins/modules/notification/grove.py

* fixed validation-modules for plugins/modules/notification/hipchat.py

* fixed validation-modules for plugins/modules/notification/irc.py

* fixed validation-modules for plugins/modules/notification/jabber.py

* fixed validation-modules for plugins/modules/notification/logentries_msg.py

* fixed validation-modules for plugins/modules/notification/mail.py

* fixed validation-modules for plugins/modules/notification/matrix.py

* fixed validation-modules for plugins/modules/notification/mattermost.py

* fixed validation-modules for plugins/modules/notification/mqtt.py

* fixed validation-modules for plugins/modules/notification/nexmo.py

* fixed validation-modules for plugins/modules/notification/office_365_connector_card.py

* fixed some docs issues in plugins/modules/notification/pushbullet.py, but cannot remove the ignore lines yet

* fixed validation-modules for plugins/modules/notification/pushover.py

* fixed some docs issues in plugins/modules/notification/rocketchat.py, but cannot remove all ignore lines yet

* fixed validation-modules for plugins/modules/notification/say.py

* fixed validation-modules for plugins/modules/notification/sendgrid.py

* fixed validation-modules for plugins/modules/notification/slack.py

* fixed validation-modules for plugins/modules/notification/syslogger.py

* fixed validation-modules for plugins/modules/notification/telegram.py

* fixed validation-modules for plugins/modules/notification/twilio.py

* fixed validation-modules for plugins/modules/notification/typetalk.py

* Enabling validation-modules for modules in: notification

* removed naughty trailing space

(cherry picked from commit 24f780ec9a)

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2020-11-05 07:40:30 +01:00
patchback[bot]
399c28c11e proxmox_template download appliance templates (#1046) (#1230)
* proxmox_template download appliance templates

* Update changelogs/fragments/proxmox_template-appliance-download.yml

added pull request link

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

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

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

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

Co-authored-by: Tristan Le Guern <tleguern@bouledef.eu>

* Update proxmox_template.py

grammar

* removed debug message

Co-authored-by: Tobias Lindenberg <me@bloomcake.de>
Co-authored-by: Felix Fontein <felix@fontein.de>
Co-authored-by: Tristan Le Guern <tleguern@bouledef.eu>
(cherry picked from commit 890ff574c3)

Co-authored-by: Tobias Lindenberg <tobias@lindenberg.pm>
2020-11-05 06:49:07 +01:00
patchback[bot]
18da4d22f8 Enabling validation-modules for system modules (#1212) (#1225)
* fixed validation-modules for aix_devices.py

* fixed validation-modules for aix_filesystem.py

* fixed validation-modules for aix_inittab.py

* fixed validation-modules for aix_lvg.py

* fixed validation-modules for aix_lvol.py

* fixed validation-modules for awall.py

* fixed validation-modules for dconf.py

* fixed validation-modules for gconftool2.py

* fixed validation-modules for interfaces_file.py

* fixed validation-modules for java_keystore.py

* fixed validation-modules for kernel_blacklist.py

* fixed validation-modules for plugins/modules/system/lbu.py

* fixed validation-modules for plugins/modules/system/locale_gen.py

* fixed validation-modules for plugins/modules/system/lvg.py

* fixed validation-modules for plugins/modules/system/lvol.py

* fixed validation-modules for plugins/modules/system/mksysb.py

* fixed validation-modules for plugins/modules/system/modprobe.py

* fixed validation-modules for plugins/modules/system/nosh.py

* fixed validation-modules for plugins/modules/system/open_iscsi.py

* fixed validation-modules for plugins/modules/system/openwrt_init.py

* fixed validation-modules for plugins/modules/system/osx_defaults.py

* fixed validation-modules for plugins/modules/system/pamd.py

* fixed validation-modules for plugins/modules/system/pam_limits.py

* fixed validation-modules for plugins/modules/system/parted.py

* fixed validation-modules for plugins/modules/system/puppet.py

* fixed validation-modules for plugins/modules/system/python_requirements_info.py

* fixed validation-modules for plugins/modules/system/runit.py

the parameter "dist" is not used anywhere in the module

* fixed validation-modules for plugins/modules/system/sefcontext.py

* fixed validation-modules for plugins/modules/system/selogin.py

* fixed validation-modules for plugins/modules/system/seport.py

* fixed validation-modules for plugins/modules/system/solaris_zone.py

* fixed validation-modules for plugins/modules/system/syspatch.py

* fixed validation-modules for plugins/modules/system/vdo.py

* fixed validation-modules for plugins/modules/system/xfconf.py

* removed ignore almost all validate-modules lines in system

* removed unnecessary validations, per shippable test

* kernel_blacklist: keeping blacklist_file as str instead of path

* mksysb: keeping storage_path as str instead of path

* pam_limits: keeping dest as str instead of path

* rollback on adding doc for puppet.py legacy param

* rolledback param seuser required in selogin module

* rolledback changes in runit

* rolledback changes in osx_defaults

* rolledback changes in aix_defaults

(cherry picked from commit 1202d034b3)

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2020-11-04 09:21:51 +01:00
patchback[bot]
d4435b0b8d Remove redundant aliases from NIOS modules (#1223) (#1224)
* remove redundant alias

* remove redundant aliases

* remove redundant aliases

* remove parameter-alias-self for nios_*

* add fragment

* Update changelogs/fragments/1223-nios-remove-redundant-aliases.yml

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

* Update plugins/modules/net_tools/nios/nios_host_record.py

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

* remove parameter-alias-self for nios_host_record

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

Co-authored-by: Zach Peterson <35381531+zjpeterson@users.noreply.github.com>
2020-11-04 08:31:53 +01:00
patchback[bot]
c4983f9b90 Fix callback_log_plays tests for current devel branch of ansible-base. (#1221) (#1222)
(cherry picked from commit 549f228e1c)

Co-authored-by: Felix Fontein <felix@fontein.de>
2020-11-03 14:26:43 +01:00
patchback[bot]
0005df8910 postgresql_user: fix documentation formatting (#1219) (#1220)
* postgresql_user: fix documentation formatting

* fix

(cherry picked from commit 3b9be01d5b)

Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>
2020-11-03 14:55:28 +03:00
patchback[bot]
130709348d Remove 'authors' from BOTMETA.yml (#1203) (#1214)
* Remove 'authors' from BOTMETA.yml

* fix

* fix suggested

(cherry picked from commit fbc56c5a1d)

Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>
2020-11-01 20:57:40 +01:00
patchback[bot]
901bca58bb Enabling validation-modules for web_infrastructure modules (#1200) (#1211)
* fixed validation-modules for apache2_mod_proxy.py

* fixed validation-modules for apache2_module.py

* fixed validation-modules for deploy_helper.py

The ignore lines were put back in place because
add_file_common_args=True is used and the module inherits a number of
options that do not show up in the documentation (nor should they).

* fixed validation-modules for ejabberd_user.py

* fixed validation-modules for gunicorn.py

* fixed validation-modules for htpasswd.py

* fixed validation-modules for jenkins_job.py

* fixed validation-modules for jenkins_job_info.py

* fixed validation-modules for jenkins_plugin.py

* fixed validation-modules for jenkins_script.py

* fixed validation-modules for jira.py

* fixed validation-modules for nginx_status_facts.py

* fixed validation-modules for rundeck_acl_policy.py

* fixed validation-modules for rundeck_project.py

* fixed validation-modules for supervisorctl.py

* fixed validation-modules for taiga_issue.py

* fixed pylint mistake in plugins/modules/web_infrastructure/jenkins_job_info.py

* removed ignore lines for almost-all web_infrastructure modules

* rolled back ignore lines for nested sophos_utm modules that were not adjusted

* Removed doc-missing-type from ignore-2.11.txt for deploy_helper and jenkins_plugin

* When adding lines back to ignore files, we added more than it was before. Removing.

* Rolled back deprecation line in ignore-2.9.txt for nginx_status_facts

* Rolled back yet another line in ignore-2.9.txt for nginx_status_facts

* Fixed argument_spec and docs for crypt_scheme parameter in htpasswd, per PR

* Added extends_documentation_fragment:files to deploy_helper and jenkins_plugin

* Removed long-deprecated option params from jenkins_plugin, removed validate-modules lines from ignore files for that module

* Update plugins/modules/web_infrastructure/htpasswd.py

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

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

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2020-10-31 14:28:15 +01:00
patchback[bot]
5a826a5cb7 Unbreak beadm module (#1105) (#1210)
* Unbreak beadm module

* Add a changelog fragment

* Module beadm.py: remove regex, use split() everywhere, fix array indexes.

* Fix typos

* Change array indexes for BE name - according to Oracle documents, the name of BE is in the first column of beadm output on Solaris.

* Add 'None' checks in beadm.py

(cherry picked from commit 20ca01e486)

Co-authored-by: Пётр <peter@flytrace.com>
2020-10-31 14:09:43 +01:00
patchback[bot]
924f18535a Add support for "reconfigure" option for terraform init (#823) (#1209)
* Add support for extra options for terraform init

* Add missing var declaration

* feat: add changelog fragment

* feat: switch from an init_extra_args global option to an init_reconfigure specific option

* Update changelogs/fragments/823-terraform_init_reconfigure.yaml

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

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

Co-authored-by: Damien Guihal <dguihal@gmail.com>
2020-10-30 21:04:08 +01:00
patchback[bot]
be27bf1eae proxmox: ignore QEMU templates altogether (#1185) (#1208)
* proxmox: ignore QEMU templates altogether

* add changelog fragment

* add test case

* Update changelogs/fragments/1185-proxmox-ignore-qemu-templates.yml

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

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

Co-authored-by: Krzysztof Dąbrowski <krzysdabro@live.com>
2020-10-30 20:53:06 +01:00
patchback[bot]
29819e04ec Add TCP healthcheck support for services registered by consul module (#1144) (#1202)
* Add support for consul tcp health check

* Fix consul tcp example

* Remove trailing spaces

* Add changelog fragment

* Add format in description

* Use regex for tcp

* Review fix

(cherry picked from commit e13ca30e01)

Co-authored-by: Dmatrix <Dimasebakovgoo@gmail.com>
2020-10-30 06:47:59 +01:00
patchback[bot]
bf9a6c08d0 added russoz as maintainer of xfconf (#1198) (#1201)
(cherry picked from commit 7f5c668433)

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2020-10-30 06:33:58 +01:00
patchback[bot]
6708ee1afd Remove ansible.posix dependency (#1157) (#1191)
* Vendor plugins/module_utils/mount.py from ansible.posix, and drop ansible.posix dependency (except for testing).

* Add ignore.txt entries.

* Install test requirements conditionally.

* Apply suggestions from code review

Co-authored-by: John R Barker <john@johnrbarker.com>

* Bump to major changes.

Co-authored-by: John R Barker <john@johnrbarker.com>
(cherry picked from commit 20f470cc64)

Co-authored-by: Felix Fontein <felix@fontein.de>
2020-10-28 20:57:07 +01:00
patchback[bot]
88bd8fc7ea OpenBSD Syspatch: Apply patches by default. Minor module cleanup (#360) (#1189)
* Apply patches by default. Other minor cleanup

* syspatch: Adding changelog and deprecating redundant apply argument

* Update changelogs/fragments/360_syspatch_apply_patches_by_default.yml

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>
(cherry picked from commit b7713830dc)

Co-authored-by: Andrew Klaus <andrew@aklaus.ca>
2020-10-28 07:21:19 +01:00
patchback[bot]
5d0a0d27e5 Fix lang issue on zypper absent (#1175) (#1187)
* Fix lang issue on zypper absent

* Add fragment changelog

* Update changelogs/fragments/1175-zypper-absent-lang.yml

Some outfit

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

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

Co-authored-by: Laurent G <xenlaurent@hotmail.com>
2020-10-28 06:47:01 +01:00
patchback[bot]
d74680a3c6 Resolve homebrew and homebrew_cask package name validation issues (#1038) (#1188)
Add basic regression tests
Add changelog
Rename _create_regex_group to better suit function
Fix '-' use in Homebrew validation

(cherry picked from commit 4c379bd3b2)

Co-authored-by: MichaelWasher <mwasher@redhat.com>
2020-10-28 06:46:35 +01:00
patchback[bot]
19a7aa462b docker_container: add device_requests option (#1119) (#1186)
* docker_container: add device_requests option.

* Fix copy'n'paste mistake.

* Fix failure test.

* Added example.

* Adjust tense.

(cherry picked from commit 8670eff750)

Co-authored-by: Felix Fontein <felix@fontein.de>
2020-10-27 22:43:25 +01:00
patchback[bot]
176c9a90ca infoblox inventory script: Use stderr, and allow use of environment for config (#436) (#1183)
* Use stderr, and allow use of environment for config

Originally from https://github.com/ansible/ansible/pull/49685

* Create 436-infoblox-use-stderr-and-environment-for-config.yaml

* Update changelogs/fragments/436-infoblox-use-stderr-and-environment-for-config.yaml

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

* Update scripts/inventory/infoblox.py

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

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

Co-authored-by: Jason Lingohr <lingfish@users.noreply.github.com>
2020-10-27 06:11:43 +01:00
patchback[bot]
c4e93b0b5f filesystem: fix 355 state absent (#1149) (#1184)
* add support for filesystem removal (fix #355)

- Add 'state' option, defaults to 'present'.
- When state=absent, ignore other options (even 'dev' if the device
  doesn't exist)

* test filesystem state=absent (+ check_mode + idempotency)

* fix doc-required-mismatch

* add changelog fragment

* fix blkid return code

* ext4dev may be deprecated

* base checks on UUID instead

* Update changelogs/fragments/1149-filesystem-fix-355-state-absent.yml

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

* Update plugins/modules/system/filesystem.py (version_added)

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

* use array for new run_command() calls; do not wipefs if no fs found

* use dd as a fallback

* do not use bare 'except' (pep8)

* force string type

* use dd anyway (wipefs not supported everywhere, possibly buggy with vfat, etc.)

* do not truncate regular files; update changelog fragment

* doc: update state description and an example; notice check_mode support

* do not wipe mounted fs, fail instead

* back to wipefs implementation

* update test's main conditions

* update changelog fragment

* explicit types

* fail state=absent on freebsd

* remove doc-missing-type exceptions (2.9, 2.10, 2.11)

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

Co-authored-by: quidame <quidame@poivron.org>
2020-10-27 05:47:47 +01:00
patchback[bot]
08831e193f Add getbinpkgonly (-G) to portage (#1169) (#1182)
* Add getbinpkgonly (-G) to portage

* version_added for getbinpkgonly

* Format description nicely, add the mutually exclusive nature of the 'pkg' options, and correct usepkgonly

* Changelog fragement

* Formatting

* Update changelogs/fragments/1169-getbinpkgonly.yaml

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

* Remove all exclusiveness, portage makes no such restrictions

Co-authored-by: Mike Williams <mike.williams@sectigo.com>
Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit 0b13fd2c76)

Co-authored-by: Mike Williams <7595658+gaima8@users.noreply.github.com>
2020-10-26 21:08:04 +01:00
patchback[bot]
6ea7616541 Issue #1179: Fix v2 composer require idempotence (#1180) (#1181)
* Issue #1179: Add new statement to composer require changed check for v2.

* Issue #1179: Add changelog fragment.

(cherry picked from commit 19fdfcf0b3)

Co-authored-by: Jeff Geerling <geerlingguy@mac.com>
2020-10-26 19:54:18 +01:00
patchback[bot]
34c164dc78 Improve docker test setups (#1161) (#1174)
* Improve readability.

* Move common code to new file.

(cherry picked from commit 167153bff5)

Co-authored-by: Felix Fontein <felix@fontein.de>
2020-10-26 08:52:09 +00:00
patchback[bot]
2ff06d2fdf postgresql modules: Fix documentation of trust_input parameter (#1170) (#1172)
* Fix yes/no typos

* Further doc improvements for consistency

(cherry picked from commit 9aeac26583)

Co-authored-by: Peter Zahemszky <29452238+pzahemszky@users.noreply.github.com>
2020-10-26 10:32:34 +03:00
patchback[bot]
3a69dd949d Fixed django_manage markup in docs (#1154) (#1173)
* Fixed django_manage markup in docs

* Update plugins/modules/web_infrastructure/django_manage.py

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

* Full validation in sanity-check

- removed restrictions from the tests/sanity/ignore-*.txt for django_manage
- adjusted documentation and code accordingly

* typo

* ... and added the necessary removed_from_collection='community.general'

* Update plugins/modules/web_infrastructure/django_manage.py

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

* Update plugins/modules/web_infrastructure/django_manage.py

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

* Update plugins/modules/web_infrastructure/django_manage.py

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

* Update plugins/modules/web_infrastructure/django_manage.py

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

* Added changelog fragment

* Documentation sentence lacking period, as pointed in the PR.

* Update plugins/modules/web_infrastructure/django_manage.py

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

* Update changelogs/fragments/1154-django_manage-docs.yml

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

* Update changelogs/fragments/1154-django_manage-docs.yml

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

* Removed the markup for 'shebang' in the docs.

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

Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
2020-10-26 08:22:10 +01:00
patchback[bot]
82c79e9a06 Add snopoke as monit maintainer. (#1164) (#1166)
(cherry picked from commit 86b7efaf06)

Co-authored-by: Felix Fontein <felix@fontein.de>
2020-10-23 15:00:55 +02:00
patchback[bot]
96a970475f monit: fix module detection of monitored process state (#1107) (#1163)
* refactor and test

* require version >= 5.21.0

Prior to this version the status output was different

* python version compatability

* use exception classes from utils

* modify monit to use 'status' output instead of 'summary' output

The summary output is a fixed width table which truncates the
contents and prevents us from parsing the actual status of the
program.

* add integration tests + fixes

* remove unused handlers in monit integration test

* fix lint

* add '__metaclass__ = type' to integration python files

* raise AttributeError

* simplify status

* lint: add type to parameter docs

* remove lint ignore

* move monit process config into main file

* specify path to monit PID file

* set config location based on os_family

* create required directories

* update aliases to set group and skips

* add changelog

* add author

* add types to docs

* add EPEL repo

* custom vars for centos-6

* uninstall EPEL

* support older versions

* wait for status to change before exiting

* use 'validate' to force status updates

* handle 'execution failed'

* better status output for errors

* add more context to failure + standardize

* don't check rc for validate

* legacy string format support

* add integration test for 'reloaded' and 'present'

* don't wait after reload

* lint

* Revert "uninstall EPEL"

This reverts commit 4d548718d0.

* make 'present' more robust

* Apply suggestions from code review

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

* add license header

* drop daemon.py and use python-daemon instead

* skip python2.6 which is not supported by python-daemon

* refactor test tasks for reuse

* cleanup files after test

* lint

* start process before enabling monit

This shouldn't be necessary but I'm adding it in the hopes
it will make tests more robust.

* retry task

* attempt to rescue the task on failure

* fix indentation

* ignore check if rescue ran

* restart monit instead of reload

Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>
(cherry picked from commit 8de1c0c205)

Co-authored-by: Simon Kelly <skelly@dimagi.com>
2020-10-23 14:01:01 +02:00
patchback[bot]
f3e07723cd Try to make pids test more stable. (#1160) (#1162)
(cherry picked from commit 6d960e9e10)

Co-authored-by: Felix Fontein <felix@fontein.de>
2020-10-23 11:17:05 +01:00
patchback[bot]
9f93219611 Add include_tags to datadog_monitor (#409) (#1158)
* Add include_tags to datadog_monitor

* Incorporate PR feedback

* Add changelog fragment

* Update changelogs/fragments/409-datadog-monitor-include-tags.yaml

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

* Update plugins/modules/monitoring/datadog/datadog_monitor.py

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

Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>
Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit 307c54750f)

Co-authored-by: Ty Martin <ty.w.martin@gmail.com>
2020-10-23 07:48:41 +02:00
patchback[bot]
922dd0fc10 nmcli: module refactor (#1113) (#1159)
* * Refactor `nmcli` module to use consistent parameters when creating/modifying connections and detecting changes.
* Keep DNS list arguments as lists internally.
* Remove duplicated code where practical.

* DBus and GObject dependencies are not necessary.

* Update changelog fragment.

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

* Update changelog fragment.

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

* Use identity operator instead of equality for type comparison.

* Don't start changelog notes with a capital letter.

* * Have `settings_type` return `str` by default instead of `None`.
* Improve variable naming, use `convert_func` instead of `type_cast`.

* Revert new feature of allowing ethernet types as slaves.

* Bring back `list_connection_info` to list all connections with `nmcli con show`.

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

Co-authored-by: Justin Bronn <jbronn@gmail.com>
2020-10-23 07:48:29 +02:00
patchback[bot]
a3a0c5c3fd Use correct state. (#1150) (#1155)
(cherry picked from commit 7caba156fa)

Co-authored-by: Felix Fontein <felix@fontein.de>
2020-10-22 14:45:50 +02:00
patchback[bot]
a20e221d6f Fix changelog fragment (#1152) (#1153)
(cherry picked from commit 39a23a05f0)

Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>
2020-10-22 10:44:07 +03:00
patchback[bot]
d0a9ced474 Update postgresql_pg_hba.py (#1124) (#1151)
* Update postgresql_pg_hba.py

Fixes #1108

* Create changelog fragment for pull 1124

* Adding a unit test for pg_hba

(cherry picked from commit 3a5669991f)

Co-authored-by: Sebastiaan Mannem <sebastiaan.mannem@enterprisedb.com>
2020-10-21 22:54:02 +02:00
patchback[bot]
b035084caa Update BOTMETA.yml (#1132) (#1146)
(cherry picked from commit 0f00c65d2c)

Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>
2020-10-21 08:40:19 +00:00
patchback[bot]
b56857932e docker_login: fix internal config file storage to handle credentials for more than one registry (#1118) (#1145)
* docker_login: fix internal config file storage to handle credentials for more than one registry

* Improve setup for docker registry.

* Add second registry frontend. Add tests for #1118.

* Fix cleanup.

(cherry picked from commit 16baefd167)

Co-authored-by: Felix Fontein <felix@fontein.de>
2020-10-21 08:39:57 +02:00
patchback[bot]
7da1f3ffea iptables_state: fix race condition between module and its action plugin (#1140) (#1143)
* fix race condition between module and its action plugin

See https://github.com/ansible-collections/community.general/issues/1136.
Also remove irrelevant/unneeded display.v() and display.warning() around
connection reset.

* do not check for cookie if not in async mode

* add changelog fragment

(cherry picked from commit 3bc31f286e)

Co-authored-by: quidame <quidame@poivron.org>
2020-10-20 22:46:12 +02:00
patchback[bot]
c826a81b40 Added client_cert and client_key to the maven_artifact module. (#1127) (#1142)
* Added client_cert and client_key to the maven_artifact module.

* Changelog fragment for PR-1127

* Apply suggestions from code review

Changes suggested in review. Match argument_spec values to documentation values.

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

* Update changelogs/fragments/1127-maven_artifact_client_cert.yml

Documentation formatting suggestion.

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

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

Co-authored-by: mdaves93 <mdavies.23.93@gmail.com>
2020-10-20 20:27:23 +02:00
patchback[bot]
af4f1f727d Make sure frenck is no longer accidentally contacted (#1133) (#1134)
* Make sure frenck is no longer accidentally contacted.

* More precise.

frenck explicitly requested in https://github.com/ansible-collections/community.general/pull/358
to not be contacted about this module ("I don't use Ansible anymore. Haven't contributed in years
and don't plan on doing so." / "I'm no supporting this module or project anymore.").

(cherry picked from commit 55629b311a)

Co-authored-by: Felix Fontein <felix@fontein.de>
2020-10-20 14:04:27 +02:00
patchback[bot]
5571a0cdf8 cache/redis: feature redis sentinel (#1055) (#1130)
* FEATURE: cache/redis: add redis sentinel support

* FEATURE: add changelog fragment

* STYLE: fix sanity

* DOCS: update fragment, specify redis cache plugin

* STYLE: spelling

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

* STYLE: spelling

* FIX: import to_native

* FIX: remove kw args to prevent secrets leak

Co-authored-by: Benjamin Pereto <benjamin@sandchaschte.ch>
Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>
(cherry picked from commit a6c950a44b)

Co-authored-by: Benjamin Pereto <dev@sandchaschte.ch>
2020-10-20 10:00:16 +02:00
patchback[bot]
bb2ad10eef postgresql_query: add query_all_results ret value (#886) (#1131)
* postgresql_query: add query_all_results ret value

* add changelog fragment

* fix CI

* fix doc

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

Co-authored-by: Tobias Birkefeld <t@craxs.de>

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

Co-authored-by: Tobias Birkefeld <t@craxs.de>

* fix doc

Co-authored-by: Tobias Birkefeld <t@craxs.de>
(cherry picked from commit 8267fd3809)

Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>
2020-10-20 10:37:40 +03:00
patchback[bot]
788dc4bc23 redis: use regexp to check if the value matches expected form (#1079) (#1129)
* Use regexp to check if the value matches expected form

regexp should match values like:
- 1B
- 10MB
- 10mb

* Added changelog entry

* Update changelogs/fragments/1079-redis-use-regexp-to-check-if-the-value-matches-expected-form.yaml

Co-authored-by: Amin Vakil <info@aminvakil.com>

Co-authored-by: Amin Vakil <info@aminvakil.com>
(cherry picked from commit bcfd648855)

Co-authored-by: Robbert Müller <mjrider@users.noreply.github.com>
2020-10-20 07:31:20 +02:00
patchback[bot]
705118247d Update BOTMETA.yml (#1122) (#1125)
(cherry picked from commit 6c1d014044)

Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>
2020-10-19 18:15:15 +02:00
patchback[bot]
1b579dfdc2 new module nomad_job & nomad_job_info (#867) (#1121)
* nomad_job module

* Delete nomad_job.py

* new module nomad_job

* fix symlink

* disable test with centos6 , not supported

* fix centos unsupported

* fix

* requested changes doc

* disable freebsd ci

* requested change docs + check_mode

* lint

* fix syntax

* update docs

* doc fix

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

* Update nomad_job.py

fix docs + ssl true default

* Update nomad_job.yml

disable ssl ci

* nomad_job_info

* Update nomad_job_info.py

fix token nomad job info

* Update nomad_job.py

idempotence + check_mode plan result

* Update nomad_job.py

fail if no id with json content

* Update nomad_job.yml

ci idempotence + check_mode , nomad_job and nomad_job_info

* Update nomad_job.yml

fix ci

* Update main.yml

add kill nomad ci

* Update main.yml

always kill

* fix check mode delete job

* ci with delete and check_mode

* lint

* force start in first deploy

* 12.4 nomad

* fix version nomad

* fix ci assert

* fix ci

* fix ci

* lint

* fix version job id None, import os unused

* lint job_info

* Update aliases

* docs frag + info refacto

* lint

lint

* ci

* jmespath

* fix ci

Co-authored-by: FERREIRA Christophe <christophe.ferreira@cnaf.fr>
Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit b2e075e6d3)

Co-authored-by: chris93111 <christopheferreira@ymail.com>
2020-10-19 14:14:13 +02:00
patchback[bot]
e3e3682eb3 move conversion of data to json in slack API handling (#1101) (#1120)
* move conversion of data to json in slack API handling

at one point in do_notify_slack, we do operations on the payload
variable assuming it's a dict, but it's not: it's a json encoded string.

it's useful to operate on the payload as a dict rather than a string, so
solve this problem by moving the jsonify call to right before sending
the payload to the slack API.

fixes #1097

* add changelog fragment

* Update changelogs/fragments/1101-slack-ts-fix.yaml

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

* return payload as a json encoded string for backwards compatibility

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

Co-authored-by: Andreas Lutro <anlutro@gmail.com>
2020-10-19 11:33:03 +03:00
patchback[bot]
3c6e84b21c update django_manage migrate docs to include database param (#1072) (#1115)
* update django_manage migrate docs to include database param

* Update plugins/modules/web_infrastructure/django_manage.py

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

Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>
(cherry picked from commit 135cc1d337)

Co-authored-by: Paul Brown <paul90brown@gmail.com>
2020-10-17 15:45:21 +03:00
patchback[bot]
28ec0b07e9 Add briantist as a maintainer for the hashi_vault lookup. (#1111) (#1114)
(cherry picked from commit a1b7949fa5)

Co-authored-by: Felix Fontein <felix@fontein.de>
2020-10-17 10:10:45 +02:00
patchback[bot]
22e0fa03b2 [capabilities] fix for a newer versions of libcap (#1061) (#1110)
* [capabilities] fix for a newer versions of libcap

fixes: #993

* Minor correction for files without caps set.

PS: side note, getcap (per sources) does not set non-zero return code,
even for files which are not found (i.e. wrong filename).

* add changelog fragment

* review/suggested changes

* change comment to explicitly state stderr vs output

(cherry picked from commit 07d123a71a)

Co-authored-by: Anatoly Pugachev <matorola@gmail.com>
2020-10-16 21:23:43 +02:00
patchback[bot]
b3cac071fa BOTMETA.yml cleanup (#1057) (#1109)
* BOTMETA.yml cleanup

(cherry picked from commit 72a1e805b4)

Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>
2020-10-16 21:02:21 +02:00
patchback[bot]
ebb9d8a6fa postgresql_ext: fix module's failing when available ext versions contain a pure string (#1099) (#1104)
* postgresql_ext: fix module's failing when available ext versions contain a pure string

* Add unit tests

* Add changelog fragment

* fix

(cherry picked from commit 398421a9d1)

Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>
2020-10-16 12:15:54 +03:00
patchback[bot]
f8fcc827cd iso_create: Error handling while importing Pycdlib (#1090) (#1102)
(cherry picked from commit 7f1e26167a)

Co-authored-by: Abhijeet Kasurde <akasurde@redhat.com>
2020-10-16 08:13:43 +02:00
patchback[bot]
f9ac30a531 solaris_zone: fix zone configuration with python3 (#1082) (#1096)
* * Explicitly open up temporary file in text mode.
* Add test for `solaris_zone` creation.

* Update changelog fragment.

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

* Add tests for zone deletion and invalid zone names.

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

Co-authored-by: Justin Bronn <jbronn@gmail.com>
2020-10-15 09:52:14 +02:00
patchback[bot]
efa884b64a postgresql_info: add in_recovery return value to show if a service in recovery mode or not (#1091) (#1093)
* postgresql_info: add in_recovery return value to show if a service is in recovery mode or not

* add changelog fragment

* fix sanity

(cherry picked from commit da7f9ffc3f)

Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>
2020-10-14 14:59:21 +03:00
patchback[bot]
ee8f87412a postgresql_ext: sort list of available versions (#1078) (#1084)
* sort list of available versions

If `version == 'latest'` then the version is set to `available_versions[-1]` however `available_versions` was not previously sorted so the ordering was the natural order of the `pg_available_extension_versions` view.

* remove unnecessary lambda

* create changelog fragment for #1078

* add PR link to changelog fragment

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

Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>
(cherry picked from commit 159f38f4f2)

Co-authored-by: Simon Kelly <skelly@dimagi.com>
2020-10-13 14:53:17 +03:00
patchback[bot]
2cb3cec659 kubevirt: Re-enable unit tests (#1070) (#1075)
Fixes: #1064

Signed-off-by: Abhijeet Kasurde <akasurde@redhat.com>
(cherry picked from commit f7656ac0d3)

Co-authored-by: Abhijeet Kasurde <akasurde@redhat.com>
2020-10-12 12:41:36 +02:00
patchback[bot]
6092cd89bc cache/redis: make keyset keyname configurable (#1036) (#1074)
* FEATURE: make ansible_cache_keys name configurable

* REFACTOR: rename cache_keys to keyset

* FEATURE: add changelog fragment

* Update changelogs/fragments/1036-redis-cache-keyset-name.yaml

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

* Set version_added in plugins/cache/redis.py

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

Co-authored-by: Benjamin Pereto <benjamin@sandchaschte.ch>
Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit 873f1fb7fd)

Co-authored-by: Benjamin Pereto <dev@sandchaschte.ch>
2020-10-11 20:05:17 +02:00
patchback[bot]
dd47c3a548 postgresql_privs: fix module fails when passing roles containing hyphens (#1059) (#1073)
* postgresql_privs: fix module fails when passing roles containing hyphens

* fix

* Improve testing

* Improve testing

* Add changelog fragment

* Improve testing

* fix CI Free BSD

(cherry picked from commit 434b83170a)

Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>
2020-10-11 15:37:52 +03:00
patchback[bot]
06678d4ce3 proxmox_kvm: allow setting format to null (None) (#1028) (#1071)
* Allow setting format to null (None)

* Use string instead of None for consistency

* Add changelog

* Update changelogs/fragments/1028-proxmox-kvm-linked-clone.yml

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

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

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

* Substitute 'unspecified' format with None

Co-authored-by: Lukasz Rzasik <lukasz.rzasik@dreamlab.net>
Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit e3e66a57ec)

Co-authored-by: lukaszrzasik <lukasz.rzasik@gmail.com>
2020-10-10 12:36:19 +02:00
patchback[bot]
ba10525125 Disable kubevirt unit tests. (#1065) (#1066)
(cherry picked from commit 277f2a7df5)

Co-authored-by: Felix Fontein <felix@fontein.de>
2020-10-09 16:26:49 +02:00
patchback[bot]
713e386c66 Respect VAULT_SKIP_VERIFY envionment variable setting in hashi_vault lookup plugin (#1024) (#1062)
* add skip_certificate_validation from env VAULT_SKIP_VERIFY

* use os.envrion.env instead of skip_certificat_validation

* fix typo in test

* add tests for different truthy options

* fix linting

* add changelog

* change precedence for validate_certs

* add precedence test

* fix inverted logic

* Fix documentation

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

* Update plugins/lookup/hashi_vault.py

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

* fix linting

* Update plugins/lookup/hashi_vault.py

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

* Update plugins/lookup/hashi_vault.py

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

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

Co-authored-by: markafarrell <mark.andrew.farrell@gmail.com>
2020-10-09 15:30:11 +02:00
patchback[bot]
adf61bf7f4 Gitlab variables pagination (#968) (#1063)
* Workaround increasing per_page to max

* Update plugins/modules/source_control/gitlab/gitlab_group_variable.py

* Create 968-gitlab_variables-pagination-increase.yml

* Update changelogs/fragments/968-gitlab_variables-pagination-increase.yml

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

* Update changelogs/fragments/968-gitlab_variables-pagination-increase.yml

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

* Proper support of pagination

* Fix E303 too many blank lines

* Add test for pagination

* Fix last vars removal test

* Apply suggestions from code review

Check misalignement fixed

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

Co-authored-by: S Code Man <30977678+scodeman@users.noreply.github.com>
2020-10-09 15:30:02 +02:00
patchback[bot]
97507b50b5 Improve group expansion speed: query list of pacman groups once (#349) (#349) (#1060)
For each package check membership in the list instead of checking each
package individually using pacman to see if it is a pacman group.

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

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

Co-authored-by: Jürgen Hötzel <juergen@hoetzel.info>
2020-10-09 13:25:34 +00:00
patchback[bot]
c0971e41b0 postgresql_privs: add procedure type support (#1048) (#1056)
* postgresql_privs: add procedure type support

* add CI tests

* add changelog fragment

* change

* improve doc formatting

(cherry picked from commit 08c96d94e6)

Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>
2020-10-08 09:03:33 +03:00
patchback[bot]
0b28f5d9e4 fix ignored sanity tests (#1026) (#1033)
Co-authored-by: Goetheyn Tony <tony.goetheyn@digipolis.gent>
(cherry picked from commit 2aec1d1bbf)

Co-authored-by: Tony Goetheyn <13643294+tgoetheyn@users.noreply.github.com>
2020-10-02 15:58:18 +02:00
patchback[bot]
7c0175322b fix document mistakenly replaced the 'ipa_host' parameter in 'ipa_host' module (#1031) (#1032)
(cherry picked from commit af21a0eaf7)

Co-authored-by: icez <icez@icez.net>
2020-10-02 14:50:11 +02:00
patchback[bot]
4e497ace29 Add link to ansible docs page for this collection (#1022) (#1030)
* Add link to ansible docs page for this collection.

* Also mention docs from README.

(cherry picked from commit 3f1c93cccf)

Co-authored-by: Felix Fontein <felix@fontein.de>
2020-10-02 10:36:22 +02:00
Felix Fontein
26bb835975 Next expected release is 1.3.0. 2020-09-30 21:39:49 +02:00
Felix Fontein
5d3a2a3bd4 Release 1.2.0. 2020-09-30 21:39:31 +02:00
Felix Fontein
686cdf2a6b Add release summary for 1.2.0. 2020-09-30 21:38:01 +02:00
patchback[bot]
4928810dda Update BOTMETA.yml (#1019) (#1020)
* Update BOTMETA.yml

* Update .github/BOTMETA.yml

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

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

Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>
2020-09-30 15:31:13 +00:00
patchback[bot]
4dc2e14039 Run tests with macOS 10.15. (#971) (#1015)
* Run tests with macOS 10.15.

* Restrict to macOS CI runs for now until they pass.

* Skip tests on macOS that are skipped on OSX.

* Disable consul test for macOS.

* Disable chroot connection tests for macOS.

* Add setup_gnutar role from https://github.com/ansible/ansible/pull/71841.

* Use setup_gnutar for yarn and npm tests.

* Revert "Restrict to macOS CI runs for now until they pass."

This reverts commit d945d0399f.

* hashi_vault lookup tests seem to be always unstable, disabling for now.

* Use homebrew module instead of command.

(cherry picked from commit eba5216be5)

Co-authored-by: Felix Fontein <felix@fontein.de>
2020-09-30 16:32:08 +02:00
patchback[bot]
6ec769b051 Add inventory plugin for Stackpath Edge Compute (#856) (#1013)
* Add inventory plugin for Stackpath Edge Compute

* Update comments from PR regarding general issues.

* Convert requests to ansible open_url

* Add types to documentation and replace stack ids with stack names

* Replace stack_ids with stack_slugs for easier readability, fix pagination and separate getting lists to a function

* create initial test

* fix test name

* fix test to look at class variable as that function doesn't return the value

* fix pep line length limit in line 149

* Add validation function for config options.
Add more testing for validation and population functions

* set correct indentation for tests

* fix validate config to expect KeyError,
fix testing to have inventory data,
fix testing to use correct authentication function

* import InventoryData from the correct location

* remove test_authenticate since there's no dns resolution in the CI,
rename some stack_slugs to a more generic name
fix missing hostname_key for populate test

* Fix typo in workloadslug name for testing

* fix group name in assertion

* debug failing test

* fix missing hosts in assertion for group hosts

* fixes for documentation formatting
add commas to last item in all dictionaries

* end documentation description with a period

* fix typo in documentation

* More documentation corrections, remove unused local variable

(cherry picked from commit 951a7e2758)

Co-authored-by: shayrybak <shay.rybak@stackpath.com>
2020-09-30 13:52:47 +02:00
patchback[bot]
e4d3d24b26 Fix xml reports changed when node is not deleted (#1007) (#1012)
* Fix xml reports changed when node is not deleted

* Added changelog fragment

* Added tests for xml no change remove

* Added PR to changeling fragment

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

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

Co-authored-by: mklassen <lmklassen@gmail.com>
2020-09-30 13:44:57 +02:00
patchback[bot]
572e3f0814 Fix failing FreeBSD CI (#1010) (#1011)
* Print Python and pip version.

* Try a newer setuptools.

* Dump more info.

* Try to upgrade setuptools outside the venv.

* pip36 -> pip3

(cherry picked from commit 75d1894866)

Co-authored-by: Felix Fontein <felix@fontein.de>
2020-09-30 10:24:22 +02:00
patchback[bot]
e03ade818a pkgutil: add update all, check-mode, squashing and examples (#799) (#1009)
* pkgutil: add update all, check-mode, squashing and examples

Taken from https://github.com/ansible/ansible/pull/51651 by dagwieers, which was taken from https://github.com/ansible/ansible/pull/27866 by scathatheworm.  Let’s have one last attempt to get this merged.

> ##### SUMMARY
>
> Original PR #27866 from scathatheworm
>
> When working with Solaris pkgutil CSW packages, I came across this module being very basic in functionality, in particular, that I could not use it to update all CSW packages.
>
> When going into details into the code I also found it did not incorporate a possibility of doing dry-run from the underlying utility, or supported to specify multiple packages for operations.
>
> This module probably sees very little use, but it seemed like nice functionality to add and make it behave a little more like other package modules.
> ##### ISSUE TYPE
>
>     * Feature Pull Request
>
>
> ##### COMPONENT NAME
>
> pkgutil module
> ##### ANSIBLE VERSION
>
> ```
> ansible 2.3.1.0
>   config file = /etc/ansible/ansible.cfg
>   configured module search path = Default w/o overrides
>   python version = 2.7.5 (default, Aug  2 2016, 04:20:16) [GCC 4.8.5 20150623 (Red Hat 4.8.5-4)]
> ```
>
> ##### ADDITIONAL INFORMATION
>
>     * Added ability to upgrade all packages:
>
>
> ```yaml
> - pkgutil:
>     name: '*'
>     state: latest
> ```
>
>     * Added ability to modify state of a list of packages:
>
>
> ```yaml
> - pkgutil:
>     name:
>     - CSWtop
>     - CSWwget
>     - CSWlsof
>     state: present
> ```
>
>     * Added ability to have underlying tool perform a dry-run when using check mode, pkgutil -n
>
>     * Added ability to configure force option to force packages to state determined by repository (downgrade for example)
>
>
> ```yaml
> - pkgutil:
>     name: CSWtop
>     state: latest
>     force: yes
> ```
>
>     * Added more examples and documentation to show the new functionality

* Add changelog fragment.

* Observe changelog style guide

https://docs.ansible.com/ansible/devel/community/development_process.html#changelogs

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

* Since module split, version_added no-longer refers to core Ansbile

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

* Tweak documentation

* Apply the new `elements` feature for specifying list types

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

* Set version_added

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

* Document `pkg` alias for `name`

* Be explicit about the purpose of states `installed` and `removed`.

* Force the user to specify their desired state.

* Review documentation for pkgutil module.

* Fully qualify svr4pkg module name

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

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

Co-authored-by: Peter Oliver <git@mavit.org.uk>
2020-09-30 06:57:10 +02:00
patchback[bot]
54725bea77 nmcli: set C locale when executing nmcli (#992) (#1008)
* Set C locale when calling nmcli.

* Add changelog.

(cherry picked from commit e48083e66b)

Co-authored-by: Felix Fontein <felix@fontein.de>
2020-09-29 23:13:54 +02:00
patchback[bot]
db24f9857a postgresql_privs: fix the module mistakes a procedure for a function (#996) (#1006)
* postgresql_privs: fix the module mistakes a procedure for a function

* add changelog fragment

* fix

(cherry picked from commit 220051768b)

Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>
2020-09-29 21:51:41 +03:00
patchback[bot]
c00147e532 ipa_user: Add userauthtype param (#951) (#1004)
* ipa_user: Add userauthtype param

* Add changelog fragment

* Update changelogs/fragments/951-ipa_user-add-userauthtype-param.yaml

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

* Update plugins/modules/identity/ipa/ipa_user.py

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

* ipa_user: Add example for userauthtype

Co-authored-by: Lina He <lhe@tmamission.com>
Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>
(cherry picked from commit 104f6a3e96)

Co-authored-by: Lina He <lh3su@virginia.edu>
2020-09-29 15:24:30 +00:00
patchback[bot]
0baceda7f6 nagios: force an active service check for all services of a particular host or for the host itself (#998) (#1003)
* Update nagios.py

Force an active service check for all services of a particular host or for the host itself

* Create 998-nagios-added_forced_check_for_all_services_or_host.yml

Added fragment

(cherry picked from commit 9b24b7a969)

Co-authored-by: trumbaut <thomas@rumbaut.be>
2020-09-29 14:31:05 +02:00
patchback[bot]
c563813e4e postgresql modules: fix BOTMETA.yml (#1000) (#1001)
(cherry picked from commit 097c609aab)

Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>
2020-09-29 14:49:27 +03:00
patchback[bot]
1dbd7d4d00 django_manage module: add new maintainers (#974) (#995)
* django_manage module: add new maintainers

* fix

(cherry picked from commit fbe66994a1)

Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>
2020-09-29 09:52:12 +02:00
patchback[bot]
41b72c0055 use FQCN when calling a module from action plugin (#967) (#988)
* use FQCN when calling a module from action plugin

https://docs.ansible.com/ansible/latest/porting_guides/porting_guide_2.10.html#action-plugins-which-execute-modules-should-use-fully-qualified-module-names

* doc: add changelog fragment (minor_changes)

* move to shippable/posix/group1 to run tests with ansible 2.9

* move back to shippable/posix/group4

to not share testbed with docker engine on rhel7, that never releases
the xtables lock and leads 'iptables_state' tests to always fail.

(cherry picked from commit ea1fb83b0c)

Co-authored-by: quidame <quidame@poivron.org>
2020-09-29 06:17:45 +00:00
patchback[bot]
96a8390b5e Nagios: added 'acknowledge' and 'schedule_forced_svc_check' action (#820) (#990)
* bugfix for None-type error

* add acknowledge and service_check options

* fix whitespace issues

* documentation fix

* fix version error

* changelog fix

* Update plugins/modules/monitoring/nagios.py

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

* fix int convert error

* Update plugins/modules/monitoring/nagios.py

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

* indentation fix

Co-authored-by: Goetheyn Tony <tony.goetheyn@digipolis.gent>
Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit 7310a34b55)

Co-authored-by: Tony Goetheyn <13643294+tgoetheyn@users.noreply.github.com>
2020-09-29 06:17:36 +00:00
patchback[bot]
25474f657a Fix changes detection for createcachetable (#699) (#991)
(cherry picked from commit 3d19e15a7d)

Co-authored-by: Mikhail Khvoinitsky <m-khvoinitsky@users.noreply.github.com>
2020-09-29 06:17:27 +00:00
patchback[bot]
d7c4849473 parted: proper fix for change of partition label case (#594) (#986)
* parted: proper fix for change of partition label case
calling mkpart even when partition existed before mklabel call, fixes #522

* changelog fragment for parted fix #522

* Update changelogs/fragments/522-parted_change_label.yml

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

* typo in comment

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

Co-authored-by: Robert Osowiecki <robert.osowiecki@gmail.com>
2020-09-29 06:08:33 +02:00
patchback[bot]
0d459e5662 Fix zfs snapshot handling on root zvols (#936) (#985)
* Update zfs.py

Added support for snapshots when working with a root zvol that contains no / in its path.

* Added Changelog Fragment

(cherry picked from commit 13fb60f58f)

Co-authored-by: Hobnob <williamhobson62@aol.com>
2020-09-29 06:08:15 +02:00
patchback[bot]
01bbab6b2c Improve plugin sanity (#966) (#984)
* callback_type -> type.

* Mark authors as unknown.

* Add author field forgotten in #627.

* Fix author entries.

* Add author field forgotten in #127.

* Fix some types.

(cherry picked from commit e5da25915d)

Co-authored-by: Felix Fontein <felix@fontein.de>
2020-09-29 04:04:05 +00:00
patchback[bot]
59a7064392 docker_container: fix idempotency problem with empty published_ports list (#979) (#982)
* Distinguish between [] and None.

* Add changelog fragment.

* Fix typo.

(cherry picked from commit 4e1f6683d9)

Co-authored-by: Felix Fontein <felix@fontein.de>
2020-09-28 21:29:42 +02:00
patchback[bot]
8e7b779ec9 PostgreSQL team: add a new maintainer (#976) (#983)
(cherry picked from commit 564a625603)

Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>
2020-09-28 21:28:17 +02:00
Felix Fontein
1ba5344258 Fix config key/value pairs.
(cherry picked from commit 71bbabb96f)
2020-09-28 21:15:33 +02:00
Sviatoslav Sydorenko
58e9454379 Add initial Patchback config (#981)
(cherry picked from commit c173d4d5bc)
2020-09-28 21:15:33 +02:00
patchback[bot]
af3dec9b97 Add tgoetheyn as maintainer for nagios module. (#969) (#973)
(cherry picked from commit a353202716)

Co-authored-by: Felix Fontein <felix@fontein.de>
2020-09-28 08:49:06 +02:00
patchback[bot]
99a161bd06 Use platform.system for Darwin comparisons (#945) (#972)
* Use platform.system for Darwin comparisons

In Python3, `platform.platform()` returns `macOS-10.15.6-x86_64-i386-64bit` instead of `Darwin-10.15.6-x86_64-i386-64bit`. 

`platform.system()` returns `Darwin` On py2 and py3.

* Add changlog fragment

* Update changelogs/fragments/945-darwin-timezone-py3.yaml

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

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

Co-authored-by: Matt Martz <matt@sivel.net>
2020-09-28 08:48:50 +02:00
patchback[bot]
feabad39f4 launchd: fix for user-level services (#899) (#970)
* launchd: fix for user-level services

* fix changelog fragment number

(cherry picked from commit 2794dc7b02)

Co-authored-by: tomaszn <tomaszn@users.noreply.github.com>
2020-09-28 07:15:48 +02:00
Tristan Le Guern
4a5276b589 proxmox_kvm: code cleanup (#934) (#956)
* proxmox_kvm: remove redundant parameters

The functions start_vm() and stop_vm() receive four common parameters:
module, proxmox, vm and vmid.
The last too are redundant so keep only vm.

I also took the opportunity to remove extra API calls to proxmox.nodes()
by assigning its return value to a variable.

* proxmox_kvm: remove extra calls to status.current

The get_vm() function already returns an array of properties containing
the status so remove extra API calls to retrieve this information.

Example:

    [{''netin'': 177232, ''name'': ''test-instance'', ''maxcpu'': 1, ''node'': ''prx-01'', ''disk'': 0, ''template'': 0, ''uptime'': 267, ''cpu'': 0.0410680030805531, ''diskread'': 165294744, ''maxdisk'': 10737418240, ''vmid'': 42, ''status'': ''running'', ''id'': ''qemu/42'', ''maxmem'': 536870912, ''diskwrite'': 18528256, ''netout'': 2918, ''type'': ''qemu'', ''mem'': 160284950}]

* proxmox_kvm: kill VZ_TYPE global variable

It reduces readability without providing much values nowadays.

* proxmox_kvm: simplify vmid generation

Forgotten suggestion from Felix Fontein in PR#811.

* proxmox_kvm: add changelog fragment for PR#934

(cherry picked from commit 02e80c610b)
2020-09-25 12:54:14 +02:00
patchback[bot]
e342dfb467 Add headers to ci tests (#954) (#960)
* CI tests: add note to main.yml

* improve

(cherry picked from commit 9d5044ac1a)

Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>
2020-09-25 09:04:59 +02:00
patchback[bot]
5b425fc297 [aerospike_migrations] - handle exception for unstable-cluster (#900) (#959)
* [aerospike_migrations] - handle exception when unstable-cluster is returned

* fix lint issue

* Update changelogs/fragments/900-aerospike-migration-handle-unstable-cluster.yaml

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

Co-authored-by: Kailun Shi <kaishi@adobe.com>
Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit 62ae120c50)

Co-authored-by: Kailun <kailun.shi@gmail.com>
2020-09-25 08:17:56 +02:00
patchback[bot]
d8328312a1 Add new members to gitlab team (#946) (#950)
* Add a member to gitlab team

* add

(cherry picked from commit 7613e0fb04)

Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>
2020-09-25 07:01:47 +02:00
patchback[bot]
2ce326ca5b Fix docker test setup. (#957) (#958)
(cherry picked from commit cf450e3a43)

Co-authored-by: Felix Fontein <felix@fontein.de>
2020-09-25 06:16:38 +02:00
patchback[bot]
90ed2fa5c3 postgresql_privs: add usage_on_types option (#941) (#955)
* postgresql_privs: add usage_of_types option

* add CI tests

* add changelog fragment

(cherry picked from commit 77bf8b9a66)

Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>
2020-09-24 10:33:42 +03:00
patchback[bot]
407d776610 Support same reset actions on Managers as on Systems (#903) (#947)
* bring Manager power cmds to parity with System power commands

* add changelog fragment

* Update changelogs/fragments/903-enhance-redfish-manager-reset-actions.yml

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

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

Co-authored-by: Bill Dodd <billdodd@gmail.com>
2020-09-23 09:04:51 +02:00
patchback[bot]
951806c888 hashi_vault - Change token_path env var loading precedence (#902) (#938)
* Change how vault token is loaded

* Add changelog for PR #902

* Update changelogs/fragments/902-hashi_vault-token-path.yml

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

* Update plugins/lookup/hashi_vault.py

Add version_added

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

* Update plugins/lookup/hashi_vault.py

Add version_added

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

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

Co-authored-by: Brian Scholer <1260690+briantist@users.noreply.github.com>
2020-09-21 13:57:32 +02:00
patchback[bot]
0fe7ea63a8 Support use of VAULT_NAMESPACE env var (#929) (#937)
As per https://learn.hashicorp.com/tutorials/vault/namespaces, setting VAULT_NAMESPACE env var is a completely supported mechanism to make all vault command use said namespace, so hashi_vault lookup function should do the same.

Co-authored-by: Holt Wilkins <hwilkins@palantir.com>
(cherry picked from commit 1a5702cf21)

Co-authored-by: holtwilkins <5665043+holtwilkins@users.noreply.github.com>
2020-09-21 13:57:18 +02:00
patchback[bot]
3a95a84963 Create gitlab_group_variable.py (#786) (#942)
* Create gitlab_group_variable.py

* Create gitlab_group_variable.py

* Create gitlab_group_variable.py

* Create gitlab_group_variable tests

* Fix test error E127: continuation line over-indented for visual indent

* Update plugins/modules/gitlab_group_variable.py

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

* Create symlink for module

* Update plugins/modules/source_control/gitlab/gitlab_group_variable.py

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

* Update plugins/modules/source_control/gitlab/gitlab_group_variable.py

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

* Update plugins/modules/source_control/gitlab/gitlab_group_variable.py

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

* Update plugins/modules/source_control/gitlab/gitlab_group_variable.py

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

* Update plugins/modules/source_control/gitlab/gitlab_group_variable.py

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

* Apply suggestions from code review

Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>
Co-authored-by: Felix Fontein <felix@fontein.de>

* Apply suggestions from code review

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

* Update plugins/modules/source_control/gitlab/gitlab_group_variable.py

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

* Update plugins/modules/source_control/gitlab/gitlab_group_variable.py

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

* Validate all input before starting to do changes

Validate all input before starting to do changes

* Update gitlab_group_variable.py

* Update gitlab_group_variable.py

* Update plugins/modules/source_control/gitlab/gitlab_group_variable.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>
(cherry picked from commit 60c9da76e7)

Co-authored-by: S Code Man <30977678+scodeman@users.noreply.github.com>
2020-09-21 13:56:48 +02:00
patchback[bot]
2c3e93cc4d zypper_repository: Proper failure when python-xml is missing (#939) (#940)
* Proper error when python-xml is missing

* use missing_required_lib to output error

* Add changelog

(cherry picked from commit 09d89da0ab)

Co-authored-by: Amin Vakil <info@aminvakil.com>
2020-09-21 13:56:37 +02:00
patchback[bot]
656b25a4a1 Remove amenonsen from maintainer lists (#943) (#944)
(cherry picked from commit 5e8b27a224)

Co-authored-by: Abhijit Menon-Sen <abhijit@menon-sen.com>
2020-09-21 11:56:21 +00:00
Tristan Le Guern
1863694297 [PR #831 backport][stable-1] proxmox_kvm: new function wait_for_task() (#933)
* proxmox_kvm: new function wait_for_task() (#831)

Allows some factorization of redundant code in stop_vm(), start_vm(),
create_vm() and main().
This new function also waits one extra second after a successful task execution as the API can be a bit ahead of Proxmox.

Before:

    TASK [ansible-role-proxmox-instance : Ensure test-instance is created]
    changed: [localhost]

    TASK [ansible-role-proxmox-instance : Ensure test-instance is updated]
    fatal: [localhost]: FAILED! => changed=false
      msg: VM test-instance does not exist in cluster.

After:

    TASK [ansible-role-proxmox-instance : Ensure test-instance is created]
    changed: [localhost]

    TASK [ansible-role-proxmox-instance : Ensure test-instance is updated]
    changed: [localhost]

With suggestions from Felix Fontein <felix@fontein.de>.

(cherry picked from commit 9a5fe4c9af)

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

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

Co-authored-by: Felix Fontein <felix@fontein.de>
2020-09-18 10:05:23 +02:00
patchback[bot]
c0f753dd21 postgresql_user: improve documentation (#872) (#928)
* postgresql_user: improve documentation

* fix

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

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

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

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

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

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

* add suggested

* fix

* misc fix

Co-authored-by: Sandra McCann <samccann@redhat.com>
(cherry picked from commit 4c33e2ccb8)

Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>
2020-09-18 06:11:50 +02:00
patchback[bot]
369cde2320 add message_id (ts) option to slack module to allow editing messages (#843) (#927)
* add ts option to slack module to allow editing messages

* add version_added

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

* use correct API URL when updating

* add changelog fragment

* add diff/changed support for updating slack messages

* add an example on how to edit a message

* rename ts to message_id

* use the changed variable where possible

* correct conversation.history url

* proper formatting in documentation

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

* add channel to example

* correct conversation history url

* allow channel to start with C0

* fetch_url does not construct query parameters

* add missing argument

* return more data when nothing has changed

* use urlencode to construct query string

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

Co-authored-by: Andreas Lutro <anlutro@gmail.com>
2020-09-18 06:11:42 +02:00
patchback[bot]
e90872b486 [lookup_plugin/hashi_vault] add missing 'mount_point' param for approle (#897) (#926)
* [lookup_plugin/hashi_vault] add missing 'mount_point' param for approle

* [lookup_plugin/hashi_vault] add changelog fragment

* Update changelogs/fragments/897-lookup-plugin-hashivault-add-approle-mount-point.yaml

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

Co-authored-by: Benoit Bayszczak <benoit.bayszczak@adevinta.com>
Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit 51121e54d0)

Co-authored-by: Benoit Bayszczak <bbayszczak@users.noreply.github.com>
2020-09-17 21:38:46 +02:00
patchback[bot]
b52d3504cb BOTMETA.yml: add a new team member to team_virt (#871) (#924)
(cherry picked from commit 10fb2ffe5d)

Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>
2020-09-17 21:38:37 +02:00
patchback[bot]
1e150cda01 postgresql_user: add note explaining how to work with SCRAM-SHA passwords (#869) (#923)
(cherry picked from commit 7ac6db2490)

Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>
2020-09-17 21:26:18 +02:00
patchback[bot]
db135b83dc add a custom module for managing group membership in gitlab (#844) (#919)
* add a custom module for managing group membership in gitlab

* add integration test & modify the module

* modify the module

* modify the module

* remove whitespace

* add aliases file & modify the module

* minor and suggested modifications

* suggested modifications

* more minor modifications

* modified the module to use gitlabAuth

* removed api_url from the doc

* remove api_token

* add update access level for an existing user

* remove access level if statement

(cherry picked from commit 905239f530)

Co-authored-by: Zainab Alsaffar <za5775@rit.edu>
2020-09-17 21:19:34 +02:00
patchback[bot]
ad4866bb3b Rollback if nothing changed (#887) (#925)
Since the module unconditionally issues ALTER statements in order to
observe their effect on the postgres catalog - to determine whether the
privileges have changes - a rollback is thus advisable when in fact
nothing has changed.

fix #885

(cherry picked from commit 2b3c8f4582)

Co-authored-by: Georg Sauthoff <mail@georg.so>
2020-09-17 21:17:29 +02:00
patchback[bot]
83339c44b3 Slack: moves to \S+ check instead of \w+-\w+ (#863) (#922)
* Moves to \S+ check instead of \w+-\w+

* Adds changelog fragment

* Update changelogs/fragments/892-slack-token-validation.yml

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

Co-authored-by: Josh VanDeraa <josh.vanderaa@networktocode.com>
Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit 1eb3ab3b27)

Co-authored-by: Josh VanDeraa <josh.vanderaa+github@networktocode.com>
2020-09-17 20:59:42 +02:00
patchback[bot]
71633249c4 postgresql_privs: allow lowercased PUBLIC role (#858) (#921)
* postgresql_privs: allow lowercased PUBLIC role

* add changelog fragment

* improve CI

* fix changelog fragment

(cherry picked from commit bfdb76e60d)

Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>
2020-09-17 20:59:27 +02:00
patchback[bot]
fdf244d488 Reduce ignored sanity tests in cloud/misc modules (#845) (#920)
* Reduce ignored sanity tests in cloud/misc modules

* Reduce ignored sanity tests in cloud/misc modules for proxmox_kvm

* Fix

* Remove in ignore-2.9.txt

* Fix

* Remove unneeded alias

(cherry picked from commit d046dc34bf)

Co-authored-by: Amin Vakil <info@aminvakil.com>
2020-09-17 20:59:12 +02:00
patchback[bot]
5575d454ab Remove duplicate copy of interfaces_file tests (#835) (#917)
* Remove duplicate copy of interfaces_file tests.

* Remove ignore.txt entries.

(cherry picked from commit 6ff6cc96d5)

Co-authored-by: Felix Fontein <felix@fontein.de>
2020-09-17 20:02:13 +02:00
patchback[bot]
d4633cfcd5 gem: Fix get_installed_versions: correctly parse "default" version. (#783) (#918)
* Fix get_installed_versions: correctly parse "default" version.

gem query output of

    bundler (default: 2.1.4, 1.17.2)

Gets parsed as:

    ['default:', '1.17.2']

Fix this by skipping "default: " if present in the list of versions - by adding
it as an optional part of the regex, grouped as a non-capturing group to keep
the index of existing group.

This now correctly parses the above input as

    ['2.1.4:', '1.17.2']

Fixes #782

* Fix gem get_installed_versions (cont): add changelog fragment

* Update changelogs/fragments/783-fix-gem-installed-versions.yaml as per suggestion

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

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

Co-authored-by: Vlad Mencl <vladimir.mencl@reannz.co.nz>
2020-09-17 20:01:58 +02:00
patchback[bot]
11315c8c69 disable notifications for jose-delarosa (#832) (#916)
(cherry picked from commit 88893b8204)

Co-authored-by: Bill Dodd <billdodd@gmail.com>
2020-09-17 19:50:33 +02:00
patchback[bot]
6c387f87dd redfish_command: allow setting the BootSourceOverrideEnabled property (#825) (#915)
Issue: 824

Co-authored-by: Scott Seekamp <sseekamp@digitalocean.com>
(cherry picked from commit d7ec65c19c)

Co-authored-by: Scott Seekamp <sylgeist@risei.net>
2020-09-17 19:50:12 +02:00
patchback[bot]
33cf4877f5 proxmox_kvm: fix idempotency issue with state=absent (#811) (#914)
When the `vmid` parameter is not supplied and the module can only rely on
name look-up an early failure can happen if the targeted VM doesn't exist.
In this case a task execution with the parameter `state` set to `absent`
will actually fail instead of being considered ok.

This patch introduces a deferred error-checking for non-existent VMs
by assigning the value -1 to the `vmid` parameter, allowing the actual
verification to be performed in the right code paths.
Is also help to differentiate between a non-existent `vmid` or non-existent
VM `name`.

Previously:

    TASK [ansible-role-proxmox-instance : Remove instance-test]
    changed: [localhost]
    ...
    TASK [ansible-role-proxmox-instance : Remove instance-test]
    fatal: [localhost]: FAILED! => changed=false
      msg: VM instance-test does not exist in cluster.

Now:

    TASK [ansible-role-proxmox-instance : Remove instance-test]
    ok: [localhost]
    ...
    TASK [ansible-role-proxmox-instance : Remove instance-test]
    ok: [localhost]

Update changelogs/fragments/811-proxmox-kvm-state-absent.yml

With suggestions from Felix Fontein <felix@fontein.de>.

(cherry picked from commit 73f8338980)

Co-authored-by: Tristan Le Guern <tleguern@bouledef.eu>
2020-09-17 19:41:19 +02:00
patchback[bot]
6e2fee77a7 Specify device for Pushover notification (#802) (#913)
* Specify device for Pushover notification

New parameter: device

Example:
- community.general.pushover:
    msg: '{{ inventory_hostname }} has been lost somewhere'
    app_token: wxfdksl
    user_key: baa5fe97f2c5ab3ca8f0bb59
    device: admins-iPhone
  delegate_to: localhost

Using the Pushover API, you can specify a device where the message should be delivered to. Instead of notifying all devices (the default), the message is sent only to the specified device. Multiple devices can be given separated by a comma.

This change is downwards compatible: omitting the device key sends the message to all devices (as before).

* Added changelog fragments file for pushover

File format as specified in https://docs.ansible.com/ansible/devel/community/development_process.html#changelogs-how-to.

* Added version_added information

As suggested by Felix (thanks!).

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

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

Co-authored-by: Bernd Arnold <wopfel@gmail.com>
2020-09-17 19:41:11 +02:00
patchback[bot]
502e5ceb79 Fix for error trying to install cask with '@' in the name (#763) (#910)
* Fix for casks with @ in the name

* Add changelog fragment

* Update changelogs/fragments/homebrew-cask-at-symbol-fix.yaml

Period required at the end of changelog entry

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

* Use double backticks

Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>
(cherry picked from commit 8f2b2d9dc6)

Co-authored-by: Brandon Boles <bb@zbeba.com>
2020-09-17 19:41:00 +02:00
patchback[bot]
4685a53f29 postgresql_privs: Fix bug with grant_option (#796) (#912)
(cherry picked from commit f3b82a9470)

Co-authored-by: Milan Ilic <35260522+ilicmilan@users.noreply.github.com>
2020-09-17 19:34:28 +02:00
patchback[bot]
79616f47cb pkg5: wrap 'to modify' package list (#789) (#911)
* pkg5: wrap 'to modify' package list

Moved from https://github.com/ansible/ansible/pull/56378

* Add changelog fragment.

* Correct markup.

* Update changelogs/fragments/789-pkg5-wrap-to-modify-package-list.yaml

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

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

Co-authored-by: Peter Oliver <github.com@mavit.org.uk>
2020-09-17 19:29:44 +02:00
patchback[bot]
496218b6e6 Scaleway Database Backup : Create new module (#741) (#909)
* Scaleway Database Backup : Create new module

* Add changelog

* Fix typo

* Remove module duplicate

* Fix typo

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

* Remove changelog

* Improve doc

* Improve documentation

* Improve parameters checking

* Fix blank space

* Change result name (data to metadata)

See https://github.com/ansible-collections/community.general/pull/741#discussion_r468537460

* Fix doc typo

* Update plugins/modules/cloud/scaleway/scaleway_database_backup.py

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

* States explanations

03f58894ff (r470845287)

* Fix documentation typo

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

Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>
Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit 8a16b51202)

Co-authored-by: Guillaume RODRIGUEZ <guiguidu31300@gmail.com>
2020-09-17 19:24:11 +02:00
patchback[bot]
8bd8ccd974 Fix terraform changed status detection test (#561) (#563) (#908)
* Fix terraform changed status detection test (#561)

* Add changelog fragment

* Update changelogs/fragments/563-update-terraform-status-test.yaml

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

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

Co-authored-by: AdamGoldsmith <adam.goldsmith75@gmail.com>
2020-09-17 19:23:43 +02:00
patchback[bot]
c802de865a Fix various sanity errors in plugins (#881) (#893)
* Fix deprecation of callables.

* Fix various sanity errors.

* Revert callback_type -> type transform.

* Fix stat_result times: these are float according to https://github.com/python/typeshed/blob/master/stdlib/3/os/__init__.pyi

* Apply suggestions from code review

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

Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>
(cherry picked from commit 7cf472855c)

Co-authored-by: Felix Fontein <felix@fontein.de>
2020-09-17 16:39:57 +00:00
patchback[bot]
1dfd6e395c Fix lmdb lookup tests (#842) (#907)
* Set LMDB_PURE to prevent lmdb install trying to patch a system library.

* Fix name.

(cherry picked from commit b36f77515c)

Co-authored-by: Felix Fontein <felix@fontein.de>
2020-09-17 15:49:41 +00:00
patchback[bot]
25eabb39a6 Fix diy callback tests. (#841) (#906)
(cherry picked from commit e5d15a56c3)

Co-authored-by: Felix Fontein <felix@fontein.de>
2020-09-17 16:21:08 +02:00
patchback[bot]
869e0e60c2 Fix CI (problem with cffi) (#892) (#898)
* Work around old pip versions which install yanked packages.

* Try II

* Proper approach.

* Avoid too old version being installed.

(cherry picked from commit 38996b7544)

Co-authored-by: Felix Fontein <felix@fontein.de>
2020-09-17 16:20:23 +02:00
patchback[bot]
cae5823685 Disable hg tests: these use bitbucket.org, which dropped mercurial support on 2020-08-26. (#839) (#905)
(cherry picked from commit 19b1a0049b)

Co-authored-by: Felix Fontein <felix@fontein.de>
2020-09-17 14:56:07 +02:00
patchback[bot]
3d0dbc1fb0 New inventory module: Proxmox (#545) (#882)
* This commit adds proxmox inventory module and proxmox_snap for snapshot management

* Fixed pylint errors

* Missed this one..

* This should fix the doc errors

* Remove proxmox_snap to allow for single module per PR

* Changes as suggested by felixfontein in #535

* Reverted back to AnsibleError as module.fail_json broke it. Need to investigate further

* Made importerror behave similar to docker_swarm and gitlab_runner

* FALSE != False

* Added myself as author

* Added a requested feature from a colleague to also sort VMs based on their running state

* Prevent VM templates from being added to the inventory

* Processed feedback

* Updated my email and included version

* Processed doc feedback

* More feedback processed

* Shortened this line of documentation, it is a duplicate and it was causing a sanity error (> 160 characters)

* Added test from PR #736 to check what needs to be changed to make it work

* Changed some tests around

* Remove some tests, first get these working

* Disabled all tests, except the one I am hacking together now

* Added mocker, still trying to figure this out

* Am I looking in the right direction?

* Processed docs feedback

* Fixed bot feedback

* Removed all other tests, started with basic ones (borrowed from cobbler)

* Removed all other tests, started with basic ones (borrowed from cobbler)

* Removed all other tests, started with basic ones (borrowed from cobbler)

* Removed init_cache test as it is implemented on a different way in the original foreman/satellite inventory (and thus also this one)

* This actually passes! Need to check if I need to add asserts as well

* Made bot happy again?

* Added some assertions

* Added note about PVE API version

* Mocked only get_json, the rest functions as-is

* Fixed sanity errors

* Fixed version bump (again...) ;-)

* Processed feedback

(cherry picked from commit 73be912bf7)

Co-authored-by: Jeffrey van Pelt <jeff@vanpelt.one>
2020-09-17 14:34:25 +02:00
Felix Fontein
912583026f Avoid patchback backports to use unnecessary CI resources.
(cherry picked from commit 2b0879cdc4)
2020-09-16 21:43:57 +02:00
Jan-Philipp Litza
748304dadd interfaces_file: re.escape() old value (#880) 2020-09-12 20:10:31 +02:00
Felix Fontein
253c2179de Copy changes from ansible/ansible#71551. (#877)
ci_complete

(cherry picked from commit fcee84b947)
2020-09-10 21:00:53 +02:00
Felix Fontein
fcc72e5af1 Next release will be 1.2.0. 2020-08-18 13:16:24 +02:00
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
973 changed files with 95221 additions and 10511 deletions

View File

@@ -36,7 +36,7 @@ variables:
resources:
containers:
- container: default
image: quay.io/ansible/azure-pipelines-test-container:1.8.0
image: quay.io/ansible/azure-pipelines-test-container:1.7.1
pool: Standard
@@ -140,20 +140,24 @@ stages:
parameters:
testFormat: devel/{0}
targets:
- name: macOS 11.1
test: macos/11.1
- name: RHEL 7.9
test: rhel/7.9
- name: RHEL 8.3
test: rhel/8.3
- name: FreeBSD 11.4
test: freebsd/11.4
- name: FreeBSD 12.2
test: freebsd/12.2
- name: OS X 10.11
test: osx/10.11
- name: macOS 10.15
test: macos/10.15
- name: RHEL 7.8
test: rhel/7.8
- name: RHEL 8.2
test: rhel/8.2
- name: FreeBSD 11.1
test: freebsd/11.1
- name: FreeBSD 12.1
test: freebsd/12.1
groups:
- 1
- 2
- 3
- 4
- 5
- stage: Remote_2_10
displayName: Remote 2.10
dependsOn: []
@@ -164,12 +168,6 @@ stages:
targets:
- name: OS X 10.11
test: osx/10.11
- name: macOS 10.15
test: macos/10.15
- name: macOS 11.1
test: macos/11.1
- name: RHEL 7.8
test: rhel/7.8
- name: RHEL 8.2
test: rhel/8.2
- name: FreeBSD 12.1
@@ -177,6 +175,9 @@ stages:
groups:
- 1
- 2
- 3
- 4
- 5
- stage: Remote_2_9
displayName: Remote 2.9
dependsOn: []
@@ -187,11 +188,14 @@ stages:
targets:
- name: RHEL 8.2
test: rhel/8.2
- name: FreeBSD 12.0
test: freebsd/12.0
#- name: FreeBSD 12.0
# test: freebsd/12.0
groups:
- 1
- 2
- 3
- 4
- 5
### Docker
- stage: Docker_devel
@@ -208,22 +212,24 @@ stages:
test: centos7
- name: CentOS 8
test: centos8
- name: Fedora 31
test: fedora31
- name: Fedora 32
test: fedora32
- name: Fedora 33
test: fedora33
- name: openSUSE 15 py2
test: opensuse15py2
- name: openSUSE 15 py3
test: opensuse15
- name: Ubuntu 16.04
test: ubuntu1604
- name: Ubuntu 18.04
test: ubuntu1804
- name: Ubuntu 20.04
test: ubuntu2004
groups:
- 1
- 2
- 3
- 4
- 5
- stage: Docker_2_10
displayName: Docker 2.10
dependsOn: []
@@ -232,17 +238,20 @@ stages:
parameters:
testFormat: 2.10/linux/{0}
targets:
- name: CentOS 8
test: centos8
#- name: CentOS 8
# test: centos8
- name: Fedora 32
test: fedora32
- name: openSUSE 15 py3
test: opensuse15
- name: Ubuntu 16.04
test: ubuntu1604
- name: Ubuntu 18.04
test: ubuntu1804
groups:
- 1
- 2
- 3
- 4
- 5
- stage: Docker_2_9
displayName: Docker 2.9
dependsOn: []
@@ -251,15 +260,20 @@ stages:
parameters:
testFormat: 2.9/linux/{0}
targets:
- name: CentOS 8
test: centos8
- name: Fedora 31
test: fedora31
- name: openSUSE 15 py3
test: opensuse15
#- name: CentOS 8
# test: centos8
#- name: Fedora 31
# test: fedora31
#- name: openSUSE 15 py3
# test: opensuse15
- name: Ubuntu 18.04
test: ubuntu1804
groups:
- 1
- 2
- 3
- 4
- 5
### Cloud
- stage: Cloud_devel
@@ -292,7 +306,7 @@ stages:
nameFormat: Python {0}
testFormat: 2.9/cloud/{0}/1
targets:
- test: 3.6
- test: 2.7
- stage: Summary
condition: succeededOrFailed()
dependsOn:

145
.github/BOTMETA.yml vendored
View File

@@ -15,13 +15,14 @@ files:
labels: become
$callbacks/:
labels: callbacks
$callbacks/logstash.py:
maintainers: ujenmr
$callbacks/say.py:
notify: chris-short
maintainers: $team_macos
labels: macos say
keywords: brew cask darwin homebrew macosx macports osx
$callbacks/stderr.py:
maintainers: ysn2233
labels: stderr
$callbacks/sumologic.py:
maintainers: ryancurrah
labels: sumologic
@@ -30,6 +31,11 @@ files:
$callbacks/unixy.py:
maintainers: akatch
labels: unixy
$connections/docker.py:
maintainers: $team_docker
labels: cloud docker
ignore: cove
supershipit: felixfontein
$connections/:
labels: connections
$connections/kubectl.py:
@@ -38,10 +44,24 @@ files:
$connections/lxd.py:
maintainers: mattclay
labels: lxd
$connections/oc.py:
maintainers: chouseknecht fabianvf flaper87 maxamillion
labels: oc
$connections/saltstack.py:
labels: saltstack
$doc_fragments/:
labels: docs_fragments
$doc_fragments/docker.py:
maintainers: $team_docker
labels: cloud docker
ignore: cove
supershipit: felixfontein
$doc_fragments/gcp.py:
maintainers: $team_google
labels: gcp
supershipit: erjohnso rambleraptor
$doc_fragments/hetzner.py:
labels: hetzner
$doc_fragments/hpe3par.py:
maintainers: farhan7500 gautamphegde
labels: hpe3par
@@ -50,17 +70,19 @@ files:
labels: hwc
$doc_fragments/nomad.py:
maintainers: chris93111
$doc_fragments/postgres.py:
maintainers: $team_postgresql
labels: postgres postgresql
keywords: database postgres postgresql
$doc_fragments/xenserver.py:
maintainers: bvitnik
labels: xenserver
$filters/dict_kv.py:
maintainers: giner
$filters/jc.py:
maintainers: kellyjonbrazil
$filters/list.py:
maintainers: vbotka
$filters/time.py:
maintainers: resmo
$filters/jc.py:
maintainers: kellyjonbrazil
$httpapis/:
maintainers: $team_networking
labels: networking
@@ -70,6 +92,16 @@ files:
keywords: firepower ftd
$inventories/:
labels: inventories
$inventories/docker_machine.py:
maintainers: $team_docker
labels: cloud docker
ignore: cove
supershipit: felixfontein
$inventories/docker_swarm.py:
maintainers: $team_docker morph027
labels: cloud docker docker_swarm
ignore: cove
supershipit: felixfontein
$inventories/linode.py:
maintainers: $team_linode
labels: cloud linode
@@ -96,6 +128,9 @@ files:
maintainers: amigus
$lookups/dsv.py:
maintainers: amigus
$lookups/hashi_vault.py:
labels: hashi_vault
maintainers: briantist
$lookups/manifold.py:
maintainers: galanoff
labels: manifold
@@ -104,6 +139,11 @@ files:
labels: infoblox networking
$module_utils/:
labels: module_utils
$module_utils/docker/:
maintainers: $team_docker
labels: cloud
ignore: cove
supershipit: felixfontein
$module_utils/gitlab.py:
notify: jlozadad
maintainers: $team_gitlab
@@ -118,6 +158,10 @@ files:
$module_utils/ipa.py:
maintainers: $team_ipa
labels: ipa
$module_utils/kubevirt.py:
maintainers: $team_kubevirt
labels: cloud kubevirt
keywords: kubevirt
$module_utils/manageiq.py:
maintainers: $team_manageiq
labels: manageiq
@@ -133,6 +177,10 @@ files:
$module_utils/oracle/oci_utils.py:
maintainers: $team_oracle
labels: cloud
$module_utils/postgres.py:
maintainers: $team_postgresql
labels: postgres postgresql
keywords: database postgres postgresql
$module_utils/pure.py:
maintainers: $team_purestorage
labels: pure pure_storage
@@ -164,11 +212,46 @@ files:
labels: dimensiondata_network
$modules/cloud/dimensiondata/dimensiondata_vlan.py:
maintainers: tintoy
$modules/cloud/docker/:
maintainers: $team_docker
ignore: cove
supershipit: felixfontein
$modules/cloud/docker/docker_compose.py:
maintainers: sluther
labels: docker_compose
$modules/cloud/docker/docker_config.py:
maintainers: ushuz
$modules/cloud/docker/docker_container.py:
maintainers: dusdanig softzilla zfil
ignore: ThomasSteinbach cove joshuaconner
$modules/cloud/docker/docker_image.py:
maintainers: softzilla ssbarnea
$modules/cloud/docker/docker_login.py:
maintainers: olsaki
$modules/cloud/docker/docker_network.py:
maintainers: keitwb
labels: docker_network
$modules/cloud/docker/docker_stack_task_info.py:
maintainers: imjoseangel
$modules/cloud/docker/docker_swarm_service.py:
maintainers: hannseman
labels: docker_swarm_service
$modules/cloud/docker/docker_swarm_service_info.py:
maintainers: hannseman
$modules/cloud/docker/docker_volume.py:
maintainers: agronholm
$modules/cloud/google/:
maintainers: $team_google
ignore: supertom
supershipit: $team_google
$modules/cloud/heroku/heroku_collaborator.py:
maintainers: marns93
$modules/cloud/huawei/:
maintainers: $team_huawei huaweicloud
keywords: cloud huawei hwc
$modules/cloud/kubevirt/:
maintainers: $team_kubevirt kubevirt
keywords: kubevirt
$modules/cloud/linode/:
maintainers: $team_linode
$modules/cloud/linode/linode.py:
@@ -193,10 +276,6 @@ files:
labels: proxmox_kvm virt
ignore: skvidal
keywords: kvm libvirt proxmox qemu
$modules/cloud/misc/proxmox_snap.py:
maintainers: $team_virt
labels: proxmox virt
keywords: kvm libvirt proxmox qemu
$modules/cloud/misc/proxmox_template.py:
maintainers: $team_virt UnderGreen
labels: proxmox_template virt
@@ -325,6 +404,20 @@ files:
$modules/database/mssql/mssql_db.py:
maintainers: vedit Jmainguy kenichi-ogawa-1988
labels: mssql_db
$modules/database/postgresql/:
keywords: database postgres postgresql
labels: postgres postgresql
maintainers: $team_postgresql
$modules/database/postgresql/postgresql_ext.py:
maintainers: dschep strk
$modules/database/postgresql/postgresql_lang.py:
maintainers: jensdepuydt
$modules/database/postgresql/postgresql_privs.py:
maintainers: b6d
$modules/database/postgresql/postgresql_query.py:
maintainers: archf wrouesnel
$modules/database/postgresql/postgresql_tablespace.py:
maintainers: antoinell
$modules/database/vertica/:
maintainers: dareko
$modules/files/archive.py:
@@ -346,8 +439,6 @@ files:
maintainers: Rylon
$modules/identity/ipa/:
maintainers: $team_ipa
$modules/identity/ipa/ipa_pwpolicy.py:
maintainers: adralioh
$modules/identity/ipa/ipa_service.py:
maintainers: cprh
$modules/identity/ipa/ipa_vault.py:
@@ -419,8 +510,6 @@ files:
maintainers: orgito
$modules/monitoring/stackdriver.py:
maintainers: bwhaley
$modules/monitoring/statsd.py:
maintainers: mamercad
$modules/monitoring/statusio_maintenance.py:
maintainers: bhcopeland
$modules/monitoring/uptimerobot.py:
@@ -434,6 +523,14 @@ files:
maintainers: briceburg
$modules/net_tools/haproxy.py:
maintainers: ravibhure
$modules/net_tools/hetzner_failover_ip.py:
maintainers: felixfontein
$modules/net_tools/hetzner_failover_ip_info.py:
maintainers: felixfontein
$modules/net_tools/hetzner_firewall.py:
maintainers: felixfontein
$modules/net_tools/hetzner_firewall_info.py:
maintainers: felixfontein
$modules/net_tools/:
maintainers: nerzhul
$modules/net_tools/infinity/infinity.py:
@@ -533,7 +630,7 @@ files:
$modules/notification/syslogger.py:
maintainers: garbled1
$modules/notification/telegram.py:
maintainers: tyouxa loms
maintainers: tyouxa
$modules/notification/twilio.py:
maintainers: makaimc
$modules/notification/typetalk.py:
@@ -572,8 +669,6 @@ files:
ignore: kbrebanov
$modules/packaging/os/apt_rpm.py:
maintainers: evgkrsk
$modules/packaging/os/copr.py:
maintainers: schlupov
$modules/packaging/os/flatpak.py:
maintainers: $team_flatpak
$modules/packaging/os/flatpak_remote.py:
@@ -660,8 +755,6 @@ files:
maintainers: seandst
$modules/packaging/os/rhsm_repository.py:
maintainers: giovannisciortino
$modules/packaging/os/rpm_ostree_pkg.py:
maintainers: dustymabe Akasurde
$modules/packaging/os/slackpkg.py:
maintainers: KimNorgaard
$modules/packaging/os/snap.py:
@@ -683,8 +776,6 @@ files:
maintainers: pmakowski
$modules/packaging/os/xbps.py:
maintainers: dinoocch the-maldridge
$modules/packaging/os/yum_versionlock.py:
maintainers: florianpaulhoberg aminvakil
$modules/packaging/os/zypper.py:
maintainers: $team_suse
labels: zypper
@@ -699,6 +790,8 @@ files:
maintainers: jagadeeshnv
$modules/remote_management/dellemc/ome_device_info.py:
maintainers: Sajna-Shetty
$modules/remote_management/foreman/:
maintainers: ehelms ares ekohl xprazak2
$modules/remote_management/hpilo/:
maintainers: haad
ignore: dagwieers
@@ -740,6 +833,8 @@ files:
maintainers: andreparames
$modules/source_control/git_config.py:
maintainers: djmattyg007 mgedmin
$modules/source_control/github/github_hooks.py:
maintainers: pcgentry
$modules/source_control/github/github_deploy_key.py:
maintainers: bincyber
$modules/source_control/github/github_issue.py:
@@ -907,8 +1002,6 @@ files:
maintainers: bcoca
$modules/system/syspatch.py:
maintainers: precurse
$modules/system/sysrc.py:
maintainers: dlundgren
$modules/system/sysupgrade.py:
maintainers: precurse
$modules/system/timezone.py:
@@ -1005,14 +1098,17 @@ macros:
team_bsd: JoergFiedler MacLemon bcoca dch jasperla mekanix opoplawski overhacked tuxillo
team_consul: colin-nolan sgargan
team_cyberark_conjur: jvanderhoof ryanprior
team_docker: DBendit WojciechowskiPiotr akshay196 danihodovic dariko felixfontein jwitko kassiansun tbouvet chouseknecht
team_e_spirit: MatrixCrawler getjack
team_flatpak: JayKayy oolongbrothers
team_gitlab: Lunik Shaps dj-wasabi marwatk waheedi zanssa scodeman
team_google: erjohnso rambleraptor
team_hpux: bcoca davx8342
team_huawei: QijunPan TommyLike edisonxiang freesky-edward hwDCN niuzhenguo xuxiaowei0512 yanzhangi zengchen1024 zhongjun2
team_ipa: Akasurde Nosmoht fxfitz
team_jboss: Wolfant jairojunior wbrefvem
team_keycloak: eikef ndclt
team_kubevirt: machacekondra mmazur pkliczewski
team_linode: InTheCloudDan decentral1se displague rmcintosh
team_macos: Akasurde kyleabenson martinm82 danieljaouen indrajitr
team_manageiq: abellotti cben gtanzillo yaacov zgalor dkorn evertmulder
@@ -1020,10 +1116,11 @@ macros:
team_networking: NilashishC Qalthos danielmellado ganeshrn justjais trishnaguha sganesh-infoblox privateip
team_opennebula: ilicmilan meerkampdvv rsmontero xorel
team_oracle: manojmeda mross22 nalsaber
team_postgresql: Andersson007 Dorn- andytom jbscalia kostiantyn-nemchenko matburt nerzhul sebasmannem tcraxs ilicmilan
team_purestorage: bannaych dnix101 genegr lionmax opslounge raekins sdodsley sile16
team_redfish: billdodd mraineri tomasg2012
team_rhn: FlossWare alikins barnabycourt vritant
team_scaleway: QuentinBrosse abarbare jerome-quere kindermoumoute remyleone sieben
team_solaris: bcoca fishman jasperla jpdasma mator scathatheworm troy2914 xen0l
team_suse: commel dcermak evrardjp lrupp toabctl AnderEnder alxgu andytom
team_virt: joshainglis karmab Aversiste Thulium-Drake
team_virt: joshainglis karmab Aversiste

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,6 @@
# Community General Collection
[![Build Status](https://dev.azure.com/ansible/community.general/_apis/build/status/CI?branchName=stable-2)](https://dev.azure.com/ansible/community.general/_build?definitionId=31)
[![Build Status](https://dev.azure.com/ansible/community.general/_apis/build/status/CI?branchName=stable-1)](https://dev.azure.com/ansible/community.general/_build?definitionId=31)
[![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.
@@ -76,7 +76,7 @@ Basic instructions without release branches:
## Release notes
See the [changelog](https://github.com/ansible-collections/community.general/blob/stable-2/CHANGELOG.rst).
See the [changelog](https://github.com/ansible-collections/community.general/blob/main/CHANGELOG.rst).
## Roadmap

File diff suppressed because it is too large Load Diff

View File

@@ -1,14 +1,17 @@
namespace: community
name: general
version: 2.1.0
version: 1.3.3
readme: README.md
authors:
- Ansible (https://github.com/ansible)
description: null
license_file: COPYING
tags: [community]
# NOTE: No dependencies are expected to be added here
# dependencies:
# NOTE: No more dependencies can be added to this list
dependencies:
ansible.netcommon: '>=1.0.0'
community.kubernetes: '>=1.0.0'
google.cloud: '>=1.0.0'
repository: https://github.com/ansible-collections/community.general
documentation: https://docs.ansible.com/ansible/latest/collections/community/general/
homepage: https://github.com/ansible-collections/community.general

View File

@@ -1,6 +1,36 @@
---
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
@@ -27,174 +57,252 @@ action_groups:
- ovirt_vm_facts
- ovirt_vmpool_facts
plugin_routing:
connection:
docker:
redirect: community.docker.docker
oc:
redirect: community.okd.oc
lookup:
gcp_storage_file:
redirect: community.google.gcp_storage_file
hashi_vault:
redirect: community.hashi_vault.hashi_vault
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
docker_compose:
redirect: community.docker.docker_compose
docker_config:
redirect: community.docker.docker_config
docker_container:
redirect: community.docker.docker_container
docker_container_info:
redirect: community.docker.docker_container_info
docker_host_info:
redirect: community.docker.docker_host_info
docker_image:
redirect: community.docker.docker_image
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:
tombstone:
deprecation:
removal_version: 2.0.0
warning_text: Use community.docker.docker_image_info instead.
docker_image_info:
redirect: community.docker.docker_image_info
docker_login:
redirect: community.docker.docker_login
docker_network:
redirect: community.docker.docker_network
docker_network_info:
redirect: community.docker.docker_network_info
docker_node:
redirect: community.docker.docker_node
docker_node_info:
redirect: community.docker.docker_node_info
docker_prune:
redirect: community.docker.docker_prune
docker_secret:
redirect: community.docker.docker_secret
warning_text: see plugin documentation for details
docker_service:
tombstone:
deprecation:
removal_version: 2.0.0
warning_text: Use community.docker.docker_compose instead.
docker_stack:
redirect: community.docker.docker_stack
docker_stack_info:
redirect: community.docker.docker_stack_info
docker_stack_task_info:
redirect: community.docker.docker_stack_task_info
docker_swarm:
redirect: community.docker.docker_swarm
docker_swarm_info:
redirect: community.docker.docker_swarm_info
docker_swarm_service:
redirect: community.docker.docker_swarm_service
docker_swarm_service_info:
redirect: community.docker.docker_swarm_service_info
docker_volume:
redirect: community.docker.docker_volume
docker_volume_info:
redirect: community.docker.docker_volume_info
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:
tombstone:
deprecation:
removal_version: 2.0.0
warning_text: Use the modules from the theforeman.foreman collection instead.
gc_storage:
redirect: community.google.gc_storage
warning_text: see plugin documentation for details
gcdns_record:
tombstone:
deprecation:
removal_version: 2.0.0
warning_text: Use google.cloud.gcp_dns_resource_record_set instead.
warning_text: see plugin documentation for details
gcdns_zone:
tombstone:
deprecation:
removal_version: 2.0.0
warning_text: Use google.cloud.gcp_dns_managed_zone instead.
warning_text: see plugin documentation for details
gce:
tombstone:
deprecation:
removal_version: 2.0.0
warning_text: Use google.cloud.gcp_compute_instance instead.
gce_eip:
redirect: community.google.gce_eip
gce_img:
redirect: community.google.gce_img
gce_instance_template:
redirect: community.google.gce_instance_template
gce_labels:
redirect: community.google.gce_labels
gce_lb:
redirect: community.google.gce_lb
gce_mig:
redirect: community.google.gce_mig
gce_net:
redirect: community.google.gce_net
gce_pd:
redirect: community.google.gce_pd
gce_snapshot:
redirect: community.google.gce_snapshot
gce_tag:
redirect: community.google.gce_tag
warning_text: see plugin documentation for details
gcp_backend_service:
tombstone:
deprecation:
removal_version: 2.0.0
warning_text: Use google.cloud.gcp_compute_backend_service instead.
warning_text: see plugin documentation for details
gcp_forwarding_rule:
tombstone:
deprecation:
removal_version: 2.0.0
warning_text: Use google.cloud.gcp_compute_forwarding_rule or google.cloud.gcp_compute_global_forwarding_rule instead.
warning_text: see plugin documentation for details
gcp_healthcheck:
tombstone:
deprecation:
removal_version: 2.0.0
warning_text: Use google.cloud.gcp_compute_health_check, google.cloud.gcp_compute_http_health_check or google.cloud.gcp_compute_https_health_check instead.
warning_text: see plugin documentation for details
gcp_target_proxy:
tombstone:
deprecation:
removal_version: 2.0.0
warning_text: Use google.cloud.gcp_compute_target_http_proxy instead.
warning_text: see plugin documentation for details
gcp_url_map:
tombstone:
deprecation:
removal_version: 2.0.0
warning_text: Use google.cloud.gcp_compute_url_map instead.
gcpubsub:
redirect: community.google.gcpubsub
gcpubsub_info:
redirect: community.google.gcpubsub_info
warning_text: see plugin documentation for details
gcpubsub_facts:
redirect: community.google.gcpubsub_info
deprecation:
removal_version: 3.0.0
warning_text: Use community.google.gcpubsub_info instead.
warning_text: see plugin documentation for details
gcspanner:
tombstone:
deprecation:
removal_version: 2.0.0
warning_text: Use google.cloud.gcp_spanner_database and/or google.cloud.gcp_spanner_instance instead.
warning_text: see plugin documentation for details
github_hooks:
tombstone:
deprecation:
removal_version: 2.0.0
warning_text: Use community.general.github_webhook and community.general.github_webhook_info instead.
gluster_heal_info:
deprecation:
removal_version: 3.0.0
warning_text: The gluster modules have migrated to the gluster.gluster collection. Use gluster.gluster.gluster_heal_info instead.
gluster_peer:
deprecation:
removal_version: 3.0.0
warning_text: The gluster modules have migrated to the gluster.gluster collection. Use gluster.gluster.gluster_peer instead.
gluster_volume:
deprecation:
removal_version: 3.0.0
warning_text: The gluster modules have migrated to the gluster.gluster collection. Use gluster.gluster.gluster_volume instead.
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.
hetzner_failover_ip:
redirect: community.hrobot.failover_ip
hetzner_failover_ip_info:
redirect: community.hrobot.failover_ip_info
hetzner_firewall:
redirect: community.hrobot.firewall
hetzner_firewall_info:
redirect: community.hrobot.firewall_info
hpilo_facts:
deprecation:
removal_version: 3.0.0
@@ -203,26 +311,44 @@ plugin_routing:
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:
tombstone:
deprecation:
removal_version: 2.0.0
warning_text: Use the modules from the theforeman.foreman collection instead.
kubevirt_cdi_upload:
redirect: community.kubevirt.kubevirt_cdi_upload
kubevirt_preset:
redirect: community.kubevirt.kubevirt_preset
kubevirt_pvc:
redirect: community.kubevirt.kubevirt_pvc
kubevirt_rs:
redirect: community.kubevirt.kubevirt_rs
kubevirt_template:
redirect: community.kubevirt.kubevirt_template
kubevirt_vm:
redirect: community.kubevirt.kubevirt_vm
warning_text: see plugin documentation for details
ldap_attr:
deprecation:
removal_version: 3.0.0
@@ -243,38 +369,68 @@ plugin_routing:
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:
tombstone:
deprecation:
removal_version: 2.0.0
warning_text: Use netapp.ontap.na_ontap_aggregate instead.
warning_text: see plugin documentation for details
na_cdot_license:
tombstone:
deprecation:
removal_version: 2.0.0
warning_text: Use netapp.ontap.na_ontap_license instead.
warning_text: see plugin documentation for details
na_cdot_lun:
tombstone:
deprecation:
removal_version: 2.0.0
warning_text: Use netapp.ontap.na_ontap_lun instead.
warning_text: see plugin documentation for details
na_cdot_qtree:
tombstone:
deprecation:
removal_version: 2.0.0
warning_text: Use netapp.ontap.na_ontap_qtree instead.
warning_text: see plugin documentation for details
na_cdot_svm:
tombstone:
deprecation:
removal_version: 2.0.0
warning_text: Use netapp.ontap.na_ontap_svm instead.
warning_text: see plugin documentation for details
na_cdot_user:
tombstone:
deprecation:
removal_version: 2.0.0
warning_text: Use netapp.ontap.na_ontap_user instead.
warning_text: see plugin documentation for details
na_cdot_user_role:
tombstone:
deprecation:
removal_version: 2.0.0
warning_text: Use netapp.ontap.na_ontap_user_role instead.
warning_text: see plugin documentation for details
na_cdot_volume:
tombstone:
deprecation:
removal_version: 2.0.0
warning_text: Use netapp.ontap.na_ontap_volume instead.
warning_text: see plugin documentation for details
na_ontap_gather_facts:
deprecation:
removal_version: 3.0.0
@@ -431,50 +587,41 @@ plugin_routing:
deprecation:
removal_version: 3.0.0
warning_text: see plugin documentation for details
postgresql_copy:
redirect: community.postgresql.postgresql_copy
postgresql_db:
redirect: community.postgresql.postgresql_db
postgresql_ext:
redirect: community.postgresql.postgresql_ext
postgresql_idx:
redirect: community.postgresql.postgresql_idx
postgresql_info:
redirect: community.postgresql.postgresql_info
postgresql_lang:
redirect: community.postgresql.postgresql_lang
postgresql_membership:
redirect: community.postgresql.postgresql_membership
postgresql_owner:
redirect: community.postgresql.postgresql_owner
postgresql_pg_hba:
redirect: community.postgresql.postgresql_pg_hba
postgresql_ping:
redirect: community.postgresql.postgresql_ping
postgresql_privs:
redirect: community.postgresql.postgresql_privs
postgresql_publication:
redirect: community.postgresql.postgresql_publication
postgresql_query:
redirect: community.postgresql.postgresql_query
postgresql_schema:
redirect: community.postgresql.postgresql_schema
postgresql_sequence:
redirect: community.postgresql.postgresql_sequence
postgresql_set:
redirect: community.postgresql.postgresql_set
postgresql_slot:
redirect: community.postgresql.postgresql_slot
postgresql_subscription:
redirect: community.postgresql.postgresql_subscription
postgresql_table:
redirect: community.postgresql.postgresql_table
postgresql_tablespace:
redirect: community.postgresql.postgresql_tablespace
postgresql_user_obj_stat_info:
redirect: community.postgresql.postgresql_user_obj_stat_info
postgresql_user:
redirect: community.postgresql.postgresql_user
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
@@ -520,25 +667,25 @@ plugin_routing:
removal_version: 3.0.0
warning_text: see plugin documentation for details
sf_account_manager:
tombstone:
deprecation:
removal_version: 2.0.0
warning_text: Use netapp.elementsw.na_elementsw_account instead.
warning_text: see plugin documentation for details
sf_check_connections:
tombstone:
deprecation:
removal_version: 2.0.0
warning_text: Use netapp.elementsw.na_elementsw_check_connections instead.
warning_text: see plugin documentation for details
sf_snapshot_schedule_manager:
tombstone:
deprecation:
removal_version: 2.0.0
warning_text: Use netapp.elementsw.na_elementsw_snapshot_schedule instead.
warning_text: see plugin documentation for details
sf_volume_access_group_manager:
tombstone:
deprecation:
removal_version: 2.0.0
warning_text: Use netapp.elementsw.na_elementsw_access_group instead.
warning_text: see plugin documentation for details
sf_volume_manager:
tombstone:
deprecation:
removal_version: 2.0.0
warning_text: Use netapp.elementsw.na_elementsw_volume instead.
warning_text: see plugin documentation for details
smartos_image_facts:
deprecation:
removal_version: 3.0.0
@@ -552,52 +699,57 @@ plugin_routing:
removal_version: 3.0.0
warning_text: see plugin documentation for details
doc_fragments:
_gcp:
redirect: community.google._gcp
docker:
redirect: community.docker.docker
hetzner:
redirect: community.hrobot.robot
kubevirt_common_options:
redirect: community.kubevirt.kubevirt_common_options
kubevirt_vm_options:
redirect: community.kubevirt.kubevirt_vm_options
postgresql:
redirect: community.postgresql.postgresql
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:
docker.common:
redirect: community.docker.common
docker.swarm:
redirect: community.docker.swarm
gcdns:
redirect: community.google.gcdns
gce:
redirect: community.google.gce
gcp:
redirect: community.google.gcp
hetzner:
redirect: community.hrobot.robot
kubevirt:
redirect: community.kubevirt.kubevirt
postgresql:
redirect: community.postgresql.postgresql
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
callback:
actionable:
tombstone:
deprecation:
removal_version: 2.0.0
warning_text: Use the 'default' callback plugin with 'display_skipped_hosts = no' and 'display_ok_hosts = no' options.
warning_text: see plugin documentation for details
full_skip:
tombstone:
deprecation:
removal_version: 2.0.0
warning_text: Use the 'default' callback plugin with 'display_skipped_hosts = no' option.
warning_text: see plugin documentation for details
stderr:
tombstone:
deprecation:
removal_version: 2.0.0
warning_text: Use the 'default' callback plugin with 'display_failed_stderr = yes' option.
inventory:
docker_machine:
redirect: community.docker.docker_machine
docker_swarm:
redirect: community.docker.docker_swarm
kubevirt:
redirect: community.kubevirt.kubevirt
warning_text: see plugin documentation for details

View File

@@ -98,9 +98,25 @@ class ActionModule(ActionBase):
task_async,
max_timeout))
# inject the async directory based on the shell option into the
# module args
async_dir = self.get_shell_option('async_dir', default="~/.ansible_async")
# 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

View File

@@ -5,7 +5,7 @@ from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
DOCUMENTATION = '''
name: doas
become: doas
short_description: Do As user
description:
- This become plugins allows your remote/login user to execute commands as another user via the doas utility.

View File

@@ -4,7 +4,7 @@ from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
DOCUMENTATION = '''
name: dzdo
become: dzdo
short_description: Centrify's Direct Authorize
description:
- This become plugins allows your remote/login user to execute commands as another user via the dzdo utility.

View File

@@ -5,7 +5,7 @@ from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
DOCUMENTATION = '''
name: ksu
become: ksu
short_description: Kerberos substitute user
description:
- This become plugins allows your remote/login user to execute commands as another user via the ksu utility.

View File

@@ -5,7 +5,7 @@ from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
DOCUMENTATION = '''
name: machinectl
become: machinectl
short_description: Systemd's machinectl privilege escalation
description:
- This become plugins allows your remote/login user to execute commands as another user via the machinectl utility.

View File

@@ -5,7 +5,7 @@ from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
DOCUMENTATION = '''
name: pbrun
become: pbrun
short_description: PowerBroker run
description:
- This become plugins allows your remote/login user to execute commands as another user via the pbrun utility.

View File

@@ -5,7 +5,7 @@ from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
DOCUMENTATION = '''
name: pfexec
become: pfexec
short_description: profile based execution
description:
- This become plugins allows your remote/login user to execute commands as another user via the pfexec utility.

View File

@@ -5,7 +5,7 @@ from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
DOCUMENTATION = '''
name: pmrun
become: pmrun
short_description: Privilege Manager run
description:
- This become plugins allows your remote/login user to execute commands as another user via the pmrun utility.

View File

@@ -5,7 +5,7 @@ from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
DOCUMENTATION = '''
name: sesu
become: sesu
short_description: CA Privileged Access Manager
description:
- This become plugins allows your remote/login user to execute commands as another user via the sesu utility.

View File

@@ -7,7 +7,7 @@ __metaclass__ = type
DOCUMENTATION = '''
author: Unknown (!UNKNOWN)
name: memcached
cache: memcached
short_description: Use memcached DB for cache
description:
- This cache uses JSON formatted, per host records saved in memcached.
@@ -53,7 +53,6 @@ from ansible import constants as C
from ansible.errors import AnsibleError
from ansible.module_utils.common._collections_compat import MutableSet
from ansible.plugins.cache import BaseCacheModule
from ansible.release import __version__ as ansible_base_version
from ansible.utils.display import Display
try:
@@ -181,9 +180,9 @@ class CacheModule(BaseCacheModule):
self._timeout = self.get_option('_timeout')
self._prefix = self.get_option('_prefix')
except KeyError:
# TODO: remove once we no longer support Ansible 2.9
if not ansible_base_version.startswith('2.9.'):
raise AnsibleError("Do not import CacheModules directly. Use ansible.plugins.loader.cache_loader instead.")
display.deprecated('Rather than importing CacheModules directly, '
'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

@@ -7,7 +7,7 @@ from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
DOCUMENTATION = '''
name: pickle
cache: pickle
short_description: Pickle formatted files.
description:
- This cache uses Python's pickle serialization format, in per host files, saved to the filesystem.

View File

@@ -6,7 +6,7 @@ __metaclass__ = type
DOCUMENTATION = '''
author: Unknown (!UNKNOWN)
name: redis
cache: redis
short_description: Use Redis DB for cache
description:
- This cache uses JSON formatted, per host records saved in Redis.
@@ -69,7 +69,6 @@ from ansible.errors import AnsibleError
from ansible.module_utils._text import to_native
from ansible.parsing.ajson import AnsibleJSONEncoder, AnsibleJSONDecoder
from ansible.plugins.cache import BaseCacheModule
from ansible.release import __version__ as ansible_base_version
from ansible.utils.display import Display
try:
@@ -104,9 +103,9 @@ class CacheModule(BaseCacheModule):
self._keys_set = self.get_option('_keyset_name')
self._sentinel_service_name = self.get_option('_sentinel_service_name')
except KeyError:
# TODO: remove once we no longer support Ansible 2.9
if not ansible_base_version.startswith('2.9.'):
raise AnsibleError("Do not import CacheModules directly. Use ansible.plugins.loader.cache_loader instead.")
display.deprecated('Rather than importing CacheModules directly, '
'use ansible.plugins.loader.cache_loader',
version='2.0.0', collection_name='community.general') # was Ansible 2.12
if C.CACHE_PLUGIN_CONNECTION:
uri = C.CACHE_PLUGIN_CONNECTION
self._timeout = float(C.CACHE_PLUGIN_TIMEOUT)

View File

@@ -7,7 +7,7 @@ from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
DOCUMENTATION = '''
name: yaml
cache: yaml
short_description: YAML formatted files.
description:
- This cache uses YAML formatted, per host, files saved to the filesystem.

View File

@@ -0,0 +1,61 @@
# (c) 2015, Andrew Gaffney <andrew@agaffney.org>
# (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 = '''
author: Unknown (!UNKNOWN)
callback: actionable
type: stdout
short_description: shows only items that need attention
description:
- Use this callback when you dont care about OK nor Skipped.
- This callback suppresses any non Failed or Changed status.
deprecated:
why: The 'default' callback plugin now supports this functionality
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
requirements:
- set as stdout callback in configuration
# Override defaults from 'default' callback plugin
options:
display_skipped_hosts:
name: Show skipped hosts
description: "Toggle to control displaying skipped task/host results in a task"
type: bool
default: no
env:
- name: DISPLAY_SKIPPED_HOSTS
deprecated:
why: environment variables without "ANSIBLE_" prefix are deprecated
version: "2.0.0" # was Ansible 2.12
alternatives: the "ANSIBLE_DISPLAY_SKIPPED_HOSTS" environment variable
- name: ANSIBLE_DISPLAY_SKIPPED_HOSTS
ini:
- key: display_skipped_hosts
section: defaults
display_ok_hosts:
name: Show 'ok' hosts
description: "Toggle to control displaying 'ok' task/host results in a task"
type: bool
default: no
env:
- name: ANSIBLE_DISPLAY_OK_HOSTS
ini:
- key: display_ok_hosts
section: defaults
'''
from ansible.plugins.callback.default import CallbackModule as CallbackModule_default
class CallbackModule(CallbackModule_default):
CALLBACK_VERSION = 2.0
CALLBACK_TYPE = 'stdout'
CALLBACK_NAME = 'community.general.actionable'

View File

@@ -8,7 +8,7 @@ __metaclass__ = type
DOCUMENTATION = '''
author: Unknown (!UNKNOWN)
name: cgroup_memory_recap
callback: cgroup_memory_recap
type: aggregate
requirements:
- whitelist in configuration

View File

@@ -7,7 +7,7 @@ __metaclass__ = type
DOCUMENTATION = '''
author: Unknown (!UNKNOWN)
name: context_demo
callback: context_demo
type: aggregate
short_description: demo callback that adds play/task context
description:

View File

@@ -9,7 +9,7 @@ __metaclass__ = type
DOCUMENTATION = '''
author: Unknown (!UNKNOWN)
name: counter_enabled
callback: counter_enabled
type: stdout
short_description: adds counters to the output items (tasks and hosts/task)
description:

View File

@@ -6,7 +6,7 @@ from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
DOCUMENTATION = '''
name: dense
callback: dense
type: stdout
short_description: minimal stdout output
extends_documentation_fragment:

View File

@@ -7,7 +7,7 @@ from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
DOCUMENTATION = r'''
name: diy
callback: diy
type: stdout
short_description: Customize the output
version_added: 0.2.0

View File

@@ -0,0 +1,76 @@
# (c) 2012-2014, Michael DeHaan <michael.dehaan@gmail.com>
# (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 = '''
author: Unknown (!UNKNOWN)
callback: full_skip
type: stdout
short_description: suppresses tasks if all hosts skipped
description:
- 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.0.0' # was Ansible 2.11
alternative: "'default' callback plugin with 'display_skipped_hosts = no' option"
extends_documentation_fragment:
- default_callback
requirements:
- set as stdout in configuration
'''
from ansible.plugins.callback.default import CallbackModule as CallbackModule_default
class CallbackModule(CallbackModule_default):
'''
This is the default callback interface, which simply prints messages
to stdout when new callback events are received.
'''
CALLBACK_VERSION = 2.0
CALLBACK_TYPE = 'stdout'
CALLBACK_NAME = 'community.general.full_skip'
def v2_runner_on_skipped(self, result):
self.outlines = []
def v2_playbook_item_on_skipped(self, result):
self.outlines = []
def v2_runner_item_on_skipped(self, result):
self.outlines = []
def v2_runner_on_failed(self, result, ignore_errors=False):
self.display()
super(CallbackModule, self).v2_runner_on_failed(result, ignore_errors)
def v2_playbook_on_task_start(self, task, is_conditional):
self.outlines = []
self.outlines.append("TASK [%s]" % task.get_name().strip())
if self._display.verbosity >= 2:
path = task.get_path()
if path:
self.outlines.append("task path: %s" % path)
def v2_playbook_item_on_ok(self, result):
self.display()
super(CallbackModule, self).v2_playbook_item_on_ok(result)
def v2_runner_on_ok(self, result):
self.display()
super(CallbackModule, self).v2_runner_on_ok(result)
def display(self):
if len(self.outlines) == 0:
return
(first, rest) = self.outlines[0], self.outlines[1:]
self._display.banner(first)
for line in rest:
self._display.display(line)
self.outlines = []

View File

@@ -7,7 +7,7 @@ __metaclass__ = type
DOCUMENTATION = '''
author: Unknown (!UNKNOWN)
name: hipchat
callback: hipchat
type: notification
requirements:
- whitelist in configuration.
@@ -173,7 +173,8 @@ class CallbackModule(CallbackBase):
# Displays info about playbook being started by a person on an
# inventory, as well as Tags, Skip Tags and Limits
if not self.printed_playbook:
self.playbook_name, dummy = os.path.splitext(os.path.basename(self.play.playbook.filename))
self.playbook_name, _ = os.path.splitext(
os.path.basename(self.play.playbook.filename))
host_list = self.play.playbook.inventory.host_list
inventory = os.path.basename(os.path.realpath(host_list))
self.send_msg("%s: Playbook initiated by %s against %s" %

View File

@@ -7,7 +7,7 @@ __metaclass__ = type
DOCUMENTATION = '''
author: Unknown (!UNKNOWN)
name: jabber
callback: jabber
type: notification
short_description: post task events to a jabber server
description:

View File

@@ -7,7 +7,7 @@ __metaclass__ = type
DOCUMENTATION = '''
author: Unknown (!UNKNOWN)
name: log_plays
callback: log_plays
type: notification
short_description: write playbook output to log file
description:

View File

@@ -6,7 +6,7 @@ __metaclass__ = type
DOCUMENTATION = '''
author: Unknown (!UNKNOWN)
name: logdna
callback: logdna
type: aggregate
short_description: Sends playbook logs to LogDNA
description:

View File

@@ -6,7 +6,7 @@ __metaclass__ = type
DOCUMENTATION = '''
author: Unknown (!UNKNOWN)
name: logentries
callback: logentries
type: notification
short_description: Sends events to Logentries
description:

View File

@@ -1,13 +1,13 @@
# (C) 2020, Yevhen Khmelenko <ujenmr@gmail.com>
# (C) 2016, Ievgen Khmelenko <ujenmr@gmail.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 = r'''
author: Yevhen Khmelenko (@ujenmr)
name: logstash
DOCUMENTATION = '''
author: Unknown (!UNKNOWN)
callback: logstash
type: notification
short_description: Sends events to Logstash
description:
@@ -43,61 +43,16 @@ DOCUMENTATION = r'''
key: type
version_added: 1.0.0
default: ansible
pre_command:
description: Executes command before run and result put to ansible_pre_command_output field.
version_added: 2.0.0
ini:
- section: callback_logstash
key: pre_command
env:
- name: LOGSTASH_PRE_COMMAND
format_version:
description: Logging format
type: str
version_added: 2.0.0
ini:
- section: callback_logstash
key: format_version
env:
- name: LOGSTASH_FORMAT_VERSION
default: v1
choices:
- v1
- v2
'''
EXAMPLES = r'''
ansible.cfg: |
# Enable Callback plugin
[defaults]
callback_whitelist = community.general.logstash
[callback_logstash]
server = logstash.example.com
port = 5000
pre_command = git rev-parse HEAD
type = ansible
11-input-tcp.conf: |
# Enable Logstash TCP Input
input {
tcp {
port => 5000
codec => json
add_field => { "[@metadata][beat]" => "notify" }
add_field => { "[@metadata][type]" => "ansible" }
}
}
'''
import os
import json
import socket
import uuid
import logging
from datetime import datetime
import logging
try:
import logstash
HAS_LOGSTASH = True
@@ -108,78 +63,76 @@ from ansible.plugins.callback import CallbackBase
class CallbackModule(CallbackBase):
"""
ansible logstash callback plugin
ansible.cfg:
callback_plugins = <path_to_callback_plugins_folder>
callback_whitelist = logstash
and put the plugin in <path_to_callback_plugins_folder>
logstash config:
input {
tcp {
port => 5000
codec => json
}
}
Requires:
python-logstash
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
"""
CALLBACK_VERSION = 2.0
CALLBACK_TYPE = 'aggregate'
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/python3-logstash is not installed. "
"pip install python-logstash for Python 2"
"pip install python3-logstash for Python 3")
self._display.warning("The required python-logstash is not installed. "
"pip install python-logstash")
self.start_time = datetime.utcnow()
def _init_plugin(self):
if not self.disabled:
self.logger = logging.getLogger('python-logstash-logger')
self.logger.setLevel(logging.DEBUG)
self.handler = logstash.TCPLogstashHandler(
self.ls_server,
self.ls_port,
version=1,
message_type=self.ls_type
)
self.logger.addHandler(self.handler)
self.hostname = socket.gethostname()
self.session = str(uuid.uuid4())
self.errors = 0
self.base_data = {
'session': self.session,
'host': self.hostname
}
if self.ls_pre_command is not None:
self.base_data['ansible_pre_command_output'] = os.popen(
self.ls_pre_command).read()
if self._options is not None:
self.base_data['ansible_checkmode'] = self._options.check
self.base_data['ansible_tags'] = self._options.tags
self.base_data['ansible_skip_tags'] = self._options.skip_tags
self.base_data['inventory'] = self._options.inventory
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.ls_server = self.get_option('server')
self.ls_port = int(self.get_option('port'))
self.ls_type = self.get_option('type')
self.ls_pre_command = self.get_option('pre_command')
self.ls_format_version = self.get_option('format_version')
self.logger = logging.getLogger('python-logstash-logger')
self.logger.setLevel(logging.DEBUG)
self._init_plugin()
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):
data = self.base_data.copy()
data['ansible_type'] = "start"
data['status'] = "OK"
data['ansible_playbook'] = playbook._file_name
if (self.ls_format_version == "v2"):
self.logger.info(
"START PLAYBOOK | %s", data['ansible_playbook'], extra=data
)
else:
self.logger.info("ansible start", extra=data)
self.playbook = playbook._file_name
data = {
'status': "OK",
'host': self.hostname,
'session': self.session,
'ansible_type': "start",
'ansible_playbook': self.playbook,
}
self.logger.info("ansible start", extra=data)
def v2_playbook_on_stats(self, stats):
end_time = datetime.utcnow()
@@ -193,201 +146,103 @@ class CallbackModule(CallbackBase):
else:
status = "FAILED"
data = self.base_data.copy()
data['ansible_type'] = "finish"
data['status'] = status
data['ansible_playbook_duration'] = runtime.total_seconds()
data['ansible_result'] = json.dumps(summarize_stat) # deprecated field
if (self.ls_format_version == "v2"):
self.logger.info(
"FINISH PLAYBOOK | %s", json.dumps(summarize_stat), extra=data
)
else:
self.logger.info("ansible stats", extra=data)
def v2_playbook_on_play_start(self, play):
self.play_id = str(play._uuid)
if play.name:
self.play_name = play.name
data = self.base_data.copy()
data['ansible_type'] = "start"
data['status'] = "OK"
data['ansible_play_id'] = self.play_id
data['ansible_play_name'] = self.play_name
if (self.ls_format_version == "v2"):
self.logger.info("START PLAY | %s", self.play_name, extra=data)
else:
self.logger.info("ansible play", extra=data)
def v2_playbook_on_task_start(self, task, is_conditional):
self.task_id = str(task._uuid)
'''
Tasks and handler tasks are dealt with here
'''
data = {
'status': status,
'host': self.hostname,
'session': self.session,
'ansible_type': "finish",
'ansible_playbook': self.playbook,
'ansible_playbook_duration': runtime.total_seconds(),
'ansible_result': json.dumps(summarize_stat),
}
self.logger.info("ansible stats", extra=data)
def v2_runner_on_ok(self, result, **kwargs):
task_name = str(result._task).replace('TASK: ', '').replace('HANDLER: ', '')
data = self.base_data.copy()
if task_name == 'setup':
data['ansible_type'] = "setup"
data['status'] = "OK"
data['ansible_host'] = result._host.name
data['ansible_play_id'] = self.play_id
data['ansible_play_name'] = self.play_name
data['ansible_task'] = task_name
data['ansible_facts'] = self._dump_results(result._result)
if (self.ls_format_version == "v2"):
self.logger.info(
"SETUP FACTS | %s", self._dump_results(result._result), extra=data
)
else:
self.logger.info("ansible facts", extra=data)
else:
if 'changed' in result._result.keys():
data['ansible_changed'] = result._result['changed']
else:
data['ansible_changed'] = False
data['ansible_type'] = "task"
data['status'] = "OK"
data['ansible_host'] = result._host.name
data['ansible_play_id'] = self.play_id
data['ansible_play_name'] = self.play_name
data['ansible_task'] = task_name
data['ansible_task_id'] = self.task_id
data['ansible_result'] = self._dump_results(result._result)
if (self.ls_format_version == "v2"):
self.logger.info(
"TASK OK | %s | RESULT | %s",
task_name, self._dump_results(result._result), extra=data
)
else:
self.logger.info("ansible ok", extra=data)
data = {
'status': "OK",
'host': self.hostname,
'session': self.session,
'ansible_type': "task",
'ansible_playbook': self.playbook,
'ansible_host': result._host.name,
'ansible_task': result._task,
'ansible_result': self._dump_results(result._result)
}
self.logger.info("ansible ok", extra=data)
def v2_runner_on_skipped(self, result, **kwargs):
task_name = str(result._task).replace('TASK: ', '').replace('HANDLER: ', '')
data = self.base_data.copy()
data['ansible_type'] = "task"
data['status'] = "SKIPPED"
data['ansible_host'] = result._host.name
data['ansible_play_id'] = self.play_id
data['ansible_play_name'] = self.play_name
data['ansible_task'] = task_name
data['ansible_task_id'] = self.task_id
data['ansible_result'] = self._dump_results(result._result)
if (self.ls_format_version == "v2"):
self.logger.info("TASK SKIPPED | %s", task_name, extra=data)
else:
self.logger.info("ansible skipped", extra=data)
data = {
'status': "SKIPPED",
'host': self.hostname,
'session': self.session,
'ansible_type': "task",
'ansible_playbook': self.playbook,
'ansible_task': result._task,
'ansible_host': result._host.name
}
self.logger.info("ansible skipped", extra=data)
def v2_playbook_on_import_for_host(self, result, imported_file):
data = self.base_data.copy()
data['ansible_type'] = "import"
data['status'] = "IMPORTED"
data['ansible_host'] = result._host.name
data['ansible_play_id'] = self.play_id
data['ansible_play_name'] = self.play_name
data['imported_file'] = imported_file
if (self.ls_format_version == "v2"):
self.logger.info("IMPORT | %s", imported_file, extra=data)
else:
self.logger.info("ansible import", extra=data)
data = {
'status': "IMPORTED",
'host': self.hostname,
'session': self.session,
'ansible_type': "import",
'ansible_playbook': self.playbook,
'ansible_host': result._host.name,
'imported_file': imported_file
}
self.logger.info("ansible import", extra=data)
def v2_playbook_on_not_import_for_host(self, result, missing_file):
data = self.base_data.copy()
data['ansible_type'] = "import"
data['status'] = "NOT IMPORTED"
data['ansible_host'] = result._host.name
data['ansible_play_id'] = self.play_id
data['ansible_play_name'] = self.play_name
data['imported_file'] = missing_file
if (self.ls_format_version == "v2"):
self.logger.info("NOT IMPORTED | %s", missing_file, extra=data)
else:
self.logger.info("ansible import", extra=data)
data = {
'status': "NOT IMPORTED",
'host': self.hostname,
'session': self.session,
'ansible_type': "import",
'ansible_playbook': self.playbook,
'ansible_host': result._host.name,
'missing_file': missing_file
}
self.logger.info("ansible import", extra=data)
def v2_runner_on_failed(self, result, **kwargs):
task_name = str(result._task).replace('TASK: ', '').replace('HANDLER: ', '')
data = self.base_data.copy()
if 'changed' in result._result.keys():
data['ansible_changed'] = result._result['changed']
else:
data['ansible_changed'] = False
data['ansible_type'] = "task"
data['status'] = "FAILED"
data['ansible_host'] = result._host.name
data['ansible_play_id'] = self.play_id
data['ansible_play_name'] = self.play_name
data['ansible_task'] = task_name
data['ansible_task_id'] = self.task_id
data['ansible_result'] = self._dump_results(result._result)
data = {
'status': "FAILED",
'host': self.hostname,
'session': self.session,
'ansible_type': "task",
'ansible_playbook': self.playbook,
'ansible_host': result._host.name,
'ansible_task': result._task,
'ansible_result': self._dump_results(result._result)
}
self.errors += 1
if (self.ls_format_version == "v2"):
self.logger.error(
"TASK FAILED | %s | HOST | %s | RESULT | %s",
task_name, self.hostname,
self._dump_results(result._result), extra=data
)
else:
self.logger.error("ansible failed", extra=data)
self.logger.error("ansible failed", extra=data)
def v2_runner_on_unreachable(self, result, **kwargs):
task_name = str(result._task).replace('TASK: ', '').replace('HANDLER: ', '')
data = self.base_data.copy()
data['ansible_type'] = "task"
data['status'] = "UNREACHABLE"
data['ansible_host'] = result._host.name
data['ansible_play_id'] = self.play_id
data['ansible_play_name'] = self.play_name
data['ansible_task'] = task_name
data['ansible_task_id'] = self.task_id
data['ansible_result'] = self._dump_results(result._result)
self.errors += 1
if (self.ls_format_version == "v2"):
self.logger.error(
"UNREACHABLE | %s | HOST | %s | RESULT | %s",
task_name, self.hostname,
self._dump_results(result._result), extra=data
)
else:
self.logger.error("ansible unreachable", extra=data)
data = {
'status': "UNREACHABLE",
'host': self.hostname,
'session': self.session,
'ansible_type': "task",
'ansible_playbook': self.playbook,
'ansible_host': result._host.name,
'ansible_task': result._task,
'ansible_result': self._dump_results(result._result)
}
self.logger.error("ansible unreachable", extra=data)
def v2_runner_on_async_failed(self, result, **kwargs):
task_name = str(result._task).replace('TASK: ', '').replace('HANDLER: ', '')
data = self.base_data.copy()
data['ansible_type'] = "task"
data['status'] = "FAILED"
data['ansible_host'] = result._host.name
data['ansible_play_id'] = self.play_id
data['ansible_play_name'] = self.play_name
data['ansible_task'] = task_name
data['ansible_task_id'] = self.task_id
data['ansible_result'] = self._dump_results(result._result)
data = {
'status': "FAILED",
'host': self.hostname,
'session': self.session,
'ansible_type': "task",
'ansible_playbook': self.playbook,
'ansible_host': result._host.name,
'ansible_task': result._task,
'ansible_result': self._dump_results(result._result)
}
self.errors += 1
if (self.ls_format_version == "v2"):
self.logger.error(
"ASYNC FAILED | %s | HOST | %s | RESULT | %s",
task_name, self.hostname,
self._dump_results(result._result), extra=data
)
else:
self.logger.error("ansible async", extra=data)
self.logger.error("ansible async", extra=data)

View File

@@ -7,7 +7,7 @@ from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
DOCUMENTATION = '''
name: mail
callback: mail
type: notification
short_description: Sends failure events via email
description:

View File

@@ -7,7 +7,7 @@ from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
DOCUMENTATION = '''
name: nrdp
callback: nrdp
type: notification
author: "Remi VERCHERE (@rverchere)"
short_description: post task result to a nagios server through nrdp

View File

@@ -7,7 +7,7 @@ __metaclass__ = type
DOCUMENTATION = '''
author: Unknown (!UNKNOWN)
name: 'null'
callback: 'null'
type: stdout
requirements:
- set as main display callback

View File

@@ -8,7 +8,7 @@ __metaclass__ = type
DOCUMENTATION = '''
author: Unknown (!UNKNOWN)
name: say
callback: say
type: notification
requirements:
- whitelisting in configuration

View File

@@ -7,7 +7,7 @@ __metaclass__ = type
DOCUMENTATION = '''
author: Unknown (!UNKNOWN)
name: selective
callback: selective
type: stdout
requirements:
- set as main display callback
@@ -41,16 +41,7 @@ import difflib
from ansible import constants as C
from ansible.plugins.callback import CallbackBase
from ansible.module_utils._text import to_text
try:
codeCodes = C.COLOR_CODES
except AttributeError:
# This constant was moved to ansible.constants in
# https://github.com/ansible/ansible/commit/1202dd000f10b0e8959019484f1c3b3f9628fc67
# (will be included in ansible-core 2.11.0). For older Ansible/ansible-base versions,
# we include from the original location.
from ansible.utils.color import codeCodes
from ansible.utils.color import codeCodes
DONT_COLORIZE = False
COLORS = {

View File

@@ -8,7 +8,7 @@ __metaclass__ = type
DOCUMENTATION = '''
author: Unknown (!UNKNOWN)
name: slack
callback: slack
type: notification
requirements:
- whitelist in configuration

View File

@@ -18,7 +18,7 @@ from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
DOCUMENTATION = '''
name: splunk
callback: splunk
type: aggregate
short_description: Sends task result events to Splunk HTTP Event Collector
author: "Stuart Hirst (!UNKNOWN) <support@convergingdata.com>"
@@ -57,17 +57,6 @@ DOCUMENTATION = '''
type: bool
default: true
version_added: '1.0.0'
include_milliseconds:
description: Whether to include milliseconds as part of the generated timestamp field in the event
sent to the Splunk HTTP collector
env:
- name: SPLUNK_INCLUDE_MILLISECONDS
ini:
- section: callback_splunk
key: include_milliseconds
type: bool
default: false
version_added: 2.0.0
'''
EXAMPLES = '''
@@ -107,7 +96,7 @@ class SplunkHTTPCollectorSource(object):
self.ip_address = socket.gethostbyname(socket.gethostname())
self.user = getpass.getuser()
def send_event(self, url, authtoken, validate_certs, include_milliseconds, 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
@@ -127,13 +116,8 @@ class SplunkHTTPCollectorSource(object):
data['uuid'] = result._task._uuid
data['session'] = self.session
data['status'] = state
if include_milliseconds:
time_format = '%Y-%m-%d %H:%M:%S.%f +0000'
else:
time_format = '%Y-%m-%d %H:%M:%S +0000'
data['timestamp'] = datetime.utcnow().strftime(time_format)
data['timestamp'] = datetime.utcnow().strftime('%Y-%m-%d %H:%M:%S '
'+0000')
data['host'] = self.host
data['ip_address'] = self.ip_address
data['user'] = self.user
@@ -174,7 +158,6 @@ class CallbackModule(CallbackBase):
self.url = None
self.authtoken = None
self.validate_certs = None
self.include_milliseconds = None
self.splunk = SplunkHTTPCollectorSource()
def _runtime(self, result):
@@ -210,8 +193,6 @@ class CallbackModule(CallbackBase):
self.validate_certs = self.get_option('validate_certs')
self.include_milliseconds = self.get_option('include_milliseconds')
def v2_playbook_on_start(self, playbook):
self.splunk.ansible_playbook = basename(playbook._file_name)
@@ -226,7 +207,6 @@ class CallbackModule(CallbackBase):
self.url,
self.authtoken,
self.validate_certs,
self.include_milliseconds,
'OK',
result,
self._runtime(result)
@@ -237,7 +217,6 @@ class CallbackModule(CallbackBase):
self.url,
self.authtoken,
self.validate_certs,
self.include_milliseconds,
'SKIPPED',
result,
self._runtime(result)
@@ -248,7 +227,6 @@ class CallbackModule(CallbackBase):
self.url,
self.authtoken,
self.validate_certs,
self.include_milliseconds,
'FAILED',
result,
self._runtime(result)
@@ -259,7 +237,6 @@ class CallbackModule(CallbackBase):
self.url,
self.authtoken,
self.validate_certs,
self.include_milliseconds,
'FAILED',
result,
self._runtime(result)
@@ -270,7 +247,6 @@ class CallbackModule(CallbackBase):
self.url,
self.authtoken,
self.validate_certs,
self.include_milliseconds,
'UNREACHABLE',
result,
self._runtime(result)

View File

@@ -0,0 +1,71 @@
# (c) 2017, Frederic Van Espen <github@freh.be>
# (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 = '''
author: Unknown (!UNKNOWN)
callback: stderr
type: stdout
requirements:
- set as main display callback
short_description: Splits output, sending failed tasks to stderr
deprecated:
why: The 'default' callback plugin now supports this functionality
removed_in: '2.0.0' # was Ansible 2.11
alternative: "'default' callback plugin with 'display_failed_stderr = yes' option"
extends_documentation_fragment:
- default_callback
description:
- This is the stderr callback plugin, it behaves like the default callback plugin but sends error output to stderr.
- Also it does not output skipped host/task/item status
'''
from ansible import constants as C
from ansible.plugins.callback.default import CallbackModule as CallbackModule_default
class CallbackModule(CallbackModule_default):
'''
This is the stderr callback plugin, which reuses the default
callback plugin but sends error output to stderr.
'''
CALLBACK_VERSION = 2.0
CALLBACK_TYPE = 'stdout'
CALLBACK_NAME = 'community.general.stderr'
def __init__(self):
self.super_ref = super(CallbackModule, self)
self.super_ref.__init__()
def v2_runner_on_failed(self, result, ignore_errors=False):
delegated_vars = result._result.get('_ansible_delegated_vars', None)
self._clean_results(result._result, result._task.action)
if self._play.strategy == 'free' and self._last_task_banner != result._task._uuid:
self._print_task_banner(result._task)
self._handle_exception(result._result, use_stderr=True)
self._handle_warnings(result._result)
if result._task.loop and 'results' in result._result:
self._process_items(result)
else:
if delegated_vars:
self._display.display("fatal: [%s -> %s]: FAILED! => %s" % (result._host.get_name(), delegated_vars['ansible_host'],
self._dump_results(result._result)), color=C.COLOR_ERROR,
stderr=True)
else:
self._display.display("fatal: [%s]: FAILED! => %s" % (result._host.get_name(), self._dump_results(result._result)),
color=C.COLOR_ERROR, stderr=True)
if ignore_errors:
self._display.display("...ignoring", color=C.COLOR_SKIP)

View File

@@ -18,7 +18,7 @@ from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
DOCUMENTATION = '''
name: sumologic
callback: sumologic
type: aggregate
short_description: Sends task result events to Sumologic
author: "Ryan Currah (@ryancurrah)"

View File

@@ -7,7 +7,7 @@ __metaclass__ = type
DOCUMENTATION = '''
author: Unknown (!UNKNOWN)
name: syslog_json
callback: syslog_json
type: notification
requirements:
- whitelist in configuration

View File

@@ -7,7 +7,7 @@ from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
DOCUMENTATION = '''
name: unixy
callback: unixy
type: stdout
author: Allyson Bowles (@akatch)
short_description: condensed Ansible output

View File

@@ -7,7 +7,7 @@ __metaclass__ = type
DOCUMENTATION = '''
author: Unknown (!UNKNOWN)
name: yaml
callback: yaml
type: stdout
short_description: yaml-ized Ansible screen output
description:

View File

@@ -10,7 +10,7 @@ __metaclass__ = type
DOCUMENTATION = '''
author: Maykel Moya (!UNKNOWN) <mmoya@speedyrails.com>
name: chroot
connection: chroot
short_description: Interact with local chroot
description:
- Run commands or put/fetch files to an existing chroot on the Ansible controller.

View File

@@ -0,0 +1,364 @@
# Based on the chroot connection plugin by Maykel Moya
#
# (c) 2014, Lorin Hochstein
# (c) 2015, Leendert Brouwer (https://github.com/objectified)
# (c) 2015, Toshio Kuratomi <tkuratomi@ansible.com>
# Copyright (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:
- Lorin Hochestein (!UNKNOWN)
- Leendert Brouwer (!UNKNOWN)
connection: docker
short_description: Run tasks in docker containers
description:
- Run commands or put/fetch files to an existing docker container.
options:
remote_user:
description:
- The user to execute as inside the container
vars:
- name: ansible_user
- name: ansible_docker_user
docker_extra_args:
description:
- Extra arguments to pass to the docker command line
default: ''
remote_addr:
description:
- The name of the container you want to access.
default: inventory_hostname
vars:
- name: ansible_host
- name: ansible_docker_host
'''
import distutils.spawn
import fcntl
import os
import os.path
import subprocess
import re
from distutils.version import LooseVersion
import ansible.constants as C
from ansible.compat import selectors
from ansible.errors import AnsibleError, AnsibleFileNotFound
from ansible.module_utils.six.moves import shlex_quote
from ansible.module_utils._text import to_bytes, to_native, to_text
from ansible.plugins.connection import ConnectionBase, BUFSIZE
from ansible.utils.display import Display
display = Display()
class Connection(ConnectionBase):
''' Local docker based connections '''
transport = 'community.general.docker'
has_pipelining = True
def __init__(self, play_context, new_stdin, *args, **kwargs):
super(Connection, self).__init__(play_context, new_stdin, *args, **kwargs)
# Note: docker supports running as non-root in some configurations.
# (For instance, setting the UNIX socket file to be readable and
# writable by a specific UNIX group and then putting users into that
# group). Therefore we don't check that the user is root when using
# this connection. But if the user is getting a permission denied
# error it probably means that docker on their system is only
# configured to be connected to by root and they are not running as
# root.
# Windows uses Powershell modules
if getattr(self._shell, "_IS_WINDOWS", False):
self.module_implementation_preferences = ('.ps1', '.exe', '')
if 'docker_command' in kwargs:
self.docker_cmd = kwargs['docker_command']
else:
self.docker_cmd = distutils.spawn.find_executable('docker')
if not self.docker_cmd:
raise AnsibleError("docker command not found in PATH")
docker_version = self._get_docker_version()
if docker_version == u'dev':
display.warning(u'Docker version number is "dev". Will assume latest version.')
if docker_version != u'dev' and LooseVersion(docker_version) < LooseVersion(u'1.3'):
raise AnsibleError('docker connection type requires docker 1.3 or higher')
# The remote user we will request from docker (if supported)
self.remote_user = None
# The actual user which will execute commands in docker (if known)
self.actual_user = None
if self._play_context.remote_user is not None:
if docker_version == u'dev' or LooseVersion(docker_version) >= LooseVersion(u'1.7'):
# Support for specifying the exec user was added in docker 1.7
self.remote_user = self._play_context.remote_user
self.actual_user = self.remote_user
else:
self.actual_user = self._get_docker_remote_user()
if self.actual_user != self._play_context.remote_user:
display.warning(u'docker {0} does not support remote_user, using container default: {1}'
.format(docker_version, self.actual_user or u'?'))
elif self._display.verbosity > 2:
# Since we're not setting the actual_user, look it up so we have it for logging later
# Only do this if display verbosity is high enough that we'll need the value
# This saves overhead from calling into docker when we don't need to
self.actual_user = self._get_docker_remote_user()
@staticmethod
def _sanitize_version(version):
return re.sub(u'[^0-9a-zA-Z.]', u'', version)
def _old_docker_version(self):
cmd_args = []
if self._play_context.docker_extra_args:
cmd_args += self._play_context.docker_extra_args.split(' ')
old_version_subcommand = ['version']
old_docker_cmd = [self.docker_cmd] + cmd_args + old_version_subcommand
p = subprocess.Popen(old_docker_cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
cmd_output, err = p.communicate()
return old_docker_cmd, to_native(cmd_output), err, p.returncode
def _new_docker_version(self):
# no result yet, must be newer Docker version
cmd_args = []
if self._play_context.docker_extra_args:
cmd_args += self._play_context.docker_extra_args.split(' ')
new_version_subcommand = ['version', '--format', "'{{.Server.Version}}'"]
new_docker_cmd = [self.docker_cmd] + cmd_args + new_version_subcommand
p = subprocess.Popen(new_docker_cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
cmd_output, err = p.communicate()
return new_docker_cmd, to_native(cmd_output), err, p.returncode
def _get_docker_version(self):
cmd, cmd_output, err, returncode = self._old_docker_version()
if returncode == 0:
for line in to_text(cmd_output, errors='surrogate_or_strict').split(u'\n'):
if line.startswith(u'Server version:'): # old docker versions
return self._sanitize_version(line.split()[2])
cmd, cmd_output, err, returncode = self._new_docker_version()
if returncode:
raise AnsibleError('Docker version check (%s) failed: %s' % (to_native(cmd), to_native(err)))
return self._sanitize_version(to_text(cmd_output, errors='surrogate_or_strict'))
def _get_docker_remote_user(self):
""" Get the default user configured in the docker container """
p = subprocess.Popen([self.docker_cmd, 'inspect', '--format', '{{.Config.User}}', self._play_context.remote_addr],
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out, err = p.communicate()
out = to_text(out, errors='surrogate_or_strict')
if p.returncode != 0:
display.warning(u'unable to retrieve default user from docker container: %s %s' % (out, to_text(err)))
return None
# The default exec user is root, unless it was changed in the Dockerfile with USER
return out.strip() or u'root'
def _build_exec_cmd(self, cmd):
""" Build the local docker exec command to run cmd on remote_host
If remote_user is available and is supported by the docker
version we are using, it will be provided to docker exec.
"""
local_cmd = [self.docker_cmd]
if self._play_context.docker_extra_args:
local_cmd += self._play_context.docker_extra_args.split(' ')
local_cmd += [b'exec']
if self.remote_user is not None:
local_cmd += [b'-u', self.remote_user]
# -i is needed to keep stdin open which allows pipelining to work
local_cmd += [b'-i', self._play_context.remote_addr] + cmd
return local_cmd
def _connect(self, port=None):
""" Connect to the container. Nothing to do """
super(Connection, self)._connect()
if not self._connected:
display.vvv(u"ESTABLISH DOCKER CONNECTION FOR USER: {0}".format(
self.actual_user or u'?'), host=self._play_context.remote_addr
)
self._connected = True
def exec_command(self, cmd, in_data=None, sudoable=False):
""" Run a command on the docker host """
super(Connection, self).exec_command(cmd, in_data=in_data, sudoable=sudoable)
local_cmd = self._build_exec_cmd([self._play_context.executable, '-c', cmd])
display.vvv(u"EXEC {0}".format(to_text(local_cmd)), host=self._play_context.remote_addr)
display.debug("opening command with Popen()")
local_cmd = [to_bytes(i, errors='surrogate_or_strict') for i in local_cmd]
p = subprocess.Popen(
local_cmd,
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
)
display.debug("done running command with Popen()")
if self.become and self.become.expect_prompt() and sudoable:
fcntl.fcntl(p.stdout, fcntl.F_SETFL, fcntl.fcntl(p.stdout, fcntl.F_GETFL) | os.O_NONBLOCK)
fcntl.fcntl(p.stderr, fcntl.F_SETFL, fcntl.fcntl(p.stderr, fcntl.F_GETFL) | os.O_NONBLOCK)
selector = selectors.DefaultSelector()
selector.register(p.stdout, selectors.EVENT_READ)
selector.register(p.stderr, selectors.EVENT_READ)
become_output = b''
try:
while not self.become.check_success(become_output) and not self.become.check_password_prompt(become_output):
events = selector.select(self._play_context.timeout)
if not events:
stdout, stderr = p.communicate()
raise AnsibleError('timeout waiting for privilege escalation password prompt:\n' + to_native(become_output))
for key, event in events:
if key.fileobj == p.stdout:
chunk = p.stdout.read()
elif key.fileobj == p.stderr:
chunk = p.stderr.read()
if not chunk:
stdout, stderr = p.communicate()
raise AnsibleError('privilege output closed while waiting for password prompt:\n' + to_native(become_output))
become_output += chunk
finally:
selector.close()
if not self.become.check_success(become_output):
become_pass = self.become.get_option('become_pass', playcontext=self._play_context)
p.stdin.write(to_bytes(become_pass, errors='surrogate_or_strict') + b'\n')
fcntl.fcntl(p.stdout, fcntl.F_SETFL, fcntl.fcntl(p.stdout, fcntl.F_GETFL) & ~os.O_NONBLOCK)
fcntl.fcntl(p.stderr, fcntl.F_SETFL, fcntl.fcntl(p.stderr, fcntl.F_GETFL) & ~os.O_NONBLOCK)
display.debug("getting output with communicate()")
stdout, stderr = p.communicate(in_data)
display.debug("done communicating")
display.debug("done with docker.exec_command()")
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 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 """
super(Connection, self).put_file(in_path, out_path)
display.vvv("PUT %s TO %s" % (in_path, out_path), host=self._play_context.remote_addr)
out_path = self._prefix_login_path(out_path)
if not os.path.exists(to_bytes(in_path, errors='surrogate_or_strict')):
raise AnsibleFileNotFound(
"file or module does not exist: %s" % to_native(in_path))
out_path = shlex_quote(out_path)
# Older docker doesn't have native support for copying files into
# running containers, so we use docker exec to implement this
# Although docker version 1.8 and later provide support, the
# owner and group of the files are always set to root
with open(to_bytes(in_path, errors='surrogate_or_strict'), 'rb') as in_file:
if not os.fstat(in_file.fileno()).st_size:
count = ' count=0'
else:
count = ''
args = self._build_exec_cmd([self._play_context.executable, "-c", "dd of=%s bs=%s%s" % (out_path, BUFSIZE, count)])
args = [to_bytes(i, errors='surrogate_or_strict') for i in args]
try:
p = subprocess.Popen(args, stdin=in_file,
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
except OSError:
raise AnsibleError("docker connection requires dd command in the container to put files")
stdout, stderr = p.communicate()
if p.returncode != 0:
raise AnsibleError("failed to transfer file %s to %s:\n%s\n%s" %
(to_native(in_path), to_native(out_path), to_native(stdout), to_native(stderr)))
def fetch_file(self, in_path, out_path):
""" Fetch a file from container to local. """
super(Connection, self).fetch_file(in_path, out_path)
display.vvv("FETCH %s TO %s" % (in_path, out_path), host=self._play_context.remote_addr)
in_path = self._prefix_login_path(in_path)
# out_path is the final file path, but docker takes a directory, not a
# file path
out_dir = os.path.dirname(out_path)
args = [self.docker_cmd, "cp", "%s:%s" % (self._play_context.remote_addr, in_path), out_dir]
args = [to_bytes(i, errors='surrogate_or_strict') for i in args]
p = subprocess.Popen(args, stdin=subprocess.PIPE,
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
p.communicate()
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`
# If `cp` fails, try to use `dd` instead
args = self._build_exec_cmd([self._play_context.executable, "-c", "dd if=%s bs=%s" % (in_path, BUFSIZE)])
args = [to_bytes(i, errors='surrogate_or_strict') for i in args]
with open(to_bytes(actual_out_path, errors='surrogate_or_strict'), 'wb') as out_file:
try:
p = subprocess.Popen(args, stdin=subprocess.PIPE,
stdout=out_file, stderr=subprocess.PIPE)
except OSError:
raise AnsibleError("docker connection requires dd command in the container to put files")
stdout, stderr = p.communicate()
if p.returncode != 0:
raise AnsibleError("failed to fetch file %s to %s:\n%s\n%s" % (in_path, out_path, stdout, stderr))
# Rename if needed
if actual_out_path != out_path:
os.rename(to_bytes(actual_out_path, errors='strict'), to_bytes(out_path, errors='strict'))
def close(self):
""" Terminate the connection. Nothing to do for Docker"""
super(Connection, self).close()
self._connected = False

View File

@@ -9,7 +9,7 @@ __metaclass__ = type
DOCUMENTATION = '''
author: Michael Scherer (@msherer) <misc@zarb.org>
name: funcd
connection: funcd
short_description: Use funcd to connect to target
description:
- This transport permits you to use Ansible over Func.

View File

@@ -10,7 +10,7 @@ __metaclass__ = type
DOCUMENTATION = '''
author: Stephan Lohse (!UNKNOWN) <dev-github@ploek.org>
name: iocage
connection: iocage
short_description: Run tasks in iocage jails
description:
- Run commands or put/fetch files to an existing iocage jail

View File

@@ -10,7 +10,7 @@ __metaclass__ = type
DOCUMENTATION = '''
author: Ansible Core Team
name: jail
connection: jail
short_description: Run tasks in jails
description:
- Run commands or put/fetch files to an existing jail

View File

@@ -7,7 +7,7 @@ __metaclass__ = type
DOCUMENTATION = '''
author: Joerg Thalheim (!UNKNOWN) <joerg@higgsboson.tk>
name: lxc
connection: lxc
short_description: Run tasks in lxc containers via lxc python library
description:
- Run commands or put/fetch files to an existing lxc container using lxc python library
@@ -86,7 +86,7 @@ class Connection(ConnectionBase):
write_fds = []
while len(read_fds) > 0 or len(write_fds) > 0:
try:
ready_reads, ready_writes, dummy = select.select(read_fds, write_fds, [])
ready_reads, ready_writes, _ = select.select(read_fds, write_fds, [])
except select.error as e:
if e.args[0] == errno.EINTR:
continue

View File

@@ -7,14 +7,14 @@ __metaclass__ = type
DOCUMENTATION = '''
author: Matt Clay (@mattclay) <matt@mystile.com>
name: lxd
connection: lxd
short_description: Run tasks in lxc containers via lxc CLI
description:
- Run commands or put/fetch files to an existing lxc container using lxc CLI
options:
remote_addr:
description:
- Container identifier.
- Container identifier
default: inventory_hostname
vars:
- name: ansible_host
@@ -26,19 +26,6 @@ DOCUMENTATION = '''
vars:
- name: ansible_executable
- name: ansible_lxd_executable
remote:
description:
- Name of the LXD remote to use.
default: local
vars:
- name: ansible_lxd_remote
version_added: 2.0.0
project:
description:
- Name of the LXD project to use.
vars:
- name: ansible_lxd_project
version_added: 2.0.0
'''
import os
@@ -83,15 +70,7 @@ class Connection(ConnectionBase):
self._display.vvv(u"EXEC {0}".format(cmd), host=self._host)
local_cmd = [self._lxc_cmd]
if self.get_option("project"):
local_cmd.extend(["--project", self.get_option("project")])
local_cmd.extend([
"exec",
"%s:%s" % (self.get_option("remote"), self._host),
"--",
self._play_context.executable, "-c", cmd
])
local_cmd = [self._lxc_cmd, "exec", self._host, "--", self._play_context.executable, "-c", cmd]
local_cmd = [to_bytes(i, errors='surrogate_or_strict') for i in local_cmd]
in_data = to_bytes(in_data, errors='surrogate_or_strict', nonstring='passthru')
@@ -119,14 +98,7 @@ class Connection(ConnectionBase):
if not os.path.isfile(to_bytes(in_path, errors='surrogate_or_strict')):
raise AnsibleFileNotFound("input path is not a file: %s" % in_path)
local_cmd = [self._lxc_cmd]
if self.get_option("project"):
local_cmd.extend(["--project", self.get_option("project")])
local_cmd.extend([
"file", "push",
in_path,
"%s:%s/%s" % (self.get_option("remote"), self._host, out_path)
])
local_cmd = [self._lxc_cmd, "file", "push", in_path, self._host + "/" + out_path]
local_cmd = [to_bytes(i, errors='surrogate_or_strict') for i in local_cmd]
@@ -139,14 +111,7 @@ class Connection(ConnectionBase):
self._display.vvv(u"FETCH {0} TO {1}".format(in_path, out_path), host=self._host)
local_cmd = [self._lxc_cmd]
if self.get_option("project"):
local_cmd.extend(["--project", self.get_option("project")])
local_cmd.extend([
"file", "pull",
"%s:%s/%s" % (self.get_option("remote"), self._host, in_path),
out_path
])
local_cmd = [self._lxc_cmd, "file", "pull", self._host + "/" + in_path, out_path]
local_cmd = [to_bytes(i, errors='surrogate_or_strict') for i in local_cmd]

173
plugins/connection/oc.py Normal file
View File

@@ -0,0 +1,173 @@
# Based on the docker connection plugin
#
# Connection plugin for configuring kubernetes containers with kubectl
# (c) 2017, XuXinkun <xuxinkun@gmail.com>
#
# This file is part of Ansible
#
# Ansible is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Ansible is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Ansible. If not, see <http://www.gnu.org/licenses/>.
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
DOCUMENTATION = '''
author:
- xuxinkun (!UNKNOWN)
connection: oc
short_description: Execute tasks in pods running on OpenShift.
description:
- Use the oc exec command to run tasks in, or put/fetch files to, pods running on the OpenShift
container platform.
requirements:
- oc (go binary)
options:
oc_pod:
description:
- Pod name. Required when the host name does not match pod name.
default: ''
vars:
- name: ansible_oc_pod
env:
- name: K8S_AUTH_POD
oc_container:
description:
- Container name. Required when a pod contains more than one container.
default: ''
vars:
- name: ansible_oc_container
env:
- name: K8S_AUTH_CONTAINER
oc_namespace:
description:
- The namespace of the pod
default: ''
vars:
- name: ansible_oc_namespace
env:
- name: K8S_AUTH_NAMESPACE
oc_extra_args:
description:
- Extra arguments to pass to the oc command line.
default: ''
vars:
- name: ansible_oc_extra_args
env:
- name: K8S_AUTH_EXTRA_ARGS
oc_kubeconfig:
description:
- Path to a oc config file. Defaults to I(~/.kube/conig)
default: ''
vars:
- name: ansible_oc_kubeconfig
- name: ansible_oc_config
env:
- name: K8S_AUTH_KUBECONFIG
oc_context:
description:
- The name of a context found in the K8s config file.
default: ''
vars:
- name: ansible_oc_context
env:
- name: K8S_AUTH_CONTEXT
oc_host:
description:
- URL for accessing the API.
default: ''
vars:
- name: ansible_oc_host
- name: ansible_oc_server
env:
- name: K8S_AUTH_HOST
- name: K8S_AUTH_SERVER
oc_token:
description:
- API authentication bearer token.
vars:
- name: ansible_oc_token
- name: ansible_oc_api_key
env:
- name: K8S_AUTH_TOKEN
- name: K8S_AUTH_API_KEY
client_cert:
description:
- Path to a certificate used to authenticate with the API.
default: ''
vars:
- name: ansible_oc_cert_file
- name: ansible_oc_client_cert
env:
- name: K8S_AUTH_CERT_FILE
aliases: [ oc_cert_file ]
client_key:
description:
- Path to a key file used to authenticate with the API.
default: ''
vars:
- name: ansible_oc_key_file
- name: ansible_oc_client_key
env:
- name: K8S_AUTH_KEY_FILE
aliases: [ oc_key_file ]
ca_cert:
description:
- Path to a CA certificate used to authenticate with the API.
default: ''
vars:
- name: ansible_oc_ssl_ca_cert
- name: ansible_oc_ca_cert
env:
- name: K8S_AUTH_SSL_CA_CERT
aliases: [ oc_ssl_ca_cert ]
validate_certs:
description:
- Whether or not to verify the API server's SSL certificate. Defaults to I(true).
default: ''
vars:
- name: ansible_oc_verify_ssl
- name: ansible_oc_validate_certs
env:
- name: K8S_AUTH_VERIFY_SSL
aliases: [ oc_verify_ssl ]
'''
from ansible_collections.community.kubernetes.plugins.connection.kubectl import Connection as KubectlConnection
CONNECTION_TRANSPORT = 'community.general.oc'
CONNECTION_OPTIONS = {
'oc_container': '-c',
'oc_namespace': '-n',
'oc_kubeconfig': '--config',
'oc_context': '--context',
'oc_host': '--server',
'client_cert': '--client-certificate',
'client_key': '--client-key',
'ca_cert': '--certificate-authority',
'validate_certs': '--insecure-skip-tls-verify',
'oc_token': '--token'
}
class Connection(KubectlConnection):
''' Local oc based connections '''
transport = CONNECTION_TRANSPORT
connection_options = CONNECTION_OPTIONS
documentation = DOCUMENTATION

View File

@@ -11,7 +11,7 @@ __metaclass__ = type
DOCUMENTATION = '''
name: qubes
connection: qubes
short_description: Interact with an existing QubesOS AppVM
description:

View File

@@ -10,7 +10,7 @@ __metaclass__ = type
DOCUMENTATION = '''
author: Michael Scherer (@mscherer) <misc@zarb.org>
name: saltstack
connection: saltstack
short_description: Allow ansible to piggyback on salt minions
description:
- This allows you to use existing Saltstack infrastructure to connect to targets.

View File

@@ -11,7 +11,7 @@ __metaclass__ = type
DOCUMENTATION = '''
author: Ansible Core Team
name: zone
connection: zone
short_description: Run tasks in a zone instance
description:
- Run commands or put/fetch files to an existing zone

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,136 @@
# -*- coding: utf-8 -*-
# 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):
# Docker doc fragment
DOCUMENTATION = r'''
options:
docker_host:
description:
- The URL or Unix socket path used to connect to the Docker API. To connect to a remote host, provide the
TCP connection string. For example, C(tcp://192.0.2.23:2376). If TLS is used to encrypt the connection,
the module will automatically replace C(tcp) in the connection URL with C(https).
- If the value is not specified in the task, the value of environment variable C(DOCKER_HOST) will be used
instead. If the environment variable is not set, the default value will be used.
type: str
default: unix://var/run/docker.sock
aliases: [ docker_url ]
tls_hostname:
description:
- When verifying the authenticity of the Docker Host server, provide the expected name of the server.
- If the value is not specified in the task, the value of environment variable C(DOCKER_TLS_HOSTNAME) will
be used instead. If the environment variable is not set, the default value will be used.
type: str
default: localhost
api_version:
description:
- The version of the Docker API running on the Docker Host.
- Defaults to the latest version of the API supported by Docker SDK for Python and the docker daemon.
- If the value is not specified in the task, the value of environment variable C(DOCKER_API_VERSION) will be
used instead. If the environment variable is not set, the default value will be used.
type: str
default: auto
aliases: [ docker_api_version ]
timeout:
description:
- The maximum amount of time in seconds to wait on a response from the API.
- If the value is not specified in the task, the value of environment variable C(DOCKER_TIMEOUT) will be used
instead. If the environment variable is not set, the default value will be used.
type: int
default: 60
ca_cert:
description:
- Use a CA certificate when performing server verification by providing the path to a CA certificate file.
- If the value is not specified in the task and the environment variable C(DOCKER_CERT_PATH) is set,
the file C(ca.pem) from the directory specified in the environment variable C(DOCKER_CERT_PATH) will be used.
type: path
aliases: [ tls_ca_cert, cacert_path ]
client_cert:
description:
- Path to the client's TLS certificate file.
- If the value is not specified in the task and the environment variable C(DOCKER_CERT_PATH) is set,
the file C(cert.pem) from the directory specified in the environment variable C(DOCKER_CERT_PATH) will be used.
type: path
aliases: [ tls_client_cert, cert_path ]
client_key:
description:
- Path to the client's TLS key file.
- If the value is not specified in the task and the environment variable C(DOCKER_CERT_PATH) is set,
the file C(key.pem) from the directory specified in the environment variable C(DOCKER_CERT_PATH) will be used.
type: path
aliases: [ tls_client_key, key_path ]
ssl_version:
description:
- Provide a valid SSL version number. Default value determined by ssl.py module.
- If the value is not specified in the task, the value of environment variable C(DOCKER_SSL_VERSION) will be
used instead.
type: str
tls:
description:
- Secure the connection to the API by using TLS without verifying the authenticity of the Docker host
server. Note that if I(validate_certs) is set to C(yes) as well, it will take precedence.
- If the value is not specified in the task, the value of environment variable C(DOCKER_TLS) will be used
instead. If the environment variable is not set, the default value will be used.
type: bool
default: no
validate_certs:
description:
- Secure the connection to the API by using TLS and verifying the authenticity of the Docker host server.
- If the value is not specified in the task, the value of environment variable C(DOCKER_TLS_VERIFY) will be
used instead. If the environment variable is not set, the default value will be used.
type: bool
default: no
aliases: [ tls_verify ]
debug:
description:
- Debug mode
type: bool
default: no
notes:
- Connect to the Docker daemon by providing parameters with each task or by defining environment variables.
You can define C(DOCKER_HOST), C(DOCKER_TLS_HOSTNAME), C(DOCKER_API_VERSION), C(DOCKER_CERT_PATH), C(DOCKER_SSL_VERSION),
C(DOCKER_TLS), C(DOCKER_TLS_VERIFY) and C(DOCKER_TIMEOUT). If you are using docker machine, run the script shipped
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(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.
'''
# Additional, more specific stuff for minimal Docker SDK for Python version < 2.0
DOCKER_PY_1_DOCUMENTATION = r'''
options: {}
requirements:
- "Docker SDK for Python: Please note that the L(docker-py,https://pypi.org/project/docker-py/)
Python module has been superseded by L(docker,https://pypi.org/project/docker/)
(see L(here,https://github.com/docker/docker-py/issues/1310) for details).
For Python 2.6, C(docker-py) must be used. Otherwise, it is recommended to
install the C(docker) Python module. Note that both modules should *not*
be installed at the same time. Also note that when both modules are installed
and one of them is uninstalled, the other might no longer function and a
reinstall of it is required."
'''
# Additional, more specific stuff for minimal Docker SDK for Python version >= 2.0.
# Note that Docker SDK for Python >= 2.0 requires Python 2.7 or newer.
DOCKER_PY_2_DOCUMENTATION = r'''
options: {}
requirements:
- "Python >= 2.7"
- "Docker SDK for Python: Please note that the L(docker-py,https://pypi.org/project/docker-py/)
Python module has been superseded by L(docker,https://pypi.org/project/docker/)
(see L(here,https://github.com/docker/docker-py/issues/1310) for details).
This module does *not* work with docker-py."
'''

View File

@@ -0,0 +1,23 @@
# -*- coding: utf-8 -*-
# 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):
# Standard files documentation fragment
DOCUMENTATION = r'''
options:
hetzner_user:
description: The username for the Robot webservice user.
type: str
required: yes
hetzner_password:
description: The password for the Robot webservice user.
type: str
required: yes
'''

View File

@@ -0,0 +1,133 @@
# -*- coding: utf-8 -*-
# Copyright: (c) 2018, KubeVirt Team <@kubevirt>
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
class ModuleDocFragment(object):
DOCUMENTATION = r'''
options:
resource_definition:
description:
- "A partial YAML definition of the object being created/updated. Here you can define Kubernetes
resource parameters not covered by this module's parameters."
- "NOTE: I(resource_definition) has lower priority than module parameters. If you try to define e.g.
I(metadata.namespace) here, that value will be ignored and I(namespace) used instead."
aliases:
- definition
- inline
type: dict
wait:
description:
- "I(True) if the module should wait for the resource to get into desired state."
type: bool
default: yes
force:
description:
- If set to C(no), and I(state) is C(present), an existing object will be replaced.
type: bool
default: no
wait_timeout:
description:
- The amount of time in seconds the module should wait for the resource to get into desired state.
type: int
default: 120
wait_sleep:
description:
- Number of seconds to sleep between checks.
default: 5
version_added: '0.2.0'
memory:
description:
- The amount of memory to be requested by virtual machine.
- For example 1024Mi.
type: str
memory_limit:
description:
- The maximum memory to be used by virtual machine.
- For example 1024Mi.
type: str
machine_type:
description:
- QEMU machine type is the actual chipset of the virtual machine.
type: str
merge_type:
description:
- Whether to override the default patch merge approach with a specific type.
- If more than one merge type is given, the merge types will be tried in order.
- "Defaults to C(['strategic-merge', 'merge']), which is ideal for using the same parameters
on resource kinds that combine Custom Resources and built-in resources, as
Custom Resource Definitions typically aren't updatable by the usual strategic merge."
- "See U(https://kubernetes.io/docs/tasks/run-application/update-api-object-kubectl-patch/#use-a-json-merge-patch-to-update-a-deployment)"
type: list
choices: [ json, merge, strategic-merge ]
cpu_shares:
description:
- "Specify CPU shares."
type: int
cpu_limit:
description:
- "Is converted to its millicore value and multiplied by 100. The resulting value is the total amount of CPU time that a container can use
every 100ms. A virtual machine cannot use more than its share of CPU time during this interval."
type: int
cpu_cores:
description:
- "Number of CPU cores."
type: int
cpu_model:
description:
- "CPU model."
- "You can check list of available models here: U(https://github.com/libvirt/libvirt/blob/master/src/cpu_map/index.xml)."
- "I(Note:) User can define default CPU model via as I(default-cpu-model) in I(kubevirt-config) I(ConfigMap), if not set I(host-model) is used."
- "I(Note:) Be sure that node CPU model where you run a VM, has the same or higher CPU family."
- "I(Note:) If CPU model wasn't defined, the VM will have CPU model closest to one that used on the node where the VM is running."
type: str
bootloader:
description:
- "Specify the bootloader of the virtual machine."
- "All virtual machines use BIOS by default for booting."
type: str
smbios_uuid:
description:
- "In order to provide a consistent view on the virtualized hardware for the guest OS, the SMBIOS UUID can be set."
type: str
cpu_features:
description:
- "List of dictionary to fine-tune features provided by the selected CPU model."
- "I(Note): Policy attribute can either be omitted or contain one of the following policies: force, require, optional, disable, forbid."
- "I(Note): In case a policy is omitted for a feature, it will default to require."
- "More information about policies: U(https://libvirt.org/formatdomain.html#elementsCPU)"
type: list
headless:
description:
- "Specify if the virtual machine should have attached a minimal Video and Graphics device configuration."
- "By default a minimal Video and Graphics device configuration will be applied to the VirtualMachineInstance. The video device is vga
compatible and comes with a memory size of 16 MB."
hugepage_size:
description:
- "Specify huge page size."
type: str
tablets:
description:
- "Specify tablets to be used as input devices"
type: list
hostname:
description:
- "Specifies the hostname of the virtual machine. The hostname will be set either by dhcp, cloud-init if configured or virtual machine
name will be used."
subdomain:
description:
- "If specified, the fully qualified virtual machine hostname will be hostname.subdomain.namespace.svc.cluster_domain. If not specified,
the virtual machine will not have a domain name at all. The DNS entry will resolve to the virtual machine, no matter if the virtual machine
itself can pick up a hostname."
requirements:
- python >= 2.7
- openshift >= 0.8.2
notes:
- "In order to use this module you have to install Openshift Python SDK.
To ensure it's installed with correct version you can create the following task:
I(pip: name=openshift>=0.8.2)"
'''

View File

@@ -0,0 +1,103 @@
# -*- coding: utf-8 -*-
# Copyright: (c) 2018, KubeVirt Team <@kubevirt>
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
class ModuleDocFragment(object):
# Standard oVirt documentation fragment
DOCUMENTATION = r'''
options:
disks:
description:
- List of dictionaries which specify disks of the virtual machine.
- "A disk can be made accessible via four different types: I(disk), I(lun), I(cdrom), I(floppy)."
- "All possible configuration options are available in U(https://kubevirt.io/api-reference/master/definitions.html#_v1_disk)"
- Each disk must have specified a I(volume) that declares which volume type of the disk
All possible configuration options of volume are available in U(https://kubevirt.io/api-reference/master/definitions.html#_v1_volume).
type: list
labels:
description:
- Labels are key/value pairs that are attached to virtual machines. Labels are intended to be used to
specify identifying attributes of virtual machines that are meaningful and relevant to users, but do not directly
imply semantics to the core system. Labels can be used to organize and to select subsets of virtual machines.
Labels can be attached to virtual machines at creation time and subsequently added and modified at any time.
- More on labels that are used for internal implementation U(https://kubevirt.io/user-guide/#/misc/annotations_and_labels)
type: dict
interfaces:
description:
- An interface defines a virtual network interface of a virtual machine (also called a frontend).
- All possible configuration options interfaces are available in U(https://kubevirt.io/api-reference/master/definitions.html#_v1_interface)
- Each interface must have specified a I(network) that declares which logical or physical device it is connected to (also called as backend).
All possible configuration options of network are available in U(https://kubevirt.io/api-reference/master/definitions.html#_v1_network).
type: list
cloud_init_nocloud:
description:
- "Represents a cloud-init NoCloud user-data source. The NoCloud data will be added
as a disk to the virtual machine. A proper cloud-init installation is required inside the guest.
More information U(https://kubevirt.io/api-reference/master/definitions.html#_v1_cloudinitnocloudsource)"
type: dict
affinity:
description:
- "Describes node affinity scheduling rules for the vm."
type: dict
suboptions:
soft:
description:
- "The scheduler will prefer to schedule vms to nodes that satisfy the affinity expressions specified by this field, but it may choose a
node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for
each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute
a sum by iterating through the elements of this field and adding C(weight) to the sum if the node has vms which matches the corresponding
C(term); the nodes with the highest sum are the most preferred."
type: dict
hard:
description:
- "If the affinity requirements specified by this field are not met at scheduling time, the vm will not be scheduled onto the node. If
the affinity requirements specified by this field cease to be met at some point during vm execution (e.g. due to a vm label update), the
system may or may not try to eventually evict the vm from its node. When there are multiple elements, the lists of nodes corresponding to
each C(term) are intersected, i.e. all terms must be satisfied."
type: dict
node_affinity:
description:
- "Describes vm affinity scheduling rules e.g. co-locate this vm in the same node, zone, etc. as some other vms"
type: dict
suboptions:
soft:
description:
- "The scheduler will prefer to schedule vms to nodes that satisfy the affinity expressions specified by this field, but it may choose
a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e.
for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.),
compute a sum by iterating through the elements of this field and adding C(weight) to the sum if the node matches the corresponding
match_expressions; the nodes with the highest sum are the most preferred."
type: dict
hard:
description:
- "If the affinity requirements specified by this field are not met at scheduling time, the vm will not be scheduled onto the node. If
the affinity requirements specified by this field cease to be met at some point during vm execution (e.g. due to an update), the system
may or may not try to eventually evict the vm from its node."
type: dict
anti_affinity:
description:
- "Describes vm anti-affinity scheduling rules e.g. avoid putting this vm in the same node, zone, etc. as some other vms."
type: dict
suboptions:
soft:
description:
- "The scheduler will prefer to schedule vms to nodes that satisfy the anti-affinity expressions specified by this field, but it may
choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights,
i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions,
etc.), compute a sum by iterating through the elements of this field and adding C(weight) to the sum if the node has vms which matches
the corresponding C(term); the nodes with the highest sum are the most preferred."
type: dict
hard:
description:
- "If the anti-affinity requirements specified by this field are not met at scheduling time, the vm will not be scheduled onto the node.
If the anti-affinity requirements specified by this field cease to be met at some point during vm execution (e.g. due to a vm label
update), the system may or may not try to eventually evict the vm from its node. When there are multiple elements, the lists of nodes
corresponding to each C(term) are intersected, i.e. all terms must be satisfied."
type: dict
'''

View File

@@ -15,7 +15,7 @@ class ModuleDocFragment(object):
options:
bind_dn:
description:
- A DN to bind with. If this is omitted, we'll try a SASL bind with the EXTERNAL mechanism as default.
- A DN to bind with. If this is omitted, we'll try a SASL bind with the EXTERNAL mechanism.
- If this is blank, we'll use an anonymous bind.
type: str
bind_pw:
@@ -27,15 +27,6 @@ options:
description:
- The DN of the entry to add or remove.
type: str
referrals_chasing:
choices: [disabled, anonymous]
default: anonymous
type: str
description:
- Set the referrals chasing behavior.
- C(anonymous) follow referrals anonymously. This is the default behavior.
- C(disabled) disable referrals chasing. This sets C(OPT_REFERRALS) to off.
version_added: 2.0.0
server_uri:
description:
- A URI to the LDAP server.
@@ -53,12 +44,4 @@ options:
- This should only be used on sites using self-signed certificates.
type: bool
default: yes
sasl_class:
description:
- The class to use for SASL authentication.
- possible choices are C(external), C(gssapi).
type: str
choices: ['external', 'gssapi']
default: external
version_added: "2.0.0"
'''

View File

@@ -78,24 +78,6 @@ options:
variable.
type: int
default: 1000
http_pool_connections:
description:
- Number of pools to be used by the C(infoblox_client.Connector) object.
- This is passed as-is to the underlying C(requests.adapters.HTTPAdapter) class.
type: int
default: 10
http_pool_maxsize:
description:
- Maximum number of connections per pool to be used by the C(infoblox_client.Connector) object.
- This is passed as-is to the underlying C(requests.adapters.HTTPAdapter) class.
type: int
default: 10
silent_ssl_warnings:
description:
- Disable C(urllib3) SSL warnings in the C(infoblox_client.Connector) object.
- This is passed as-is to the underlying C(requests.adapters.HTTPAdapter) class.
type: bool
default: true
notes:
- "This module must be run locally, which can be achieved by specifying C(connection: local)."
- Please read the :ref:`nios_guide` for more detailed information on how to use Infoblox with Ansible.

View File

@@ -47,7 +47,7 @@ class ModuleDocFragment(object):
OCI_USER_KEY_FILE variable, if any, is used. This option is required if the private key is
not specified through a configuration file (See C(config_file_location)). If the key is encrypted
with a pass-phrase, the C(api_user_key_pass_phrase) option must also be provided.
type: path
type: str
api_user_key_pass_phrase:
description:
- Passphrase used by the key referenced in C(api_user_key_file), if it is encrypted. If not set, then

View File

@@ -20,5 +20,4 @@ class ModuleDocFragment(object):
identify an instance of the resource. By default, all the attributes of a resource except
I(freeform_tags) are used to uniquely identify a resource.
type: list
elements: str
"""

View File

@@ -0,0 +1,62 @@
# -*- coding: utf-8 -*-
# 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):
# Postgres documentation fragment
DOCUMENTATION = r'''
options:
login_user:
description:
- The username used to authenticate with.
type: str
default: postgres
login_password:
description:
- The password used to authenticate with.
type: str
login_host:
description:
- Host running the database.
type: str
login_unix_socket:
description:
- Path to a Unix domain socket for local connections.
type: str
port:
description:
- Database port to connect to.
type: int
default: 5432
aliases: [ login_port ]
ssl_mode:
description:
- Determines whether or with what priority a secure SSL TCP/IP connection will be negotiated with the server.
- See U(https://www.postgresql.org/docs/current/static/libpq-ssl.html) for more information on the modes.
- Default of C(prefer) matches libpq default.
type: str
default: prefer
choices: [ allow, disable, prefer, require, verify-ca, verify-full ]
ca_cert:
description:
- Specifies the name of a file containing SSL certificate authority (CA) certificate(s).
- If the file exists, the server's certificate will be verified to be signed by one of these authorities.
type: str
aliases: [ ssl_rootcert ]
notes:
- The default authentication assumes that you are either logging in as or sudo'ing to the C(postgres) account on the host.
- To avoid "Peer authentication failed for user postgres" error,
use postgres user as a I(become_user).
- This module uses psycopg2, a Python PostgreSQL database adapter. You must
ensure that psycopg2 is installed on the host before using this module.
- If the remote host is the PostgreSQL server (which is the default case), then
PostgreSQL must also be installed on the remote host.
- For Ubuntu-based systems, install the postgresql, libpq-dev, and python-psycopg2 packages
on the remote host before using this module.
- The ca_cert parameter requires at least Postgres version 8.4 and I(psycopg2) version 2.4.3.
requirements: [ psycopg2 ]
'''

View File

@@ -42,23 +42,4 @@ options:
type: bool
default: no
requirements: [ "proxmoxer", "requests" ]
'''
SELECTION = r'''
options:
vmid:
description:
- Specifies the instance ID.
- If not set the next available ID will be fetched from ProxmoxAPI.
type: int
node:
description:
- Proxmox VE node on which to operate.
- Only required for I(state=present).
- For every other states it will be autodiscovered.
type: str
pool:
description:
- Add the new VM to the specified pool.
type: str
'''

View File

@@ -1,47 +0,0 @@
# -*- coding: utf-8 -*-
# Copyright (c) 2020, Vladimir Botka <vbotka@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
from ansible.errors import AnsibleError, AnsibleFilterError
from ansible.module_utils.six import string_types
from ansible.module_utils.common._collections_compat import Mapping, Sequence
from collections import defaultdict
from operator import itemgetter
def lists_mergeby(l1, l2, index):
''' merge lists by attribute index. Example:
- debug: msg="{{ l1|community.general.lists_mergeby(l2, 'index')|list }}" '''
if not isinstance(l1, Sequence):
raise AnsibleFilterError('First argument for community.general.lists_mergeby must be list. %s is %s' %
(l1, type(l1)))
if not isinstance(l2, Sequence):
raise AnsibleFilterError('Second argument for community.general.lists_mergeby must be list. %s is %s' %
(l2, type(l2)))
if not isinstance(index, string_types):
raise AnsibleFilterError('Third argument for community.general.lists_mergeby must be string. %s is %s' %
(index, type(index)))
d = defaultdict(dict)
for l in (l1, l2):
for elem in l:
if not isinstance(elem, Mapping):
raise AnsibleFilterError('Elements of list arguments for lists_mergeby must be dictionaries. Found {0!r}.'.format(elem))
if index in elem.keys():
d[elem[index]].update(elem)
return sorted(d.values(), key=itemgetter(index))
class FilterModule(object):
''' Ansible list filters '''
def filters(self):
return {
'lists_mergeby': lists_mergeby,
}

View File

@@ -8,6 +8,7 @@ __metaclass__ = type
DOCUMENTATION = '''
author: Orion Poplawski (@opoplawski)
name: cobbler
plugin_type: inventory
short_description: Cobbler inventory source
version_added: 1.0.0
description:

View File

@@ -0,0 +1,272 @@
# -*- coding: utf-8 -*-
# Copyright (c) 2019, Ximon Eighteen <ximon.eighteen@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
DOCUMENTATION = '''
name: docker_machine
plugin_type: inventory
author: Ximon Eighteen (@ximon18)
short_description: Docker Machine inventory source
requirements:
- L(Docker Machine,https://docs.docker.com/machine/)
extends_documentation_fragment:
- constructed
description:
- Get inventory hosts from Docker Machine.
- Uses a YAML configuration file that ends with docker_machine.(yml|yaml).
- The plugin sets standard host variables C(ansible_host), C(ansible_port), C(ansible_user) and C(ansible_ssh_private_key).
- The plugin stores the Docker Machine 'env' output variables in I(dm_) prefixed host variables.
options:
plugin:
description: token that ensures this is a source file for the C(docker_machine) plugin.
required: yes
choices: ['docker_machine', 'community.general.docker_machine']
daemon_env:
description:
- Whether docker daemon connection environment variables should be fetched, and how to behave if they cannot be fetched.
- With C(require) and C(require-silently), fetch them and skip any host for which they cannot be fetched.
A warning will be issued for any skipped host if the choice is C(require).
- With C(optional) and C(optional-silently), fetch them and not skip hosts for which they cannot be fetched.
A warning will be issued for hosts where they cannot be fetched if the choice is C(optional).
- With C(skip), do not attempt to fetch the docker daemon connection environment variables.
- If fetched successfully, the variables will be prefixed with I(dm_) and stored as host variables.
type: str
choices:
- require
- require-silently
- optional
- optional-silently
- skip
default: require
running_required:
description: when true, hosts which Docker Machine indicates are in a state other than C(running) will be skipped.
type: bool
default: yes
verbose_output:
description: when true, include all available nodes metadata (e.g. Image, Region, Size) as a JSON object named C(docker_machine_node_attributes).
type: bool
default: yes
'''
EXAMPLES = '''
# Minimal example
plugin: community.general.docker_machine
# Example using constructed features to create a group per Docker Machine driver
# (https://docs.docker.com/machine/drivers/), e.g.:
# $ docker-machine create --driver digitalocean ... mymachine
# $ ansible-inventory -i ./path/to/docker-machine.yml --host=mymachine
# {
# ...
# "digitalocean": {
# "hosts": [
# "mymachine"
# ]
# ...
# }
strict: no
keyed_groups:
- separator: ''
key: docker_machine_node_attributes.DriverName
# Example grouping hosts by Digital Machine tag
strict: no
keyed_groups:
- prefix: tag
key: 'dm_tags'
# Example using compose to override the default SSH behaviour of asking the user to accept the remote host key
compose:
ansible_ssh_common_args: '"-o StrictHostKeyChecking=accept-new"'
'''
from ansible.errors import AnsibleError
from ansible.module_utils._text import to_native
from ansible.module_utils._text import to_text
from ansible.module_utils.common.process import get_bin_path
from ansible.plugins.inventory import BaseInventoryPlugin, Constructable, Cacheable
from ansible.utils.display import Display
import json
import re
import subprocess
display = Display()
class InventoryModule(BaseInventoryPlugin, Constructable, Cacheable):
''' Host inventory parser for ansible using Docker machine as source. '''
NAME = 'community.general.docker_machine'
DOCKER_MACHINE_PATH = None
def _run_command(self, args):
if not self.DOCKER_MACHINE_PATH:
try:
self.DOCKER_MACHINE_PATH = get_bin_path('docker-machine')
except ValueError as e:
raise AnsibleError(to_native(e))
command = [self.DOCKER_MACHINE_PATH]
command.extend(args)
display.debug('Executing command {0}'.format(command))
try:
result = subprocess.check_output(command)
except subprocess.CalledProcessError as e:
display.warning('Exception {0} caught while executing command {1}, this was the original exception: {2}'.format(type(e).__name__, command, e))
raise e
return to_text(result).strip()
def _get_docker_daemon_variables(self, machine_name):
'''
Capture settings from Docker Machine that would be needed to connect to the remote Docker daemon installed on
the Docker Machine remote host. Note: passing '--shell=sh' is a workaround for 'Error: Unknown shell'.
'''
try:
env_lines = self._run_command(['env', '--shell=sh', machine_name]).splitlines()
except subprocess.CalledProcessError:
# This can happen when the machine is created but provisioning is incomplete
return []
# example output of docker-machine env --shell=sh:
# export DOCKER_TLS_VERIFY="1"
# export DOCKER_HOST="tcp://134.209.204.160:2376"
# export DOCKER_CERT_PATH="/root/.docker/machine/machines/routinator"
# export DOCKER_MACHINE_NAME="routinator"
# # Run this command to configure your shell:
# # eval $(docker-machine env --shell=bash routinator)
# capture any of the DOCKER_xxx variables that were output and create Ansible host vars
# with the same name and value but with a dm_ name prefix.
vars = []
for line in env_lines:
match = re.search('(DOCKER_[^=]+)="([^"]+)"', line)
if match:
env_var_name = match.group(1)
env_var_value = match.group(2)
vars.append((env_var_name, env_var_value))
return vars
def _get_machine_names(self):
# Filter out machines that are not in the Running state as we probably can't do anything useful actions
# with them.
ls_command = ['ls', '-q']
if self.get_option('running_required'):
ls_command.extend(['--filter', 'state=Running'])
try:
ls_lines = self._run_command(ls_command)
except subprocess.CalledProcessError:
return []
return ls_lines.splitlines()
def _inspect_docker_machine_host(self, node):
try:
inspect_lines = self._run_command(['inspect', self.node])
except subprocess.CalledProcessError:
return None
return json.loads(inspect_lines)
def _ip_addr_docker_machine_host(self, node):
try:
ip_addr = self._run_command(['ip', self.node])
except subprocess.CalledProcessError:
return None
return ip_addr
def _should_skip_host(self, machine_name, env_var_tuples, daemon_env):
if not env_var_tuples:
warning_prefix = 'Unable to fetch Docker daemon env vars from Docker Machine for host {0}'.format(machine_name)
if daemon_env in ('require', 'require-silently'):
if daemon_env == 'require':
display.warning('{0}: host will be skipped'.format(warning_prefix))
return True
else: # 'optional', 'optional-silently'
if daemon_env == 'optional':
display.warning('{0}: host will lack dm_DOCKER_xxx variables'.format(warning_prefix))
return False
def _populate(self):
daemon_env = self.get_option('daemon_env')
try:
for self.node in self._get_machine_names():
self.node_attrs = self._inspect_docker_machine_host(self.node)
if not self.node_attrs:
continue
machine_name = self.node_attrs['Driver']['MachineName']
# query `docker-machine env` to obtain remote Docker daemon connection settings in the form of commands
# that could be used to set environment variables to influence a local Docker client:
if daemon_env == 'skip':
env_var_tuples = []
else:
env_var_tuples = self._get_docker_daemon_variables(machine_name)
if self._should_skip_host(machine_name, env_var_tuples, daemon_env):
continue
# add an entry in the inventory for this host
self.inventory.add_host(machine_name)
# check for valid ip address from inspect output, else explicitly use ip command to find host ip address
# this works around an issue seen with Google Compute Platform where the IP address was not available
# via the 'inspect' subcommand but was via the 'ip' subcomannd.
if self.node_attrs['Driver']['IPAddress']:
ip_addr = self.node_attrs['Driver']['IPAddress']
else:
ip_addr = self._ip_addr_docker_machine_host(self.node)
# set standard Ansible remote host connection settings to details captured from `docker-machine`
# see: https://docs.ansible.com/ansible/latest/user_guide/intro_inventory.html
self.inventory.set_variable(machine_name, 'ansible_host', ip_addr)
self.inventory.set_variable(machine_name, 'ansible_port', self.node_attrs['Driver']['SSHPort'])
self.inventory.set_variable(machine_name, 'ansible_user', self.node_attrs['Driver']['SSHUser'])
self.inventory.set_variable(machine_name, 'ansible_ssh_private_key_file', self.node_attrs['Driver']['SSHKeyPath'])
# set variables based on Docker Machine tags
tags = self.node_attrs['Driver'].get('Tags') or ''
self.inventory.set_variable(machine_name, 'dm_tags', tags)
# set variables based on Docker Machine env variables
for kv in env_var_tuples:
self.inventory.set_variable(machine_name, 'dm_{0}'.format(kv[0]), kv[1])
if self.get_option('verbose_output'):
self.inventory.set_variable(machine_name, 'docker_machine_node_attributes', self.node_attrs)
# Use constructed if applicable
strict = self.get_option('strict')
# Composed variables
self._set_composite_vars(self.get_option('compose'), self.node_attrs, machine_name, strict=strict)
# Complex groups based on jinja2 conditionals, hosts that meet the conditional are added to group
self._add_host_to_composed_groups(self.get_option('groups'), self.node_attrs, machine_name, strict=strict)
# Create groups based on variable values and add the corresponding hosts to it
self._add_host_to_keyed_groups(self.get_option('keyed_groups'), self.node_attrs, machine_name, strict=strict)
except Exception as e:
raise AnsibleError('Unable to fetch hosts from Docker Machine, this was the original exception: %s' %
to_native(e), orig_exc=e)
def verify_file(self, path):
"""Return the possibility of a file being consumable by this plugin."""
return (
super(InventoryModule, self).verify_file(path) and
path.endswith(('docker_machine.yaml', 'docker_machine.yml')))
def parse(self, inventory, loader, path, cache=True):
super(InventoryModule, self).parse(inventory, loader, path, cache)
self._read_config_data(path)
self._populate()

View File

@@ -0,0 +1,255 @@
# -*- coding: utf-8 -*-
# Copyright (c) 2018, Stefan Heitmueller <stefan.heitmueller@gmx.com>
# 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 = '''
name: docker_swarm
plugin_type: inventory
author:
- Stefan Heitmüller (@morph027) <stefan.heitmueller@gmx.com>
short_description: Ansible dynamic inventory plugin for Docker swarm nodes.
requirements:
- python >= 2.7
- L(Docker SDK for Python,https://docker-py.readthedocs.io/en/stable/) >= 1.10.0
extends_documentation_fragment:
- constructed
description:
- Reads inventories from the Docker swarm API.
- Uses a YAML configuration file docker_swarm.[yml|yaml].
- "The plugin returns following groups of swarm nodes: I(all) - all hosts; I(workers) - all worker nodes;
I(managers) - all manager nodes; I(leader) - the swarm leader node;
I(nonleaders) - all nodes except the swarm leader."
options:
plugin:
description: The name of this plugin, it should always be set to C(community.general.docker_swarm)
for this plugin to recognize it as it's own.
type: str
required: true
choices: [ docker_swarm, community.general.docker_swarm ]
docker_host:
description:
- Socket of a Docker swarm manager node (C(tcp), C(unix)).
- "Use C(unix://var/run/docker.sock) to connect via local socket."
type: str
required: true
aliases: [ docker_url ]
verbose_output:
description: Toggle to (not) include all available nodes metadata (e.g. C(Platform), C(Architecture), C(OS),
C(EngineVersion))
type: bool
default: yes
tls:
description: Connect using TLS without verifying the authenticity of the Docker host server.
type: bool
default: no
validate_certs:
description: Toggle if connecting using TLS with or without verifying the authenticity of the Docker
host server.
type: bool
default: no
aliases: [ tls_verify ]
client_key:
description: Path to the client's TLS key file.
type: path
aliases: [ tls_client_key, key_path ]
ca_cert:
description: Use a CA certificate when performing server verification by providing the path to a CA
certificate file.
type: path
aliases: [ tls_ca_cert, cacert_path ]
client_cert:
description: Path to the client's TLS certificate file.
type: path
aliases: [ tls_client_cert, cert_path ]
tls_hostname:
description: When verifying the authenticity of the Docker host server, provide the expected name of
the server.
type: str
ssl_version:
description: Provide a valid SSL version number. Default value determined by ssl.py module.
type: str
api_version:
description:
- The version of the Docker API running on the Docker Host.
- Defaults to the latest version of the API supported by docker-py.
type: str
aliases: [ docker_api_version ]
timeout:
description:
- The maximum amount of time in seconds to wait on a response from the API.
- If the value is not specified in the task, the value of environment variable C(DOCKER_TIMEOUT)
will be used instead. If the environment variable is not set, the default value will be used.
type: int
default: 60
aliases: [ time_out ]
include_host_uri:
description: Toggle to return the additional attribute C(ansible_host_uri) which contains the URI of the
swarm leader in format of C(tcp://172.16.0.1:2376). This value may be used without additional
modification as value of option I(docker_host) in Docker Swarm modules when connecting via API.
The port always defaults to C(2376).
type: bool
default: no
include_host_uri_port:
description: Override the detected port number included in I(ansible_host_uri)
type: int
'''
EXAMPLES = '''
# Minimal example using local docker
plugin: community.general.docker_swarm
docker_host: unix://var/run/docker.sock
# Minimal example using remote docker
plugin: community.general.docker_swarm
docker_host: tcp://my-docker-host:2375
# Example using remote docker with unverified TLS
plugin: community.general.docker_swarm
docker_host: tcp://my-docker-host:2376
tls: yes
# Example using remote docker with verified TLS and client certificate verification
plugin: community.general.docker_swarm
docker_host: tcp://my-docker-host:2376
validate_certs: yes
ca_cert: /somewhere/ca.pem
client_key: /somewhere/key.pem
client_cert: /somewhere/cert.pem
# Example using constructed features to create groups and set ansible_host
plugin: community.general.docker_swarm
docker_host: tcp://my-docker-host:2375
strict: False
keyed_groups:
# add e.g. x86_64 hosts to an arch_x86_64 group
- prefix: arch
key: 'Description.Platform.Architecture'
# add e.g. linux hosts to an os_linux group
- prefix: os
key: 'Description.Platform.OS'
# create a group per node label
# e.g. a node labeled w/ "production" ends up in group "label_production"
# hint: labels containing special characters will be converted to safe names
- key: 'Spec.Labels'
prefix: label
'''
from ansible.errors import AnsibleError
from ansible.module_utils._text import to_native
from ansible_collections.community.general.plugins.module_utils.docker.common import update_tls_hostname, get_connect_params
from ansible.plugins.inventory import BaseInventoryPlugin, Constructable
from ansible.parsing.utils.addresses import parse_address
try:
import docker
HAS_DOCKER = True
except ImportError:
HAS_DOCKER = False
class InventoryModule(BaseInventoryPlugin, Constructable):
''' Host inventory parser for ansible using Docker swarm as source. '''
NAME = 'community.general.docker_swarm'
def _fail(self, msg):
raise AnsibleError(msg)
def _populate(self):
raw_params = dict(
docker_host=self.get_option('docker_host'),
tls=self.get_option('tls'),
tls_verify=self.get_option('validate_certs'),
key_path=self.get_option('client_key'),
cacert_path=self.get_option('ca_cert'),
cert_path=self.get_option('client_cert'),
tls_hostname=self.get_option('tls_hostname'),
api_version=self.get_option('api_version'),
timeout=self.get_option('timeout'),
ssl_version=self.get_option('ssl_version'),
debug=None,
)
update_tls_hostname(raw_params)
connect_params = get_connect_params(raw_params, fail_function=self._fail)
self.client = docker.DockerClient(**connect_params)
self.inventory.add_group('all')
self.inventory.add_group('manager')
self.inventory.add_group('worker')
self.inventory.add_group('leader')
self.inventory.add_group('nonleaders')
if self.get_option('include_host_uri'):
if self.get_option('include_host_uri_port'):
host_uri_port = str(self.get_option('include_host_uri_port'))
elif self.get_option('tls') or self.get_option('validate_certs'):
host_uri_port = '2376'
else:
host_uri_port = '2375'
try:
self.nodes = self.client.nodes.list()
for self.node in self.nodes:
self.node_attrs = self.client.nodes.get(self.node.id).attrs
self.inventory.add_host(self.node_attrs['ID'])
self.inventory.add_host(self.node_attrs['ID'], group=self.node_attrs['Spec']['Role'])
self.inventory.set_variable(self.node_attrs['ID'], 'ansible_host',
self.node_attrs['Status']['Addr'])
if self.get_option('include_host_uri'):
self.inventory.set_variable(self.node_attrs['ID'], 'ansible_host_uri',
'tcp://' + self.node_attrs['Status']['Addr'] + ':' + host_uri_port)
if self.get_option('verbose_output'):
self.inventory.set_variable(self.node_attrs['ID'], 'docker_swarm_node_attributes', self.node_attrs)
if 'ManagerStatus' in self.node_attrs:
if self.node_attrs['ManagerStatus'].get('Leader'):
# This is workaround of bug in Docker when in some cases the Leader IP is 0.0.0.0
# Check moby/moby#35437 for details
swarm_leader_ip = parse_address(self.node_attrs['ManagerStatus']['Addr'])[0] or \
self.node_attrs['Status']['Addr']
if self.get_option('include_host_uri'):
self.inventory.set_variable(self.node_attrs['ID'], 'ansible_host_uri',
'tcp://' + swarm_leader_ip + ':' + host_uri_port)
self.inventory.set_variable(self.node_attrs['ID'], 'ansible_host', swarm_leader_ip)
self.inventory.add_host(self.node_attrs['ID'], group='leader')
else:
self.inventory.add_host(self.node_attrs['ID'], group='nonleaders')
else:
self.inventory.add_host(self.node_attrs['ID'], group='nonleaders')
# Use constructed if applicable
strict = self.get_option('strict')
# Composed variables
self._set_composite_vars(self.get_option('compose'),
self.node_attrs,
self.node_attrs['ID'],
strict=strict)
# Complex groups based on jinja2 conditionals, hosts that meet the conditional are added to group
self._add_host_to_composed_groups(self.get_option('groups'),
self.node_attrs,
self.node_attrs['ID'],
strict=strict)
# Create groups based on variable values and add the corresponding hosts to it
self._add_host_to_keyed_groups(self.get_option('keyed_groups'),
self.node_attrs,
self.node_attrs['ID'],
strict=strict)
except Exception as e:
raise AnsibleError('Unable to fetch hosts from Docker swarm API, this was the original exception: %s' %
to_native(e))
def verify_file(self, path):
"""Return the possibly of a file being consumable by this plugin."""
return (
super(InventoryModule, self).verify_file(path) and
path.endswith(('docker_swarm.yaml', 'docker_swarm.yml')))
def parse(self, inventory, loader, path, cache=True):
if not HAS_DOCKER:
raise AnsibleError('The Docker swarm dynamic inventory plugin requires the Docker SDK for Python: '
'https://github.com/docker/docker-py.')
super(InventoryModule, self).parse(inventory, loader, path, cache)
self._read_config_data(path)
self._populate()

View File

@@ -9,6 +9,7 @@ __metaclass__ = type
DOCUMENTATION = '''
name: gitlab_runners
plugin_type: inventory
author:
- Stefan Heitmüller (@morph027) <stefan.heitmueller@gmx.com>
short_description: Ansible dynamic inventory plugin for GitLab runners.

View File

@@ -0,0 +1,256 @@
# 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 = '''
name: kubevirt
plugin_type: inventory
author:
- KubeVirt Team (@kubevirt)
short_description: KubeVirt inventory source
extends_documentation_fragment:
- inventory_cache
- constructed
description:
- Fetch running VirtualMachines for one or more namespaces.
- Groups by namespace, namespace_vms and labels.
- Uses kubevirt.(yml|yaml) YAML configuration file to set parameter values.
options:
plugin:
description: token that ensures this is a source file for the 'kubevirt' plugin.
required: True
choices: ['kubevirt', 'community.general.kubevirt']
type: str
host_format:
description:
- Specify the format of the host in the inventory group.
default: "{namespace}-{name}-{uid}"
connections:
type: list
description:
- Optional list of cluster connection settings. If no connections are provided, the default
I(~/.kube/config) and active context will be used, and objects will be returned for all namespaces
the active user is authorized to access.
suboptions:
name:
description:
- Optional name to assign to the cluster. If not provided, a name is constructed from the server
and port.
type: str
kubeconfig:
description:
- Path to an existing Kubernetes config file. If not provided, and no other connection
options are provided, the OpenShift client will attempt to load the default
configuration file from I(~/.kube/config.json). Can also be specified via K8S_AUTH_KUBECONFIG
environment variable.
type: str
context:
description:
- The name of a context found in the config file. Can also be specified via K8S_AUTH_CONTEXT environment
variable.
type: str
host:
description:
- Provide a URL for accessing the API. Can also be specified via K8S_AUTH_HOST environment variable.
type: str
api_key:
description:
- Token used to authenticate with the API. Can also be specified via K8S_AUTH_API_KEY environment
variable.
type: str
username:
description:
- Provide a username for authenticating with the API. Can also be specified via K8S_AUTH_USERNAME
environment variable.
type: str
password:
description:
- Provide a password for authenticating with the API. Can also be specified via K8S_AUTH_PASSWORD
environment variable.
type: str
cert_file:
description:
- Path to a certificate used to authenticate with the API. Can also be specified via K8S_AUTH_CERT_FILE
environment variable.
type: str
key_file:
description:
- Path to a key file used to authenticate with the API. Can also be specified via K8S_AUTH_HOST
environment variable.
type: str
ssl_ca_cert:
description:
- Path to a CA certificate used to authenticate with the API. Can also be specified via
K8S_AUTH_SSL_CA_CERT environment variable.
type: str
verify_ssl:
description:
- "Whether or not to verify the API server's SSL certificates. Can also be specified via
K8S_AUTH_VERIFY_SSL environment variable."
type: bool
namespaces:
description:
- List of namespaces. If not specified, will fetch all virtual machines for all namespaces user is authorized
to access.
type: list
network_name:
description:
- In case of multiple network attached to virtual machine, define which interface should be returned as primary IP
address.
type: str
aliases: [ interface_name ]
api_version:
description:
- "Specify the KubeVirt API version."
type: str
annotation_variable:
description:
- "Specify the name of the annotation which provides data, which should be used as inventory host variables."
- "Note, that the value in ansible annotations should be json."
type: str
default: 'ansible'
requirements:
- "openshift >= 0.6"
- "PyYAML >= 3.11"
'''
EXAMPLES = '''
# File must be named kubevirt.yaml or kubevirt.yml
# Authenticate with token, and return all virtual machines for all namespaces
plugin: community.general.kubevirt
connections:
- host: https://kubevirt.io
token: xxxxxxxxxxxxxxxx
ssl_verify: false
# Use default config (~/.kube/config) file and active context, and return vms with interfaces
# connected to network myovsnetwork and from namespace vms
plugin: community.general.kubevirt
connections:
- namespaces:
- vms
network_name: myovsnetwork
'''
import json
from ansible_collections.community.kubernetes.plugins.inventory.k8s import K8sInventoryException, InventoryModule as K8sInventoryModule, format_dynamic_api_exc
try:
from openshift.dynamic.exceptions import DynamicApiError
except ImportError:
pass
API_VERSION = 'kubevirt.io/v1alpha3'
class InventoryModule(K8sInventoryModule):
NAME = 'community.general.kubevirt'
def setup(self, config_data, cache, cache_key):
self.config_data = config_data
super(InventoryModule, self).setup(config_data, cache, cache_key)
def fetch_objects(self, connections):
client = self.get_api_client()
vm_format = self.config_data.get('host_format', '{namespace}-{name}-{uid}')
if connections:
for connection in connections:
client = self.get_api_client(**connection)
name = connection.get('name', self.get_default_host_name(client.configuration.host))
if connection.get('namespaces'):
namespaces = connection['namespaces']
else:
namespaces = self.get_available_namespaces(client)
interface_name = connection.get('network_name')
api_version = connection.get('api_version', API_VERSION)
annotation_variable = connection.get('annotation_variable', 'ansible')
for namespace in namespaces:
self.get_vms_for_namespace(client, name, namespace, vm_format, interface_name, api_version, annotation_variable)
else:
name = self.get_default_host_name(client.configuration.host)
namespaces = self.get_available_namespaces(client)
for namespace in namespaces:
self.get_vms_for_namespace(client, name, namespace, vm_format, None, api_version, annotation_variable)
def get_vms_for_namespace(self, client, name, namespace, name_format, interface_name=None, api_version=None, annotation_variable=None):
v1_vm = client.resources.get(api_version=api_version, kind='VirtualMachineInstance')
try:
obj = v1_vm.get(namespace=namespace)
except DynamicApiError as exc:
self.display.debug(exc)
raise K8sInventoryException('Error fetching Virtual Machines list: %s' % format_dynamic_api_exc(exc))
namespace_group = 'namespace_{0}'.format(namespace)
namespace_vms_group = '{0}_vms'.format(namespace_group)
name = self._sanitize_group_name(name)
namespace_group = self._sanitize_group_name(namespace_group)
namespace_vms_group = self._sanitize_group_name(namespace_vms_group)
self.inventory.add_group(name)
self.inventory.add_group(namespace_group)
self.inventory.add_child(name, namespace_group)
self.inventory.add_group(namespace_vms_group)
self.inventory.add_child(namespace_group, namespace_vms_group)
for vm in obj.items:
if not (vm.status and vm.status.interfaces):
continue
# Find interface by its name:
if interface_name is None:
interface = vm.status.interfaces[0]
else:
interface = next(
(i for i in vm.status.interfaces if i.name == interface_name),
None
)
# If interface is not found or IP address is not reported skip this VM:
if interface is None or interface.ipAddress is None:
continue
vm_name = name_format.format(namespace=vm.metadata.namespace, name=vm.metadata.name, uid=vm.metadata.uid)
vm_ip = interface.ipAddress
vm_annotations = {} if not vm.metadata.annotations else dict(vm.metadata.annotations)
self.inventory.add_host(vm_name)
if vm.metadata.labels:
# create a group for each label_value
for key, value in vm.metadata.labels:
group_name = 'label_{0}_{1}'.format(key, value)
group_name = self._sanitize_group_name(group_name)
self.inventory.add_group(group_name)
self.inventory.add_child(group_name, vm_name)
vm_labels = dict(vm.metadata.labels)
else:
vm_labels = {}
self.inventory.add_child(namespace_vms_group, vm_name)
# add hostvars
self.inventory.set_variable(vm_name, 'ansible_host', vm_ip)
self.inventory.set_variable(vm_name, 'labels', vm_labels)
self.inventory.set_variable(vm_name, 'annotations', vm_annotations)
self.inventory.set_variable(vm_name, 'object_type', 'vm')
self.inventory.set_variable(vm_name, 'resource_version', vm.metadata.resourceVersion)
self.inventory.set_variable(vm_name, 'uid', vm.metadata.uid)
# Add all variables which are listed in 'ansible' annotation:
annotations_data = json.loads(vm_annotations.get(annotation_variable, "{}"))
for k, v in annotations_data.items():
self.inventory.set_variable(vm_name, k, v)
def verify_file(self, path):
if super(InventoryModule, self).verify_file(path):
if path.endswith(('kubevirt.yml', 'kubevirt.yaml')):
return True
return False

View File

@@ -6,6 +6,7 @@ __metaclass__ = type
DOCUMENTATION = r'''
name: linode
plugin_type: inventory
author:
- Luke Murphy (@decentral1se)
short_description: Ansible dynamic inventory plugin for Linode.
@@ -16,10 +17,7 @@ DOCUMENTATION = r'''
- Reads inventories from the Linode API v4.
- Uses a YAML configuration file that ends with linode.(yml|yaml).
- Linode labels are used by default as the hostnames.
- The default inventory groups are built from groups (deprecated by
Linode) and not tags.
extends_documentation_fragment:
- constructed
- The inventory groups are built from groups and not tags.
options:
plugin:
description: marks this as an instance of the 'linode' plugin
@@ -35,25 +33,11 @@ DOCUMENTATION = r'''
default: []
type: list
required: false
tags:
description: Populate inventory only with instances which have at least one of the tags listed here.
default: []
type: list
reqired: false
version_added: 2.0.0
types:
description: Populate inventory with instances with this type.
default: []
type: list
required: false
strict:
version_added: 2.0.0
compose:
version_added: 2.0.0
groups:
version_added: 2.0.0
keyed_groups:
version_added: 2.0.0
'''
EXAMPLES = r'''
@@ -67,27 +51,13 @@ regions:
- eu-west
types:
- g5-standard-2
# Example with keyed_groups, groups, and compose
plugin: community.general.linode
access_token: foobar
keyed_groups:
- key: tags
separator: ''
- key: region
prefix: region
groups:
webservers: "'web' in (tags|list)"
mailservers: "'mail' in (tags|list)"
compose:
ansible_port: 2222
'''
import os
from ansible.errors import AnsibleError, AnsibleParserError
from ansible.module_utils.six import string_types
from ansible.plugins.inventory import BaseInventoryPlugin, Constructable
from ansible.plugins.inventory import BaseInventoryPlugin
try:
@@ -98,7 +68,7 @@ except ImportError:
HAS_LINODE = False
class InventoryModule(BaseInventoryPlugin, Constructable):
class InventoryModule(BaseInventoryPlugin):
NAME = 'community.general.linode'
@@ -141,7 +111,7 @@ class InventoryModule(BaseInventoryPlugin, Constructable):
for linode_group in self.linode_groups:
self.inventory.add_group(linode_group)
def _filter_by_config(self, regions, types, tags):
def _filter_by_config(self, regions, types):
"""Filter instances by user specified configuration."""
if regions:
self.instances = [
@@ -155,12 +125,6 @@ class InventoryModule(BaseInventoryPlugin, Constructable):
if instance.type.id in types
]
if tags:
self.instances = [
instance for instance in self.instances
if any(tag in instance.tags for tag in tags)
]
def _add_instances_to_groups(self):
"""Add instance names to their dynamic inventory groups."""
for instance in self.instances:
@@ -205,10 +169,6 @@ class InventoryModule(BaseInventoryPlugin, Constructable):
'type_to_be': list,
'value': config_data.get('types', [])
},
'tags': {
'type_to_be': list,
'value': config_data.get('tags', [])
},
}
for name in options:
@@ -220,9 +180,8 @@ class InventoryModule(BaseInventoryPlugin, Constructable):
regions = options['regions']['value']
types = options['types']['value']
tags = options['tags']['value']
return regions, types, tags
return regions, types
def verify_file(self, path):
"""Verify the Linode configuration file."""
@@ -244,27 +203,9 @@ class InventoryModule(BaseInventoryPlugin, Constructable):
self._get_instances_inventory()
strict = self.get_option('strict')
regions, types, tags = self._get_query_options(config_data)
self._filter_by_config(regions, types, tags)
regions, types = self._get_query_options(config_data)
self._filter_by_config(regions, types)
self._add_groups()
self._add_instances_to_groups()
self._add_hostvars_for_instances()
for instance in self.instances:
variables = self.inventory.get_host(instance.label).get_vars()
self._add_host_to_composed_groups(
self.get_option('groups'),
variables,
instance.label,
strict=strict)
self._add_host_to_keyed_groups(
self.get_option('keyed_groups'),
variables,
instance.label,
strict=strict)
self._set_composite_vars(
self.get_option('compose'),
variables,
instance.label,
strict=strict)

View File

@@ -7,6 +7,7 @@ __metaclass__ = type
DOCUMENTATION = '''
author: Unknown (!UNKNOWN)
name: nmap
plugin_type: inventory
short_description: Uses nmap to find hosts to target
description:
- Uses a YAML configuration file with a valid YAML extension.

View File

@@ -6,6 +6,7 @@ __metaclass__ = type
DOCUMENTATION = r'''
name: online
plugin_type: inventory
author:
- Remy Leone (@sieben)
short_description: Scaleway (previously Online SAS or Online.net) inventory source

View File

@@ -7,6 +7,7 @@ __metaclass__ = type
DOCUMENTATION = '''
name: proxmox
plugin_type: inventory
short_description: Proxmox inventory source
version_added: "1.2.0"
author:
@@ -27,32 +28,17 @@ DOCUMENTATION = '''
choices: ['community.general.proxmox']
type: str
url:
description:
- URL to Proxmox cluster.
- If the value is not specified in the inventory configuration, the value of environment variable C(PROXMOX_URL) will be used instead.
description: URL to Proxmox cluster.
default: 'http://localhost:8006'
type: str
env:
- name: PROXMOX_URL
version_added: 2.0.0
user:
description:
- Proxmox authentication user.
- If the value is not specified in the inventory configuration, the value of environment variable C(PROXMOX_USER) will be used instead.
description: Proxmox authentication user.
required: yes
type: str
env:
- name: PROXMOX_USER
version_added: 2.0.0
password:
description:
- Proxmox authentication password.
- If the value is not specified in the inventory configuration, the value of environment variable C(PROXMOX_PASSWORD) will be used instead.
description: Proxmox authentication password.
required: yes
type: str
env:
- name: PROXMOX_PASSWORD
version_added: 2.0.0
validate_certs:
description: Verify SSL certificate if using HTTPS.
type: boolean
@@ -226,8 +212,10 @@ class InventoryModule(BaseInventoryPlugin, Cacheable):
if config == 'rootfs' or config.startswith(('virtio', 'sata', 'ide', 'scsi')):
value = ('disk_image=' + value)
if not (isinstance(value, int) or ',' not in value):
# split off strings with commas to a dict
if isinstance(value, int) or ',' not in value:
value = value
# split off strings with commas to a dict
else:
# skip over any keys that cannot be processed
try:
value = dict(key.split("=") for key in value.split(","))

View File

@@ -7,6 +7,7 @@ __metaclass__ = type
DOCUMENTATION = '''
name: scaleway
plugin_type: inventory
author:
- Remy Leone (@sieben)
short_description: Scaleway inventory source
@@ -23,8 +24,6 @@ DOCUMENTATION = '''
default:
- ams1
- par1
- par2
- waw1
tags:
description: Filter results on a specific tag
type: list

View File

@@ -8,6 +8,7 @@ __metaclass__ = type
DOCUMENTATION = '''
name: stackpath_compute
plugin_type: inventory
short_description: StackPath Edge Computing inventory source
version_added: 1.2.0
extends_documentation_fragment:

View File

@@ -7,6 +7,7 @@ __metaclass__ = type
DOCUMENTATION = '''
author: Unknown (!UNKNOWN)
name: virtualbox
plugin_type: inventory
short_description: virtualbox inventory source
description:
- Get inventory hosts from the local virtualbox installation.
@@ -216,7 +217,7 @@ class InventoryModule(BaseInventoryPlugin, Constructable, Cacheable):
yield host not in v
yield True
return all(find_host(host, inventory))
return all([found_host for found_host in find_host(host, inventory)])
def verify_file(self, path):

View File

@@ -6,7 +6,7 @@ __metaclass__ = type
DOCUMENTATION = '''
author: Unknown (!UNKNOWN)
name: cartesian
lookup: cartesian
short_description: returns the cartesian product of lists
description:
- Takes the input lists and returns a list that represents the product of the input lists.

View File

@@ -6,7 +6,7 @@ __metaclass__ = type
DOCUMENTATION = '''
author: Unknown (!UNKNOWN)
name: chef_databag
lookup: chef_databag
short_description: fetches data from a Chef Databag
description:
- "This is a lookup plugin to provide access to chef data bags using the pychef package.

View File

@@ -7,7 +7,7 @@ __metaclass__ = type
DOCUMENTATION = '''
author: Unknown (!UNKNOWN)
name: consul_kv
lookup: consul_kv
short_description: Fetch metadata from a Consul key value store.
description:
- Lookup metadata for a playbook from the key value store in a Consul cluster.

View File

@@ -6,7 +6,7 @@ __metaclass__ = type
DOCUMENTATION = '''
author: Unknown (!UNKNOWN)
name: credstash
lookup: credstash
short_description: retrieve secrets from Credstash on AWS
requirements:
- credstash (python library)

View File

@@ -6,7 +6,7 @@ __metaclass__ = type
DOCUMENTATION = '''
author: Unknown (!UNKNOWN)
name: cyberarkpassword
lookup: cyberarkpassword
short_description: get secrets from CyberArk AIM
requirements:
- CyberArk AIM tool installed

View File

@@ -5,7 +5,7 @@ from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
DOCUMENTATION = '''
name: dig
lookup: dig
author: Jan-Piet Mens (@jpmens) <jpmens(at)gmail.com>
short_description: query DNS using the dnspython library
requirements:

View File

@@ -5,7 +5,7 @@ from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
DOCUMENTATION = '''
name: dnstxt
lookup: dnstxt
author: Jan-Piet Mens (@jpmens) <jpmens(at)gmail.com>
short_description: query a domain(s)'s DNS txt fields
requirements:

View File

@@ -6,7 +6,7 @@ from __future__ import absolute_import, division, print_function
__metaclass__ = type
DOCUMENTATION = r"""
name: dsv
lookup: dsv
author: Adam Migus (@amigus) <adam@migus.org>
short_description: Get secrets from Thycotic DevOps Secrets Vault
version_added: 1.0.0

View File

@@ -22,7 +22,7 @@ __metaclass__ = type
DOCUMENTATION = '''
author:
- Jan-Piet Mens (@jpmens)
name: etcd
lookup: etcd
short_description: get info from an etcd server
description:
- Retrieves data from an etcd server

View File

@@ -10,7 +10,7 @@ DOCUMENTATION = '''
author:
- Eric Belhomme (@eric-belhomme) <ebelhomme@fr.scc.com>
version_added: '0.2.0'
name: etcd3
lookup: etcd3
short_description: Get key values from etcd3 server
description:
- Retrieves key values and/or key prefixes from etcd3 server using its native gRPC API.

View File

@@ -5,7 +5,7 @@ from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
DOCUMENTATION = r'''
name: filetree
lookup: filetree
author: Dag Wieers (@dagwieers) <dag@wieers.com>
short_description: recursively match all files in a directory tree
description:

View File

@@ -5,7 +5,7 @@ from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
DOCUMENTATION = '''
name: flattened
lookup: flattened
author: Serge van Ginderachter (!UNKNOWN) <serge@vanginderachter.be>
short_description: return single list completely flattened
description:

View File

@@ -0,0 +1,156 @@
# (c) 2019, Eric Anderson <eric.sysmin@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
DOCUMENTATION = '''
lookup: gcp_storage_file
description:
- This lookup returns the contents from a file residing on Google Cloud Storage
short_description: Return GC Storage content
author: Eric Anderson (!UNKNOWN) <eanderson@avinetworks.com>
requirements:
- python >= 2.6
- requests >= 2.18.4
- google-auth >= 1.3.0
options:
src:
description:
- Source location of file (may be local machine or cloud depending on action).
required: false
bucket:
description:
- The name of the bucket.
required: false
extends_documentation_fragment:
- community.general._gcp
'''
EXAMPLES = '''
- ansible.builtin.debug:
msg: |
the value of foo.txt is {{ lookup('community.general.gcp_storage_file',
bucket='gcp-bucket', src='mydir/foo.txt', project='project-name',
auth_kind='serviceaccount', service_account_file='/tmp/myserviceaccountfile.json') }}
'''
RETURN = '''
_raw:
description:
- base64 encoded file content
type: list
elements: str
'''
import base64
import json
import mimetypes
import os
from ansible.errors import AnsibleError
from ansible.plugins.lookup import LookupBase
from ansible.utils.display import Display
try:
import requests
HAS_REQUESTS = True
except ImportError:
HAS_REQUESTS = False
try:
from ansible_collections.google.cloud.plugins.module_utils.gcp_utils import navigate_hash, GcpSession
HAS_GOOGLE_CLOUD_COLLECTION = True
except ImportError:
HAS_GOOGLE_CLOUD_COLLECTION = False
display = Display()
class GcpMockModule(object):
def __init__(self, params):
self.params = params
def fail_json(self, *args, **kwargs):
raise AnsibleError(kwargs['msg'])
def raise_for_status(self, response):
try:
response.raise_for_status()
except getattr(requests.exceptions, 'RequestException'):
self.fail_json(msg="GCP returned error: %s" % response.json())
class GcpFileLookup():
def get_file_contents(self, module):
auth = GcpSession(module, 'storage')
data = auth.get(self.media_link(module))
return base64.b64encode(data.content.rstrip())
def fetch_resource(self, module, link, allow_not_found=True):
auth = GcpSession(module, 'storage')
return self.return_if_object(module, auth.get(link), allow_not_found)
def self_link(self, module):
return "https://www.googleapis.com/storage/v1/b/{bucket}/o/{src}".format(**module.params)
def media_link(self, module):
return "https://www.googleapis.com/storage/v1/b/{bucket}/o/{src}?alt=media".format(**module.params)
def return_if_object(self, module, response, allow_not_found=False):
# If not found, return nothing.
if allow_not_found and response.status_code == 404:
return None
# If no content, return nothing.
if response.status_code == 204:
return None
try:
module.raise_for_status(response)
result = response.json()
except getattr(json.decoder, 'JSONDecodeError', ValueError) as inst:
raise AnsibleError("Invalid JSON response with error: %s" % inst)
if navigate_hash(result, ['error', 'errors']):
raise AnsibleError(navigate_hash(result, ['error', 'errors']))
return result
def object_headers(self, module):
return {
"name": module.params['src'],
"Content-Type": mimetypes.guess_type(module.params['src'])[0],
"Content-Length": str(os.path.getsize(module.params['src'])),
}
def run(self, terms, variables=None, **kwargs):
params = {
'bucket': kwargs.get('bucket', None),
'src': kwargs.get('src', None),
'projects': kwargs.get('projects', None),
'scopes': kwargs.get('scopes', None),
'zones': kwargs.get('zones', None),
'auth_kind': kwargs.get('auth_kind', None),
'service_account_file': kwargs.get('service_account_file', None),
'service_account_email': kwargs.get('service_account_email', None),
}
if not params['scopes']:
params['scopes'] = ['https://www.googleapis.com/auth/devstorage.full_control']
fake_module = GcpMockModule(params)
# Check if files exist.
remote_object = self.fetch_resource(fake_module, self.self_link(fake_module))
if not remote_object:
raise AnsibleError("File does not exist in bucket")
result = self.get_file_contents(fake_module)
return [result]
class LookupModule(LookupBase):
def run(self, terms, variables=None, **kwargs):
if not HAS_GOOGLE_CLOUD_COLLECTION:
raise AnsibleError("community.general.gcp_storage_file needs a supported version of the google.cloud collection installed")
if not HAS_REQUESTS:
raise AnsibleError("community.general.gcp_storage_file needs requests installed. Use `pip install requests` to install it")
return GcpFileLookup().run(terms, variables=variables, **kwargs)

View File

@@ -0,0 +1,650 @@
# (c) 2020, Brian Scholer (@briantist)
# (c) 2015, Jonathan Davila <jonathan(at)davila.io>
# (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 = """
lookup: hashi_vault
author:
- Jonathan Davila (!UNKNOWN) <jdavila(at)ansible.com>
- Brian Scholer (@briantist)
short_description: Retrieve secrets from HashiCorp's Vault
requirements:
- hvac (python library)
- hvac 0.7.0+ (for namespace support)
- hvac 0.9.6+ (to avoid all deprecation warnings)
- botocore (only if inferring aws params from boto)
- boto3 (only if using a boto profile)
description:
- Retrieve secrets from HashiCorp's Vault.
notes:
- Due to a current limitation in the HVAC library there won't necessarily be an error if a bad endpoint is specified.
- As of community.general 0.2.0, only the latest version of a secret is returned when specifying a KV v2 path.
- As of community.general 0.2.0, all options can be supplied via term string (space delimited key=value pairs) or by parameters (see examples).
- As of community.general 0.2.0, when C(secret) is the first option in the term string, C(secret=) is not required (see examples).
options:
secret:
description: Vault path to the secret being requested in the format C(path[:field]).
required: True
token:
description:
- Vault token. If using token auth and no token is supplied, explicitly or through env, then the plugin will check
- for a token file, as determined by C(token_path) and C(token_file).
env:
- name: VAULT_TOKEN
token_path:
description: If no token is specified, will try to read the token file from this path.
env:
- name: VAULT_TOKEN_PATH
version_added: 1.2.0
ini:
- section: lookup_hashi_vault
key: token_path
version_added: '0.2.0'
token_file:
description: If no token is specified, will try to read the token from this file in C(token_path).
env:
- name: VAULT_TOKEN_FILE
version_added: 1.2.0
ini:
- section: lookup_hashi_vault
key: token_file
default: '.vault-token'
version_added: '0.2.0'
url:
description: URL to the Vault service.
env:
- name: VAULT_ADDR
ini:
- section: lookup_hashi_vault
key: url
version_added: '0.2.0'
default: 'http://127.0.0.1:8200'
username:
description: Authentication user name.
password:
description: Authentication password.
role_id:
description: Vault Role ID. Used in approle and aws_iam_login auth methods.
env:
- name: VAULT_ROLE_ID
ini:
- section: lookup_hashi_vault
key: role_id
version_added: '0.2.0'
secret_id:
description: Secret ID to be used for Vault AppRole authentication.
env:
- name: VAULT_SECRET_ID
auth_method:
description:
- Authentication method to be used.
- C(userpass) is added in Ansible 2.8.
- C(aws_iam_login) is added in community.general 0.2.0.
- C(jwt) is added in community.general 1.3.0.
env:
- name: VAULT_AUTH_METHOD
ini:
- section: lookup_hashi_vault
key: auth_method
version_added: '0.2.0'
choices:
- token
- userpass
- ldap
- approle
- aws_iam_login
- jwt
default: token
return_format:
description:
- Controls how multiple key/value pairs in a path are treated on return.
- C(dict) returns a single dict containing the key/value pairs (same behavior as before community.general 0.2.0).
- C(values) returns a list of all the values only. Use when you don't care about the keys.
- C(raw) returns the actual API result, which includes metadata and may have the data nested in other keys.
choices:
- dict
- values
- raw
default: dict
aliases: [ as ]
version_added: '0.2.0'
mount_point:
description: Vault mount point, only required if you have a custom mount point. Does not apply to token authentication.
jwt:
description: The JSON Web Token (JWT) to use for JWT authentication to Vault.
env:
- name: ANSIBLE_HASHI_VAULT_JWT
version_added: 1.3.0
ca_cert:
description: Path to certificate to use for authentication.
aliases: [ cacert ]
validate_certs:
description:
- Controls verification and validation of SSL certificates, mostly you only want to turn off with self signed ones.
- Will be populated with the inverse of C(VAULT_SKIP_VERIFY) if that is set and I(validate_certs) is not explicitly
provided (added in community.general 1.3.0).
- Will default to C(true) if neither I(validate_certs) or C(VAULT_SKIP_VERIFY) are set.
type: boolean
namespace:
description:
- Vault namespace where secrets reside. This option requires HVAC 0.7.0+ and Vault 0.11+.
- Optionally, this may be achieved by prefixing the authentication mount point and/or secret path with the namespace
(e.g C(mynamespace/secret/mysecret)).
env:
- name: VAULT_NAMESPACE
version_added: 1.2.0
aws_profile:
description: The AWS profile
type: str
aliases: [ boto_profile ]
env:
- name: AWS_DEFAULT_PROFILE
- name: AWS_PROFILE
version_added: '0.2.0'
aws_access_key:
description: The AWS access key to use.
type: str
aliases: [ aws_access_key_id ]
env:
- name: EC2_ACCESS_KEY
- name: AWS_ACCESS_KEY
- name: AWS_ACCESS_KEY_ID
version_added: '0.2.0'
aws_secret_key:
description: The AWS secret key that corresponds to the access key.
type: str
aliases: [ aws_secret_access_key ]
env:
- name: EC2_SECRET_KEY
- name: AWS_SECRET_KEY
- name: AWS_SECRET_ACCESS_KEY
version_added: '0.2.0'
aws_security_token:
description: The AWS security token if using temporary access and secret keys.
type: str
env:
- name: EC2_SECURITY_TOKEN
- name: AWS_SESSION_TOKEN
- name: AWS_SECURITY_TOKEN
version_added: '0.2.0'
region:
description: The AWS region for which to create the connection.
type: str
env:
- name: EC2_REGION
- name: AWS_REGION
version_added: '0.2.0'
"""
EXAMPLES = """
- ansible.builtin.debug:
msg: "{{ lookup('community.general.hashi_vault', 'secret=secret/hello:value token=c975b780-d1be-8016-866b-01d0f9b688a5 url=http://myvault:8200') }}"
- name: Return all secrets from a path
ansible.builtin.debug:
msg: "{{ lookup('community.general.hashi_vault', 'secret=secret/hello token=c975b780-d1be-8016-866b-01d0f9b688a5 url=http://myvault:8200') }}"
- name: Vault that requires authentication via LDAP
ansible.builtin.debug:
msg: "{{ lookup('community.general.hashi_vault', 'secret/hello:value auth_method=ldap mount_point=ldap username=myuser password=mypas') }}"
- name: Vault that requires authentication via username and password
ansible.builtin.debug:
msg: "{{ lookup('community.general.hashi_vault', 'secret=secret/hello:value auth_method=userpass username=myuser password=psw url=http://myvault:8200') }}"
- name: Connect to Vault using TLS
ansible.builtin.debug:
msg: "{{ lookup('community.general.hashi_vault', 'secret=secret/hola:value token=c975b780-d1be-8016-866b-01d0f9b688a5 validate_certs=False') }}"
- name: using certificate auth
ansible.builtin.debug:
msg: "{{ lookup('community.general.hashi_vault', 'secret/hi:value token=xxxx url=https://myvault:8200 validate_certs=True cacert=/cacert/path/ca.pem') }}"
- name: Authenticate with a Vault app role
ansible.builtin.debug:
msg: "{{ lookup('community.general.hashi_vault', 'secret=secret/hello:value auth_method=approle role_id=myroleid secret_id=mysecretid') }}"
- name: Return all secrets from a path in a namespace
ansible.builtin.debug:
msg: "{{ lookup('community.general.hashi_vault', 'secret=secret/hello token=c975b780-d1be-8016-866b-01d0f9b688a5 namespace=teama/admins') }}"
# When using KV v2 the PATH should include "data" between the secret engine mount and path (e.g. "secret/data/:path")
# see: https://www.vaultproject.io/api/secret/kv/kv-v2.html#read-secret-version
- name: Return latest KV v2 secret from path
ansible.builtin.debug:
msg: "{{ lookup('community.general.hashi_vault', 'secret=secret/data/hello token=my_vault_token url=http://myvault_url:8200') }}"
# The following examples work in collection releases after community.general 0.2.0
- name: secret= is not required if secret is first
ansible.builtin.debug:
msg: "{{ lookup('community.general.hashi_vault', 'secret/data/hello token=<token> url=http://myvault_url:8200') }}"
- name: options can be specified as parameters rather than put in term string
ansible.builtin.debug:
msg: "{{ lookup('community.general.hashi_vault', 'secret/data/hello', token=my_token_var, url='http://myvault_url:8200') }}"
# return_format (or its alias 'as') can control how secrets are returned to you
- name: return secrets as a dict (default)
ansible.builtin.set_fact:
my_secrets: "{{ lookup('community.general.hashi_vault', 'secret/data/manysecrets', token=my_token_var, url='http://myvault_url:8200') }}"
- ansible.builtin.debug:
msg: "{{ my_secrets['secret_key'] }}"
- ansible.builtin.debug:
msg: "Secret '{{ item.key }}' has value '{{ item.value }}'"
loop: "{{ my_secrets | dict2items }}"
- name: return secrets as values only
ansible.builtin.debug:
msg: "A secret value: {{ item }}"
loop: "{{ query('community.general.hashi_vault', 'secret/data/manysecrets', token=my_token_var, url='http://myvault_url:8200', return_format='values') }}"
- name: return raw secret from API, including metadata
ansible.builtin.set_fact:
my_secret: "{{ lookup('community.general.hashi_vault', 'secret/data/hello:value', token=my_token_var, url='http://myvault_url:8200', as='raw') }}"
- ansible.builtin.debug:
msg: "This is version {{ my_secret['metadata']['version'] }} of hello:value. The secret data is {{ my_secret['data']['data']['value'] }}"
# AWS IAM authentication method
# uses Ansible standard AWS options
- name: authenticate with aws_iam_login
ansible.builtin.debug:
msg: "{{ lookup('community.general.hashi_vault', 'secret/hello:value', auth_method='aws_iam_login', role_id='myroleid', profile=my_boto_profile) }}"
# The following examples work in collection releases after community.general 1.3.0
- name: Authenticate with a JWT
ansible.builtin.debug:
msg: "{{ lookup('community.general.hashi_vault', 'secret/hello:value', auth_method='jwt', role_id='myroleid', jwt='myjwt', url='https://myvault:8200')}}"
"""
RETURN = """
_raw:
description:
- secrets(s) requested
type: list
elements: dict
"""
import os
from ansible.errors import AnsibleError
from ansible.plugins.lookup import LookupBase
from ansible.utils.display import Display
from ansible.module_utils.parsing.convert_bool import boolean
HAS_HVAC = False
try:
import hvac
HAS_HVAC = True
except ImportError:
HAS_HVAC = False
HAS_BOTOCORE = False
try:
# import boto3
import botocore
HAS_BOTOCORE = True
except ImportError:
HAS_BOTOCORE = False
HAS_BOTO3 = False
try:
import boto3
# import botocore
HAS_BOTO3 = True
except ImportError:
HAS_BOTO3 = False
class HashiVault:
def get_options(self, *option_names, **kwargs):
ret = {}
include_falsey = kwargs.get('include_falsey', False)
for option in option_names:
val = self.options.get(option)
if val or include_falsey:
ret[option] = val
return ret
def __init__(self, **kwargs):
self.options = kwargs
# check early that auth method is actually available
self.auth_function = 'auth_' + self.options['auth_method']
if not (hasattr(self, self.auth_function) and callable(getattr(self, self.auth_function))):
raise AnsibleError(
"Authentication method '%s' is not implemented. ('%s' member function not found)" % (self.options['auth_method'], self.auth_function)
)
client_args = {
'url': self.options['url'],
'verify': self.options['ca_cert']
}
if self.options.get('namespace'):
client_args['namespace'] = self.options['namespace']
# this is the only auth_method-specific thing here, because if we're using a token, we need it now
if self.options['auth_method'] == 'token':
client_args['token'] = self.options.get('token')
self.client = hvac.Client(**client_args)
# Check for old version, before auth_methods class (added in 0.7.0):
# https://github.com/hvac/hvac/releases/tag/v0.7.0
#
# hvac is moving auth methods into the auth_methods class
# which lives in the client.auth member.
#
# Attempting to find which backends were moved into the class when (this is primarily for warnings):
# 0.7.0 -- github, ldap, mfa, azure?, gcp
# 0.7.1 -- okta
# 0.8.0 -- kubernetes
# 0.9.0 -- azure?, radius
# 0.9.3 -- aws
# 0.9.6 -- userpass
self.hvac_has_auth_methods = hasattr(self.client, 'auth')
# We've already checked to ensure a method exists for a particular auth_method, of the form:
#
# auth_<method_name>
#
def authenticate(self):
getattr(self, self.auth_function)()
def get(self):
'''gets a secret. should always return a list'''
secret = self.options['secret']
field = self.options['secret_field']
return_as = self.options['return_format']
try:
data = self.client.read(secret)
except hvac.exceptions.Forbidden:
raise AnsibleError("Forbidden: Permission Denied to secret '%s'." % secret)
if data is None:
raise AnsibleError("The secret '%s' doesn't seem to exist." % secret)
if return_as == 'raw':
return [data]
# Check response for KV v2 fields and flatten nested secret data.
# https://vaultproject.io/api/secret/kv/kv-v2.html#sample-response-1
try:
# sentinel field checks
check_dd = data['data']['data']
check_md = data['data']['metadata']
# unwrap nested data
data = data['data']
except KeyError:
pass
if return_as == 'values':
return list(data['data'].values())
# everything after here implements return_as == 'dict'
if not field:
return [data['data']]
if field not in data['data']:
raise AnsibleError("The secret %s does not contain the field '%s'. for hashi_vault lookup" % (secret, field))
return [data['data'][field]]
# begin auth implementation methods
#
# To add new backends, 3 things should be added:
#
# 1. Add a new validate_auth_<method_name> method to the LookupModule, which is responsible for validating
# that it has the necessary options and whatever else it needs.
#
# 2. Add a new auth_<method_name> method to this class. These implementations are faily minimal as they should
# already have everything they need. This is also the place to check for deprecated auth methods as hvac
# continues to move backends into the auth_methods class.
#
# 3. Update the avail_auth_methods list in the LookupModules auth_methods() method (for now this is static).
#
def auth_token(self):
if not self.client.is_authenticated():
raise AnsibleError("Invalid Hashicorp Vault Token Specified for hashi_vault lookup.")
def auth_userpass(self):
params = self.get_options('username', 'password', 'mount_point')
if self.hvac_has_auth_methods and hasattr(self.client.auth.userpass, 'login'):
self.client.auth.userpass.login(**params)
else:
Display().warning("HVAC should be updated to version 0.9.6 or higher. Deprecated method 'auth_userpass' will be used.")
self.client.auth_userpass(**params)
def auth_ldap(self):
params = self.get_options('username', 'password', 'mount_point')
# not hasattr(self.client, 'auth')
if self.hvac_has_auth_methods and hasattr(self.client.auth.ldap, 'login'):
self.client.auth.ldap.login(**params)
else:
Display().warning("HVAC should be updated to version 0.7.0 or higher. Deprecated method 'auth_ldap' will be used.")
self.client.auth_ldap(**params)
def auth_approle(self):
params = self.get_options('role_id', 'secret_id', 'mount_point')
self.client.auth_approle(**params)
def auth_aws_iam_login(self):
params = self.options['iam_login_credentials']
if self.hvac_has_auth_methods and hasattr(self.client.auth.aws, 'iam_login'):
self.client.auth.aws.iam_login(**params)
else:
Display().warning("HVAC should be updated to version 0.9.3 or higher. Deprecated method 'auth_aws_iam' will be used.")
self.client.auth_aws_iam(**params)
def auth_jwt(self):
params = self.get_options('role_id', 'jwt', 'mount_point')
params['role'] = params.pop('role_id')
if self.hvac_has_auth_methods and hasattr(self.client.auth, 'jwt') and hasattr(self.client.auth.jwt, 'jwt_login'):
response = self.client.auth.jwt.jwt_login(**params)
# must manually set the client token with JWT login
# see https://github.com/hvac/hvac/issues/644
self.client.token = response['auth']['client_token']
else:
raise AnsibleError("JWT authentication requires HVAC version 0.10.5 or higher.")
# end auth implementation methods
class LookupModule(LookupBase):
def run(self, terms, variables=None, **kwargs):
if not HAS_HVAC:
raise AnsibleError("Please pip install hvac to use the hashi_vault lookup module.")
ret = []
for term in terms:
opts = kwargs.copy()
opts.update(self.parse_term(term))
self.set_options(direct=opts)
self.process_options()
# FUTURE: Create one object, authenticate once, and re-use it,
# for gets, for better use during with_ loops.
client = HashiVault(**self._options)
client.authenticate()
ret.extend(client.get())
return ret
def parse_term(self, term):
'''parses a term string into options'''
param_dict = {}
for i, param in enumerate(term.split()):
try:
key, value = param.split('=', 1)
except ValueError:
if (i == 0):
# allow secret to be specified as value only if it's first
key = 'secret'
value = param
else:
raise AnsibleError("hashi_vault lookup plugin needs key=value pairs, but received %s" % term)
param_dict[key] = value
return param_dict
def process_options(self):
'''performs deep validation and value loading for options'''
# ca_cert to verify
self.boolean_or_cacert()
# auth methods
self.auth_methods()
# secret field splitter
self.field_ops()
# begin options processing methods
def boolean_or_cacert(self):
# This is needed because of this (https://hvac.readthedocs.io/en/stable/source/hvac_v1.html):
#
# # verify (Union[bool,str]) - Either a boolean to indicate whether TLS verification should
# # be performed when sending requests to Vault, or a string pointing at the CA bundle to use for verification.
#
'''' return a bool or cacert '''
ca_cert = self.get_option('ca_cert')
validate_certs = self.get_option('validate_certs')
if validate_certs is None:
# Validate certs option was not explicitly set
# Check if VAULT_SKIP_VERIFY is set
vault_skip_verify = os.environ.get('VAULT_SKIP_VERIFY')
if vault_skip_verify is not None:
# VAULT_SKIP_VERIFY is set
try:
# Check that we have a boolean value
vault_skip_verify = boolean(vault_skip_verify)
# Use the inverse of VAULT_SKIP_VERIFY
validate_certs = not vault_skip_verify
except TypeError:
# Not a boolean value fallback to default value (True)
validate_certs = True
else:
validate_certs = True
if not (validate_certs and ca_cert):
self.set_option('ca_cert', validate_certs)
def field_ops(self):
# split secret and field
secret = self.get_option('secret')
s_f = secret.rsplit(':', 1)
self.set_option('secret', s_f[0])
if len(s_f) >= 2:
field = s_f[1]
else:
field = None
self.set_option('secret_field', field)
def auth_methods(self):
# enforce and set the list of available auth methods
# TODO: can this be read from the choices: field in documentation?
avail_auth_methods = ['token', 'approle', 'userpass', 'ldap', 'aws_iam_login', 'jwt']
self.set_option('avail_auth_methods', avail_auth_methods)
auth_method = self.get_option('auth_method')
if auth_method not in avail_auth_methods:
raise AnsibleError(
"Authentication method '%s' not supported. Available options are %r" % (auth_method, avail_auth_methods)
)
# run validator if available
auth_validator = 'validate_auth_' + auth_method
if hasattr(self, auth_validator) and callable(getattr(self, auth_validator)):
getattr(self, auth_validator)(auth_method)
# end options processing methods
# begin auth method validators
def validate_by_required_fields(self, auth_method, *field_names):
missing = [field for field in field_names if not self.get_option(field)]
if missing:
raise AnsibleError("Authentication method %s requires options %r to be set, but these are missing: %r" % (auth_method, field_names, missing))
def validate_auth_userpass(self, auth_method):
self.validate_by_required_fields(auth_method, 'username', 'password')
def validate_auth_ldap(self, auth_method):
self.validate_by_required_fields(auth_method, 'username', 'password')
def validate_auth_approle(self, auth_method):
self.validate_by_required_fields(auth_method, 'role_id')
def validate_auth_token(self, auth_method):
if auth_method == 'token':
if not self.get_option('token_path'):
# generally we want env vars defined in the spec, but in this case we want
# the env var HOME to have lower precedence than any other value source,
# including ini, so we're doing it here after all other processing has taken place
self.set_option('token_path', os.environ.get('HOME'))
if not self.get_option('token') and self.get_option('token_path'):
token_filename = os.path.join(
self.get_option('token_path'),
self.get_option('token_file')
)
if os.path.exists(token_filename):
with open(token_filename) as token_file:
self.set_option('token', token_file.read().strip())
if not self.get_option('token'):
raise AnsibleError("No Vault Token specified or discovered.")
def validate_auth_aws_iam_login(self, auth_method):
params = {
'access_key': self.get_option('aws_access_key'),
'secret_key': self.get_option('aws_secret_key')
}
if self.get_option('role_id'):
params['role'] = self.get_option('role_id')
if self.get_option('region'):
params['region'] = self.get_option('region')
if not (params['access_key'] and params['secret_key']):
profile = self.get_option('aws_profile')
if profile:
# try to load boto profile
if not HAS_BOTO3:
raise AnsibleError("boto3 is required for loading a boto profile.")
session_credentials = boto3.session.Session(profile_name=profile).get_credentials()
else:
# try to load from IAM credentials
if not HAS_BOTOCORE:
raise AnsibleError("botocore is required for loading IAM role credentials.")
session_credentials = botocore.session.get_session().get_credentials()
if not session_credentials:
raise AnsibleError("No AWS credentials supplied or available.")
params['access_key'] = session_credentials.access_key
params['secret_key'] = session_credentials.secret_key
if session_credentials.token:
params['session_token'] = session_credentials.token
self.set_option('iam_login_credentials', params)
def validate_auth_jwt(self, auth_method):
self.validate_by_required_fields(auth_method, 'role_id', 'jwt')
# end auth method validators

View File

@@ -7,7 +7,7 @@ __metaclass__ = type
DOCUMENTATION = '''
author:
- Juan Manuel Parrilla (@jparrill)
name: hiera
lookup: hiera
short_description: get info from hiera data
requirements:
- hiera (command line utility)

View File

@@ -6,7 +6,7 @@ from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
DOCUMENTATION = '''
name: keyring
lookup: keyring
author:
- Samuel Boucher (!UNKNOWN) <boucher.samuel.c@gmail.com>
requirements:

View File

@@ -5,7 +5,7 @@ from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
DOCUMENTATION = '''
name: lastpass
lookup: lastpass
author:
- Andrew Zenk (!UNKNOWN) <azenk@umn.edu>
requirements:

View File

@@ -5,7 +5,7 @@ from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
DOCUMENTATION = '''
name: lmdb_kv
lookup: lmdb_kv
author:
- Jan-Piet Mens (@jpmens)
version_added: '0.2.0'

View File

@@ -7,7 +7,7 @@ __metaclass__ = type
DOCUMENTATION = '''
author:
- Kyrylo Galanov (!UNKNOWN) <galanoff@gmail.com>
name: manifold
lookup: manifold
short_description: get credentials from Manifold.co
description:
- Retrieves resources' credentials from Manifold.co

View File

@@ -23,7 +23,7 @@ __metaclass__ = type
DOCUMENTATION = '''
---
author: Unknown (!UNKNOWN)
name: nios
lookup: nios
short_description: Query Infoblox NIOS objects
description:
- Uses the Infoblox WAPI API to fetch NIOS specified objects. This lookup

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